Inhalt: Hinweise für alle Aufgaben (01) Funktion word_count (02) Funktion repeat_string (03) Funktion merge_string (04) Projekt intsum (05) Projekt print_string (06) Projekt calc_isqr (07) Funktion swap_elements (08) Funktion sort_elements (09) Funktion toggle_element (10) Funktion count_agegroup (11) Funktion init_persons (12) Funktion check_persons (13) Funktion count_1 (14) Funktion count_0 (15) Funktion count_1s ************************************************** Hinweise für alle Aufgaben. * Notieren sie bitte auf Papier sowie auf allen erstellten Dateien (als Kommentar im Quelltext): Ihre Klasse, ihren Namen und die Nummern der bearbeiteten Aufgaben. * Speichern sie erstellte Dateien in einem Ordner, der mit Klasse und Name bezeichnet ist (z.B. 1ABC_Maier). * Wenn die Erstellung von Funktionen ("Unterprogrammen") erwünscht ist, so muss zwar die Funktion, nicht jedoch das aufrufende Programm erstellt werden. * Wenn die Erstellung eines Projekts erwünscht ist, so müssen alle Teile (Dateien) des Projekts erstellt werden. * Die Funktionen sollen fehlerfrei funktionieren und eine kurze, aber eindeutige Dokumentation enthalten. * Die Kurz-Dokumentation (als Kommentar im Quelltext) enthält Angaben über die Verwendung (Funktionalität, Deklaration und Syntax), Angaben zu ihrer Person (Name, Klasse) und zur Version (VersNr, Datum). * Einige Aufgaben sind in 2 Versionen gestellt: erstellen sie unbedingt zuerst die Grundversion (Minimal-Anforderung). Entscheiden sie dann nach eigenem Ermessen, welche Erweiterungen sie zusätzlich erstellen. * Verwenden sie in der Test-Umgebung zur Eingabe von strings über die Konsole nicht die Funktion scanf() sondern besser die Funktion gets() aus der library (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 löschen (Syntax: fflush(stdin); ) ************************************************** (01) Erstellen sie eine Funktion, die folgende Arbeiten ausführt: * Ermittlung der Anzahl von Worten in einer Zeichenkette (string). * Syntax: int wc; char mystring[...]; // keine Vorgaben über die Dimension notwendig ... wc=word_count(mystring); * Grundversion: Die Funktion gibt die Anzahl gefundener Worte an das aufrufende Programm zurück. Ignorieren sie in dieser Version alle Sonderfälle, zählen sie nur durch Leerzeichen getrennte Worte. * Erweiterte Version: + 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. ************************************************** (02) Erstellen sie eine Funktion, die folgende Arbeiten ausführt: * Erstellen einer Zeichenkette (string) aus wiederholten Zeichenketten. * Syntax: 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 * Grundversion: Die Funktion ersetzt den Inhalt des strings (mystring) durch eine beliebige Anzahl gleicher strings (rep). 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. * Erweiterte Version: + 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. ************************************************** (03) Erstellen sie eine Funktion, die folgende Arbeiten ausführt: * Zusammenführung (concatenate) von 2 Zeichenketten (strings). * Syntax: 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 * Grundversion: Die Funktion ersetzt den Inhalt von dst durch den Inhalt von src1+src2. Ignorieren sie alle Sonderfälle, z.B. leere strings. Verwenden sie keine library-Funktionen (z.B. strcpy() oder strcat() ), sondern programmieren sie selbst. * Erweiterte Version: + 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. ************************************************** (04) Erstellen sie ein Bibliotheks-Projekt: * Das Projekt enthält folgende Teile: Header, Programm (main...), Funktionen-Bibliothek. * Funktionalität: Im Hauptprogramm werden 2 ganze Zahlen definiert (Minimal-Aufwand !), die von einem Unterprogramm in der Bibliothek addiert werden. * Syntax: int a,b,s; ... s=intsum(a,b); // Ergebnis s=a+b * Grundversion: Die geforderte Funktionalität (inkl. Dokumentation) mit minimalem Aufwand erstellen. * Erweiterte Version: + Einfache Eingabe und Ausgabe (Konsole) der Zahlen im Hauptprogramm (main); ************************************************** (05) Erstellen sie ein Bibliotheks-Projekt: * Das Projekt enthält folgende Teile: Header, Programm (main...), Funktionen-Bibliothek. * Funktionalität: Im Hauptprogramm wird eine Zeichenkette (string) definiert (Minimal-Aufwand !), die von einem Unterprogramm in der Bibliothek auf der Konsole ausgegeben wird. * Syntax: char mystring[...]; ... print_string(mystring); // Ausgabe von mystring * Grundversion: Die geforderte Funktionalität (inkl. Dokumentation) mit minimalem Aufwand erstellen. * Erweiterte Version: + Einfache Eingabe des strings im Hauptprogramm (main); ************************************************** (06) Erstellen sie ein Bibliotheks-Projekt: * Das Projekt enthält folgende Teile: Header, Programm (main...), Funktionen-Bibliothek. * Funktionalität: Im Hauptprogramm wird eine ganze Zahl (int) definiert (Minimal-Aufwand !). Von einem Unterprogramm in der Bibliothek wird das Quadrat dieser Zahl berechnet und an das aufrufende Programm zurückgegeben.. * Syntax: int i,q; ... q=calc_isqr(i); // Berechnung des Zahlen-Quadrats (q=i*i) * Grundversion: Die geforderte Funktionalität (inkl. Dokumentation) mit minimalem Aufwand erstellen. * Erweiterte Version: + Einfache Eingabe und Ausgabe der Zahlen im Hauptprogramm (main); ************************************************** (07) Erstellen sie eine Funktion, die folgende Arbeiten ausführt: * Vertauschung von 2 Elementen eines Feldes (array). * Syntax: 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 * Grundversion: Die Funktion vertauscht die gewünschten Elemente des Feldes. Dimension: 10 Elemente 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. * Erweiterte Version: + 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... ************************************************** (08) Erstellen sie eine Funktion, die folgende Arbeiten ausführt: * Ordnen von 2 Elementen eines Feldes (array). * Syntax: 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 * Grundversion: Die Funktion sortiert die gewünschten Elemente des Feldes aufsteigend. Dimension: 10 Elemente 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. * Erweiterte Version: + 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... ************************************************** (09) Erstellen sie eine Funktion, die folgende Arbeiten ausführt: * Umkehrung eines Elementes eines Feldes (array). * Syntax: int myarray[...]; // keine Vorgaben über die Dimension notwendig int i; ... toggle_element(i,myarray); * Grundversion: Die Funktion "invertiert" das gewünschte Elemente des Feldes, d.h. setzt myarray[i]=-myarray[i]. 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. * Erweiterte Version: + 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). ************************************************** (10) Erstellen sie eine Funktion, die folgende Arbeiten ausführt: * Zählung einer Altersgruppe in einem Feld (array) von Strukturen. * Erstellen sie eine geeignete Struktur (person) mit folgenden Eigenschaften (members): Pers-Nr, Vorname, Zuname, Alter * Syntax: person mypers[...]; // keine Vorgaben über die Dimension notwendig int found,a,z; ... found=count_agegroup(mypers,a,z); * Grundversion: Die Funktion zählt, wie oft die gesuchte Altersgruppe im Feld (mypers) vorkommt. (a<=alter<=z). * Erweiterte Version: + Die Dimension des arrays ist einfach einstellbar (z.B. #define) ************************************************** (11) Erstellen sie eine Funktion, die folgende Arbeiten ausführt: * Initialisierung eines Feldes (array) von Strukturen. * Erstellen sie eine geeignete Struktur (person) mit folgenden Eigenschaften (members): Vorname, Zuname, Alter, Pers-Nr * Syntax: person mypers[...]; // keine Vorgaben über die Dimension notwendig int i,j; ... init_persons(i,j,mypers); * Grundversion: Die Funktion initialisiert (ersetzt den momentanen Inhalt) folgender Eigenschaften in den Personen i...j (i bis j) (Dimension 10) Alle anderen Elemente bleiben unverändert. + Vorname: leerer string + Zuname: "Unbekannt" + Alter: 0 + Pers-Nr: Index (Beispiel: persnr von mypers[27] wird auf 27 gesetzt. * Erweiterte Version: + Kontrolle der Indices (i,j) auf Zulässigkeit. Keine Ausführung mit illegalen Indices. + Rückgabecode an das aufrufende Programm: 0=Fehler, 1=ok ************************************************** (12) Erstellen sie eine Funktion, die folgende Arbeiten ausführt: * Korrektur fehlerhafter Werte in einem Feld (array) von Strukturen. * Erstellen sie eine geeignete Struktur (person) mit folgenden Eigenschaften (members): Vorname, Zuname, Alter, Pers-Nr * Syntax: person mypers[...]; // keine Vorgaben über die Dimension notwendig int i; ... check_persons(mypers); // Grundversion //i=check_persons(mypers); // Erweiterte Version * Grundversion: Die Funktion ersetzt alle unzulässigen Alters-Angaben (einstellbare Unter- und Obergrenzen, z.B. 0...150) durch 0. Die Funktion ersetzt alle unzulässigen Pers-Nr-Angaben (Pers-Nr != Index) durch den Index. Beispiel: persnr von person[73] wird auf 73 gesetzt. * Erweiterte Version: + Die Anzahl ausgeführter Fehler-Korrekturen wird an das aufrufende Programm zurückgegeben. ************************************************** (13) Erstellen sie eine Funktion, die folgende Arbeiten ausführt: * Zählung aller gesetzten bits (bit=1) in einer ganzen Zahl (int) * Syntax: int n1,i; ... n1=count_1(i); * Hinweis: Die Funktion sizeof() liefert die Größe von Elementen in byte. (Syntax: int s; s=sizeof(i); ) ************************************************** (14) Erstellen sie eine Funktion, die folgende Arbeiten ausführt: * Zählung aller gelöschten bits (bit=0) in einer ganzen Zahl (int) * Syntax: int i,n0; ... n0=count_0(i); * Hinweis: Die Funktion sizeof() liefert die Größe von Elementen in byte. (Syntax: int s; s=sizeof(i); ) ************************************************** (15) Erstellen sie eine Funktion, die folgende Arbeiten ausführt: * Zählung aller gesetzten bits (bit=1) in einer Zeichenkette (string) * Syntax: char mystring[...] // keine Vorgaben über die Dimension notwendig int n1; ... n1=count_1(mystring); **************************************************