Programmieren in C/C++: Klausur 2 (12.12.2007) Schreiben Sie jeweils ein Codefragment (ohne Eingabe oder Ausgabe), das die gewünschten Aufgabenstellungen bearbeitet. Bei den Variablen, deren Namen unterstrichen sind, gehen Sie bitte davon aus, dass sie im Programm bereits mit sinnvollen Werten belegt wurden. Sie dürfen weitere (Hilfs-) Variablen einführen, falls dies unbedingt erforderlich sein sollte. Generell sollen Sie die angegebenen Variablennamen verwenden, unnötige Operationen vermeiden, unnötige Hilfsvariablen vermeiden, den Inhalt von Schleifen und Verzweigungen einrücken. Bei Nichtbeachtung folgen empfindliche Punktabzüge! Beispielaufgabe: Deklariert sind bisher: int a[n], b[n]; Geben Sie ein Codefragment an, das den Inhalt von b[] nach a[] kopiert Lösungsvorschlag: for(i=0; i<n; i++) =b[i]; Und jetzt geht es los... viel Erfolg! Aufgabe 1: Initialisierung eines Arrays mit einem konstanten Wert Deklariert ist bisher: int a[n]; Geben Sie ein Codefragment an, das alle Elemente von a[] mit dem Wert 0 initialisiert. Aufgabe 2: Initialisierung eines Arrays mit alternierenden Werten Deklariert ist bisher: int a[n]; a) Geben Sie ein Codefragment an, das alle Elemente von a[] alternierend mit den Werten 0, 1, 0, 1, 0,... initialisiert. b) Geben Sie ein Codefragment an, das alle Elemente von a[] alternierend mit den Werten 1, 0, 1, 0, 1,... initialisiert. Aufgabe 3: Suche des größten Elements eines Arrays Deklariert sind bisher: int a[n], maxvalue=int_min; (Hinweis: INT_MIN ist eine symbolische Konstante, die für den kleinstmöglichen int- Wert steht und in limits.h deklariert ist.) Geben Sie ein Codefragment an, das den größten Eintrag von a[] findet und in der Variablen maxvalue speichert.
Aufgabe 4: Suche des kleinsten Elements eines Arrays Deklariert sind bisher: int a[n], minvalue=int_max; (Hinweis: INT_MAX ist eine symbolische Konstante, die für den größtmöglichen int-wert steht und in limits.h deklariert ist.) Geben Sie ein Codefragment an, das den kleinsten Eintrag von a[] findet und in der Variablen minvalue speichert. Aufgabe 5: Prüfung zweier Arrays auf Gleichheit, Variante 1 Deklariert sind bisher: int a[n], b[n], abequal; Geben Sie ein Codefragment an, das prüft, ob alle Elemente von a[] und b[] paarweise gleich sind, ob also a i = bi für alle i = 0,..., N 1 erfüllt ist. Die Variable abequal soll mit dem Wert 1 belegt werden, falls alle Elemente paarweise gleich sind, andernfalls mit dem Wert 0. Aufgabe 6: Prüfung zweier Arrays auf Gleichheit, Variante 2 Deklariert sind bisher: int a[n], b[n], pos; Geben Sie ein Codefragment an, das prüft, ob alle Elemente von a[] und b[] paarweise gleich sind, ob also a i = bi erfüllt ist. In der Variablen pos soll die Position des ersten voneinander abweichenden Paares gespeichert werden. Ist a i = bi erfüllt für alle i = 0,..., N 1, so soll pos mit dem Wert 1 belegt werden. Beispiele a) b) b[i] b[i] 4 5-3 6 7 11 18 1 Für diese Situation soll pos den Wert 1 Für diese Situation soll pos den Wert 5
Aufgabe 7: Vertauschen der Reihenfolge innerhalb eines Arrays Deklariert sind bisher: int a[n]; Geben Sie ein Codefragment an, das die im Array a[] gespeicherten Elemente in der Reihenfolge vertauscht. Beispiel vorher: nachher: 1 18 12 7 6-3 5 4 Aufgabe 8: Prüfung eines Arrays auf Symmetrie Deklariert sind bisher: int a[n], issymm; Geben Sie ein Codefragment an, das prüft, ob die im Array a[] gespeicherten Elemente symmetrisch angeordnet sind, ob also ein Vertauschen der Reihenfolge (vgl. Aufg. 7) zur selben Anordnung der Elemente führt. Ist dies der Fall, so soll die Variable issymm mit dem Wert 1, andernfalls mit 0 belegt werden. Beispiele a) b) 4 5-3 6 6-3 5 4 Für diese Situation soll issymm den Wert 1 Für diese Situation soll issymm den Wert 0 Aufgabe 9: Zählen von Elementen in einem Array Deklariert sind bisher: int a[n], value, nvalue; Geben Sie ein Codefragment an, das zählt, wie häufig der in der Variablen value vorgegebene Wert im Array a[] auftritt. Das Ergebnis der Zählung soll in der Variablen nvalue gespeichert werden. Beispiele (value enthält hier den Wert 6.) a) b) 4 5-3 6 6-3 5 6 Für diese Situation soll nvalue den Wert 3 Für diese Situation soll nvalue den Wert 1
Aufgabe 10: Einfügen eines Elements in ein Array Deklariert sind bisher: int a[n], value, pos; Geben Sie ein Codefragment an, das den in value gegebenen Wert an der Stelle pos in das Array a[] einfügt. Zuvor sollen die Inhalte des Arrays ab dem Index pos um ein Element nach rechts (zu größeren Indizes hin) verschoben werden. Dabei geht der Inhalt des letzten Elements a[n-1] verloren. Beispiele (value enthält hier den Wert 6, pos den Wert 2.) vorher: nachher: 4 5 6-3 6 7 12 18 Aufgabe 11: Entfernen eines Elements aus einem Array Deklariert sind bisher: int a[n], pos; Geben Sie ein Codefragment an, das den an der Stelle pos des Arrays a[] gespeicherten Wert entfernt. Die Inhalte des Arrays sollen dann ab dem Index pos+1 um ein Element nach links (zu kleineren Indizes hin) verschoben werden. Der Inhalt des letzten Elements a[n-1] soll auf 0 gesetzt werden. Beispiele (pos enthält hier den Wert 2.) vorher: nachher: 4 5 6 7 12 18 1 0 Aufgabe 12: Sortieren der Elemente eines Arrays Deklariert sind bisher: int a[n]; Geben Sie ein Codefragment an, das die Elemente eines Arrays in aufsteigender Reihenfolge sortiert. Beispiele (pos enthält hier den Wert 2.) vorher: nachher: 4 1-3 18 7 12 6 5-3 1 4 5 6 7 12 18
Aufgabe 1: Lösungsvorschläge Es handelt sich hier nur um Vorschläge; selbstverständlich können auch andere Lösungen richtig sein. for(i=0; i<n; i++) =0; Aufgabe 2a: if(i%2==0) =0; else =1; Aufgabe 2b: if(i%2==0) =1; else =0; Aufgabe 3: if(maxvalue<) maxvalue=;
Aufgabe 4: if(minvalue>) minvalue=; Aufgabe 5: abequal=1; if(!=b[i]){ abequal=0; break; Aufgabe 6: pos=-1; if(!=b[i]){ pos=i; break;
Aufgabe 7: int i, h; for(i=0; i<n/2; i++){ h=; =a[n-1-i]; a[n-1-i]=h; Aufgabe 8: issymm=1; for(i=0; i<n/2; i++) if(!=a[n-1-i]){ issymm=0; break; Aufgabe 9: nvalue=0; if(value==) nvalue++;
Aufgabe 10: for(i=n-2; i>=pos; i--) a[i+1]=; a[pos]=value; Aufgabe 11: for(i=pos; i<n-1; i++) =a[i+1]; a[n-1]=0; Aufgabe 12: int i, h, ready; do{ ready=1; for(i=0; i<n-1; i++) if(>a[i+1]){ h=; =a[i+1]; a[i+1]=h; ready=0; while(ready!=1);