• Keine Ergebnisse gefunden

Grundlagen der Programmierung 2

N/A
N/A
Protected

Academic year: 2022

Aktie "Grundlagen der Programmierung 2"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

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 2018

Aufgabenblatt Nr. 7

Abgabe: Mittwoch 30. Mai 2018 vor! der Vorlesung

Aufgabe 1 (35 Punkte)

Wie in der Vorlesung und im Skript erl¨autert kann die Auswertung einer Stackmaschine mit den Befehlen pop,pushK,push,slide, branchz,jump und mit arithmetischen Operationen +,−, und∗ sowie Marken wie folgt als FunktionI definiert werden:

Programm Stack Kopie achster Aufruf (Resultat)

I [] stack prg −→stack

I (pop:prest) (a:srest) prg −→I prest srest prg I ((pushKk) :prest) stack prg −→I prest (k:stack)prg

I ((pushi) :prest) stack prg −→I prest ((stack!!i) :stack)prg I (+ :prest) (a:b:srest)prg −→I prest (b+a:srest)prg I (−:prest) (a:b:srest)prg −→I prest (ba:srest)prg I (∗:prest) (a:b:srest)prg −→I prest (ba:srest)prg

I ((slidem n) :prest) stack prg −→I prest (takemstack ++(drop(n+m)stack)) prg I (marke:prest) stack prg −→I prest stack prg

I ((branchzmarke) :prest) (a:srest) prg −→if (0 ==a)then

I (dropWhile(marke /=)prg)srest prg elseI prest srest prg

I (jumpmarke) :prest) stack prg −→I (dropWhile(marke /=)prg)stack prg

a) F¨uhren Sie das Stackmaschinenprogramm (bestehend aus 15 Befehlen)

1 pushK 11;

2 pushK 13;

3 push 1;

4 -;

5 push 0;

6 marke1;

7 branchz marke2;

8 slide 1 1;

9 pushK 2;

10 pushK 4;

11 *;

12 pushK 8;

13 -;

14 jump marke1;

15 marke2

beginnend mit leerem Stack per Hand entsprechend der obigen Regeln aus, indem Sie das Pro- gramm und den Stack nach Ausf¨uhrung jedes Befehls angeben. (10 Punkte) b) In dieser Aufgabe soll die Stackmaschine in Haskell implementiert werden. Befehle der Stack- maschine werden durch den folgenden Datentyp Kommando repr¨asentiert. F¨ur Marken werden dabei Zahlen verwendet undMult,Addund Substehen f¨ur die arithmetischen Operationen:

data Befehl = PushK Int | Pop | Push Int | Mult | Add | Sub | Mark Marke

| Jump Marke | Branchz Marke | Slide Int Int deriving (Eq,Show)

type Marke = Int

Ein Stackmaschinenprogramm ist eine Liste von Befehlen und der Stack ist eine Liste von Zahlen:

1

(2)

type StackProgramm = [Befehl]

type Stack = [Int]

Implementieren Sie in Haskell eine Funktionrun :: StackProgramm -> Stack, die ein Stack- maschinenprogramm erwartet und den resultierenden Stack als Ergebnis liefert. Implementieren Sie hierf¨ur zun¨achst eine Hilfsfunktion

interpretiere :: StackProgramm -> Stack -> StackProgramm -> Stack

die genau die oben angegebene FunktionI in Haskell umsetzt und rufen Sie diese innerhalb von

runauf. (25 Punkte)

Aufgabe 2 (65 Punkte)

Abends und nachts hat man von Kowloon aus einen sch¨onen Ausblick auf die beleuchtete Skyline der Hongkong-Insel. Einige Hochh¨auser sind normal beleuchtet, andere wiederum f¨uhren in regelm¨aßigen Abst¨anden die ganze Nacht hindurch Lichtershows durch, wie zum Beispiel der Bank of China Tower.

Dieser Turm hat fachwerkartig aufgebaute Außenfl¨achen, wobei auf den Stahltr¨agern Leuchtstreifen montiert sind, die nachts dynamisch beleuchtet werden k¨onnen. Rechts ist eine Skizze des Hochhauses dargestellt. Die hellsten Linien in der Skizze k¨onnen beleuchtet werden.

Wir nutzen die Stackmaschine um die Abfolge der verschiedenen Lichtershows umzusetzen. Dabei enth¨alt der Stack drei Elemente, die wie folgt kodieren, welche Lichtershow gerade l¨auft:

Nr. Stack Lichtershow 1 [0,0,0] Alle Lichter aus 2 [0,0,1] Sterne 1

3 [0,1,0] Außen nach innen 4 [0,1,1] Aufsteigende Linien

5 [1,0,0] Abwechselndes An- und Abschalten aller Lichter 6 [1,0,1] Sterne 2

7 [1,1,0] Blitz

8 [1,1,1] Alle Lichter an

Zur L¨osung der folgenden Aufgaben kann der Stackmaschinen-Simulator n¨utzlich sein:

http://www.ki.informatik.uni-frankfurt.de/stackmachine

a) Angenommen aktuell sei die Lichtershow 5 aktiv, das heißt [1,0,0]. Implementieren Sie ein Stackprogramm, das den Wechsel zur Lichtershow 8 vollzieht, das heißt es soll der Stack [1,1,1]

zur¨uckgeliefert werden. (5 Punkte)

b) Implementieren Sie ein Stackprogramm, das den Stack [1] zur¨uckliefert, falls Lichtershow 7 aktiv ist, andernfalls soll [0] als Ergebnis berechnet werden. Sie k¨onnen annehmen dass der Stack genau

drei Elemente enth¨alt. (20 Punkte)

c) Nach jeder Lichtershow werden zun¨achst alle Lichter eine Zeit lang angeschaltet (Lichtershow 8), bevor die n¨achste Lichtershow beginnt. Geben Sie ein Stackprogramm an, das in einer Endloss- chleife der Reihe nach wie eben beschrieben die Lichtershows gem¨aß obiger Tabelle numerisch

2

(3)

aufsteigend von 2 bis 7 durchf¨uhrt – die Lichter sind nur tags¨uber aus, weshalb die Lichter- show 1 hierbei ausgenommen ist, genauso wie die Lichtershow 8 nicht mehrfach hintereinander vorkommt.

Implementiert werden soll also eine Endlosschleife der folgenden Form, wobei die jeweilige Zahl der Nummer der Lichtershow der obigen Tabelle entspricht: 2,8,3,8,4,8,5,8,6,8,7,8,2,8, ....

Um zu kodieren, dass ein Wechsel zwischen zwei Lichtershows abgeschlossen ist, soll nach jedem abgeschlossenem Wechsel eine−1 oben auf den Stack gelegt werden – sobald der n¨achste Wechsel beginnt ist sie wieder direkt zu entfernen. Gehen Sie davon aus, dass der Stack zu Beginn wie folgt aussieht: [−1,1,1,1]

Reduzieren Sie die Anzahl der Schritte ihres Programms, indem Sie beim Wechsel zweier Lichter- shows m¨oglichst viel des aktuellen Stacks wiederverwenden. Bei zwei verschiedenen L¨osungen mit gleich vielen Schritten ist diejenige mit der geringeren Anzahl an Elementen auf dem Stack

vorzuziehen. (40 Punkte)

3

Referenzen

ÄHNLICHE DOKUMENTE

Landwirtschaftsminister Helmut Brunner, der sich glaubwürdig für eine bäuerliche wie auch für eine ökologische Landwirtschaft und für die Durchsetzung des Grundsatzes Wald vor

Die Tatsache, dass sie noch über wenig Erfahrung in der Umweltpolitik verfügt, muss dann keine Schwächung sein, wenn sie sich in diesem Bereich umso stärker für konsequenten

Eine elektronische Zugangskontrolle schließ- lich wäre vom Zoo-Vorstand nur unter dem Vorbehalt akzeptiert worden, dass diese zu- verlässig funktioniert hätte und zunächst von

Doch China holt auf brei- ter Front auf, auch wenn es noch einen weiten Weg vor sich hat, bis sich die Zukunftsprognose des be- kannten japanischen

Hermann-Simon-Preis – für Sozialpsychiatrie, Epidemio- logie, Versorgungsforschung und rehabilitative Psychiatrie 2004 –, ausgeschrieben durch die Deutsche Gesellschaft für

Jürgen-Bierich-Preis 2003 – Wissenschaftspreis der Ar- beitsgemeinschaft Pädiatrische Endokrinologie (APE) der Deutschen Gesellschaft für Kinderheilkunde und Jugend- medizin/Sektion

Tatsächlich machen sich die Menschen eine Mode ja nicht deshalb zu eigen, weil sie alsbald wieder verschwindet und dann einer neuen Mode Platz macht, sondern deshalb, weil sie

Dies impliziert natürlich auch, dass Wei- terbildungsverläufe unter ebendiesen Vorzeichen bislang nicht selten waren, was manchen Facharztkandi- daten der letzten Dekade