Blatt 3

Werbung
Institut fur Informatik
der Universitat Munchen
Dr. Jan Johannsen
Jan Homann
WS 2007/08
6. November 2007

Ubungen
zum Repetitorium Informatik 1
Blatt 3
Aufgabe H-4 (4 Punkte): Schreiben Sie eine SML-Funktion digit: string -> int,
die bei der Eingabe einer Zier (also einer der Zeichenketten "0", "1", "2", "3", "4", "5",
"6", "7", "8" oder "9") die entsprechende Zier als ganze Zahl (also als int) zur
uckgibt. Bei der Eingabe einer anderen Zeichenkette soll digit die Zahl -1 ausgeben. (z.B.
digit("8") = 8 und digit("SML ist toll") = -1)
Verwenden Sie keine Funktionen aus der SML-Bibliothek. Geben Sie Ihre Losung als
Textdatei mit dem Namen h-4.sml ab.
Aufgabe H-5 (6 Punkte):
(a) Schreiben Sie eine SML-Funktion flatten: (int * int * int) list -> int list,
die eine Liste, die aus Tripeln von ganzen Zahlen besteht, in eine Liste von ganzen Zahlen umwandelt, die die gleichen Zahlen in der gleichen Reihenfolge wie die
Eingabeliste enthalt. Zum Beispiel ist flatten([(1,2,3),(4,5,6),(6,6,6)]) =
[1,2,3,4,5,6,6,6,6].
(b) Schreiben Sie eine SML-Funktion merge: int list * int list -> int list, die
aus zwei Listen eine Liste erstellt, die alle Elemente der Eingabelisten enthalt und
in der die Elemente der Eingabelisten abwechselnd vorkommen, bis alle Elemente der
kurzeren Liste aufgebraucht sind. Zum Beispiel soll merge([3,3,3,3,3,3],[2,2,2])
= [3,2,3,2,3,2,3,3,3] gelten. Das erste Element soll, wie im Beispiel, aus der ersten Liste kommen.
(c) Schreiben Sie eine SML-Funktion demerge: int list -> int list * int list,
die eine Liste von ganzen Zahlen in zwei Listen zerlegt, so dass die erste alle negativen
Elemente der Eingabeliste und die zweite alle positiven Element der Eingabeliste
enthalt. Zum Beispiel soll demerge([1,2,-3,4,-5,-6]) = ([1,2,4],[-3,-5,-6])
gelten.
Geben Sie Ihre Losung als Textdatei mit dem Namen h-5.sml ab.
Aufgabe H-6 (6 Punkte):
(a) Finden Sie mit Hilfe des SML-Interpreters heraus, was die vordenierten Funktionen
size: string -> int, ^ : string * string -> string, substring: string *
int * int -> string und Int.toString: int -> string berechnen. Beschrei-
ben Sie jede der Funktionen in wenigen Worten mit einem
) am Anfang Ihrer Abgabedatei.
Kommentar ( mit (*...*)
(b) Schreiben Sie eine SML-Funktion dectobin: int -> string die eine Zahl in Dezimaldarstellung, in Binardarstellung ausgibt. Zum Beispiel soll dectobin(11)="1011"
und dectobin(45)="101101" gelten. Verwenden Sie die Funktionen aus Teil (a).
(c) Schreiben Sie eine SML-Funktion bintodec: string -> int die eine Zahl in Binardarstellung, in Dezimaldarstellung ausgibt. Beispielsweise soll bintodec("1101")=13 und
bintodec("110011")=51 gelten. Gehen Sie davon aus, dass die Funktion mit Zeichenketten aufgerufen wird, die nur die Zeichen 0 und 1 enthalten und aus mindestens
einem Zeichen bestehen. Sie konnen auf die Funktionen aus Teil (a) zuruckgreifen.
Geben Sie Ihre Losung als Textdatei mit dem Namen h-6.sml ab.
Aufgabe P-8: Schreiben Sie eine SML-Funktion f: real -> int, die f
ur die Eingabe
n
r ≥ 1 die Funktion f(r) = max{ n | n ∈ N, 2 ≤ r } berechnet.
Hinweis: Denieren Sie Hilfsfunktionen.
Aufgabe P-9:
(a) Implementieren Sie eine Funktion perfect: int -> bool in SML, die entscheidet
ob eine Zahl vollkommen ist. (Negative Zahlen sind nicht vollkommen.)
(b) Implementieren Sie eine Funktion perflist: int -> int list, die alle vollkommenen Zahlen ausgibt die kleiner sind als die Eingabe. Testen Sie Ihr Programm mit
groen Zahlen.
(c) Betrachten Sie folgende alternative Implementierung von perflist, die Sie in der
Datei 3-1.sml nden.
fun exp 0 = 1
|
exp e = 2 * exp(e-1);
fun cand n = exp(n-1)*(exp(n)-1);
fun pl(n,t) = if (cand n) > t then []
else if perfect(cand n) then (cand n)::pl(n+1,t)
else pl(n+1,t);
fun perflist’ n = if n<0 then []
else pl(1,n);
Korrektheit
Untersuchen Sie die Funktion perflist’ empirisch im Hinblick auf
und
. Was fallt Ihnen im Vergleich mit Ihrer Losung auf? Wurden Sie die
Funktion perflist’ an einen Kunden ausliefern?
Ezienz
Abgabe der Hausaufgaben u
ber UniWorx bis spatestens Dienstag, 13.11.2007, 14
Uhr. Besprechung am Dienstag, 13.11.2007.
Herunterladen