Informatik Bachelor 1. Semester WS 2014/15 Algorithmen und Datenstrukturen (ADS) Prof. Dr. Wolfgang Schramm Übungsblatt 2 Hinweise: Ausgabe: 17.10.2014 Abgabe: 31.10.2014 -­‐ Die Abnahme der Übungen gilt als Prüfungsleistung. Bei einer Verhinderung durch Krankheit ist eine ärztliche Bescheinigung der Arbeitsunfähigkeit vorzu-­‐ legen. -­‐ Zur Abnahme müssen die Ergebnisse (Pseudocode, Stichpunkte) – soweit nichts anderes angegeben ist – schriftlich (ausgedruckt) vorliegen. Aufgabe 1: Rekursion (rekurriert) 15 Punkte Welche Funktion wird durch die folgende Definition realisiert? f(x, y) = if y = 1 then x else f(x, y - 1) + x fi a) Was wird hier berechnet? b) Beschreiben Sie die Auswertung an einem Beispiel (y > 3). c) Für welche Wertebereiche von x und y terminiert diese Funktion? Aufgabe 2: Grammatik für Bezeichner 25 Punkte Bezeichner in Java können aus beliebigen Zeichen des UniCode-­‐Zeichensatzes bestehen, müs-­‐ sen jedoch mit einem Buchstaben, einem Unterstrich oder einem Dollarzeichen beginnen. Um die Lesbarkeit der Programme zu erhöhen, legt eine Firma folgende zusätzliche Regeln für die Benennung von Variablen fest (die auch den Java-­‐Konventionen entsprechen) − Bezeichner können aus beliebig vielen Buchstaben und Ziffern bestehen; − ein Bezeichner darf nicht mit einer Ziffer beginnen; − ein Bezeichner darf nicht mit einem großen Buchstaben beginnen; − ein Bezeichner darf strukturiert werden durch Verwendung von Großbuchstaben, z.B. layoutManager; − es dürfen keine zwei Großbuchstaben aufeinanderfolgen; − das letzte Zeichen darf kein Großbuchstabe sein. Geben sie für diese Bezeichner die Grammatiken an in a) BNF b) EBNF Übungsblatt 2 Ausgabe: 17.10.2014 1 Erstellen Sie die Produktionen auch als c) Syntaxdiagramme Hinweise − Für die Grammatik sind nur das Startsymbol und die Produktionen in EBNF, BNF und Syntaxdiagrammen gefragt. Aufgabe 3: Automaten 20 Punkte Auf einem Parkplatz kostet das Parken 1,50 Euro. Ein Parkscheinautomat akzeptiert 50 Cent, 1 Euro und 2 Euro-­‐Münzen. Nach Einwurf der korrekten Geldsumme liefert er das Ticket und ggf. das Restgeld. Er besitzt keine Abbruchtaste. Entwickeln Sie einen Automaten, der den Parkscheinautomaten realisiert und alle korrekten Geldbeträge akzeptiert. Aufgabe 4: Rekursionsaufwand – Die Türme von Hanoi 10 Punkte Betrachten Sie den Algorithmus zum Lösen der Aufgabe „Die Türme von Hanoi“ in Pseu-­‐ docode, wie in der Vorlesung vorgestellt. Wenn Sie annehmen, dass eine Person jede Sekunde eine Scheibe bewegen kann. Wie viele Scheiben darf der Ausgangsturm maximal haben, dass er in einer Stunde zum Zielstapel gezo-­‐ gen werden kann? Aufgabe 5: Imperativer Algorithmus 20 Punkte Aus dem zaristischen Russland ist eine Regel zur Berechnung des Produktes zweier Faktoren überliefert, bei der nur die einfach auszuführenden Funktionen Addition, Verdoppelung und Halbierung benötigt werden. Der größere der beiden Faktoren sei mit x, der kleinere sei mit y bezeichnet und eine Summe wird mit Null initialisiert. Beide Faktoren seien positiv und ganz-­‐ zahlig. Die Berechnung erfolgt nach folgendem Algorithmus: Wenn y größer als 1 ist, dann prüfe, ob y ungerade ist. In diesem Fall addiere den Wert von x zur Summe. Halbiere anschließend den Wert von y (ganzzahlig) und verdoppele den Wert von x. Falls y gleich 1 ist, dann addiere x zur Summe und beende die Berechnung. In der Summe steht der Wert des Produktes beider gegebener Faktoren. Übungsblatt 2 Ausgabe: 17.10.2014 2 • • Überprüfen Sie diesen Algorithmus an einem sinnvoll großen, selbstgewählten Bei-­‐ spiel und protokollieren Sie alle Zwischenschritte! Beschreiben Sie diese Multiplikation als Algorithmus im Pseudocode. Aufgabe 6: Applikativer Algorithmus Punkte: 20 Betrachten Sie die beiden applikativen Algorithmen A1 und A2 zur Bestimmung der Fibonacci-­‐ Zahlen: A1: fib(n) = if (n = 0) oder (n = 1) then 1 else fib(n -­‐ 1) + fib(n -­‐ 2) fi A2: fib(n) = h(n, 1, 1) h(n, a, b) = if n = 0 then a else h(n -­‐ 1, b, a + b) fi − Bestimmen Sie exemplarisch fib(6) durch schrittweises Anwenden von A1 und A2; proto-­‐ kollieren Sie alle Rekursionsschritte. − Wie entwickelt sich die benötigte Anzahl von Funktionsaufrufen zur Ermittlung von fib(n), n 0, in A1 bzw. A2? Freiwillige Zusatzaufgabe − Schreiben Sie zum Testen der Algorithmen A1 und A2 zwei JAVA-­‐Funktionen mit einem entsprechenden Hauptprogramm. Übungsblatt 2 Ausgabe: 17.10.2014 3