Musterlösung Name, Vorname, Matrikelnummer (Angaben sind freiwillig) Bitte unbedingt leserlich ausfüllen Testklausur – Vorkurs Informatik, 01.10.2007 Testklausur Vorkurs Informatik 01.10.2007 Musterlösung Seite 1 von 9 Musterlösung Name, Vorname, Matrikelnummer (Angaben sind freiwillig) Bitte unbedingt leserlich ausfüllen Testklausur – Vorkurs Informatik, 01.10.2007 Aufgabe 1: [20 Punkte] Algorithmen und Programmierung stk lau Vo su Un rku r ive rs Mu rsi Inf ste tät orm rlö Do at su rtm ik ng un d Gegeben sei folgender Algorithmus: a := 2; b := 1; Solange a < 4, { wenn a gerade, dann b := b + 2.5; a := a + 1; } gib b zurück; a) Welchen Wert haben die Variablen a und b nach jedem Durchlauf der Schleife. [ 8 Punkte ] Durchlauf Wert von a Wert von b 1 2 3 4 3.5 3.5 b) Schreiben Sie den Algorithmus als vollständiges Java-Programm. [ 12 Punkte ] class Algorithmus{ Te public static void main (String[] argv){ System.out.println("b: "+algo()); } } static float algo(){ int a = 2; float b = 1; while( a < 4 ){ if( a % 2 == 0 ){ b = b + 2.5f; } a = a + 1; } return b; } Seite 2 von 9 Musterlösung Name, Vorname, Matrikelnummer (Angaben sind freiwillig) Bitte unbedingt leserlich ausfüllen Testklausur – Vorkurs Informatik, 01.10.2007 Aufgabe 2: [15 Punkte] Programmierung stk lau Vo su Un rku r ive rs Mu rsi Inf ste tät orm rlö Do at su rtm ik ng un d a) Gegeben sei die Java-Deklaration eines Arrays: double[] Daten = {4.5, 7, 8.5, -2.1, 0.7}; Welchen Wert haben die folgenden Ausdrücke? [ 4 Punkte ] ________________4.5___________________ Daten[0]; Daten[(Daten.length-2)/2]; _________________7__________________ b) Ermitteln Sie den Wahrheitswert des angeführten booleschen Ausdrucks. [ 2 Punkte ] 4 true (8 <= 8) || (16 < 2) false c) Schreiben Sie eine Java-Funktion static void sieben(int n), die alle durch sieben teilbaren Zahlen zwischen 1 und n bestimmt. Die Funktion soll die Zahlen zwischen 1 und n auf dem Bildschirm ausgeben und alle durch sieben teilbaren Zahlen zusätzlich mit einem Stern markieren. [ 9 Punkte ] static void sieben(int n){ Te int i = 2; while( i < n){ if( i % 7 == 0){ System.out.println(i+"*"); } else { System.out.println(i); } i = i +1; } } Seite 3 von 9 Musterlösung Name, Vorname, Matrikelnummer (Angaben sind freiwillig) Bitte unbedingt leserlich ausfüllen Testklausur – Vorkurs Informatik, 01.10.2007 Aufgabe 3: [15 Punkte] Rekursion und Programmierung stk lau Vo su Un rku r ive rs Mu rsi Inf ste tät orm rlö Do at su rtm ik ng un d Die folgende rekursive Berechungsvorschrift liefert den größten gemeinsamen Teiler zweier positiver ganzer Zahlen: x falls x = y ⎧ ⎪ ggT ( x, y ) = ⎨ ggT ( x − y, y ) falls x > y ⎪ ggT ( x, y − x) falls x < y ⎩ a) Berechnen Sie ggT(16,6) durch aufeinanderfolgendes Anwenden der Rekursionsvorschrift. (Hinweis: Der erste Schritt ist unten angegeben und soll nun weitergeführt werden. [ 6 Punkte ] Lösung: ggT(16,6) = ggT(10,6) = ggT(4,6) = ggT(4,2) = ggT(2,2) = 2 b) Schreiben Sie eine rekursive Java-Methode ggT, die den größten gemeinsamen Teiler zweier Zahlen x und y gemäß der Berechnungsvorschrift bestimmt. [ 9 Punkte ] Te static int ggT(int x, int y){ if( x > y ){ return ggT( x - y, y ); } if( x < y ){ return ggT( x, y - x ); } return x; } Seite 4 von 9 Musterlösung Name, Vorname, Matrikelnummer (Angaben sind freiwillig) Bitte unbedingt leserlich ausfüllen Testklausur – Vorkurs Informatik, 01.10.2007 Aufgabe 4: [30 Punkte] Klassen, Objekte und Programmierung stk lau Vo su Un rku r ive rs Mu rsi Inf ste tät orm rlö Do at su rtm ik ng un d a) Entscheiden Sie für folgende Behauptungen, ob sie richtig oder falsch sind. [ 4 Punkte ] 1) In einem Java-Programm können mehrere Objekte einer Klasse vorhanden sein. 4 richtig falsch 2) Ein Java-Programm darf nur aus einer Klassendeklaration bestehen. richtig 4 falsch b) Eine Klasse Aklasse ist wie folgt deklariert: class Aklasse{ float a; String b; Aklasse(float x, String y){ a = x; b = y; } } Stellen Sie graphisch dar, wie sich die Anweisung Aklasse b = new Aklasse(1.4,“neu“); im Speicher auswirkt. [ 4 Punkte ] (Hinweis: Hintergrund der Frage sind die Begriffe Objekt, Objektvariable und Referenz). Te b 1.4 “neu“ Seite 5 von 9 Musterlösung Name, Vorname, Matrikelnummer (Angaben sind freiwillig) Bitte unbedingt leserlich ausfüllen Testklausur – Vorkurs Informatik, 01.10.2007 c) 1. Deklarieren Sie eine Klasse mit Namen Test. Die Klasse soll ein int-Array a als Attribut haben. Das Array soll nicht instantiiert werden. [ 2 Punkt ] stk lau Vo su Un rku r ive rs Mu rsi Inf ste tät orm rlö Do at su rtm ik ng un d class Test{ int[] a; } 2. Schreiben Sie einen Konstruktor für die Klasse Test, der einen int-Parameter n hat. Der Konstruktor soll das Array a der Klasse Test auf ein Array der Länge n instantiieren. [ 3 Punkte ] Test(int n){ a=new int[n]; } 3. Schreiben Sie eine Methode void invers(), die die Elemente im Array a in umgekehrter Reihenfolge in a speichert. [ 8 Punkte ] Beispiel: a invers a 5 6 2 1 3 4 Te 0 1 2 3 4 5 4 3 1 2 6 5 0 2 1 void invers(){ int buffer, pos; for(int x=0; x<a.length/2; x++){ pos=a.length-x-1; buffer=a[x]; a[x]=a[pos]; a[pos]=buffer; } } Seite 6 von 9 3 4 5 Musterlösung Name, Vorname, Matrikelnummer (Angaben sind freiwillig) Bitte unbedingt leserlich ausfüllen Testklausur – Vorkurs Informatik, 01.10.2007 d) Gegeben sei folgende Deklaration eines Objekttyps class Element{ stk lau Vo su Un rku r ive rs Mu rsi Inf ste tät orm rlö Do at su rtm ik ng un d int wert; Element naechstes; void setzNaechstes(Element next){ naechstes = next; } } Das Ergebnis des Programmstücks Element a = new Element(); lässt sich graphisch so darstellen: a b wert naechstes Ergänzen Sie die Graphik so, dass sie das Ergebnis zeigt, wenn dieses Programmstück so fortgesetzt wird: Te Element b = new Element(); a.setzNaechstes(b); b.setzNaechstes(new Element()); [ 9 Punkte] Seite 7 von 9 Musterlösung Name, Vorname, Matrikelnummer (Angaben sind freiwillig) Bitte unbedingt leserlich ausfüllen Testklausur – Vorkurs Informatik, 01.10.2007 Aufgabe 5: [20 Punkte] Algorithmen und Datenstrukturen stk lau Vo su Un rku r ive rs Mu rsi Inf ste tät orm rlö Do at su rtm ik ng un d a) Geben Sie die Folge der Werte der Knoten an, die in dem angegebenen binären Suchbaum besucht werden, wenn in dem gegebenen Baum nach dem Wert 6 gesucht wird. [4 Punkte ] 3 1 7 6 8 Lösung:________________________3, 7, 6__________________________________ b) 1) Für welche der folgenden Kombinationen von Funktionen f(n), g(n) ist die Aussage f(n) = O(g(n)) korrekt: [ 3 Punkte ] i. f(n)= 7n2 + 4, g(n)=n2 4 richtig falsch ii. f(n) = n4 + 100000 n2, g(n) = n2 richtig 4 falsch iii. f(n) = 5, g(n) = 1 4 richtig falsch Te 2) Begründen Sie Ihre Antwort zur Teilaufgabe 1) (f(n)= 7n2 + 4, g(n)=n2). [3 Punkte ] i. f(n) = O(g(n)): ∃ c0 , n0 : ∀n > n0 : f (n) < c0 ∗ g (n) , hier c0 = 8, n0 = 0 ii. Für alle Funktionswerte größer 0, wächst die Funktion 8n2 stärker als 7n2+4. iii. Der Funktionsgraph von 8n2 liegt oberhalb von 7n2+4, für alle Funktionswerte größer 0. Seite 8 von 9 Musterlösung Name, Vorname, Matrikelnummer (Angaben sind freiwillig) Bitte unbedingt leserlich ausfüllen Testklausur – Vorkurs Informatik, 01.10.2007 c) Beweisen Sie durch vollständige Induktion, dass die folgende Formel korrekt ist: [ 10 Punkte ] stk lau Vo su Un rku r ive rs Mu rsi Inf ste tät orm rlö Do at su rtm ik ng un d Behauptung: Die Summe S(n)= q 0 + q 1 + q 2 + … + q n der Potenzzahlen q i von i=0 bis q n+1 − 1 q n+1 − 1 i=n ist gleich , d.h. S (n) = q −1 q −1 Induktionsanfang (n=1): q1+1 − 1 q 2 − 1 (q − 1)(q + 1) S (1) = = = = q +1 q −1 q −1 q −1 Induktionsschritt: Annahme: q n−1 − 1 qn −1 S (n − 1) = , S (n − 2) = , …, S (1) = q + 1 q −1 q −1 Beweis: q n − 1 n q n − 1 + q n (q − 1) S (n) = S (n − 1) + q = +q = q −1 q −1 n Te q n − 1 + q n +1 − q n q n +1 − 1 = = q −1 q −1 Seite 9 von 9