30.12.2013 Aufrufe

Blatt 10 - Institut für Informatik - Universität Paderborn

Blatt 10 - Institut für Informatik - Universität Paderborn

Blatt 10 - Institut für Informatik - Universität Paderborn

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.

<strong>Universität</strong> <strong>Paderborn</strong><br />

<strong>Institut</strong> <strong>für</strong> <strong>Informatik</strong><br />

H. Kleine Büning<br />

Abgabe: 07. Januar 2013, 11:15h<br />

Modellierung – WS 2012/2013<br />

Hausaufgaben<br />

<strong>Blatt</strong> <strong>10</strong><br />

Organisatorisches: Die Lösungen der Hausaufgaben sind in die Kästen im D3-Flur einzuwerfen.<br />

Bilden Sie bitte innerhalb ihrer Übungsgruppe Gruppen von 2-3 Personen zur Lösung der Aufgaben.<br />

Die Lösung muss die Namen und Matrikelnummern derjenigen enthalten, die die Aufgaben<br />

gelöst haben sowie die Übungsgruppennummer.<br />

Aufgabe 1: Substitution (4 Punkte)<br />

Fassen Sie folgende Substitutionen zusammen.<br />

(a) [x/y][v/w]<br />

(b) [x/y][y/z]<br />

(c) [y/z][x/y]<br />

(d) [y/z + x][x/y][y/3]<br />

Aufgabe 2: Term-Notationen & Kantorowitsch-Bäume (9 Punkte)<br />

Im Folgenden sind Terme in der Notation Infix gegeben. Erstellen Sie <strong>für</strong> jeden der Terme den<br />

zugehörigen Kantorowitsch-Baum und geben Sie den Term in den beiden fehlenden Notationen<br />

Präfix und Postfix an. Hinweis: Bei gleichstark bindenden Operatoren, hier + und -, gehen wir von<br />

einer Linksklammerung aus.<br />

(a) x + (6 ∗ (y − 5)) − (h − 4)<br />

(b) ((a ∗ b) − (c − d)) + ((5 + x) ∗ (y − c))<br />

(c) (((a + b)/5) − (c + 1)) ∗ 3<br />

Aufgabe 3: Signatur ergänzen (6 Punkte)<br />

Auf Zeichenketten sind diverse Operationen definiert. Einige davon sind:<br />

(a) emptyString: eine 0-stellige Operation, die eine leere Zeichenkette erzeugt.<br />

(b) addChar: liefert die Konkatenation aus einer Zeichenkette und einem Zeichen.<br />

(c) length: gibt die Länge der Zeichenkette an.<br />

(d) toLowerCase: wandelt alle Großbuchstaben einer Zeichenkette in Kleinbuchstaben um.<br />

(e) isSubstring: überprüft, ob eine Zeichenkette in einer anderen Zeichenkette enthalten ist.<br />

1 2012


(f) concat: verkettet zwei Zeichenketten.<br />

Sei die Signatur Σ = (S, F) mit<br />

S = { ZEICHENKETTE, ZEICHEN, NAT, BOOL }<br />

gegeben. Geben Sie die Menge F bezüglich den oben aufgelisteten Operationen an.<br />

Aufgabe 4: Algebren (<strong>10</strong> Punkte)<br />

Ein Binärbaum ist ein spezieller Baum, dessen Knoten einen Ausgangsgrad von höchstens 2<br />

haben.<br />

Die abstrakte Algebra Binärbaum mit der Signatur Σ = (S, F) beschreibt einen solchen Baum:<br />

S = { BinTree, BOOL, Element }<br />

F = { create : → BinTree, (F 1 )<br />

node : BinTree × Element × BinTree → BinTree, (F 2 )<br />

le f t : BinTree → BinTree, (F 3 )<br />

right : BinTree → BinTree, (F 4 )<br />

value : BinTree → Element, (F 5 )<br />

empty : BinTree → BOOL } (F 6 )<br />

Die Sorte BinTree stellt einen Binärbaum dar, die Sorte Element beschreibt den Inhalt eines<br />

Baumknotens. Für die Sorte BOOL sind Konstanten true und false definiert. create bezeichnet<br />

eine 0 - stellige Operation und ist damit eine Konstante. Sie steht <strong>für</strong> den leeren Baum. Die Operation<br />

node erzeugt einen neuen Wurzelknoten und verbindet zwei existierende Bäume als linken<br />

und rechten Teilbaum zu einem neuen Baum. Die Operationen left bzw. right liefern den linken<br />

bzw. rechten Teilbaum eines Baums. Die Operation value liefert den Inhalt des Wurzelknotens<br />

eines Baumes. Die Operation empty zeigt an, ob der Baum leer ist oder nicht.<br />

Für die Menge der Axiome Q seien l, r Terme der Sorte BinTree und v ein Term der Sorte Element.<br />

Q = {<br />

}<br />

Q 1 : empty(create) → true,<br />

Q 2 : empty(node(l, v, r)) → f alse,<br />

Q 3 : le f t(node(l, v, r)) → l,<br />

Q 4 : right(node(l, v, r)) → r,<br />

Q 5 : value(node(l, v, r)) → v<br />

2 2012


(a) Geben Sie zur oben angegebenen Signatur je einen korrekten Term an, der die Schachtelungstiefe<br />

0, 1, 2, 3 hat.<br />

Hinweis<br />

• Terme der Schachtelungstiefe 0: Variablen und Konstanten.<br />

• Ein Term der Schachtelungstiefe i: Anwendung einer Operation auf Unterterme, von denen<br />

mindestens einer die Schachtelungstiefe i − 1 hat und keiner eine größere Schachtelungstiefe.<br />

(b) Formen Sie die folgenden Terme mit Hilfe der Axiome so um, dass Sie als Ergebnis x, y, z, true<br />

oder f alse erhalten. Notieren Sie bei jeder Umformung das benutzte Axiom.<br />

(b1) empty(le f t(right(node(create, z, node(right(node(create, y, create)), x, create)))))<br />

(b2) value(right(node(create, x, node(create, y, create))))<br />

(c) Erstellen Sie zu dem in (b1) angegeben Term einen Kantorowitsch-Baum. Notieren Sie in<br />

jedem Knoten zusätzlich die entsprechende Sorte.<br />

(d) Erweitern Sie die angegebene Algebra um eine Operation count, die die Anzahl der Blätter<br />

eines Baum angibt. Ergänzen Sie die nötigen Sorten, die Operationen mit ihren Signaturen<br />

und die Axiome, in den Mengen S , F und Q. (Hinweis: Verwenden Sie eine Sorte Nat0 <strong>für</strong><br />

die die Konstanten zero und one definiert seien.)<br />

• Nehmen Sie an, dass <strong>für</strong> die Sorte Nat0 die Operation add : Nat0 × Nat0 → Nat0<br />

gegeben ist.<br />

• add(x, y) gibt die Summe der Zahlen x und y zurück.<br />

• Für die Sorte Nat0 seien die Konstanten zero und one definiert.<br />

3 2012

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!