Praktische Informatik 1 Aufgabenblatt Nr. 6 Aufgabe 1 (33 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. 6
Abgabe: Mittwoch 8. Dezember 2004 vor! der Vorlesung
Aufgabe 1 (33 Punkte)
Gemischte Zahlen a cb bestehen aus einem ganzzahligen Anteil a sowie einem Bruch bc , wobei
b
c ≥ 0 und b < c. Der Datentyp GemischteZahl sei in Haskell für positive gemischte Zahlen als
data GemischteZahl = GemischteZahl Integer Rational
deriving(Show)
definiert. Implementieren Sie folgende Funktionen in Haskell:
a) pGemischteZahlToRational konvertiert eine positive gemischte Zahl in einen Bruch vom
Typ Rational.
(11 Punkte)
b) pRationalToGemischteZahl konvertiert einen positiven Bruch vom Typ Rational in eine
gemischte Zahl.
(11 Punkte)
c) addp erhält zwei positive gemischte Zahlen und liefert als Ergebnis die Summe der Eingaben als positive gemischte Zahl.
(11 Punkte)
Hinweise: Rationale Zahlen vom Typ Rational können mit dem Infix-Operator % zusammengesetzt werden, dafür ist es jedoch notwendig die entsprechende Bibliothek einzubinden.
Dies ist möglich mit der Anweisung
import Data.Ratio
die am Anfang ihrer Quelltextdatei stehen sollte. Diese Bibliothek stellt auch die u.U.
hilfreichen Selektoren numerator und dominator zur Verfügung, die angewendet auf eine
Bruchzahl ihren Zähler bzw. Nenner liefern.
Bei der Lösung der Aufgabe könnte es hilfreich sein, wenn Sie versuchen auf die vordefinierte Addition (+) für Bruchzahlen vom Typ Rational zurück zu greifen.
1
Aufgabe 2 (42 Punkte)
Implementieren Sie Funktionen untersumme und obersumme in Haskell, die jeweils als Eingaben
eine Funktion, ein Intervall [a, b], und eine Anzahl an Streifen erhalten, und die Untersumme
bzw. die Obersumme der Fläche zwischen x-Achse und der Funktion berechnen.
b
b
a
a
f
f
Untersumme
Obersumme
Die Höhe eines Streifens (Rechtecks) ist bei der Untersumme (bzw. Obersumme) durch das
Minimum (bzw. Maximum) der Funktionswerte zu Beginn und am Ende des Streifens festgelegt.
Verläuft die Funktion unterhalb der x-Achse, so ist der Flächeninhalt negativ. Testen Sie beide
Funktionen, indem Sie die Ober- und Untersumme für die Funktion g(x) = x3 + 4 · x + 2000
im Intervall [−15, 15] mit 10.000 Streifen berechnen.
Aufgabe 3 (25 Punkte)
a) Implementieren Sie in Haskell jeweils einen Summentypen
– Wochentag, wobei Werte von diesem Typ Montag, Dienstag, Mittwoch,
Donnerstag, Freitag, Samstag, Sonntag sind.
(4 Punkte)
– Monat, mit den Werten Januar, Februar, Maerz, April, Mai, Juni, Juli,
August, September, Oktober, November, Dezember.
(4 Punkte)
b) Implementieren Sie anschließend einen Datentyp Datum, der Jahr, Monat, Tag und Wochentag speichern soll. Tage und Jahre können Sie durch Verwendung des Typs Int repräsentieren, Monate und Wochentage sollen durch Verwendung der in Aufgabenteil a)
implementierten Datentypen repräsentiert werden. Geben Sie Ihr Geburtsdatum mit dem
Datentypen an.
(7 Punkte)
c) Implementieren Sie in Haskell auf dem Datentyp Datum, die Selektoren
– tag :: Datum -> Int, die für ein gegebenes Datum den Tag zurück liefert.
– wochentag :: Datum -> Wochentag, die für ein gegebenes Datum den Wochentag
zurück liefert.
– jahr :: Datum -> Int, die für ein gegebenes Datum das Jahr zurück liefert.
– monat :: Datum -> Monat, die für ein gegebenes Datum den Monat zurück liefert.
(10 Punkte)
2
Herunterladen