Klausur »Programmieren für Fortgeschrittene

Werbung
Technische Universität Braunschweig
Institut für Programmierung und Reaktive Systeme
Programmieren für Fortgeschrittene
Dr. Werner Struckmann
9. März 2012
Name:
Vorname:
Matrikelnummer:
Anrede:
Frau
Kennnummer:
Herr
Studiengang: Bachelor
Master
Fachrichtung: Informatik
Mobilität und Verkehr
Psychologie
Frühstudium
Wirtschaftsinformatik
Physik
Mechatronik
Diplom
Maschinenbau
IST
Erasmus
Mathematik
Mathematical Engineering
Sonstiges:
Die Bearbeitungszeit beträgt 90 Minuten. Die Klausur besteht aus 6 Aufgaben.
Aufgabe
1
2
3
4
5
6
Σ
max. Punkte
6
10
5
6
7
10
44
Punkte
Note:
Bitte prägen Sie sich Ihre Kennnummer gut ein. Aus Datenschutzgründen wird das Klausurergebnis nur unter dieser Kennnummer bekannt gegeben. Aus den gleichen Gründen
können Ergebnisse weder telefonisch noch per E-Mail mitgeteilt werden.
Ihre Klausur können Sie am
Donnerstag, den 15. März 2012,
von 09:30 bis 11:30 Uhr im Raum 251 des Informatikzentrums einsehen. Dort erfahren Sie
auch Ihr Klausurergebnis.
Aufgabe 1: (static/dynamic scoping) Gegeben sei das folgende Programmfragment:
int x = 3;
int y = 4;
int z = 5;
void p (void) {
int x = 1;
print(x+y+z);
}
void q (void) {
int y = 2;
print(x*y*z);
r();
}
void r (void) {
int z = 0;
y = z + 3;
print(x*y-z);
p();
}
void main (void) {
int x = 4;
int z = 1;
q();
}
Welche Werte werden bei der Ausführung der Methode main bei statischer bzw. bei dynamischer Namensbindung ausgegeben? Beachten Sie jeweils die Reihenfolge der Ausgabe.
Die Methode print gibt den Wert des Parameters aus.
6 Punkte
Lösung:
Ausgabe bei statischer Namensbindung:
1. Ausgabe:
2. Ausgabe:
3. Ausgabe:
Ausgabe bei dynamischer Namensbindung:
1. Ausgabe:
2. Ausgabe:
3. Ausgabe:
–2–
Aufgabe 2: (Parameterübergabemechanismen) Gegeben seien die folgende Prozedurdefinition
void f (int x, int y) {
y = y+2;
x = 5*x;
}
und das folgende Programmfragment
int a = 7;
int b = 6;
f(a,b);
print(a,b);
f(b,b);
print(b);
Welche Werte werden ausgegeben, falls die Parameter der Prozedur f durch pass-by-value,
pass-by-reference bzw. pass-by-value-result übergeben werden? Beachten Sie jeweils die
Reihenfolge der Ausgabe. Die Methode print gibt die Werte der Parameter aus. Bei zwei
Parametern wird der erste Parameter zuerst ausgegeben.
10 Punkte
Lösung:
Ausgabe bei Übergabe durch pass-by-value:
1. Ausgabe:
2. Ausgabe:
Ausgabe bei Übergabe durch pass-by-reference:
1. Ausgabe:
2. Ausgabe:
Ausgabe bei Übergabe durch pass-by-value-result:
1. Ausgabe:
2. Ausgabe:
–3–
Aufgabe 3: (Typsysteme) Bitte kreuzen Sie an. Für jede richtige Antwort erhalten Sie
einen Punkt, für jede falsche Antwort wird ein Punkt abgezogen. Kein Kreuz bzw. zwei
Kreuze bedeuten 0 Punkte. Die minimale Gesamtpunktzahl für diese Aufgabe beträgt
0 Punkte.
wahr
Wenn int-Werte durch n Bits im 2er-Komplement dargestellt werden,
enthält die Wertemenge die Zahlen −2n−1 + 1 . . . +2n−1 − 1.
Der union-Typ realisiert das kartesische Produkt von Mengen.
Enumeration-Types sind Ordinaltypen.
Alle numerischen Datentypen sind Ordinaltypen.
Zuweisungskompatible Datentypen müssen typäquivalent sein.
falsch
5 Punkte
Aufgabe 4: (λ-Kalkül) Werten Sie die folgenden λ-Ausdrücke aus:
(λy.(λx.x))z
(λx.x)(λy.y)
λ(λxy.y)xy.(λxy.y)xy
6 Punkte
Aufgabe 5: (Auswertung von Ausdrücken) Gegeben sei die folgende rekursive Spezifikation der Funktion h : N × N → N:
(
y + 1,
x = y,
h(x, y) =
h(x, h(x − 1, y + 1)), x 6= y.
Verwenden Sie bei dieser Aufgabe die Innermost-Auswertungsstrategie.
a) Liegt (6, 0) im Definitionsbereich von h? Falls ja, geben Sie den Wert an, den der
Aufruf h(6, 0) liefert:
b) Geben Sie den Definitionsbereich der Funktion h an:
c) Geben Sie einen nicht rekursiven Ausdruck für h(x, y) für alle (x, y) aus dem Definitonsbereich von h an:
7 Punkte
–4–
Aufgabe 6: (Rekursive Spezifikationen)
der Funktion f : N → N:

2,



3,
f (n) =

1,



5,
Gegeben sei die folgende rekursive Spezifikation
n = 0,
n > 0 ∧ f (n − 1) < 2,
n > 0 ∧ f (n − 1) > 2,
n > 0 ∧ f (n − 1) = 2.
Zur Erinnerung: Es sei (D, ≤) ein Domain mit dem kleinsten Element ⊥. Eine rekursive
Spezifikation auf der Menge D ist eine totale Funktion ψ : D → D mit
⊥≤ ψ(⊥) ≤ ψ 2 (⊥) ≤ . . .
Die Folge ⊥, ψ(⊥), ψ 2 (⊥), . . . heißt Kleene’sche Folge von ψ und ihr Supremum wird
Kleene’sche Semantik von ψ genannt.
a) Geben Sie die Funktion ψ der obigen Spezifikation an.
b) Geben Sie die Definitionsbereiche und die Funktionswerte der Funktionen ⊥, ψ(⊥)
und ψ 2 (⊥) sowie allgemein von ψ i (⊥), i ≥ 0, an.
c) Welche Funktion wird durch die obige Spezifikation definiert?
10 Punkte
Lösung:
–5–
Herunterladen