Beruflich Dokumente
Kultur Dokumente
Februar 2019
Informatik 1
Einführung in die Programmierung
WS 2018
Prof. Dr. Peter Thiemann
Institut für Informatik
Albert-Ludwigs-Universität Freiburg
Name:
RZ-LOGIN:
(b) Wird der Rumpf eines Generators mit return beendet, so wird
(c) Iteratoren
generalisieren Generatoren.
implementieren das Iteratorprotokoll.
können an allen Stellen stehen, an denen ein iterierbares Objekt stehen kann
(z.B. for-Schleifen).
liefern ein iterierbares Objekt beim Aufruf von iter().
(d) Unterklassen
(e) Geben Sie die Knotenmarkierungen des folgenden Binärbaums in der Reihenfolge
einer In-order Traversierung an:
3 6
1 2 4 5
Antwort:
Info 1 Klausur WS 2018
p and or
p q q not
(a) Implementieren Sie die Methode Op.evaluate(v), welche für eine gegebene Va-
riablenbelegung v den repräsentierten Boolschen Ausdruck auswertet und den
resultierenden Wahrheitswert zurückgibt. Die Variablenbelegung v ist dabei ein
Dictionary, welches jeder in t vorkommenden Variablen entweder True oder
False zuordnet. Gehen Sie davon aus, dass jeder Baum einen wohlge-
formten boolschen Ausdruck repräsentiert, also ein NOT-Knoten immer
genau ein Kind hat, AND und OR-Knoten jeweils genau zwei Kinderkno-
ten haben und alle Blattknoten Propositionen sind. Beispiel:
class Formula:
pass
class Proposition(Formula):
def __init__(self, name):
self.name = name
class Op(Formula):
def __init__(self, name, children: list):
self.name = name
self.children = children
else:
raise Exception("Tree not well-formed")
Info 1 Klausur WS 2018
(a) Finden Sie die Fehler und tragen Sie, für jeden Fehler, die Zeile in welche der
Fehler im Programmcode auftritt, den Fehlertyp (Semantik-, Laufzeit- oder Syn-
taxfehler), sowie eine kurze Erläuterung, in die untenstehende Tabelle ein.
(b) Geben Sie, für jeden Semantik- oder Laufzeitfehler, einen geeigneten Testfall, be-
stehend aus Eingabeliste und erwartetem Rückgabewert, an. Die Testfälle sollten
im nicht-korrigierten Code zu einem Fehler des entsprechenden Typs führen.
Eingabeliste (ls) Erwarteter Rückgabewert
Info 1 Klausur WS 2018 Name:
Info 1 Klausur WS 2018
(a) Implementieren Sie eine iterative Version der folgenden endrekursiven Funktion:
(b) Ergänzen Sie die Generator-Funktion accumulate, welche einen Iterator erzeugt,
der die akkumulierten Summen der Elemente eines iterierbaren Objektes iterable
zurückgibt. Beispiel:
(c) Ergänzen Sie die Generator-Funktion cycle, welche einen Iterator erzeugt, der
Elemente aus einem iterierbaren Objekt zurückgibt und von jedem zurückgegebenem
Element eine Kopie speichert. Wenn das iterierbare Objekt erschöpft ist, werden
wiederholt die Elemente aus der gespeicherten Kopie zurückgegeben.
>>> hi = cycle('Hi')
>>> for v in range(5):
... print(next(hi))
...
H
i
H
i
H
Info 1 Klausur WS 2018 Name:
def accumulate(iterable):
# accumulate([1, 2, 3, 4]) --> 1 3 6 10
def cycle(iterable):
# cycle("Hi") --> H i H i H ...
Info 1 Klausur WS 2018
(a) Welche Ausgabe erhalten Sie in der Python-Shell bei Eingabe der folgenden Be-
fehle?
(b) Erstellen Sie, mit Hilfe einer List-Comprehension, eine Liste hs der ersten 100
Glieder der Harmonischen Folge. Die Harmonische Folge ist die mathematische
Zahlenfolge der Kehrwerte der positiven ganzen Zahlen, also die Folge
1 1 1 1
1, , , , , ...
2 3 4 5
>>> hs = [ ]
Info 1 Klausur WS 2018 Name:
(c) Schreiben Sie eine Funktion compose(f, g), welche zwei einstellige Funktionen
f(x: int) -> int und g(x: int) -> int als Argumente übergeben bekommt
und eine neue Funktion zurückgibt, welche die Hintereinanderausführung von f
und g implementiert, sodass für alle x ∈ N: compose(f, g)(x) == f(g(x)).
Beispiel:
(a) Welche Ausgabe erzeugt ein Brainfuck-Interpreter bei Ausführung der folgenden
Befehlssequenz?
+egg+++++[>++++++++++<-]>++++++.
(b) Schreiben Sie ein Brainfuck-Programm, welches den Wert einer gegebenen Zelle
negiert. Wir verstehen jeden Wert ungleich 0 als True und den Wert 0 als False.
Ist der Wert der aktuellen Zelle ungleich 0, so soll der Wert der rechten Nach-
barzelle auf 0 gesetzt werden, ist der Wert gleich 0, so soll die Nachbarzelle auf
einen Wert ungleich 0 gesetzt werden. Ihr Lösungsvorschlag muss weniger als 20
Zeichen lang sein.
Info 1 Klausur WS 2018 Name:
Cmd Effect
--- ------
+ Increases element under pointer
- Decrases element under pointer
> Increases pointer
< Decreases pointer
[ Starts loop, flag under pointer
] Indicates end of loop
. Outputs ASCII code under pointer
, Reads char and stores ASCII under ptr
.. .. .. .. .. .. .. ..
. . . . . . . .