11.08.2013 Aufrufe

Informatik I --- 3 pdfauthor

Informatik I --- 3 pdfauthor

Informatik I --- 3 pdfauthor

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!