Gedächtnisprotokoll SE-3LP09-1: Unterschied zwischen den Versionen

Aus Fachschaft_Informatik
Zur Navigation springen Zur Suche springen
 
(22 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 3: Zeile 3:
  weitere Infos bitte - war es schwer?
  weitere Infos bitte - war es schwer?


== Grundlagen ==




== Aufgaben ==




== Aufgabe 1 ==
=== Softwareentwicklung III - Logik Programmierung, Klausur 1 WS08/09 ===
 
Bearbeitungszeit: 120 Minuten
 
Insgesamt 60 Punkte.
 
 
==== Aufgabe 1 ====
Geben Sie die Ausgabe am Systempromt an.
Geben Sie die Ausgabe am Systempromt an.


1.
1.?- add(3,5,Summe) = add(Summand1,Summand2,7).
add(3,5,Summe) = add(Summand1,Summand2,7).
 
2.?- member(X,[1,2,3,4]), X is floor(X/2)*2.
 
3.?- X is member(X,[1,2,3,4]).
 
==== Aufgabe 2 ====
 
 
1.Was bewirkt ein cut?
 
2.Erläutern Sie an einem Beispiel die Wirkungsweise eines Cuts.
 
==== Aufgabe 3 ====
 
Es wurde eine Datenbank für eine kleine Videothek gegeben.
 
%kunde(Name, Vorname, Kundennummer, Straße, Stadt)
 
%film(Filmnummer, Name, Kategorie)
 
%datentraeger(Datentraegernummer, Medium(vhs oder dvd), Filmnummer)


... eine unifikationsaufgabe mit einer liste
%ausleihe(Vorgangsnummer, Kundennummer, Datentraegernummer, Gefordertes_rueckgabedatum)


... eine mit floor
%rueckgabe(Datentraegernummer, Gefordertes_rueckgabedatum, Eventuelle_schaeden)


... eine mit abs


Zunächst sollte man Anfragen stellen.


== Aufgabe 2 ==
1. Hat Susi Sorglos schoneinmal einen Film ausgeliehen?


1.
2. Welche Filme gibt es nur auf vc und nicht auf dvd?
Was bewirkt ein cut?


2.
3. Von welchem Film gibt es nur ein Exemplar?
Geben Sie ein Beispiel mit cut an.


4. Von welchem Film sind alle Exemplare ausgeliehen?


... noch eine frage zu cut


==== Aufgabe 4 ====
Es mussten zu obiger Datenbasis nun selber Prädikate geschrieben werden. Die Überschrift der Aufgabe lautete Resultatsaggregation, was ein Hinweis darauf ist, dass man findall/3 benutzen sollte.


== Aufgabe 3 ==
1. Schreiben sie ein Prädikat, was zu einer gegebenen Kategorie, die Anzahl der bisher ausgeliehenen Filme ausgibt.


Es wurde eine Datenbank für eine kleine Videothek gegeben.
2. Schreiben sie ein Prädikat, was zu einem gegebenem Monat die Kategorie ausgibt, von der die meisten Filme ausgeliehen wurden. Es gibt die Kategorien: action, erotik, horror, kinder, krimi


%kunde(name, vorname, kundennummer, straße, stadt)
Hinweis: Sortieren ist mit dem Prädikat sort/2 möglich, die Ausgabereihenfolge ist aber aufsteigend.


%film(nummer, name, kategorie)
==== Aufgabe 5 ====


%datentraeger(datentraegernummer, medium(vhs oder dvd), filmnummer)
Es sollten wieder Prädikate geschrieben werden.


%ausleihe(vorgangsnummer, kundennummer, datentraegernummer, gefordertes_rueckgabedatum)
1. Schreiben sie ein Prädikat, was zu gegebenem Kunden eine Liste absoluter Häufigkeiten der Ausleihung pro Kategorie zurückgibt. Z.B. bedeutet [0,0,0,1,4] dass ein Kunde 1 Kinderfilm und 4 Krimis bereits ausgeliehen hat.


%rueckgabe(datentraegernummer, gefordertes_rueckgabedatum, eventuelle_schaeden)
2. Wandeln sie eine solche Liste absoluter Häufigkeiten in eine Liste relativer Häufigkeiten um, indem sie ein '''rekursives''' Prädikat verwenden. Zu der vorherigen Liste wäre z.B. [0,0,0,0.2,0.8] eine solche relative Liste.


3. Wie 2., nur verwenden sie nun ein Prädikat höherer Ordnung.


Erstellen Sie ein Prädikat:
4. Vergleichen sie dass in 2. und 3. geschriebene Prädikat auf Effizienz und Verständlichkeit.


... das mit einem Kinden, ob und welche Filme ausgeliehen wurden.
==== Aufgabe 6 ====


... das prüft, ob ein Film noch verfügbar ist.
1.
Hier gab es eine schicke Formel mit der der Videotheks-chef nun seine Kundenprofile auswerten wollte. Formel dürfte in etwa folgende sein:


... das zurückgibt, ob ein Film nur einmal in der Datenbank vorhanden ist.
<math> z = {{1}\over{\sqrt{\sum^n_{i=1} (x_i-y_i)^2}}}</math>


... das die Anzahl der Ausleihen in einer Kategorie angibt
Mit den aus der Aufgabe 5 berechneten Nutzerprofilen(die Listen relativer Häufigkeiten) sollte nun dieser Wert da berechnet werden. Dabei sollte einmal eine '''endrekursive''' und einmal eine '''nicht-endrekursive''' Variante verwendet werden.


... das die Anzahl der Ausleihen in einer Kategorie in einem Monat ausgibt
2. Kann man auch dies mit einem Prädikat höherer Ordnung berechnen(analog wie bei Aufgabe 5 Teilaufgabe 3.)? Begründen sie!


==== Aufgabe 6 ====


Die Videothek möchte Benutzerprofile erstellen, aus diesem Grund sollten wir für einen Kunden die Häufigkeiten ermitteln, (eine Liste machen) wie oft er Filme in einer Kategorie ausgeliehen hat.
1.
Zum Beispiel [0,0,0,1,4] in den Kategorien also 0 Abenteuer, 0 Erotik, 0 Horror, 1 Kinder, 4 Krimi.
Diese Aufgabe bestand daraus, auszuwerten was ein kleines Scheme Programm macht:


Die nächste Aufgabe war die absoluten Häufigkeiten zu berechnen wie oft ein Kunde in einem Monat in einer Kategorie Filme ausgeliehen hat.
Zu was evaluiert
Dazu gab es dann noch Teilaufgaben, eine rekursive und eine endrekursive Variante zu machen, und sie danach auf Effizienz vergleichen.


== Aufgabe 5 ==
(list (+ (* 2 2)
          (+ 1 2)
          (- (/8 4) 2)
      )
  )


Hier gab es eine schicke Formel mit der der Videotheks-chef nun seine Kundenprofile auswerten wollte.
2.
Drei andere kleine Scheme Programme, aus denen wir herausfinden sollten, welches bedeutungsgleich zu dem aus der vorherigen Teilaufgabe ist.


== Scheme-Teil ==
3.
Was ist der Unterschied zwischen specialform expressions und Funktionen? Erläutern sie an einem Beispiel.


4.
Was berechnet folgende Scheme Funktion?
x ist Liste von Atomen, y ist ein Atom


( define (blub x y)
    ( if
          (null? x)
            quote ()
            (if (eq? (car x) y)
                    (blub (cdr x) y)
                    (cons (car x) (blub (cdr x) y) )
              )
    )
)




5.
Das Scheme-Programm aus 4. in Prolog programmieren.


[[Kategorie: Gedaechtnisprotokoll|SE3]]
[[Kategorie:Gedaechtnisprotokoll|SE3]]

Aktuelle Version vom 28. Februar 2014, 19:30 Uhr

Die Logik- und die Funktionale-Klausur waren im selben Raum.

weitere Infos bitte - war es schwer?



Softwareentwicklung III - Logik Programmierung, Klausur 1 WS08/09[Bearbeiten]

Bearbeitungszeit: 120 Minuten

Insgesamt 60 Punkte.


Aufgabe 1[Bearbeiten]

Geben Sie die Ausgabe am Systempromt an.

1.?- add(3,5,Summe) = add(Summand1,Summand2,7).

2.?- member(X,[1,2,3,4]), X is floor(X/2)*2.

3.?- X is member(X,[1,2,3,4]).

Aufgabe 2[Bearbeiten]

1.Was bewirkt ein cut?

2.Erläutern Sie an einem Beispiel die Wirkungsweise eines Cuts.

Aufgabe 3[Bearbeiten]

Es wurde eine Datenbank für eine kleine Videothek gegeben.

%kunde(Name, Vorname, Kundennummer, Straße, Stadt)

%film(Filmnummer, Name, Kategorie)

%datentraeger(Datentraegernummer, Medium(vhs oder dvd), Filmnummer)

%ausleihe(Vorgangsnummer, Kundennummer, Datentraegernummer, Gefordertes_rueckgabedatum)

%rueckgabe(Datentraegernummer, Gefordertes_rueckgabedatum, Eventuelle_schaeden)


Zunächst sollte man Anfragen stellen.

1. Hat Susi Sorglos schoneinmal einen Film ausgeliehen?

2. Welche Filme gibt es nur auf vc und nicht auf dvd?

3. Von welchem Film gibt es nur ein Exemplar?

4. Von welchem Film sind alle Exemplare ausgeliehen?


Aufgabe 4[Bearbeiten]

Es mussten zu obiger Datenbasis nun selber Prädikate geschrieben werden. Die Überschrift der Aufgabe lautete Resultatsaggregation, was ein Hinweis darauf ist, dass man findall/3 benutzen sollte.

1. Schreiben sie ein Prädikat, was zu einer gegebenen Kategorie, die Anzahl der bisher ausgeliehenen Filme ausgibt.

2. Schreiben sie ein Prädikat, was zu einem gegebenem Monat die Kategorie ausgibt, von der die meisten Filme ausgeliehen wurden. Es gibt die Kategorien: action, erotik, horror, kinder, krimi

Hinweis: Sortieren ist mit dem Prädikat sort/2 möglich, die Ausgabereihenfolge ist aber aufsteigend.

Aufgabe 5[Bearbeiten]

Es sollten wieder Prädikate geschrieben werden.

1. Schreiben sie ein Prädikat, was zu gegebenem Kunden eine Liste absoluter Häufigkeiten der Ausleihung pro Kategorie zurückgibt. Z.B. bedeutet [0,0,0,1,4] dass ein Kunde 1 Kinderfilm und 4 Krimis bereits ausgeliehen hat.

2. Wandeln sie eine solche Liste absoluter Häufigkeiten in eine Liste relativer Häufigkeiten um, indem sie ein rekursives Prädikat verwenden. Zu der vorherigen Liste wäre z.B. [0,0,0,0.2,0.8] eine solche relative Liste.

3. Wie 2., nur verwenden sie nun ein Prädikat höherer Ordnung.

4. Vergleichen sie dass in 2. und 3. geschriebene Prädikat auf Effizienz und Verständlichkeit.

Aufgabe 6[Bearbeiten]

1. Hier gab es eine schicke Formel mit der der Videotheks-chef nun seine Kundenprofile auswerten wollte. Formel dürfte in etwa folgende sein:

<math> z = {{1}\over{\sqrt{\sum^n_{i=1} (x_i-y_i)^2}}}</math>

Mit den aus der Aufgabe 5 berechneten Nutzerprofilen(die Listen relativer Häufigkeiten) sollte nun dieser Wert da berechnet werden. Dabei sollte einmal eine endrekursive und einmal eine nicht-endrekursive Variante verwendet werden.

2. Kann man auch dies mit einem Prädikat höherer Ordnung berechnen(analog wie bei Aufgabe 5 Teilaufgabe 3.)? Begründen sie!

Aufgabe 6[Bearbeiten]

1. Diese Aufgabe bestand daraus, auszuwerten was ein kleines Scheme Programm macht:

Zu was evaluiert

(list (+ (* 2 2)
         (+ 1 2)
         (- (/8 4) 2)
      )
 )

2. Drei andere kleine Scheme Programme, aus denen wir herausfinden sollten, welches bedeutungsgleich zu dem aus der vorherigen Teilaufgabe ist.

3. Was ist der Unterschied zwischen specialform expressions und Funktionen? Erläutern sie an einem Beispiel.

4. Was berechnet folgende Scheme Funktion? x ist Liste von Atomen, y ist ein Atom

( define (blub x y)
   ( if 
         (null? x)
            quote ()
            (if (eq? (car x) y)
                    (blub (cdr x) y)
                    (cons (car x) (blub (cdr x) y) )
             )
    )
)


5. Das Scheme-Programm aus 4. in Prolog programmieren.