METHODISCHES PROGRAMMIEREN

Werbung
FA C H H O C H S C H U L E
F Ü R
D I E
W I R T S C H A F T
F H D W,
H A N N O V E R
METHODISCHES PROGRAMMIEREN
NACHKLAUSUR
Studiengang: Informatik/Wirtschaftsinformatik
Studienquartal: I. Theoriequartal
Prüfungsumfang: Skript und Aufgaben aus dem Übungsbetrieb.
Dozent: Löwe
Termin: 20. Februar 2012
Dauer: 120 Minuten
40 Punkte sind zu erreichen: Wissen 16, Anwendung 16, Transfer 8 Punkte. Bestanden ab 16 Punkte.
TEIL I: WISSEN (40 MINUTEN)
Aufgabe 1 (1 Punkt): Warum sollen die Testfälle zu einer Operation vor der Methode erstellt werden?
Aufgabe 2 (2 Punkte): Geben Sie drei Gründe dafür an, dass man die Methode zu einer Operation verändert, ohne die Operation selbst (Name, Parameter, Rückgabetyp und Kommentar) zu verändern!
Aufgabe 3 (3 Punkte): Warum sollen Methoden keine Literale (z. B. 55 oder “Ausgabe:“) enthalten? Oder
positiv ausgedrückt: Warum sollen für alle Literale Konstanten deklariert werden? (Nennen Sie mindestens
zwei Gründe!) Was halten Sie von folgender Regel: „Für dasselbe Literal darf es im gesamten Programm
höchstens eine Konstantendeklaration geben“? Begründen Sie Ihre Antwort!
Aufgabe 4 (2 Punkte): Warum ist der Kommentar zu folgender Operation (mit Methode) nicht in Ordnung?
op(x:Card, y:Card --> 1):Card [* Liefert die Fakultät von <x>. *]
::= x.=(0).?(y, op(x --> x.-C-, y --> y.*(x)));
Wie muss der Kommentar richtig lauten?
Aufgabe 5 (2 Punkte): Schreiben sie einen aussagekräftigen Funktionskommentar für die Operation m
(Kommentar für p und q siehe Transferteil!):
m(x:Card):Card ::= x.=(0).?(0,x.-C-.p);
---p(x:Card):Card ::= x.=(0).?(1,x.-C-.q);
---q(x:Card):Card ::= x.=(0).?(2,x.-C-.m);
Aufgabe 6 (2 Punkte): Die Gesetze von De-Morgan gelten für das Zusammenspiel der Negation (!) mit
striktem Und (&) und Oder (|):
(p.&(q)).! == p.!.|(q.!) und (p.|(q)).! == p.!.&(q.!).
Gelten die Gesetze auch für „lazy“-Und (&&) bzw. „lazy“-Oder (||)? Begründen Sie Ihre Antwort!
Aufgabe 7 (2 Punkte): Sind die in Lomf eingebauten Projektionen aus jedem Produkt strikt? Begründen Sie
Ihre Antwort! (Hinweis: Sei c(p1:T1,...pn:Tn):C ein Produkt, dann gilt für alle 1 ≤ i ≤ n:
pi(c(x1,...xn)=xi).
Aufgabe 8 (2 Punkte): Es gibt keine Methode für folgende Operation!
t?(p:String):Bool
[* Liefert <true> wenn <p> ein korrekter Lomf-Text für ein Programm ist, das
** genau einen String-Parameter erwartet und mit sich selbst als Eingabe
** terminiert. Liefert false sonst. *]
::= TODO Implement function t? !!!;
Warum nicht? Argumentieren Sie stichhaltig!
TEIL II: ANWENDUNG (50 MINUTEN)
Im Anwendungsteil bitte alle Methoden in LOMF-Syntax angeben! (Der Korrektor verzeiht allerdings kleinere Syntaxfehler!) Entwickeln Sie nach allen Regeln der Kunst! Benutzen Sie nur die Lomf-Basisfunktionen! Geben Sie sämtliche benötigte Hilfsfunktionen an (z.B. auch den Modulo-Operator, falls er benötigt
wird)! In einer Aufgabe angegebene Hilfsfunktionen können in anderen Aufgaben verwendet werden.
Aufgabe 9 (3 Punkte): Entwickeln Sie (a) ausreichend Testfälle und (b) die Methode zu der Operation:
abrunden(wert:Card,anzahlStellen:Card):Card
[* Rundet <value> nach unten ab: Liefert die größte Zahl, die
** (a) durch (10 hoch <anzahlStellen>) teilbar ist und
** (b) kleiner oder gleich <x> ist *]
Aufgabe 10 (3 Punkte): Entwickeln Sie (a) ausreichend Testfälle und (b) die Methode zu der Operation:
fakultät^-1(fakultät:Card):Card
[* Liefert die größte Zahl, deren fakultät kleiner oder gleich <fakultät> ist *]
Geben Sie Kommentare für alle Ihre Hilfsfunktionen an! Präzisieren Sie ggf. den Operationskommentar!
Im Rest des Anwendungsteils betrachten wir Quader im dreidimensionalen kartesischen Koordinatensystem.
Jeder Punkt in unserem System ist durch ein Tripel von natürlichen Zahlen, nämlich durch die drei Koordinaten (z. B. in der Einheit Nano-Metern) auf der x-, y- und z-Achse eindeutig bestimmt.
Alle unsere Quader sind perfekt ausgerichtet, d. h. jede Kante verläuft parallel zu einer Achse des Koordinatensystems. Dadurch ist es möglich, jeden dieser Quader durch (a) einen Punkt (linke untere vordere Ecke)
(b) eine Breiten-, (c) eine Höhen- und (d) eine Tiefen-Angabe (jeweils natürliche Zahlen) zu spezifizieren.
Aufgabe 11 (2 Punkte): Geben sie adäquate LOMF-Datentypen zur Modellierung von oben beschriebenen
Punkten und Quadern an! Achten sie auf präzise Operationskommentare!
Aufgabe 12 (3 Punkte): Schreiben sie Methoden (keine Testfälle!) für folgende Operationen:
nebeneinander(q1:Quader,q2:Quader):Bool
[* Liefert genau dann wahr, wenn <q1> und <q2> sich nicht überlappen. *]
umQuader(q1:Quader,q2:Quader):Quader
[* Liefert den kleinsten Quader, der <q1> und <q2> beinhaltet. *]
Figuren sind entweder elementar oder zusammengesetzt. Eine elementare Figur ist ein Quader. Eine zusammengesetzte Figur besteht aus beliebig vielen Figuren.
Aufgabe 13 (2 Punkte): Geben sie adäquate LOMF-Datentypen zur Modellierung von Figuren an.
Aufgabe 14 (3 Punkte): Schreiben Sie eine Methoden für folgende Operation (ohne Testfälle!):
perfekt(f:Figur):Bool
[* Liefert genau dann wahr, wenn je zwei verschiedene Quader, die Bestandteil
** der Figur <f> sind, nebeneinander liegen. *]
TEIL III: TRANSFER (30 MINUTEN)
Aufgabe 15 (1 Punkt): Schreiben sie aussagekräftige Funktionskommentare für die Operationen p und q:
m(x:Card):Card ::= x.=(0).?(0,x.-C-.p);
p(x:Card):Card ::= x.=(0).?(1,x.-C-.q);
q(x:Card):Card ::= x.=(0).?(2,x.-C-.m);
Aufgabe 16 (3 Punkte): Beweisen Sie, dass Ihre Lösung für die Operation abrunden in Aufgabe 9 einen
Wert ungleich §() liefert, wenn beide Parameter mit einem Wert ungleich §()belegt werden!
Aufgabe 17 (4 Punkte): Gegeben seien folgende Datentypen für lineare Listen von Zeichenketten:
e:E; ne(s:String,r:L):NE; E ++ NE : L;
Schreiben Sie eine injektive Funktion (Operationen mit Kommentaren und Methoden; keine Testfälle)
toString(l:L):String;
die jede Liste von Zeichenketten auf eine Zeichenkette abbildet.
Beschreiben Sie möglichst präzise die Arbeitsweise der zugehörigen Umkehrfunktion (keine Programmierung in Lomf nötig!):
fromString(s:String):L [* l.toString.fromString = l *];
(Achtung: Diese Aufgabe ist schwieriger als man auf den ersten Blick vermuten mag!)
Herunterladen