Praktische Informatik 1 Aufgabenblatt Nr. 9 Aufgabe 1 (35 Punkte)

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