Praktische Informatik 1 Aufgabenblatt Nr. 8 Aufgabe 1 (25 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. 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
Herunterladen