Übungsblatt 13

Werbung
Fachbereich Informatik & Mathematik (12)
Professur ABVS
Prof. Dr. O. Drobnik
Oliver Horvath
Robert-Meyer-Str. 11-15
60054 Frankfurt am Main
Tel.: +49 (0)69798-28373
Fax: +49 (0)69798-23340
E-Mail: [email protected]
Vorlesung PRG-1, WS05/06 – 13. Übung
Ausgabe: 27.01.2006
Abgabe: 08.02.2006
Aufgabe 13.1:
(5 Punkte)
Schreiben Sie ein Programm, welchem Sie Tag, Monat und Jahr als Dezimalzahlen übergeben und dass
Ihnen den Wochentag dieses Datums berechnet. Folgende Informationen sind zur Lösung hilfreich: Der
1.1.1900 war ein Montag, ein Schaltjahr ist ein Jahr, dessen Jahreszahl durch 4 teilbar ist, aber nicht
durch 100. Wenn das Jahr aber durch 400 teilbar ist, ist es doch ein Schaltjahr. Datumsangaben vor dem
1.1.1900 und nach dem 31.12.2099, sowie ungültige Datumsangaben sollten von ihrem Programm
zurückgewiesen werden.
Aufgabe 13.2:
(5 Punkte)
a) Schreiben Sie eine Funktion linksroll(liste,x), die eine gegebene Liste liste um x
Positionen nach links rollt. Dabei sollen Listenelemente, die auf der linken Seite der Liste
rausgerollt werden, rechts wieder eingefügt werden. Zum Beispiel würde der Aufruf
linksroll(liste,3) mit liste=[0,1,2,3,4] die Liste in
liste=[3,4,0,1,2]überführen.
b) Schreiben Sie eine analoge Funktion rechtsroll(liste,x) zum Rechtsrollen einer Liste.
Versuchen Sie eine möglichst einfache Lösung zu finden, indem Sie linksroll verwenden.
Aufgabe 13.3:
(5 Punkte)
Ein Baum ist eine Datenstruktur, die aus Knoten besteht, welche Nachfolgerknoten besitzen können, z.B.:
Bäume lassen sich rekursiv definieren; ein Baum ist:



entweder leer,
oder ein Knoten mit Zweigen, die zu weiteren Bäumen führen,
jeder von der Wurzel verschiedene Knoten eines Baumes ist durch genau einen Pfad mit der
Wurzel verbunden.
a) Speichern Sie den oben dargestellten Baum in einem Dictionary in folgender Weise:
{Wurzel : Liste von Kindern der Wurzel, Kind1 : Liste der Kinder von Kind1, ...}
Knoten, welche keine Kinder besitzen, sollen dabei in ihrem Dictionary als Schlüssel mit einer
leeren Liste als Wert gespeichert werden.
b) Schreiben Sie eine Python-Funktion KnotenHinzufuegen(baum,vk,kn), welche dem Dictionary
baum im gespeicherten Knoten vk ein Kind mit Namen kn hinzufügt
(Bemerkung: Knoten können mehr als nur zwei Kinder besitzen!).
c) Schreiben Sie eine Python-Funktion Weg(baum,kn), welche die Namen der Knoten, die auf dem
Pfad von der Wurzel zu kn liegen als Liste ausgibt. Wenn b das Dictionary ist, welches den oben
dargestellten Beispielbaum enthält, führt Weg(b,'D') zur Ausgabe ['A','B','D'].
Aufgabe 13.4:
(5 Punkte)
a) Schreiben Sie zwei Python-Funktionen iterativ(n) und rekursiv(n), welche die Summe der
ungeraden natürlichen Zahlen im Bereich 1 bis n > 1 (beliebig) iterativ, bzw. rekursiv berechnen.
b) Zeigen Sie die Korrektheit des iterativen Algorithmus formal nach dem Hoare-Ansatz.
Herunterladen