Klausur Programmierung WS 2002/03

Ähnliche Dokumente
1. Probeklausur zur Programmierung I

1. Probeklausur (Lösung) zu Programmierung 1 (WS 07/08)

1. Probeklausur zu Programmierung 1 (WS 07/08)

1. Probeklausur Programmierung 1 (WS 2010/2011)

1. Probeklausur zur Vorlesung Programmierung 1 im Wintersemester 2011/2012

Programmierung 1 Probeklausur zur Vorklausur

Musterlösung zur 1. Probeklausur Programmierung 1 Wintersemester 2012/13

2. Probeklausur zur Vorlesung Programmierung 1 im Wintersemester 2011/2012

Strukturelle Rekursion und Induktion

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 4 (Kapitel 4)

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 15 (Linearer Speicher, Listen, Bäume)

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 4 (Sortieren und Konstruktoren)

Programmierung 1 - Repetitorium

Verarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen:

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 7 (Kapitel 7)

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 5 (Kapitel 6)

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 17 (Best of)

Lösungen zum Übungsblatt 3: Softwareentwicklung I (WS 2006/07)

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 11 (Parser II)

Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zur Übungsklausur -

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift

Programmierung 1 (Wintersemester 2015/16) Lösungsblatt: Aufgaben für die Übungsgruppen: 5 (Kapitel 5)

Einführung in die Informatik 2

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 13 (Queues, Binary Search)

Inhaltsverzeichnis. 1 Polynomordungen [9 Punkte] 2. 2 System F [9 Punkte] 3. 3 Strukturelle Induktion und Folds [9 Punkte] 4

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 7 (Kapitel 7)

Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten.

Aufgabe 1 Basiswissen zur Vorlesung (8 Punkte)

ALP I Induktion und Rekursion

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 1 (Kapitel 1)

Programmierung 1 (Wintersemester 2012/13) Erklärung 5 (Prä- und Postordnung)

Programmierung 1 (Wintersemester 2015/16) Lösungsblatt: Aufgaben für die Übungsgruppen: 8 (Kapitel 9)

Ströme als unendliche Listen in Haskell

Einführung in die funktionale Programmierung

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 10 (Kapitel 11)

Programmierung Eine Einführung in die Informatik mit Standard ML Musterlösungen für ausgewählte Aufgaben. 1 Schnellkurs. Gert Smolka.

Programmieren in Haskell Programmiermethodik

Konzepte von Programmiersprachen

Probeklausur Software-Entwicklung I

ProInformatik: Funktionale Programmierung. Punkte

WS 2011/2012. Robert Giegerich Dezember 2013

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell

Probeklausur Grundlagen der Programmierung

Lösungshinweise/-vorschläge zur Altklausur Abschlussklausur 06/07

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Überladung und Konversion in Haskell. Typisierung in Haskell

Inhalt Kapitel 2: Rekursion

Grundlagen der Programmierung 3 A

Kapitel 6: Typprüfung

Funktionale Programmierung ALP I. Funktionen höherer Ordnung SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Funktionale Programmierung ALP I. Funktionen höherer Ordnung. Teil 2 SS Prof. Dr. Margarita Esponda. Prof. Dr.

Lösung Probeklausur Informatik I

Die Korrektheit von Mergesort

Prof. Dr. Margarita Esponda

Funktionale Programmierung. ALP I Lambda-Kalkül. Teil III SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Programmieren in Haskell

mathematik und informatik

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 11 (Kapitel 12)

Tutoraufgabe 1 (Auswertungsstrategie):

Programmierung 1 (Wintersemester 2015/16) Lösungsblatt: Aufgaben für die Übungsgruppen: 12 (Kapitel 13)

INFORMATIK FÜR BIOLOGEN

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 9 (Dynamische und Statische Semantik)

Musterlösung zur 2. Probeklausur Directors Cut TM Programmierung 1 Wintersemester 2012/13

Informatik A WS 2007/08. Nachklausur

Programmierung und Modellierung

Datenstrukturen und Algorithmen (SS 2013) Prof. Dr. Leif Kobbelt Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Paradigmen der Programmierung

Kapitel 6. Programme mit Schleifen. Wir betrachten jetzt eine einfache imperative Programmiersprache IMP. IMP verfügt

Beispiele: Funktionsabstraktion (3) Funktionsdeklaration. Funktionsdeklaration (2) Funktionsdeklaration (3) 3. Abstraktion über Funktionsbezeichner:

Wintersemester 2010/2011 Hinweise zur Bearbeitung der Klausur zum Kurs 1613 Einführung in die imperative Programmierung

TECHNISCHE UNIVERSITÄT MÜNCHEN. Abgabe: (vor der Vorlesung)

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

Kapitel 5. Fixpunktoperatoren

Nachklausur zur Vorlesung

Transkript:

Klausur Programmierung WS 2002/03 Prof. Dr. Gert Smolka, Dipl. Inf. Thorsten Brunklaus 14. Dezember 2002 Leo Schlau 45 Vor- und Nachname Sitz-Nr. 4711 007 Matrikelnummer Code Bitte öffnen Sie das Klausurheft erst dann, wenn Sie dazu aufgefordert werden (gleiche Bearbeitungszeit für alle). Sie können die Klausur nur auf dem für Sie vorgesehen Platz mitschreiben. Sie müssen das mit Ihrem Namen und Ihrer Matrikelnummer versehene Klausurheft verwenden. Hilfsmittel sind nicht zugelassen. Am Arbeitsplatz dürfen nur Schreibgeräte, Getränke, Speisen sowie Ausweise mitgeführt werden. Taschen, Jacken und Mäntel müssen an den Wänden des Klausursaals zurückgelassen werden. Verlassen des Saals ohne vorherige Abgabe des Klausurhefts gilt als Täuschungsversuch. Wenn Sie während der Bearbeitung auf die Toilette müssen, geben Sie bitte Ihr Klausurheft bei der Aufsicht ab. Es kann immer nur eine Person auf die Toilette. Alle Lösungen müssen auf den bedruckten rechten Seiten des Klausurhefts notiert werden. Die leeren linken Seiten dienen als Platz für Skizzen und werden nicht korrigiert. Notizpapier ist nicht zugelassen. Sie können mit Bleistift schreiben. Für die Bearbeitung der Klausur stehen 150 Minuten zur Verfügung. Insgesamt sind 150 Punkte erreichbar. Die für jede Aufgabe angebene Punktzahl gibt Ihnen also einen Anhaltspunkt, wieviel Zeit Sie auf die Bearbeitung der Aufgabe verwenden sollten. Zum Bestehen der Klausur genügen 75 Punkte. Bitte legen Sie Ihren Personalausweis oder Reisepass sowie Ihren Studierendenausweis zur Identifikation neben sich. Viel Erfolg! 1 2 3 4 5 6 7 Note 14 12 22 40 12 24 26 150 1

Aufgabe 1: Bindungs- und Typanalyse (14 = 4 + 4 + 6) (a) Geben Sie alle Bezeichner an, die in dem folgenden Ausdruck frei vorkommen: (fn x => fn y => h (f x) (g y)) x (b) Seien die folgenden Deklarationen gegeben: fun p x y f g h = h (f x) (g y) val x = p 3 4 (fn x => x-1) (fn x => x+1) (fn x => fn y => x*y) (i) An welchen Wert wird x gebunden? (ii) Geben Sie das Typschema an, das der Interpreter für den Bezeichner p bestimmt. 2

Aufgabe 2: Falten von Listen (12 = 2 6) Seien die folgenden Prozeduren gegeben: fun p f s g xs = foldr f s (map g xs) fun q f g xs = map f (map g (rev xs)) Wir bezeichnen zwei Prozeduren als gleichwertig, wenn sie denselben Typ haben und die gleichen Ergebnisse liefern. (a) Geben Sie eine zu p gleichwertige Prozedur p an, die nur foldr verwendet: fun p f s g xs = foldr (b) Geben Sie eine zu q gleichwertige Prozedur q an, die nur foldl verwendet: fun q f g xs = foldl 3

Aufgabe 3: Sortieren durch Mischen (22 = 3 6 + 4) Sie sollen eine polymorphe Prozedur schreiben, die Listen gemäß einer linearen Ordnung sortiert. Die lineare Ordnung wird dabei durch eine Prozedur p : α α order dargestellt, für die p(x, y) = LESS genau dann gilt, wenn x in einer sortierten Liste vor y stehen muss. (a) Geben Sie eine Prozedur split : a list a list * a list an, die eine Liste in zwei etwa gleich große Listen zerlegt. (b) Geben Sie eine Prozedur merge : ( a * a order) a list a list a list an, die zwei sortierte Liste gemäß einer linearen Ordnung zu einer sortierten Liste verschmilzt. (c) Geben Sie eine Prozedur sort : ( a * a order) a list a list an, die eine Liste gemäß einer linearen Ordnung sortiert. (d) Geben Sie die asymptotische Laufzeit Ihrer Prozedur sort mit an. 4

Seien die folgenden Deklara- Aufgabe 4: Arithmetische Ausdrücke (40 = 2 5 + 8 + 2 6 + 10) tionen gegeben: type var = int datatype exp = C of int V of var A of exp * exp M of exp * exp exception Var Die Werte des Typs exp stellen arithmetische Ausdrücke über Z dar, die mit Konstanten, Variablen, Addition und Multiplikation gebildet sind. (a) Schreiben Sie eine Prozedur eval : exp int (* Var *) die den Wert eines Ausdrucks liefert, falls er keine Variable enthält. Wenn der Ausdruck eine Variable enthält, soll die Ausnahme Var geworfen werden. (b) Schreiben Sie eine Prozedur var : exp bool die testet, ob ein Ausdruck Variablen enthält. Falls der Ausdruck Variablen enthält, soll true, sonst false geliefert werden. Realisieren Sie var mithilfe der obigen Prozeduren eval, indem Sie die Ausnahme Var fangen. 5

(c) Schreiben Sie eine Prozedur vars : exp var list die zu einem Ausdruck eine Liste liefert, die alle Variablen enthält, die in dem Ausdruck vorkommen. (d) Unter einer Umgebung wollen wir eine Prozedur verstehen, die zu jeder Variable eine ganze Zahl liefert: type env = var int Geben Sie eine Prozedur adjoin : env var int env an, die zu einer Umgebung env, einer Variablen x und einer Zahl z eine Umgebung liefert, die x den Wert z und allen anderen Variablen denselben Wert wie env gibt. 6

(e) Schreiben Sie eine Prozedur eval : env exp int die den Wert eines Ausdrucks in einer Umgebung liefert. (f) Schreiben Sie eine Prozedur subexp : exp int list exp (* Subscript *) die zu einem Ausdruck und einer Adresse den entsprechenden Teilausdruck liefert. Die Adressierung soll wie bei Bäumen erfolgen. Beispielsweise soll subexp (A(V 1, M(C 1, C 2))) [2,2] = C 2 gelten. Wenn die Adresse keinen Teilausdruck bezeichnet, soll die Ausnahme Subscript geworfen werden. 7

Aufgabe 5: Grenze von Bäumen mit Akkumulatorargument (12 = 2 6) Die Prozedur fun frontier (T(x,[])) = [x] frontier (T(_,ts)) = foldr (fn (t,xs) => frontier t @ xs) nil ts val frontier : a tree -> a list liefert zu einem Baum eine Liste, die die Marken der Blätter des Baums enthält. Sie sollen eine effizientere Version dieser Prozedur angeben, die mithilfe eines Akkumulatorarguments die Konkatenation frontier t @ xs einspart. (a) Schreiben Sie eine Prozedur frontier : a tree -> a list -> a list sodass für alle Bäume t und alle Listen ys gilt: frontier t ys = (frontier t) @ ys Verwenden Sie dabei nur eine Faltungsprozedur und eine Abstraktion. fun frontier (T(x,[])) ys = frontier (T(_,ts)) ys = (b) Schreiben Sie eine Prozedur frontier : a tree -> a list -> a list sodass für alle Bäume t und alle Listen ys gilt: frontier t ys = (rev (frontier t)) @ ys Verwenden Sie dabei nur eine Faltungsprozedur und eine Abstraktion. fun frontier (T(x,[])) ys = frontier (T(_,ts)) ys = 8

Aufgabe 6: Iteration und Induktion (24 = 4 + 9 + 7 + 4) Sei X eine Menge. Die Prozedur count : L(X) X N count(nil, y) = 0 count(x ::xr, y) = count(xr, y) + (if x = y then 1 else 0) liefert zu einer Liste xs und einem Wert y die Anzahl der Auftreten von y in xs. (a) Geben Sie die definierenden Gleichungen für eine iterative Prozedur count : L(X) X Z Z an, für die gilt: xs L(X) y X a Z: count (xs, y, a) = count(xs, y) + a count (nil, y, a) = count (x ::xr, y, a) = (b) Beweisen Sie, dass Ihre Prozedur count die verlangte Eigenschaft hat. Verwenden Sie dazu strukturelle Induktion über xs L(X) und unterscheiden Sie drei Fälle. 9

(c) Geben Sie für Ihren Beweis die folgenden Dinge an: Grundmenge: Aussagemenge: Induktionsrelation: Induktionsannahme für zs L(X): (d) Geben Sie in Standard ML eine nicht rekursive Prozedur count : a list -> a -> int an, die zu einer Liste xs und zu einem Wert x die Anzahl der Auftreten von x in xs liefert. Verwenden Sie dabei foldl. 10

Aufgabe 7: Laufzeiten (26 = 3 2 + 2 (4 + 4 + 2)) Seien die folgenden Prozeduren gegeben: f : N N, f (n) = if n = 0 then 0 else f (n 1) + n g : N N, g(n) = if n = 0 then 0 else ( f (n) ; 2n + g(n 1)) h : N N, h(n) = if n = 0 then 1 else h(n 1) + h(n 1) (a) Geben Sie f (n) für alle n N ohne Rekursion an. f (n) = (b) Geben Sie die exakte Laufzeit der rekursiven Prozedur f an. Verwenden Sie dabei keine Rekursion. φ f (n) = (c) Geben Sie die asymptotische Laufzeit der rekursiven Prozedur f mit an. (d) Geben Sie g(n) für alle n N ohne Rekursion an. g(n) = (e) Geben Sie die exakte Laufzeit der rekursiven Prozedur g an. Verwenden Sie dabei keine Rekursion. φ g (n) = (f) Geben Sie die asymptotische Laufzeit der rekursiven Prozedur g mit an. (g) Geben Sie h(n) für alle n N ohne Rekursion an. h(n) = (h) Geben Sie die exakte Laufzeit der rekursiven Prozedur h an. Verwenden Sie dabei keine Rekursion. φ h (n) = (i) Geben Sie die asymptotische Laufzeit der rekursiven Prozedur h mit an. 11