Algorithmen und Programmierung WS 14/15

Werbung
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}
Herunterladen