3
Prof. Dr. Manfred Schmidt-Schauß Goethe-Universit¨ at Frankfurt am Main/ Institut f¨ ur Informatik M.Sc. Nils Dallmeyer unstliche Intelligenz/Softwaretechnologie Grundlagen der Programmierung 2 Sommersemester 2019 Aufgabenblatt Nr. 4 Abgabe: Mittwoch 15. Mai 2019 vor! der Vorlesung Aufgabe 1 (40 Punkte) Kassandra von Sparta sucht derzeit Zuflucht in der Residenz des gerade erst verstorbenen Perikles in Athen. Ihr Widersacher Kleon setzte ein immenses und unberechtigtes Kopfgeld auf ihren Kopf aus. Um dieses Kopfgeld wieder loszuwerden, muss sie in Athen einerseits Beweise f¨ ur Kleons Verfehlungen finden und andererseits das Volk gegen Kleon aufbringen. Dabei wimmelt es in ganz Athen nur so von Kopfgeldj¨ agern und sie m¨ ochte dabei keinesfalls einem Kopfgeldj¨ ager ¨ uber den Weg laufen. a) Die Beweise der Verfehlungen Kleons befinden sich in einem Haus nahe der Athena-Statue (1) in der Akropolis, w¨ ahrend sie zur Aufkl¨ arung des Volkes in jedem Fall Thespis’ Haus (2), das Waffenlager (3) und die Pnyx (4) besuchen muss. Außerdem hat sie die folgenden Orte als besonders wichtige Wegpunkte ausgemacht: Agora (5), Hermippos’ Residenz (6), Tempel des Asklepios (7). Kassandra hat bereits folgende Beobachtungen und Erfahrungen gesammelt: Aufgrund der aktuellen Position der Kopfgeldj¨ ager ist Thespis’ Haus aktuell sehr einfach zu erreichen, weshalb sie zuerst Thespis’ Haus aufsucht. Die Akropolis ist streng bewacht, weshalb sie gezwungen ist, den Direktweg von der Agora zum Haus nahe der Athena-Statue zu nutzen. Thespis’ Haus muss unmittelbar vor dem Waffenlager aufgesucht werden. Auf dem Weg von Thespis’ Haus zum Waffenlager l¨ auft sie immer an Hermippos’ Residenz vorbei. Zwischen dem Tempel des Asklepios und der Pnyx findet Kassandra jederzeit einen sicheren Weg, weshalb sie sich entschließt auf jeden Fall vom Tempel des Asklepios direkt zur Pnyx zu laufen. Da die Agora streng bewacht wird, m¨ ochte sie die Agora genau einmal besuchen. Kassandra l¨ asst die Route auf der Pnyx enden. Alle sieben Orte werden genau einmal besucht. Die Anzahl der m¨ oglichen L¨ osungen lassen sich mit einer List Comprehension sehr gut ein- schr¨ anken, wenn die oben definierten Nummern als Kodierung f¨ ur die besuchten Orte verwendet werden. Benutzen Sie den folgenden unvollst¨ andigen Ausdruck, bei dem jeder der oben genannten Orte genau einmal im 7-Tupel vorkommen muss: [(a,b,c,d,e,f,g) | a <- [1..7], ] Helfen Sie Kassandra, indem Sie die List Comprehension vervollst¨ andigen. In welcher Reihenfolge sollte sie die Orte unter Ber¨ ucksichtigung ihrer Beobachtungen und Erfahrungen besuchen? Wie viele m¨ ogliche Reihenfolgen gibt es? (15 Punkte) 1

Aufgabenblatt Nr. 4prg2/SS2019/aufgaben/teil1/blatt4.pdf · Aufgabe 2(40 Punkte) Geben Sie jeweils List Comprehensions in Haskell an, welche die folgenden Listen erzeugen. a)Die unendliche

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Prof. Dr. Manfred Schmidt-Schauß Goethe-Universitat Frankfurt am Main/ Institut fur InformatikM.Sc. Nils Dallmeyer Kunstliche Intelligenz/Softwaretechnologie

Grundlagen der Programmierung 2Sommersemester 2019

Aufgabenblatt Nr. 4

Abgabe: Mittwoch 15. Mai 2019 vor! der Vorlesung

Aufgabe 1 (40 Punkte)

Kassandra von Sparta sucht derzeit Zuflucht in der Residenz des gerade erst verstorbenen Perikles inAthen. Ihr Widersacher Kleon setzte ein immenses und unberechtigtes Kopfgeld auf ihren Kopf aus.Um dieses Kopfgeld wieder loszuwerden, muss sie in Athen einerseits Beweise fur Kleons Verfehlungenfinden und andererseits das Volk gegen Kleon aufbringen. Dabei wimmelt es in ganz Athen nur so vonKopfgeldjagern und sie mochte dabei keinesfalls einem Kopfgeldjager uber den Weg laufen.

a) Die Beweise der Verfehlungen Kleons befinden sich in einem Haus nahe der Athena-Statue (1)in der Akropolis, wahrend sie zur Aufklarung des Volkes in jedem Fall Thespis’ Haus (2), dasWaffenlager (3) und die Pnyx (4) besuchen muss. Außerdem hat sie die folgenden Orte alsbesonders wichtige Wegpunkte ausgemacht: Agora (5), Hermippos’ Residenz (6), Tempel desAsklepios (7).

Kassandra hat bereits folgende Beobachtungen und Erfahrungen gesammelt:

• Aufgrund der aktuellen Position der Kopfgeldjager ist Thespis’ Haus aktuell sehr einfach zuerreichen, weshalb sie zuerst Thespis’ Haus aufsucht.

• Die Akropolis ist streng bewacht, weshalb sie gezwungen ist, den Direktweg von der Agorazum Haus nahe der Athena-Statue zu nutzen.

• Thespis’ Haus muss unmittelbar vor dem Waffenlager aufgesucht werden. Auf dem Weg vonThespis’ Haus zum Waffenlager lauft sie immer an Hermippos’ Residenz vorbei.

• Zwischen dem Tempel des Asklepios und der Pnyx findet Kassandra jederzeit einen sicherenWeg, weshalb sie sich entschließt auf jeden Fall vom Tempel des Asklepios direkt zur Pnyxzu laufen.

• Da die Agora streng bewacht wird, mochte sie die Agora genau einmal besuchen.

• Kassandra lasst die Route auf der Pnyx enden.

• Alle sieben Orte werden genau einmal besucht.

Die Anzahl der moglichen Losungen lassen sich mit einer List Comprehension sehr gut ein-schranken, wenn die oben definierten Nummern als Kodierung fur die besuchten Orte verwendetwerden. Benutzen Sie den folgenden unvollstandigen Ausdruck, bei dem jeder der oben genanntenOrte genau einmal im 7-Tupel vorkommen muss:

[(a,b,c,d,e,f,g) | a <- [1..7], ]

Helfen Sie Kassandra, indem Sie die List Comprehension vervollstandigen. In welcher Reihenfolgesollte sie die Orte unter Berucksichtigung ihrer Beobachtungen und Erfahrungen besuchen? Wieviele mogliche Reihenfolgen gibt es? (15 Punkte)

1

b) Kassandras Ausrustung besteht aus mehreren Waffen und einer Rustung, wobei Rustungen indieser Teilaufgabe ignoriert werden. Eine Ausrustung sei wie folgt in Haskell dargestellt:

data Ausruestung = Ausruestung [Waffe]

deriving(Eq,Show)

data Waffe = Waffe Art Name Seltenheit Verkaufbar

deriving(Eq,Show)

data Art = Schwert | Dolch | SchwereKeule | SchwereKlinge | Stab | Speer | Bogen

deriving(Eq,Show)

data Seltenheit = Gewoehnlich | Selten | Episch | Legendaer

deriving(Eq,Show)

type Verkaufbar = Bool

type Name = String

b1) Aktuell besteht Kassandras Ausrustung aus den drei jeweils legendaren und unverkauflichen Waf-fen Damoklesschwert, Dolch des Kronos und Bogen des Paris. Geben Sie Kassandras Ausrustungunter Verwendung der obigen Datentypen an. (5 Punkte)

b2) Implementieren Sie eine Funktion namenSchwerterVerkaufbar :: Ausruestung -> [String],die eine Liste aller Namen der verkaufbaren Schwerter in Kassandras Ausrustung berechnet.

(10 Punkte)

b3) Implementieren Sie eine Funktion nunVerkaufbar :: Ausruestung -> Name -> Ausruestung,die eine Ausrustung entegennimmt und alle Waffen mit ubergebenem Namen als verkaufbarmarkiert. (5 Punkte)

b4) Implementieren Sie eine Funktion dreiWaffenEinBogen :: Ausruestung -> Bool, die eineAusrustung entegennimmt und genau dann True zuruckgibt wenn die ubergebene Ausrustunginsgesamt drei Waffen und genau einen Bogen enthalt. (5 Punkte)

Metallstiftzeichnung von Nils Dallmeyer, 2019

2

Aufgabe 2 (40 Punkte)

Geben Sie jeweils List Comprehensions in Haskell an, welche die folgenden Listen erzeugen.

a) Die unendliche Liste aller Quadratzahlen n2 mit n ∈ N, die gerade sind, durch 9 mit Rest 2teilbar sind und geteilt durch 35 den Rest 3 ergeben, d.h. [1444,446224,1684804,3717184,...

Die Funktion take kann beim Testen nutzlich sein. (4 Punkte)

b) Aus einer gegebenen Liste xs von Tripeln (a, b, cs), wobei a und b Ganzzahlen sind und cseine Liste von Zahlen ist, soll eine Liste von Paaren (a · b, b + c), fur alle Elemente c aus cs,berechnet werden, sodass nur solche Paare in der Ausgabe erscheinen, deren erste Komponenteecht großer als die zweite Komponente ist. D.h. fur [(10,20,[1,10,100]), (4,5,[5,15,25])]

soll [(200,21),(200,30),(200,120),(20,10)] berechnet werden.

Tipp: Gesucht ist eine Funktion mit Parameter xs, deren Rumpf eine List Comprehension ist.(7 Punkte)

c) Die endliche Liste aller Tupel (a, b, c, d) fur alle a ∈ {10, 34, 77, 180}, b ∈ {’p’,’r’,’g’},c ∈ {False, True} und d ∈ {’Y’,’Z’}, und zwar in der Reihenfolge, sodass zunachst die Zahlenwechseln, danach die Kleinbuchstaben, dann die Wahrheitswerte und zuletzt die Großbuchsta-ben, d.h. die Ausgabe beginnt mit:

[(10,’p’,False,’Y’),(34,’p’,False,’Y’),(77,’p’,False,’Y’),(180,’p’,False,’Y’),

(10,’r’,False,’Y’),(34,’r’,False,’Y’),(77,’r’,False,’Y’),(180,’r’,False,’Y’)...

(8 Punkte)

d) Die unendliche Liste aller Primzahlen. Zur Prufung, ob eine Zahl n > 1 eine Primzahl ist, reichtes vollkommen aus, zu prufen, ob es ein k mit 2 ≤ k ≤ n−2 gibt, das n teilt: Gibt es kein solchesk, so ist n prim. (11 Punkte)

e) Die unendliche Liste aller Paare (a, b) von naturlichen Zahlen a und b, wobei a durch 7 teilbar istund b eine Quadratzahl ist. Hierbei sollen die Paare in einer fairen Reihenfolge generiert werden.Fair bedeutet: Jedes Element wird in endlicher Zeit generiert, oder auch: Wenn xs die Liste derPaare ist, dann terminiert (a,b) ‘elem‘ xs fur alle Zahlen a, b mit a ist durch sieben teilbarund b ist eine Quadratzahl. (10 Punkte)

Aufgabe 3 (20 Punkte)

Berechnen Sie die Menge der freien Variablen FV (si) und der gebundenen Variablen GV (si) fur diefolgenden Ausdrucke s1 und s2: (jeweils 10 Punkte)

a) s1 := \x -> if y then \z -> (x \y -> y) else (\z -> w) x

b) s2 := let f x1 x2 = y1 (\x -> x2) in let y1 = f w (f y2 y2), y2 = y1 in f

3