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. 8 Abgabe: Mittwoch 22. Dezember 2004 vor! der Vorlesung Aufgabe 1 (25 Punkte) a) Verwenden Sie die do-Notation, um ein Haskell-Programm zu schreiben, das – zunächst von der Standardeingabe einen Verzeichnispfad path einliest; – dann von der Standardeingabe eine Datei-Endung extension einliest; – schließlich alle Dateien, die mit extension enden und im Verzeichnis path liegen, auf der Standardausgabe ausdruckt. (15 Punkte) b) Verbessern Sie Ihr Programm aus Aufgabenteil a) derart, dass zunächst geprüft wird, ob der eingegebene Verzeichnispfad existiert, bevor das Verzeichnis gelesen wird. Existiert das Verzeichnis nicht, so soll eine Fehlermeldung auf der Standardausgabe ausgegeben, und der Pfad erneut von der Standardeingabe eingelesen werden. (10 Punkte) Hinweise: Zur Filterung der Dateinamen mit der richtigen Endung können Sie die Lösung zu Aufgabe 1 von Blatt 7 (die Funktion onlyWith) wiederverwenden. Die Bibliothek System.Directory stellt u.a. die IO-Funktionen getDirectoryContents und doesDirectoryExist zur Verfügung. Aufgabe 2 (25 Punkte) Implementieren Sie in Haskell eine rekursive Funktion toogle, die angewendet auf eine Liste [a1,1 , a1,2 , a1,3 , a2,1 , a2,2 , a2,3 , ..., an,1 , an,2 , an,3 ] jeweils drei aufeinanderfolgende Elemente der Liste derart vertauscht, dass sie als Ergebnis die Liste [a1,2 , a1,3 , a1,1 , a2,2 , a2,3 , a2,1 , ..., an,2 , an,3 , an,1 ] liefert. Benutzen Sie keine eingebauten oder vordefinieren Haskell-Funktionen für Ihre Lösung! Sollte die Funktion eine Liste mit ungleich 3n Elementen als Eingabe erhalten, so sollen die letzten ≤ 2 Elemente in der Ausgabe in umgekehrter Reihenfolge erscheinen. 1 Aufgabe 3 (20 Punkte) Die International Standard Book Number (ISBN) ist eine eindeutige zehnstellige Nummer zur Kennzeichnung von Büchern und Veröffentlichungen. Während die ersten 9 Ziffern, den Sprachraum, den Verlag und eine vom Verlag vergebene Titelnummer kodieren, ist die letzte Ziffer der ISBN eine Prüfziffer. Zur Ermittlung der Gültigkeit einer ISBN kann folgendes Verfahren verwendet werden: Multipliziere die erste Ziffer mit 10, die zweite mit 9 usw., schließlich addiere die Produkte. Das Ergebnis muss, falls es sich um eine gültige ISBN handelt, durch 11 teilbar sein. Beachte, dass die Prüfziffer auch X sein kann, welche die Zahl 10 repräsentiert. In Haskell sei eine ISBN in Form einer Liste von 10 Zahlen gegeben. Definieren Sie in Haskell eine Funktion, die prüft, ob die ISBN gültig ist. Benutzen Sie in Ihrer Lösung nur Standardfunktionen auf Listen, wie z.B. eine der beiden fold-Funktionen, und versuchen Sie ohne Rekursion auszukommen. Aufgabe 4 (10 Punkte) Implementieren Sie in Haskell ein Modul Wahrheitswert, das eine deutsche Übersetzung der Bibliotheksfunktionen von Data.Bool darstellt, d.h. Wahrheitswert exportiert Funktionen namens und, oder, nicht und andernfalls. Ihr Modul sollte folgende Eigenschaft besitzen: Wenn die Implementierung von Data.Bool verändert wird, werden diese Änderungen automatisch auch in Ihrem Modul übernommen. Aufgabe 5 (20 Punkte) Üben Sie die Benutzung des Python-Interpreters. Programmieren Sie anschließend in Python eine Funktion, die als Parameter eine Zahl x erhält und testet, ob die eingegebene Zahl eine perfekte Zahl ist. Verwenden Sie innerhalb der Funktionsdefinition eine while-Schleife, die über die potentiell möglichen Teiler von x iteriert. Hinweis: Der Rest einer ganzzahligen Division lässt sich in Python mit dem Operator % ermitteln. 2