1. Aufgabe - Codequalität und Testen 6P Java-Programm zur collatz-Folge ist gegeben: collatz(List values){} a) Identifizeire aus drei gegebenen Kontrollflussgraphen denjenigen, der das Programm beschreibt. 1P b) Berechne die zyklomatische Komplexität des Programms. 1P c) Bestimme eine Menge an Testfällen mit minimaler Anzahl, um vollständige Zweigüberdeckung für das gegebene Programm zu erreichen. Die Testfälle müssen in Form von Listen angegeben werden. 2P d) Zwei Aussagen zur Codequalität, kreuze jeweils an, ob die Aussage wahr oder falsch ist. 2P 2. Aufgabe - Haskell-Funktionen 7P magic(int num) in Java gegeben. Außerdem eine Tabelle mit verschiedenen Werten für Ein- und Ausgabeparameter: num | result ------------ 0 | 0 1 | 0 2 | 1 3 | 3 = 1+2 4 | 6 = 1+2+3 5 | 10 = 1+2+3+4 a) Gib Haskell-Signatur einer Funktion magic mit den selben Ein- und Ausgabeparametern an. 1P b) Implementiere magic mit Rekursion in Haskell. 1,5P c) Implementiere magicT mit Tail Recursion in Haskell. 1,5P d) Implementiere magicL mit Listenfunktionalen, ohne Rekursion zu verwenden. 2P e) Gegeben sind f::Int->Bool und g::Int->Int, implementiere komp(x)=f(g(x)) mit Komposition und Partial Application. 1P 3. Aufgabe - Haskell-Daten 9P a) Was für ein Datentyp ist das? Kreuze an! (Mehrere Kreuze möglich, Punkte gibt es nur, wenn alle richtig sind.) 1P b) Implementiere task::Task entsprechend der Abbildung. 1P c) Instanziiere die Typklasse Eq, sodass zwei Tasks anhand ihrer ID miteinander verglichen werden können. 1P d) ... collectID ... e) Liste von ID-Tupeln angeben. 4. Aufgabe - Logische Programmierung 8P Baumstruktur und verschiedene Prädikate gegeben. a) Tabelle mit 4 Queries. Gib an, ob das Ergebnis True/False/Fehler ergibt. b) Implementiere die Funktion child(X,Y), welche überprüft, ob Y ein Kind von X ist. c) Implementiere die Funktion root(X), welche überprüft, ob X die Wurzel des Baumes ist. d) ... e) ...