Grundlagen der Programmierung 2 Aufgabenblatt Nr. 1 Aufgabe 1

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