Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz/Softwaretechnologie Fachbereich Biologie und Informatik/ Institut für Informatik Johann Wolfgang Goethe-Universität Frankfurt am Main Praktische Informatik 1 Wintersemester 2004/2005 Aufgabenblatt Nr. 9 Abgabe: Mittwoch 12. Januar 2005 vor! der Vorlesung Aufgabe 1 (35 Punkte) Ziel dieser Aufgabe ist es, eine Umrechnungstabelle für die fünf Währungen Euro (EUR), USDollar (USD), Japanischer Yen (JPY), Schweizer Franken (CHF) und Britisches Pfund (GBP) in Haskell zu erstellen und zu benutzen. Die Umrechnungstabelle hat dabei die Form: s z (1) (2) (3) (4) (5) EUR USD JPY CHF GBP (1) EUR 1 (2) USD 1,3389 (3) JPY 139,2456 (4) CHF 1,5381 (5) GBP 0,6874 Sei zw (sw ) die Währung der Zeile z (Spalte s), dann soll für alle s, z ∈ {1, . . . , 5} gelten: Eintrag in (z, s) = zsww . Die obige Tabelle sei durch folgendes Array in Haskell gegeben: initArray = array ((1,1),(5,5)) [((1,1),1), ((1,2),1.3389), ((1,3),139.2456), ((1,4),1.5381), ((1,5),0.6874)] a) Implementieren Sie in Haskell eine Funktion fillArray, die als Eingabe ein Feld enthält, indem nur die Werte der ersten Zeile gegeben sind (wie z.B. das obige initArray), und dieses füllt, indem sämtliche 20 leeren Feldeinträge durch die entsprechenden Werte beschrieben werden. (24 Punkte) b) Definieren Sie Funktionen, die für einen gegebenen Betrag mithilfe Ihres (gefüllten) Arrays aus Aufgabenteil a) folgende Umrechnungen bewerkstelligen: – usd2jpy: von amerikanischen Dollar in japanische Yen. (3 Punkte) – gbp2chf: von britischen Pfund in schweizer Franken. (3 Punkte) – eur2other: von EURO in alle anderen vier Währungen. Die Ausgabe soll dabei ein 4-Tupel sein. (5 Punkte) Testen Sie die Funktionen mit dem Array (fillArray initArray). 1 Aufgabe 2 (45 Punkte) Es seien die folgenden Konstrukte gegeben: • Z1 = ({x 7→ 1, y 7→ 23, z 7→ 3}, {gy 7→ 0}) • Z2 = ({x 7→ 1, 3 7→ gy, z 7→ 1}, {gy 7→ 5}) • Z3 = ({x 7→ 42, y 7→ 3, z 7→ y}, {gx 7→ 7}) • Z4 = ({x 7→ 1, y 7→ 3, z 7→ 56, w 7→ 2}) • Z5 = ({x 7→ 12, z 7→ 15}, {gx 7→ −71, gy 7→ 3}) • Z6 = ({x 7→ 45, y 7→ 3, z 7→ 2, x 7→ 2}, {gx 7→ 2, gy 7→ 3}) a) Welche der Konstrukte sind gültige Umgebungen bzgl. der Python-Semantik (ohne Funktionsaufrufe). Begründen Sie Ihre Antwort! (6 Punkte) b) Berechnen Sie für alle gültigen Umgebungen Z aus Aufgabenteil a) – wert(x, Z) (3 Punkte) – wert(gx, Z) (3 Punkte) – wert(z and gy, Z) (3 Punkte) – update(z, wert(x, Z), Z) (3 Punkte) – update(y, 5, Z) (3 Punkte) c) Berechnen Sie mithilfe der Zuweisungs- und der Sequenzregel die entstehende Umgebung nach Ausführung der Befehlsfolge gy = z x = gy gy = x*gy für alle gültigen Umgebungen aus Aufgabenteil a) als Startumgebung. (24 Punkte) Aufgabe 3 (20 Punkte) Implementieren Sie in Python eine Funktion wechselgeld, die als Argumente einen zu zahlenden EURO-Betrag und das gegebene Geld (in EUR) erhält und das Wechselgeld in möglichst wenigen Scheinen und Münzen berechnet. Dabei soll die Rückgabe auf dem Bildschirm ausgedruckt werden. Eine beispielhafte Ausgabe ist: >>> 1.0 1.0 1.0 wechselgeld(9.84,10) mal 0.1 EUR mal 0.05 EUR mal 0.01 EUR 2