Informatik A – Nachklausur WS 2009/10 12.04.2010 Name: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Matrikelnummer: . . . . . . . . . . . . . . . . . . Tutor: . . . . . . . . . . . . . . . . . . Bitte Zutreffendes ankreuzen: Hauptfach Bioinformatik Teilnahme an Informatik A im Campus–Management–System erfasst Hauptfach Physik Ich bin einverstanden, dass mein Klausurergebnis zusammen mit meiner Matrikelnummer auf einer universitätsinternen Webseite bekannt gegeben wird: Punkte Ja Nein Aufgabe 1 Aufgabe 2 Aufgabe 3 Aufgabe 4 Aufgabe 5 /6 /6 /6+3 /5 /9 Gesamt /32+3 Hinweise: 1) Falls die Lösung einer Aufgaben nicht auf den Aufgabenzettel und die benachbarte Rückseite passt, kann auch ein Zusatzblatt verwendet werden - in diesem Fall bitte unbedingt einen entsprechenden Vermerk auf dem Aufgabenblatt machen. Verwenden Sie Tinte oder Kugelschreiber (keinen Bleistift!) in den Farben Blau oder Schwarz - Rot ist für die Korrektur reserviert. 3) Achten Sie auf eine ausreichende Kommentierung Ihrer Lösungswege. Zur Begründung können alle in der Vorlesung vorgestellten Sätze und Fakten verwendet werden. 4) Einzig erlaubtes Hilfsmittel ist eine (einseitig) hangeschriebene A4Seite, mit selbst ausgewählten Formeln, Definitionen und Fakten 5) Da drei Punkte (von 35 erreichbaren Punkten) auf Zusatzfragen vergeben werden, reichen zum Bestehen 16 Punkte. Aufgabe 1: Logik 3 + 3 Punkte a) Bestimmen Sie die kanonische KNF für den Term s = (x ∨ y) → (x ⊕ z) und vereinfachen Sie diese KNF so weit wie möglich. b) Formen Sie den folgenden Booleschen Term t mit den Gesetzen der Booleschen Algebra äquivalent um und vereinfachen Sie ihn dabei soweit wie möglich. Begründen Sie die Umformungen durch Benennung der verwendeten Gesetze. t = (x ∧ (y ∨ z)) ∧ ((x ∨ ¬y) ∧ ¬y ∨ z) . Aufgabe 2: Induktion auf Listen 6 Punkte Der Listen-Operator ++ ist wie folgt definiert: (++) :: [a] -> [a] -> [a] [ ] ++ ys = ys -- (1) (x:xs) ++ ys = x:(xs++ys) -- (2) Geben Sie Definition für die Listenfunktion map :: (a -> b) -> [a] -> [b] an und nummerieren Sie die Zeilen mit -- (3) und -- (4). Beweisen Sie mit struktureller Induktion, dass für beliebige Funktionen f :: a -> b und Listen xs, ys :: [a] die folgende Identität gilt: map f (xs ++ ys) = map f xs ++ map f ys . Aufgabe 3: Bäume mit Haskell 3 + 3 Punkte + 3 Zusatzpunkte a) Definieren Sie einen algebraischen Datentyp Tree zur Darstellung von echten Binärbäumen, in denen alle Knoten (innere Knoten und Blätter) mit Int-Werten markiert sind. Implementieren Sie den Datentyp Tree als Exemplar der Klasse Eq, wobei t1 und t2 als gleich anzusehen sind, wenn die zu Grunde liegenden Binärbäume gleich sind und die Summe aller Markierungen in t1 bzw. in t2 gleich sind. Überlegen Sie selbst, welche Hilfsfunktionen benötigt werden. b) Implementieren Sie eine Funktion labelList :: Tree -> [Int] welche die Liste der Markierungen bei der Inorder-Traversierung eines Baums erzeugt und eine Funktion sumOfLabelProducts :: Tree -> Int mit der die Produkte der Markierungen auf allen Pfaden von der Wurzel zu Blättern des Baums gebildet und die Summe dieser Produkte berechnet werden sollen. Auch die zweite Funktion ist sehr einfach, wenn man vorher etwas darüber nachdenkt! c) Zusatzaufgabe: Implementieren Sie eine Funktion numberOfLabels :: Tree -> Int mit der die Anzahl der verschiedenen Markierungen in einem Baum gezählt wird (gleiche Markierungen werden nur einfach gezählt). . Aufgabe 4: Codierungen 5 Punkte {0, 1}∗ , Berechnen Sie eine optimale Codierung ϕ : {a, b, c, d, e, f } −→ um die Darstellungslänge des folgenden Strings s zu minimieren und notieren Sie das Ergebnis in Form einer Codetabelle: s = abacebeddafabadebae Welche Länge hat die Darstellung von s unter dieser Codierung? (die Darstellung selbst muss dazu nicht aufgeschrieben werden) . Aufgabe 5: Vermischtes 2 + 1 + 2 + 4 Punkte a) Welche Werte nehmen die folgenden Haskell-Ausdrücke an? length [(x,y)| x<-[0..20], y<-[0..8], mod (x+y)3 == 0] foldr max 0 [x+y | x<-[0..20], y<-[0..30-x]] Wert: Wert: b) Für welche Eingabestrings s ∈ {0, 1}∗ gibt der unten abgebildete Mealy-Automat am Ende eine 1 aus? 0|0 0|0 q0 1|0 q 1 1|1 q2 0|1 1|1 Der Automat gibt nach einer Eingabefolge s genau dann eine 1 aus, wenn s ...... c) Entwerfen Sie einen Mealy-Automaten mit Ein- und Ausgabemenge {0, 1}, der nach einer Eingabefolge s ∈ {0, 1}∗ genau dann eine 1 ausgibt, wenn s mindestens die Länge 3 hat und mit 010 endet. d) Welche der folgenden logischen Signaturen sind funktional vollständig? Begründen Sie Ihre Antworten! Σ1 = { → , ↔ } Σ2 = { → , ⊕ }