TU Ilmenau, Fakultät IA FG Telematik/Rechnernetze Prof. Dr.-Ing. G. Schäfer http://www.tu-ilmenau.de/telematik/aup Algorithmen und Programmierung WS 14/15 Übungsblatt 5 Abgabe am Mittwoch 26.11.2014 in der Vorlesung Aufgabe 1 (Klammerausdrücke in Java) 6 Punkte Korrekte Klammerausdrücke setzen sich aus den Zeichen ’(’ und ’)’ zusammen und sind wie folgt definiert: • Die leere Zeichenkette ist ein korrekter Klammerausdruck. • Ist A ein korrekter Klammerausdruck, so ist auch (A) ein korrekter Klammerausdruck. • Sind A und B korrekte Klammerausdrücke, so ist auch die Konkatenation AB ein korrekter Klammerausdruck. Die Länge eines Klammerausdruckes entspricht der Anzahl der Zeichen. So ist ()(())“ ” ein korrekter Klammerausdruck der Länge 6. Die Zeichenkette )()(“ ist kein korrekter ” Klammerausdruck. Es existieren 2 korrekte Klammerausdrücke der Länge 4: ()()“ und ” (())“. ” (a) Entwickeln Sie ein Java-Programm, welches bei Eingabe einer geraden Zahl n ∈ alle korrekten Klammerausdrücke der Länge n sowie deren Anzahl ausgibt. N (b) Wie viel korrekte Klammerausdrücke der Länge 8 gibt es? Hinweis: Eine Möglichkeit der kompakten Implementierung besteht darin, eine rekursive Methode (public static void klammerAusdruecke(...) ) zu definieren, welche einen übergebenen Teilausdruck sinnvoll fortsetzt. Eventuell sind weitere Parameter notwendig. Für das Zählen der korrekten Klammerausdrücke kann eine Klassenvariable (public static long zaehler = 0;) verwendet werden. Aufgabe 2 (Markov-Algorithmen) 6 + 1 Punkte Entwickeln Sie einen Markov-Algorithmus, welcher eine Zeichenkette über dem Alphabet {0, 1} kopiert. In der Ausgabe sollen beide Zeichenketten durch ein # getrennt sein. Beispiel: 001011 ⇒∗ 001011#001011 (a) Geben Sie den Algorithmus in Form einer Markov-Tafel an. (b) Demonstrieren Sie die Funktionsweise Ihres Algorithmus durch vollständige Ausführung auf der Eingabe 110. Geben Sie dazu alle Zwischenschritte mit der Nummer der angewendeten Regel an und unterstreichen Sie jeweils den Teil der Zeichenkette, der im folgenden Schritt ersetzt wird. Bitte wenden! 2 Algorithmen und Programmierung WS 14/15 Übungsblatt 5 Aufgabe 3 (Ausdruckskraft von Registermaschinen) 2 Punkte Registermaschinen besitzen die gleiche Ausdruckskraft wie Java Programme, obwohl die Register der Registermaschinen nur positive Ganzzahlen aufnehmen können. Beschreiben Sie (informal) eine Methode, wie vorzeichenbehaftete Kommazahlen in den Registern einer Registermaschine repräsentiert werden können. Aufgabe 4 (Registermaschinen) 5 Punkte Die Catalan-Zahlen Cn können durch folgende Formel berechnet werden: C0 = 1 (4n + 2)Cn Cn+1 = n+2 N Entwickeln Sie ein Registermaschinenprogramm, welches n ∈ als Eingabe im ersten Speicherregister erhält und die Catalan-Zahl Cn als Ausgabe im zweiten Speicherregister berechnet. Hinweis: Alle Catalan-Zahlen Cn sind natürliche Zahlen. Damit die Berechnung auf der Registermaschine das korrekte Ergebnis liefert, müssen die Rechenoperationen in der richtigen Reihenfolge ausgeführt werden. Aufgabe 5 (Vor- und Nachbedingungen) 2 + 2 Punkte Geben Sie für jede der folgenden Aussagen an, in welchen Definitionsbereichen von X und Y sie wahr ist. Es gelte X, Y ∈ Z. (a) {X ≥ 0 ∨ Y ≥ 0} X := X * -1 {X ≤ 0 ∧ Y ≤ 0} (b) {X 6= 5} Y := X * X {Y = X} Aufgabe 6 (Vor- und Nachbedingungen II) 2 + 2 + 2 Punkte Beweisen Sie formal, dass folgende Aussagen wahr sind. Es gelte X, Y ∈ Z. (a) {X ≥ 0} if Y ≥ 0 then X := X + Y else X := X - Y fi {X ≥ 0} (b) {X ≥ 0 ∧ Y ≥ 0} while X 6= 0 do Y := Y + 1; X := X - 1 od {Y ≥ 0} (c) {X ≥ 0} while true do X := X + 1 od {X = 0}