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–