Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfüllen Klausur Informatik 1, 04.04.2006 Klausur Informatik 1 Wintersemester 2005/2006 Prof. Dr. Wolfgang May 4. April 2006, 11-13 Uhr Bearbeitungszeit: 90 Minuten Aufgabe erreichbare Punkte 1 10 2 14 3 16 4 26(+8)* 5 12 6 12 Gesamt: erreichte Punkte / 10 / 14 / 16 / 26(+8)* / 12 / 12 /90(+8)* Wir wünschen viel Erfolg! Bei der Klausur sind keine Hilfsmittel (Skripte, Taschenrechner etc.) erlaubt. Papier wird gestellt. Benutzen Sie nur die ausgeteilten, zusammengehefteten Blätter für Ihre Antworten. Schreiben Sie auf jedes Blatt oben Ihren Namen und Ihre Matrikelnummer. Schreiben Sie mit blauem/schwarzem Kugelschreiber, Füller etc.; Bleistift ist nicht erlaubt. meine Note soll mit Matrikelnummer so bald wie möglich auf der Vorlesungs-Webseite veröffentlicht werden. meine Note soll nicht veröffentlicht werden; ich erfahre sie dann aus Munopag/Wopag (bzw. beim Prüfungsamt der Informatik). (zutreffendes bitte ankreuzen) 1 von 18 Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfüllen Klausur Informatik 1, 04.04.2006 Aufgabe 1 [Zahlendarstellung, Boolsche Audrücke] [10 Punkte] a) Addieren Sie die Zahlen 26 und 3 binär. [2 Punkte] b) Multiplizieren Sie die Zahlen 26 und 3 binär. [2 Punkte] c) Konvertieren Sie 136 in eine Hexadezimalzahl. [2 Punkte] d) Addieren Sie die beiden Hexadezimalzahlen 6B und 57 und wandeln Sie das Ergebnis in eine Dezimahlzahl um. [4 Punkte] 2 von 18 Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfüllen Klausur Informatik 1, 04.04.2006 Raum für Bearbeitung: 3 von 18 Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfüllen Klausur Informatik 1, 04.04.2006 Aufgabe 2 [Grammatik] [14 Punkte] a) Geben Sie eine Grammatik in BNF für die Menge aller Palindrome aus dem Alphabet {a, b} an (Palindrome sind Ausdrücke, die sowohl vorwärts als auch rückwärts dasselbe Wort ergeben, z.B. abba, bbabb). [4 Punkte] b) Leiten Sie mit den Produktionsregeln Ihrer Grammatik das Wort aababaa aus dem Startsymbol ab. [2 Punkte] c) Geben Sie einen deterministischen endlichen Automaten an der alle Palindrome aus dem Alphabet {a, b} mit einer Länge von mindestens 1 bis maximal 4 Zeichen erkennt. [8 Punkte] 4 von 18 Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfüllen Klausur Informatik 1, 04.04.2006 Raum für Bearbeitung: 5 von 18 Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfüllen Klausur Informatik 1, 04.04.2006 Raum für Bearbeitung: 6 von 18 Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfüllen Klausur Informatik 1, 04.04.2006 Aufgabe 3 [Heaps] Gegeben sei die Zahlenfolge 5, 10, 4, 7, 9, 17, 2, 6, 3, 18, 23, 16 [16 Punkte] a) Fügen Sie die Zahlen aus der gegebenen Zahlenfolge nacheinander in einen anfangs leeren Heap ein. Zur Erinnerung: das kleinste Element befindet sich immer an der Wurzel. [6 Punkte] b) Erklären Sie kurz wie man mit Hilfe eines Heaps Zahlen sortiert (HeapSort-Algorithmus). [5 Punkte] c) Führen Sie den HeapSort-Algorithmus an obigem Heap durch, allerdings nicht komplett, sondern nur für die ersten 4 Zahlen. Achten Sie darauf dass Ihr Vorgehen beim Lesen nachvollziehbar ist. [5 Punkte] 7 von 18 Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfüllen Klausur Informatik 1, 04.04.2006 Raum für Bearbeitung: 8 von 18 Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfüllen Klausur Informatik 1, 04.04.2006 Raum für Bearbeitung: 9 von 18 Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfüllen Klausur Informatik 1, 04.04.2006 Aufgabe 4 [Java] [26(+8*) Punkte] Gegeben sei folgende Klasse Chars zur Verwaltung von Zeichenketten (als Arrays von chars): public boolean contains(Chars other) public class Chars {{} public char[] array; public Chars(char[] a) { array = a; } public Chars(String s) { array = s.toCharArray(); } public int getLength() { return array.length; } public int getFirstIndex(char c) { //... } public boolean equals(Object other) { //... } public boolean contains(Chars other) { //... } public boolean containsScattered(Chars other) { //... } } Chars example = new Chars("abacab"); erzeugt zum Beispiel ein Objekt, das die Zeichenkette [’a’, ’b’, ’a’, ’c’, ’a’, ’b’] 0 1 2 3 4 5 der Länge 6 repräsentiert. Die Array-Indizes laufen hierbei von 0 bis 5. 10 von 18 Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfüllen Klausur Informatik 1, 04.04.2006 a) Ergänzen sie die Klasse um folgende Methoden: • getFirstIndex(char c) liefert den Index des ersten Vorkommens (von links angefangen) eines Zeichens in einer Zeichenkette. Mit obigem Beispiel: example.getFirstIndex(’b’) soll den Wert 1 zurück liefern [4 Punkte] • equals(Object other) vergleicht zwei Zeichenketten. Zwei Zeichenketten sind gleich wenn sie (1) gleich lang sind und (2) die Zeichen an jeder Stelle übereinstimmen. [8 Punkte] • contains(Chars other) überprüft ob eine Zeichenkette eine zweite Zeichenkette other zusammenhängend enthält. [’a’, ’b’, ’a’, ’c’,’a’, ’b’] enthält zum Beispiel – [’a’, ’b’, ’a’] und [’c’, ’a’], – aber nicht [’a’, ’b’, ’c’]. [7 Punkte] • containsScattered(Chars other) überprüft ob eine Zeichenkette eine zweite Zeichenkette other auch unzusammenhängend enthält. [’a’, ’b’, ’a’,’c’, ’a’, ’b’] enthält zum Beispiel – zeichenweise verteilt – [’a’, ’b’, ’c’]. [7 Punkte] b) (nur Zusatzpunkte) Geben sie für die Methoden getFirstIndex() contains() containsScattered() die asymptotische Laufzeit an, abhängig von der Länge der Zeichenketten. [8* Punkte] 11 von 18 Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfüllen Klausur Informatik 1, 04.04.2006 Raum für Bearbeitung: 12 von 18 Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfüllen Klausur Informatik 1, 04.04.2006 Raum für Bearbeitung: 13 von 18 Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfüllen Klausur Informatik 1, 04.04.2006 Raum für Bearbeitung: 14 von 18 Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfüllen Klausur Informatik 1, 04.04.2006 Aufgabe 5 [Master-Theorem] Betrachten Sie folgenden Algorithmus: [12 Punkte] public static int parity(int[] array, int from, int to) { int result; if(from==to) result = array[from]; else { int mid = (from+to) / 2; int left = parity(array, from, mid); int right = parity(array, mid+1, to); result = left + right - 2*left*right; } return result; } a) Vollziehen Sie den Aufruf int n = parity([1, 0, 1, 1], 0, 3) grafisch nach und berechnen Sie das Ergebnis. [4 Punkte] b) Stellen Sie eine Rekurrenzgleichung für obiges Code-Fragment auf. [4 Punkte] c) Berechnen Sie die asymptotische Laufzeit mit Hilfe des Mastertheorems. [4 Punkte] 15 von 18 Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfüllen Klausur Informatik 1, 04.04.2006 Raum für Bearbeitung: 16 von 18 Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfüllen Klausur Informatik 1, 04.04.2006 Aufgabe 6 [Fibonacci-Funktion] Gegeben sei die Fibonacci-Funktion mit [12 Punkte] • f ib(0) := f ib(1) := 1 • f ib(n + 1) := f ib(n) + f ib(n − 1) ∀n ∈ N, n > 1 a) Berechnen Sie f ib(5). [3 Punkte] b) Wie lautet der größte gemeinsame Teiler (ggT ) von f ib(4) und f ib(5)? [1 Punkt] c) Zwei natürliche Zahlen x und y sind genau dann teilerfremd, wenn der größte gemeinsame Teiler ggT (x, y) = 1 gilt. Beweisen Sie folgende Aussage mit Hilfe vollständiger Induktion: Zwei benachbarte Fibonacci Zahlen f ib(n) und f ib(n + 1) sind immer teilerfremd. Hinweis: “k ist ein Teiler von x” kann man mathematisch so aufschreiben: ∃i ∈ N k · i = x (Falls k ein Teiler von x ist, dann gibt es eine natürliche Zahl i so dass x in die Faktoren k und i zerlegt werden kann). [8 Punkte] 17 von 18 Name,Vorname, Matrikelnummer Bitte unbedingt leserlich ausfüllen Klausur Informatik 1, 04.04.2006 Raum für Bearbeitung: 18 von 18