19504 V Algorithmen und Programmieren I
|
Rojas
|
Hinweis: Verwenden Sie keine Hilfsmittel (Bücher, Skripte, Vorlesungsmitschriften, Taschenrechner). Sie haben 120 Minuten Zeit. Fangen Sie mit den einfachsten Aufgaben an. Geben Sie zu allen Funktionen die Signatur an und kommentieren Sie die Funktionen ausreichend!
Schreiben Sie in Haskell eine Quicksort-Variante, die eine Liste von Listen nach der Länge der Teillisten sortiert. Beispiel:
qs [[1,2,3],[1],[1,2]] = [[1],[1,2],[1,2,3]]
Wir möchten mit Daten vom Typ Nom arbeiten, wobei wir auch PlusUnendlich, MinusUnendlich und Undefiniert verwenden wollen. Definieren Sie einen passenden algebraischen Datentyp und die Funktionen add, sub, mul und div, die mit diesem Datentyp operieren. Für alle n>0 soll 0/0 undefiniert, n/0 unendlich und -n/0 negativ unendlich sein. (Es gibt noch weitere Fälle, in denen das Ergebnis undefiniert sein kann.)
Definieren Sie die Multiplikation Natürlicher Zahlen (inklusive Null) als primitiv rekursive Funktion. Verwenden Sie nur die Grundfunktionen der primitiv rekursiven Funktionen.
Beweisen Sie durch Induktion take n l ++ drop n l = l, wobei l auch eine leere Liste sein kann. Die Funktionen sind wie folgt definiert:
[] ++ xs | = xs | (++.1) |
(a:as) ++ xs | = a:(as++xs) | (++.2) |
drop 0 as | = as | (drop.1) |
drop (n+1) [] | = [] | (drop.2) |
drop (n+1) (a:as) | = drop n as | (drop.3) |
take 0 as | = [] | (take.1) |
take (n+1) [] | = [] | (take.2) |
take (n+1) (a:as) | = a:(take n as) | (take.3) |
Definieren Sie eine Turing-Maschine, die eine Binäre Zahl in eine Zahl zur Basis 4 überführt. Die Initialisierung des Bandes ist beliebig (unvorhersehbar). Beispiel:
...|B|0|1|1|1|A|... |
^ |
...|C|1|3|B|0|1|1|1|A|... |
^ |
Definieren Sie in Haskell einen abstrakten Datentyp für Binärbäume von Zahlen.