![]() |
C - Entwicklung Übungs-Aufgaben 9 Homepage von PS-Trainer - C-Entwicklung - Bibliotheken - an PS-Trainer |
|
| Übungs-Aufgaben
|
Der Aufgabentext
als TXT-Datei. Hinweise für alle Aufgaben |
| String-Funktionen: Projekte: Array-Funktionen: Bit-Manipulation: |
| Hinweise für alle Aufgaben | (Syntax: char string[...]; gets(string); ). Falls sie zwischendurch andere Konsolen-Funktionen verwenden (z.B. scanf() für Zahlen) so, können sie den allenfalls "unsauberen" Eingabepuffer mit Funktion fflush() aus der library <stdio.h> löschen (Syntax: fflush(stdin); ) |
Ermittlung der Anzahl von Worten in einer Zeichenkette (string). int wc; char mystring[...]; // keine Vorgaben über die Dimension notwendig ... wc=word_count(mystring); + Berücksichtigen sie Sonderfälle, wie z.B. führende oder folgende Leerzeichen (leading or trailing blanks), Mehrfach-Blanks, strings ausschliesslich aus blanks. + Als Zeichen für Wort-Zwischenräume dienen alle Kontrollzeichen <'0' sowie alle Zeichen von '\x3A' bis '\x3F'. + Falls ein string kein Ende-Zeichen enthält, so wird die Funktion nach 100 Zeichen (einstellbar) abgebrochen.
|
Erstellen einer Zeichenkette (string) aus wiederholten Zeichenketten. int n,sl; char mystring[...],rep[...]; // keine Vorgaben über die Dimension notwendig ... n=3; repeat_string(n,rep,mystring); // Grundversion // sl=repeat_string(n,rep,mystring); // Erweiterte Version Beispiel: Im oben angeführten Syntax-Beispiel (wenn n=3 und repstring="az") gibt die Funktion den string "azazaz" zurück. Berücksichtigen sie keine Sonderfälle, bearbeiten sie nur einfache nicht-leere rep-strings und n>0. + Wenn das Argument n<=0 ist, wird ein leerer string erzeugt. + Wenn das Argument n>100 ist, wird n=100 gesetzt (einstellbar). + Falls der repeat-string kein Ende enthält, so wird die Funktion nach 100 Zeichen (einstellbar) abgebrochen. + Falls die string-Länge (mystring) 100 Zeichen (einstellbar) überschreitet, so wird der string nur bis zu dieser Länge erzeugt. + Die Funktion gibt die Gesamtlänge des erzeugten strings an das aufrufende Programm zurück.
|
Zusammenführung (concatenate) von 2 Zeichenketten (strings). int dl; char src1[...],src2[...],dst[...]; // keine Vorgaben über die Dimension notwendig ... merge_string(src1,src2,dst); // Grundfunktion // dl=merge_string(src1,src2,dst) // Erweiterte Funktion + Die Funktion gibt zusätzlich die Länge des (neuen) strings dst an das aufrufende Programm zurück. + Falls ein source-string kein Ende-Zeichen enthält, so wird die Funktion nach 100 Zeichen (einstellbar) abgebrochen. + Die Größe des erzeugten string (dst) wird mit 100 Zeichen (einstellbar) begrenzt. + Optional werden Sonderzeichen <'\x20' ignoriert.
|
Einfügen (insert) einer Zeichenkette (string) in eine andere. char mystring[...],insertstring[...]; int position; ... ... insert_string(mystring,insertstring,position); + Sichern sie die Funktion so ab, dass durch illegale Eingabe von position (<0 oder > Länge) kein Schaden entsteht. + Sichern sie die Funktion so ab, dass sie auch mit leeren Strings funktioniert. + Überlegen sie Varianten mit oder ohne Verwendung der Standard-Bibliotheks-Funktionen. Variante mit Verwendung von Standard-Funktionen:
|
Ersetzen (replace) von Mustern (strings) in Zeichenketten durch andere.. int replace_string(char*,char*,char*); ... char string[...]; char src[...]; char dst[...]; int n; ... n = replace_string(string,src,dst); + Die Funktion gibt die anzahl der durchgeführten Ersetzungen an das aufrugende Programm zurück. + Überlegen sie Varianten mit und ohne Verwendung der Standard-Bibliotheks-Funktionen. Variante mit Verwendung von Standard-Funktionen:
|
int a,b,s; ... s=intsum(a,b); // Ergebnis s=a+b + Einfache Eingabe und Ausgabe (Konsole) der Zahlen im Hauptprogramm (main);
|
char mystring[...]; ... print_string(mystring); // Ausgabe von mystring + Einfache Eingabe des strings im Hauptprogramm (main);
|
int i,q; ... q=calc_isqr(i); // Berechnung des Zahlen-Quadrats (q=i*i) + Einfache Eingabe und Ausgabe der Zahlen im Hauptprogramm (main);
|
Vertauschung von 2 Elementen eines Feldes (array). int myarray[...]; // keine Vorgaben über die Dimension notwendig int i,j,ok; ... swap_elements(i,j,myarray); // Grundversion // ok=swap_elements(i,j,myarray); // Erweiterte Version Beispiel: wenn das Feld vor dem Aufruf von swap_elements den Inhalt {33,18,97,5...} hat und swap_elements(1,2,myarray) aufgerufen wird, so soll das Feld anschliessend den Inhalt {33,97,18,5...} haben. + Die Funktion ignoriert die Verwendung fehlerhafter Indices (i,j<0 oder >Feldlänge). An das aufrufende Programm wird ein Fehlercode zurückgegeben (0=Fehler, 1=ok). * Hinweis: Initialisieren sie das Feld vor Gebrauch sinnvoll. Es wäre praktisch, zusätzlich eine kleine Funktion "print_array" zu erstellen...
|
Ordnen von 2 Elementen eines Feldes (array). int myarray[...]; // keine Vorgaben über die Dimension notwendig int i,j,ok; ... sort_elements(i,j,myarray); // Grundversion // ok=sort_elements(i,j,myarray); // Erweiterte Version Beispiel: wenn das Feld vor dem Aufruf von sort_elements() den Inhalt {23,78,17,55...} hat und sort_elements(1,2,myarray) aufgerufen wird, so soll das Feld anschliessend den Inhalt {23,17,78,55...} haben. + Die Funktion ignoriert die Verwendung fehlerhafter Indices (i,j<0 oder >Feldlänge). An das aufrufende Programm wird ein Return-Code zurückgegeben (0=Fehler, 1=ok). + Erweiterung des return-Codes: 1=keine Änderung, 2=Elemente wurden getauscht. * Hinweis: Initialisieren sie das Feld vor Gebrauch sinnvoll. Es wäre praktisch, zusätzlich eine kleine Funktion "print_array" zu erstellen...
|
Umkehrung eines Elementes eines Feldes (array). int myarray[...]; // keine Vorgaben über die Dimension notwendig int i; ... toggle_element(i,myarray); Dimension: 10 Elemente. Beispiel: wenn das Feld vor dem Aufruf von toggle_element() den Inhalt {11,22,53,97...} hat und toggle_element(2,myarray) aufgerufen wird, so soll das Feld anschliessend den Inhalt {11,22,-53,97...} haben. + Die Funktion ignoriert die Verwendung fehlerhafter Indices (i,j<0 oder >Feldlänge). An das aufrufende Programm wird ein Return-Code zurückgegeben (0=Fehler, 1=ok).
|
Extrahieren von Elementen aus einem Feld (array) in ein anderes. #define array_size ... int src[...],dst[...];
|
Zählung aller gesetzten bits (bit=1) in einer ganzen Zahl (int) int n1,i; ... n1=count_1(i); (Syntax: int s; s=sizeof(i); )
|
Zählung aller gelöschten bits (bit=0) in einer ganzen Zahl (int) int i,n0; ... n0=count_0(i); (Syntax: int s; s=sizeof(i); )
|
Zählung aller gesetzten bits (bit=1) in einer Zeichenkette (string) char mystring[...] // keine Vorgaben über die Dimension notwendig int n1; ... n1=count_1(mystring);
|
Setzen eines Bits in einem Byte auf einen gewünschten Wert. unsigned char the_byte; int bitposition, bitvalue; ... set_bit(&the_byte,bitposition,bitvalue);
|
| Aktuelle Daten dieser Seite | Letzte Änderung: |
| |