Informatik I --- 3 pdfauthor
Informatik I --- 3 pdfauthor
Informatik I --- 3 pdfauthor
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Prof. Klaeren, M. Gasbichler, E. Knauel Wintersemester 2004/2005<br />
<strong>Informatik</strong> I<br />
http://www-pu.informatik.uni-tuebingen.de/info-i-0405/<br />
Blatt 3 ( ” Testatblatt“)<br />
Abgabe: 18.11.2004<br />
Dieses Übungsblatt ist das erste Testatblatt. Die Aufgaben sollen diesmal nicht im Team, sondern<br />
einzeln bearbeitet werden. Die Lösungen sind am Donnerstag, den 18.11.2004, in schriftlicher Form<br />
in der Vorlesung abzugeben. Zusätzlich musst du die Lösungen aller Aufgaben deinem jeweiligen<br />
Tutor in einem Einzelgespräch vorführen. Den Termin für dieses Testat solltest du mit deinem<br />
Tutor absprechen. Bei diesem, wie auch bei allen anderen Übungsblättern solltest du dich, wenn<br />
sich Fragen zu den Aufgaben ergeben, an deinen Tutor wenden!<br />
1. Die relevanten Eigenschaften eines Tigers sind<br />
• die Anzahl der Zähne,<br />
• die Länge der Krallen in Zentimeter,<br />
• der Name der Person, die zuletzt von diesem Tiger gefressen wurde (möglicherweise<br />
’niemand) und<br />
• die Anzahl der Streifen auf dem Fell.<br />
Definiere ein Record zur Repräsentation von Tigern! Vergiss dabei nicht, auch die zugehörige<br />
Datendefinition anzugeben. Schreibe außerdem eine Funktion, die einen Tiger in einen noch<br />
gefährlicheren Tiger verwandelt! Verwende die Konstruktionsanleitung aus der Vorlesung!<br />
2. Heiner Hacker sieht partout nicht ein, warum if eine Spezialform sein sollte. Er fragt sich,<br />
warum man if nicht als eine normale Prozedur implementieren kann. Um das rauszufinden,<br />
wickelt Heiner if in eine Prozedur ein. Das Ergebnis sieht so aus:<br />
(define heiner-if<br />
(lambda (test then-clause else-clause)<br />
(if test then-clause else-clause)))<br />
Zu Heiners großer Begeisterung funktioniert heiner-if anscheinend genauso wie das eingebaute<br />
if:<br />
> (heiner-if #t (* 6 7) 0)<br />
42<br />
> (heiner-if #f 43 23)<br />
23<br />
Heiners Freundin Eva Lu Ator ist skeptisch und meint heiner-if verhielte sich anders als<br />
das eingebaute if. Wer von den beiden hat Recht? Begründe deine Entscheidung! Falls Eva<br />
Recht hat: Finde ein Programm, an dem sich der Unterschied beobachten läßt!<br />
3. Sei τ : X → TΣ(X) eine Variablenbelegung und ˆτ der davon erzeugte Homomorphismus (ˆτ<br />
heißt auch Substitution). Ein Term t einer Termalgebra passt zu einen Term s, wenn es eine<br />
Substitution ˆσ mit ˆσ(s) = t gibt.<br />
Beispiel: Für a, b, c, d ∈ Σ (0) , f, g, h ∈ Σ (2) und x, y ∈ X passt ein Term f(a, g(x, y)) zu dem<br />
Term f(a, g(h(b, c), h(c, d))) mittels der Substitution x ↦→ h(b, c), y ↦→ h(c, d).<br />
Beweise, dass passt zu“ eine reflexive und transitive Relation ist. Beweise außerdem, dass<br />
”<br />
” passt zu“ nicht antisymmetrisch ist.<br />
1
4. Definiere ein Record, um quadratische Funktionen der Form f(x) = ax 2 + bx + c zu repräsentieren!<br />
Vergiss dabei nicht, auch die zugehörige Datendefinition anzugeben. Schreibe<br />
außerdem die folgenden Funktionen, die auf diesen Records arbeiten:<br />
(a) Eine Funktion, die die quadratische Funktion für einen Wert x auswertet.<br />
(b) Zwei Funktionen, die die Nullstellen der quadratischen Funktion bestimmen. Gehe für<br />
diese Teilaufgabe davon aus, dass die quadratische Funktion immer über zwei reelle<br />
Nullstellen verfügt. Hinweis: Die eingebaute Funktion sqrt berechnet den positiven<br />
reellen Teil einer Quadratwurzel einer Zahl.<br />
(c) Eine Funktion zum Addieren von quadratischen Funktionen.<br />
Verwende die Konstruktionsanleitungen aus der Vorlesung!<br />
5. Betrachte den folgenden Scheme-Ausdruck (+ 3 (* (- 3 4) (+ 1 2))) als Term über dem<br />
Operationsalphabet (Ω, σ) mit<br />
Schreibe den Term<br />
(a) in Infix-Schreibweise,<br />
(b) in Präfix-Schreibweise,<br />
(c) in Postfix-Schreibweise, und<br />
(d) als Baum.<br />
auf.<br />
Ω (0) = {1, 2, 3, 4}<br />
Ω (2) = {+, −, ∗}<br />
6. Definiere ein Record zur Repräsentation von Uhrzeiten und gib die zugehörige Datendefinition<br />
an! Programmiere außerdem die folgenden Funktionen für Uhrzeiten:<br />
(a) Eine Funktion, die eine in Sekunden seit Mitternacht gegebene Zeitspanne in eine Uhrzeit<br />
umrechnet.<br />
(b) Eine Funktion, die eine Uhrzeit in die Anzahl der seit Mitternacht vergangener Sekunden<br />
umrechnet.<br />
Zur Lösung der Aufgabe brauchst du die eingebauten Funktionen quotient, um eine ganzzahlige<br />
Division durchzuführen und remainder, um den Rest einer ganzzahligen Division zu<br />
bestimmen. Verwende die Konstruktionsanleitung aus der Vorlesung!<br />
2