Praktische Informatik 1 Aufgabenblatt Nr. 7 Aufgabe 1 (30 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. 7
Abgabe: Mittwoch 15. Dezember 2004 vor! der Vorlesung
Aufgabe 1 (30 Punkte)
Das (8+3)-Prinzip für DOS-Dateinamen lautet: Der Dateiname besteht aus maximal 8 Zeichen,
dem eigentlichen Namen, einem Trennpunkt und nochmals maximal 3 Zeichen, der Erweiterung.
Gegeben sei eine Liste von DOS-Dateinamen (ein Dateiname sei als ein String repräsentiert).
Hierbei dürfen Sie für Aufgabe a) und b) annehmen, dass sowohl der eigentliche Name als auch
die Erweiterung jedes Dateinamens nur aus Buchstaben besteht.
a) Definieren Sie eine Funktion onlyWithHS :: [String] -> [String], die ausschließlich
diejenigen Dateinamen liefert (als Liste), die mit der Erweiterung hs enden. (12 Punkte)
b) Definieren Sie eine Funktion onlyWith :: String -> [String] -> [String], die ausschließlich diejenigen Dateinamen liefert (als Liste), die mit der Erweiterung, welche durch
den ersten Parameter übergeben wird, enden.
(8 Punkte)
c) Erweitern Sie Ihre Funktion aus Aufgabenteil b), sodass sie für beliebige Dateinamen, d.h.
Dateinamen beliebiger Länge und bestehend aus beliebigen (insbesondere auch Sonderzeichen) Zeichen funktioniert.
(10 Punkte)
Hinweis: Eventuell können Sie nützliche Funktionen in der Bibliothek Data.List finden, die
Bibliothek kann mittels import Data.List in ihr Programm eingebunden werden1 .
1
Die Dokumentation dieser Bibliothek findet sich z.B. unter
http://www.haskell.org/ghc/docs/6.2.1/html/libraries/base/Data.List.html
1
Aufgabe 2 (30 Punkte)
Führen Sie die Musteranpassung für die folgenden Paare, bestehend aus einem Muster und einem
Ausdruck, per Hand durch, indem Sie sie mithilfe der rekursiven Definition aus dem Skript für
anpassen berechnen.
a)
Muster:
Ausdruck:
(x:(y:zs))
[’A’, ’B’, ’C’, ’D’]
(7 Punkte)
b)
Muster:
Ausdruck:
(x:((a:b):[]))
[[1,2],[2,3]]
(9 Punkte)
c)
Muster:
Ausdruck:
Strecke p1 (Punkt a2 b2)
Strecke (Punkt 2 4) 5
(7 Punkte)
d)
Muster:
Ausdruck:
Strecke p1 (Punkt a2 b2)
Strecke (Punkt 2 4) (Punkt 1 3)
(7 Punkte)
Beachten Sie, dass Sie Listenausdrücke zunächst in die interne Darstellung überführen müssen,
bevor Sie die Definition von anpassen anwenden können.
Aufgabe 3 (40 Punkte)
Geben Sie List Comprehensions in Haskell an, die folgende Listen darstellen:
a) Die unendliche Liste aller Zweierpotenzen 1, 2, 4, 8, 16 . . ..
(4 Punkte)
b) Die Liste aller Teiler einer gegebenen Zahl n, z.B. soll für n = 12 die Liste [1,2,3,4,6,12]
generiert werden.
(8 Punkte)
c) Die unendliche Liste aller perfekten Zahlen, für die Sie u.a. das Ergebnis von Aufgabenteil
b) verwenden sollten.
Eine Zahl m heißt perfekt, wenn die Summe aller ihrer Teiler, die ungleich m sind, wiederum
m ergibt. Beispielsweise ist 6 eine perfekte Zahl, denn 1 + 2 + 3 = 6.
(8 Punkte)
d) Die unendliche Liste aller Paare (a, b), wobei a eine ungerade Zahl und b eine gerade Zahl
ist.
(6 Punkte)
e) Die Liste mit den selben Elementen wie in Aufgabenteil d), jedoch sollen die Elemente
in einer fairen Reihenfolge generiert werden. Hierbei bedeutet fair: Jedes Element wird
in endlicher Zeit generiert, oder auch: Wenn xs die Liste der Paare ist, dann terminiert
(a,b) ‘elem‘ xs für alle a, b mit a ungerade, b gerade.
(14 Punkte)
2
Herunterladen