Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz/Softwaretechnologie Fachbereich Informatik und Mathematik/ Institut für Informatik Johann Wolfgang Goethe-Universität Frankfurt am Main Grundlagen der Programmierung 2 Sommersemester 2007 Aufgabenblatt Nr. 1 Abgabe: Mittwoch 25. April 2007 vor! der Vorlesung Notieren Sie bitte stets auf Ihrer Abgabe sowohl den Termin Ihrer Übung als auch den Namen Ihres Tutors und schließlich Ihren eigenen Namen! Bitte beachten Sie, dass zu Ihrer Lösung zugehöriger Quellcode sowohl gedruckt abgegeben als auch per Email an den entsprechenden Tutor gesendet werden muss! Da Sie Ihren Tutor / Ihre Tutorin erst am Mittwoch, den 25. April erfahren, genügt es, wenn Sie die Email im Laufe des Mittwochs abschicken. Die Email-Adressen sind der folgenden Tabelle zu entnehmen. Tutor Claudia Stockhausen Email-Adresse prg2 [email protected] Conrad Rau prg2 [email protected] Desislava Ilieva prg2 [email protected] Eva Reitz prg2 [email protected] Frank Abromeit prg2 [email protected] Igor Geier prg2 [email protected] Thomas Schröder prg2 [email protected] Aufgabe 1 (25 Punkte) a) Melden Sie sich bis Dienstag, den 24. April, 14:00h für die Übungen über das WWWFormular an, dieses ist über http://www.informatik.uni-frankfurt.de/~prg2 aufrufbar. Die Anmeldeseite ist passwortgeschützt. Das erforderliche Passwort wurde in der ersten Vorlesung bekannt gegeben und hängt am Brett links neben Zimmer 216, 2. Stock, Informatikgebäude (Robert-Mayer-Str. 11-15) aus. (5 Punkte) b) Üben Sie die Benutzung der Haskell-Interpreter GHCi und HUGS, indem Sie die Interpreter starten (bzw. eventuell vorher installieren, falls Sie nicht auf einem der Rechner der RBI arbeiten), einige arithmetische Ausdrücke berechnen lassen und sich mit der zugehörigen Dokumentation vertraut machen. Machen Sie sich insbesondere mit den Kommandos der Interpreter vertraut. Erklären Sie die Funktionalitäten der Kommandos :load, :reload, :cd, :quit,:! und :? und geben Sie Beispiele für deren Verwendung an. (10 Punkte) 1 c) Geben Sie eine Funktion in Haskell an, die gegeben eine Gesamtzahl an Übungspunkten aus der ersten Hälfte und eine Gesamtzahl an Übungspunkten aus der zweiten Hälfte die Bonuspunkte für die Klausur berechnet. Speichern Sie die Funktion in einer Datei und laden Sie sie in einen Haskell-Interpreter. Testen Sie die Funktion anschließend mit sinnvollen Werten. (10 Punkte) Aufgabe 2 (40 Punkte) Implementieren Sie in Haskell drei Funktionen f1 und f2 , die jeweils als Parameter zwei natürliche Zahlen erwarten und eine natürliche Zahl nach folgender Spezifikation berechnen: • f1 n m berechnet die Summe m P (ni ). i=1 • f2 n m berechnet das Produkt m Q (n + i). i=1 • f3 n m berechnet m Q i P ( (n + j)) i=1 j=1 Testen Sie beide Funktionen mit verschiedenen Werten für n und m. Hinweise: Verwenden Sie Rekursion. In Haskell ist der Operator für die Exponentation ^ und wird infix als a^b geschrieben. Aufgabe 3 (35 Punkte) Es seien folgende Funktionsdefinitionen in Haskell gegeben: f1 f2 f3 f4 a a a a b b b b = = = = if a == 0 then 0 else (f1 (a-1) b) + (f3 a b) if (f2 (2*a) b) > (f3 1 b) then f2 (a-1) (b+1) else f1 (a+1) (b-1) if a+b < 100 then 2 else f4 (a+6) (b-2) (f1 (a-1) (b+2))*(f3 (a+4) (b-10)) a) Für welche Funktionen f, g ∈ {f1, f2, f3, f4} gilt f referenziert g direkt? (9 Punkte) b) Für welche Funktionen f , g ∈ {f1, f2, f3, f4} gilt f referenziert g? (9 Punkte) c) Welche der Funktionen f1, f2, f3 und f4 sind direkt rekursiv? (4 Punkte) d) Welche der Funktionen f1, f2, f3 und f4 sind rekursiv? (4 Punkte) e) Welche Paare der Funktionen f1, f2, f3 und f4 sind verschränkt rekursiv? (9 Punkte) 2