Gedächtnisprotokoll SE-3FP09-1: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(Die Seite wurde neu angelegt: === Softwareentwicklung III - Funktionale Programmierung, Klausur 1 WS08/09 === Bearbeitungszeit: 120 Minuten Insgesamt 70 Punkte, für jede Aufgabe insgesamt 10 ===...) |
Keine Bearbeitungszusammenfassung |
||
Zeile 5: | Zeile 5: | ||
Insgesamt 70 Punkte, für jede Aufgabe insgesamt 10 | Insgesamt 70 Punkte, für jede Aufgabe insgesamt 10 | ||
==== Aufgabe 1 - Auswerten und Notation ==== | |||
* Zu welchen Werten evaluieren die folgenden Ausdrücke? | |||
(* (- 6 5) 2) | |||
(car '(((Foo) bar) bla)) | |||
(cdr '(((Noch) so) ein Ausdruck)) | |||
(map car '((1 . 1) (1 . 2) (1 . 3))) | |||
* Was sind Vor- und Nachteile der Infix- bzw. Präfixnotation und geben sie jeweils ein Beispiel an? | |||
* Welche Notation wird in Scheme verwendet | |||
* Wandeln Sie die folgenden Ausdrücke in Präfixnotation um (LaTeX scheint im Wiki nicht zu funktionieren?): | |||
1 - 4 * 3 + 2 | |||
\sqrt{1 - \cos^2 3.1414} | |||
... | ... | ||
==== Aufgabe 2 ==== | |||
Hat jemand ein Tip, dann kann ich mich vielleicht wieder dran erinnern!? | |||
==== Aufgabe 3 - Rekursion ==== | |||
* Definieren sie eine Funktion, die die Länge einer Liste allgemein-rekursiv berechnet. | |||
* Definieren sie eine Funktion, die die Länge einer Liste endrekursiv berechnet. | |||
* Wo liegen die Unterschiede zwischen Endrekursiv und Allgemeinrekursiv und warum ist die Endrekursion besser? | |||
...noch mehr glaub ich, Ideen? | |||
==== Aufgabe | ==== Aufgabe 4 - Eigene Datenstruktur ==== | ||
Diese Aufgabe findet sich in ähnlicher Form in den Klausurvorbereitungen mit dem Umrechnen von Längenangaben. | |||
* Definieren Sie eine Datenstruktur für Geldbeträge, so dass jeder Geldbetrag z.B. eine zweielementige Liste aus Betrag (Zahl) und Währung (Symbol) ist. Schreiben sie eine Funktion, die so einen Datensatz erzeugt: | |||
(make-deposit 5 'Euro) -> (5 Euro) | |||
* Schreiben sie Zugriffsfunktionen auf den Wert und die Einheit | |||
(amount-of x) -> 5 | |||
(currency-of x) -> Euro | |||
* Schreiben sie eine Funktion, die einen Geldbetrag mit einem gegebenen Faktor multipliziert. | |||
(multiply-deposit x 3) -> 15 Euro | |||
* Gegeben ist eine Umrechnungstabelle mit Paaren in der Form: | |||
(define *Kurse* '( | |||
; Wert der Währung in Euro | |||
(0.15 . NOR) | |||
(0.71 . USD) | |||
(1.00 . Euro)) | |||
* Schreiben sie eine Funktion, die einen Geldbetrag in Euro umgewandelt werden kann: | |||
(deposit->Euro '(10 USD)) -> 7.10 | |||
* Schreiben sie eine Funktion deposit+ die zwei Geldbeträge addiert | |||
(deposit+ '(10 USD) '(2.10 Euro)) -> (10 Euro) | |||
==== Aufgabe 5 - Funktionen höherer Ordnung ==== | |||
Funktionen höherer Ordnung - hier sollte man wo möglich apply, reduce, map, filter etc. pp. benutzen. Alles unter Zuhilfenahme der Funktionen, die man in der Aufgabe 4 geschrieben hat. | |||
* Die fiktive Problem-Person in der Aufgabe hat verschiedene Währungen in ihrer Kasse. Sie möchte wissen, wieviel die Beträge in Euro Wert sind. Schreiben sie eine Funktion, die eine Liste mit Währungen in Euro Umwandelt. | |||
(Kasse->Euro '( (10 USD) (2.10 Euro))) -> ( (7.10 Euro) (2.10 Euro) ) | |||
* Nun möchte der Typ wissen, wieviel Geld insgesammt in seiner Kasse vorhanden ist. | |||
(betrag '( (10 USD) (2.10 Euro) )) -> (10 Euro) | |||
* Jetzt ist die Frage nach allen Beträgen in einer bestimmten Währung | |||
(betragWährung '( (10 USD) (2.10 Euro) ) 'USD ) -> ((10 USD)) | |||
.. | * Jetzt ist die Frage nach der Summe des Betrags in einer bestimmten Währung in Euro. | ||
(betragWährungSumme '( (10 USD) (2.10 Euro) ) 'USD ) -> (7.10 Euro) | |||
* Was ist eine Funktion höherer Ordnung? | |||
==== Aufgabe 6 - CLOS ==== | |||
*Definieren Sie eine Klasse für Messgeräte, und eine dazugehörige generische Funktion messwert-auslesen. Definieren Sie weiterhin Klassen für: | |||
** Thermometer, die die Temperatur messen | |||
** Barometer, die den Luiftdruck messen | |||
** Regenmesser, die die Regenmenge messen | |||
** eine Wetterstation, die alles drei misst | |||
* Begründen Sie ihre Klassenhierarchie. | |||
Beschreiben Sie | * Beschreiben Sie das Konzept der Methodenpräzedenzlisten und begründen Sie, warum diese in CLOS nötig sind. | ||
* Beschreiben Sie die möglichen Methodenkombinationen, auch anhand des vorliegenden Beispiels (Messgeräte). | |||
Gegeben ein paar Relationen, etwa wie folgt: | ==== Aufgabe 7 - Prolog-in-Scheme ==== | ||
Gegeben sind ein paar Relationen, etwa wie folgt: | |||
(kamera id name hersteller zoom | (kamera kamera-id name hersteller zoom auflösung) | ||
(anbieter id name foo bar lieferzeit garantiedauer) | (anbieter anbieter-id name foo bar lieferzeit garantiedauer) | ||
(angebot kamera-id anbieter-id preis) | (angebot kamera-id anbieter-id preis) | ||
sowie ein paar Beispieltupel mit etwa acht Angeboten für drei verscheidene Kamera und drei oder vier Hersteller, die alle untereinander durch die IDs verlinkt sind. | |||
Stellen Sie geeignete Anfragen: | * Stellen Sie geeignete Anfragen: | ||
** Preis einer Kamera mit 18-fachem Zoom | |||
** Namen der Anbieter die eine Kamera mit Irgendwas verkaufen. | |||
** Alle Kameras, die in max. einem Tag geliefert werden | |||
* | * Was muss man beachten, wenn man funktionale Sprachelemente in Prolog-Programmen verwendet? | ||
[[Kategorie: Gedaechtnisprotokoll|SE3]] |
Version vom 9. Februar 2009, 20:30 Uhr
Softwareentwicklung III - Funktionale Programmierung, Klausur 1 WS08/09
Bearbeitungszeit: 120 Minuten
Insgesamt 70 Punkte, für jede Aufgabe insgesamt 10
Aufgabe 1 - Auswerten und Notation
- Zu welchen Werten evaluieren die folgenden Ausdrücke?
(* (- 6 5) 2) (car '(((Foo) bar) bla)) (cdr '(((Noch) so) ein Ausdruck)) (map car '((1 . 1) (1 . 2) (1 . 3)))
- Was sind Vor- und Nachteile der Infix- bzw. Präfixnotation und geben sie jeweils ein Beispiel an?
- Welche Notation wird in Scheme verwendet
- Wandeln Sie die folgenden Ausdrücke in Präfixnotation um (LaTeX scheint im Wiki nicht zu funktionieren?):
1 - 4 * 3 + 2 \sqrt{1 - \cos^2 3.1414} ...
Aufgabe 2
Hat jemand ein Tip, dann kann ich mich vielleicht wieder dran erinnern!?
Aufgabe 3 - Rekursion
- Definieren sie eine Funktion, die die Länge einer Liste allgemein-rekursiv berechnet.
- Definieren sie eine Funktion, die die Länge einer Liste endrekursiv berechnet.
- Wo liegen die Unterschiede zwischen Endrekursiv und Allgemeinrekursiv und warum ist die Endrekursion besser?
...noch mehr glaub ich, Ideen?
Aufgabe 4 - Eigene Datenstruktur
Diese Aufgabe findet sich in ähnlicher Form in den Klausurvorbereitungen mit dem Umrechnen von Längenangaben.
- Definieren Sie eine Datenstruktur für Geldbeträge, so dass jeder Geldbetrag z.B. eine zweielementige Liste aus Betrag (Zahl) und Währung (Symbol) ist. Schreiben sie eine Funktion, die so einen Datensatz erzeugt:
(make-deposit 5 'Euro) -> (5 Euro)
- Schreiben sie Zugriffsfunktionen auf den Wert und die Einheit
(amount-of x) -> 5 (currency-of x) -> Euro
- Schreiben sie eine Funktion, die einen Geldbetrag mit einem gegebenen Faktor multipliziert.
(multiply-deposit x 3) -> 15 Euro
- Gegeben ist eine Umrechnungstabelle mit Paaren in der Form:
(define *Kurse* '( ; Wert der Währung in Euro (0.15 . NOR) (0.71 . USD) (1.00 . Euro))
- Schreiben sie eine Funktion, die einen Geldbetrag in Euro umgewandelt werden kann:
(deposit->Euro '(10 USD)) -> 7.10
- Schreiben sie eine Funktion deposit+ die zwei Geldbeträge addiert
(deposit+ '(10 USD) '(2.10 Euro)) -> (10 Euro)
Aufgabe 5 - Funktionen höherer Ordnung
Funktionen höherer Ordnung - hier sollte man wo möglich apply, reduce, map, filter etc. pp. benutzen. Alles unter Zuhilfenahme der Funktionen, die man in der Aufgabe 4 geschrieben hat.
- Die fiktive Problem-Person in der Aufgabe hat verschiedene Währungen in ihrer Kasse. Sie möchte wissen, wieviel die Beträge in Euro Wert sind. Schreiben sie eine Funktion, die eine Liste mit Währungen in Euro Umwandelt.
(Kasse->Euro '( (10 USD) (2.10 Euro))) -> ( (7.10 Euro) (2.10 Euro) )
- Nun möchte der Typ wissen, wieviel Geld insgesammt in seiner Kasse vorhanden ist.
(betrag '( (10 USD) (2.10 Euro) )) -> (10 Euro)
- Jetzt ist die Frage nach allen Beträgen in einer bestimmten Währung
(betragWährung '( (10 USD) (2.10 Euro) ) 'USD ) -> ((10 USD))
- Jetzt ist die Frage nach der Summe des Betrags in einer bestimmten Währung in Euro.
(betragWährungSumme '( (10 USD) (2.10 Euro) ) 'USD ) -> (7.10 Euro)
- Was ist eine Funktion höherer Ordnung?
Aufgabe 6 - CLOS
- Definieren Sie eine Klasse für Messgeräte, und eine dazugehörige generische Funktion messwert-auslesen. Definieren Sie weiterhin Klassen für:
- Thermometer, die die Temperatur messen
- Barometer, die den Luiftdruck messen
- Regenmesser, die die Regenmenge messen
- eine Wetterstation, die alles drei misst
- Begründen Sie ihre Klassenhierarchie.
- Beschreiben Sie das Konzept der Methodenpräzedenzlisten und begründen Sie, warum diese in CLOS nötig sind.
- Beschreiben Sie die möglichen Methodenkombinationen, auch anhand des vorliegenden Beispiels (Messgeräte).
Aufgabe 7 - Prolog-in-Scheme
Gegeben sind ein paar Relationen, etwa wie folgt:
(kamera kamera-id name hersteller zoom auflösung) (anbieter anbieter-id name foo bar lieferzeit garantiedauer) (angebot kamera-id anbieter-id preis)
sowie ein paar Beispieltupel mit etwa acht Angeboten für drei verscheidene Kamera und drei oder vier Hersteller, die alle untereinander durch die IDs verlinkt sind.
- Stellen Sie geeignete Anfragen:
- Preis einer Kamera mit 18-fachem Zoom
- Namen der Anbieter die eine Kamera mit Irgendwas verkaufen.
- Alle Kameras, die in max. einem Tag geliefert werden
- Was muss man beachten, wenn man funktionale Sprachelemente in Prolog-Programmen verwendet?