17.11.2013 Aufrufe

Hamster-Modell / Aufgaben

Hamster-Modell / Aufgaben

Hamster-Modell / Aufgaben

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Auswahl<br />

• Auswahlanweisungen<br />

• Wiederholungsanweisungen<br />

• Boolesche Methoden<br />

• Strukturieren von Programmen<br />

• <strong>Hamster</strong> mit Gedächtnis (Boolesche Variablen)<br />

• <strong>Hamster</strong> mit Gedächtnis (Zahlen)<br />

• Integer-Methoden<br />

• Verallgemeinerungen von Daten und Methoden<br />

• Prozeduren und Methoden mit Parametern<br />

• Prozeduren und Methoden, die sich selbst aufrufen<br />

(Rekursion)<br />

<strong>Hamster</strong>-Programmierung Seite 38<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Auswahl / Test-Befehle<br />

• 3 Testbefehle, u. a. zur Vermeidung von Laufzeitfehlern<br />

– vornFrei() liefert den Wert true (wahr), falls sich in<br />

Blickrichtung direkt vor dem <strong>Hamster</strong> keine<br />

Mauer befindet, false (falsch) sonst.<br />

– maulLeer() liefert den Wert false, falls der <strong>Hamster</strong><br />

mindestens ein Korn im Maul hat, true sonst.<br />

– kornDa() liefert den Wert true, falls auf der Kachel, auf<br />

der der <strong>Hamster</strong> sich gerade befindet,<br />

mindestens ein Korn liegt, false sonst.<br />

• Sinn und Zweck<br />

– nur wenn der Testbefehl vornFrei() den Wert true liefert, darf<br />

der Befehl vor(); ausgeführt werden.<br />

– nur wenn der Testbefehl maulLeer() den Wert false liefert, darf<br />

der Befehl gib(); ausgeführt werden.<br />

– nur wenn der Testbefehl kornDa() den Wert true liefert, darf<br />

der Befehl nimm(); ausgeführt werden.<br />

<strong>Hamster</strong>-Programmierung Seite 39


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Boolesche Ausdrücke<br />

• Ziel: Verknüpfung von Testbefehlen<br />

– vornFrei() && maulLeer()<br />

• Aussage der Aussagenlogik<br />

– Satz, dem eindeutig ein Wahrheitswert wahr (true) oder falsch<br />

(false) zugeordnet werden kann<br />

» „Ein Tisch ist ein Möbelstück“, "die Sonne scheint"<br />

» „Geh nach Hause“ (keine Aussage)<br />

» vornFrei(), maulLeer(), kornDa()<br />

• Boolesche Werte<br />

– Menge der Wahrheitswerte: { true, false }<br />

• Einfache (elementare) boolesche Ausdrücke<br />

– Boolesche Werte<br />

– Testbefehle<br />

<strong>Hamster</strong>-Programmierung Seite 40<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Boolesche Ausdrücke<br />

• Verknüpfung von booleschen Ausdrücken durch logische<br />

Operatoren zu booleschen Ausdrücken<br />

– Negation „nicht“ („!“)<br />

» ! A<br />

liefert true, wenn der boolesche Ausdruck A den Wert false hat, false<br />

sonst.<br />

Beispiel: !vornFrei()<br />

– Konjunktion „und“ („&&“)<br />

» A1 && A2<br />

liefert true, wenn die booleschen Ausdrücke A1 und A2 den Wert<br />

true haben, false sonst.<br />

Beispiel: vornFrei() && !maulLeer()<br />

– Disjunktion „oder“ („||“)<br />

» A1 || A2<br />

liefert true, wenn mindestens einer der beiden booleschen<br />

Ausdrücke A1 und A2 den Wert true hat, false sonst.<br />

Beispiel: !kornDa() || vornFrei()<br />

<strong>Hamster</strong>-Programmierung Seite 41


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong>/BoolescheAusdrücke/Eigenschaften<br />

• Priorität („Punkt vor Strich“)<br />

– Wie wird der folgende boolesche Ausdruck abgearbeitet?<br />

» maulLeer() || ! vornFrei() && kornDa() <br />

» maulLeer() || ! vornFrei() && kornDa()<br />

<br />

! vor && vor ||<br />

– Durch Klammerung kann die Priorität beeinflusst werden:<br />

» Ein in runde Klammern eingeschlossener boolescher Ausdruck<br />

wird immer zuerst ausgeführt.<br />

Beispiele:<br />

( maulLeer() || !vornFrei() ) && kornDa()<br />

!( kornDa() && maulLeer() )<br />

<strong>Hamster</strong>-Programmierung Seite 42<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong>/BoolescheAusdrücke/Eigenschaften<br />

– Assoziativität<br />

» Auswertungsreihenfolge bei gleicher Priorität<br />

Beispiele:<br />

maulLeer() || vornFrei() || kornDa()<br />

!!maulLeer()<br />

&&, || Linksassoziativ („von links nach rechts“)<br />

! Rechtsassoziativ („von rechts nach links“)<br />

Beispiele:<br />

( maulLeer() || vornFrei() ) || kornDa()<br />

!( !maulLeer() )<br />

• Auswertungsreihenfolge („Der <strong>Hamster</strong> ist ein faules Tier“)<br />

– Boolescher Ausdruck A1 && A2<br />

Der Wert des booleschen Teilausdrucks A2 wird nur dann<br />

ermittelt, wenn der Teilausdruck A1 den Wert true liefert.<br />

– Boolescher Ausdruck A1 || A2<br />

Der Wert des booleschen Teilausdrucks A2 wird nur dann<br />

ermittelt, wenn der Teilausdruck A1 den Wert false liefert.<br />

<strong>Hamster</strong>-Programmierung Seite 43


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Bedingte Anweisung<br />

• Bedingte Anweisung (Abzweigung):<br />

– Ausführung einer Anweisung in Abhängigkeit von der Gültigkeit<br />

eines booleschen Ausdrucks<br />

if ( Boolescher Ausdruck ) Anweisung<br />

– Semantik (Bedeutung)<br />

» Zuerst wird der boolesche Ausdruck ausgewertet.<br />

» Falls die Auswertung den Wert true liefert, wird die Anweisung<br />

ausgeführt, sonst nicht.<br />

• Anweisung<br />

– Grundanweisung (Grundbefehl)<br />

– Prozeduraufruf<br />

– Bedingte Anweisung<br />

<strong>Hamster</strong>-Programmierung Seite 44<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Bedingte Anweisung / Beispiele<br />

• Sichere Grundbefehle<br />

void sicheresVor() {<br />

if (vornFrei())<br />

vor();<br />

}<br />

void sicheresGib() {<br />

if (!maulLeer())<br />

gib();<br />

}<br />

void sicheresNimm() {<br />

if (kornDa())<br />

nimm();<br />

}<br />

• if (kornDa())<br />

nimm();<br />

linksUm(); // wird immer ausgeführt<br />

<strong>Hamster</strong>-Programmierung Seite 45


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Blockanweisung<br />

• Blockanweisung<br />

– Zusammenfassung von mehreren Anweisungen zu einer Einheit<br />

{ Anweisung 1<br />

... Anweisung n<br />

}<br />

– Semantik (Bedeutung)<br />

» Die in geschweifte Klammern eingeschlossenen Anweisungen<br />

werden in der angegebenen Reihenfolge ausgeführt.<br />

• Anweisung<br />

– Grundanweisung (Grundbefehl)<br />

– Prozeduraufruf<br />

– Bedingte Anweisung<br />

– Blockanweisung<br />

<strong>Hamster</strong>-Programmierung Seite 46<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Blockanweisung / Darstellung<br />

• Sequenz / Block als Element im Struktogramm<br />

– Jede Aktivität wird durch ein Rechteck repräsentiert.<br />

– Die Aktivitäten werden von oben nach unten abgearbeitet.<br />

Aktivität 1<br />

Aktivität 2<br />

Aktivität 3<br />

• Beispiel: rechtsUm()<br />

kehrt<br />

linksUm<br />

<strong>Hamster</strong>-Programmierung Seite 47


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Blockanweisung / Beispiele<br />

if (kornDa() && vornFrei())<br />

{<br />

nimm();<br />

vor();<br />

}<br />

linksUm(); // wird immer ausgeführt<br />

void sicheresGib() {<br />

if (!maulLeer())<br />

{<br />

gib();<br />

}<br />

}<br />

<strong>Hamster</strong>-Programmierung Seite 48<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Alternativanweisung<br />

• Alternativanweisung (Verzweigung):<br />

– Von 2 gegebenen Anweisungen wird genau eine Anweisung in<br />

Abhängigkeit von der Gültigkeit bzw. Nichtgültigkeit eines<br />

booleschen Ausdrucks ausgeführt<br />

if ( Boolescher Ausdruck ) Anweisung 1<br />

else Anweisung 2<br />

– Semantik (Bedeutung)<br />

» Zuerst wird der boolesche Ausdruck ausgewertet.<br />

» Falls die Auswertung den Wert true liefert, wird die Anweisung 1<br />

ausgeführt, sonst die Anweisung 2 .<br />

• Anweisung<br />

– Grundanweisung (Grundbefehl)<br />

– Prozeduraufruf<br />

– Blockanweisung<br />

– Bedingte Anweisung Auswahlanweisung,<br />

– Alternativanweisung Fallunterscheidung<br />

<strong>Hamster</strong>-Programmierung Seite 49


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Alternative / Darstellung<br />

• Alternativen<br />

– abhängig vom Ergebnis der Testbedingung werden<br />

alternative Aktionen abgearbeitet<br />

wahr<br />

Anweisungsblock A<br />

Bedingung<br />

falsch<br />

Anweisungsblock B<br />

• Beispiel: nach links laufen, wenn frei ist<br />

linksUm<br />

vor<br />

wahr<br />

frei ?<br />

rechtsUm<br />

falsch<br />

<strong>Hamster</strong>-Programmierung Seite 50<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Alternativanweisung / Beispiele<br />

• if (vornFrei())<br />

vor();<br />

else if (kornDa())<br />

nimm();<br />

else if (!maulLeer())<br />

gib();<br />

else<br />

linksUm();<br />

linksUm(); // wird immer ausgeführt<br />

• if (vornFrei())<br />

if (kornDa())<br />

nimm();<br />

else<br />

vor();<br />

if (vornFrei()) {<br />

if (kornDa())<br />

nimm();<br />

else<br />

vor();<br />

}<br />

<br />

Zu welchem if gehört das else,<br />

d.h. was geschieht, wenn vornFrei()<br />

den Wert false liefert?<br />

Das else gehört immer zu dem letzten<br />

if, dem noch kein else zugeordnet ist.<br />

<strong>Hamster</strong>-Programmierung Seite 51


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Auswahlanweisungen / Beispiel<br />

• Aufgabe:<br />

– Gegeben sei das folgende <strong>Hamster</strong>-Territorium.<br />

Der <strong>Hamster</strong> weiß nicht, wieviele Körner er<br />

im Maul hat.<br />

– Falls möglich, soll er in jeder Ecke seines<br />

Territoriums genau ein Korn ablegen.<br />

• Programm:<br />

void main()<br />

{ if (!maulLeer()) gib();<br />

laufeInDieNaechsteEcke();<br />

if (!maulLeer()) gib();<br />

laufeInDieNaechsteEcke();<br />

if (!maulLeer()) gib();<br />

laufeInDieNaechsteEcke();<br />

if (!maulLeer()) gib();<br />

}<br />

void laufeInDieNaechsteEcke()<br />

{ vor(); vor(); vor(); vor(); linksUm(); }<br />

<strong>Hamster</strong>-Programmierung Seite 52<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / <strong>Aufgaben</strong><br />

• Aufgabe 5:<br />

– Gegeben sei das folgende <strong>Hamster</strong>-Territorium.<br />

Der <strong>Hamster</strong> weiß nicht, wieviele Körner er<br />

im Maul hat.<br />

– Falls möglich, soll er in jeder Ecke seines<br />

Territoriums genau ein Korn ablegen.<br />

– Wenn er keine Körner mehr im Maul hat,<br />

soll er nicht weiterlaufen.<br />

• Aufgabe 6:<br />

– Gegeben sei das folgende <strong>Hamster</strong>-Territorium. Auf jeder<br />

Kachel liegen ein oder zwei Körner.<br />

Der <strong>Hamster</strong> soll dafür sorgen, dass auf<br />

jeder Kachel genau ein Korn liegt (mit Feld<br />

aufg6a.ter und aufg6b.ter testen).<br />

<strong>Hamster</strong>-Programmierung Seite 53


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / <strong>Aufgaben</strong><br />

• Aufgabe 7:<br />

– Gegeben sei das folgende <strong>Hamster</strong>-Territorium.<br />

In den Eckfeldern liegen jeweils 1, 2 oder 3 Körner.<br />

Der <strong>Hamster</strong> weiß nicht, wieviele Körner er im Maul hat.<br />

Nach der Ausführung des Programms sollen<br />

– in der unteren linken Ecke 1 Korn,<br />

– in der unteren rechten Ecke 2 Körner,<br />

– in der oberen rechten Ecke 3 Körner und<br />

– in der oberen linken Ecke 4 Körner<br />

liegen.<br />

Außerdem soll der <strong>Hamster</strong>, sobald er feststellt, daß er kein Korn<br />

mehr ablegen kann oder nachdem er in der oberen linken Ecke das<br />

4. Korn abgelegt hat, zurück in die Ausgangsposition laufen.<br />

<strong>Hamster</strong>-Programmierung Seite 54<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Wiederholung<br />

• Auswahlanweisungen <br />

• Wiederholungsanweisungen<br />

• Boolesche Methoden<br />

• Strukturieren von Programmen<br />

• <strong>Hamster</strong> mit Gedächtnis (Boolesche Variablen)<br />

• <strong>Hamster</strong> mit Gedächtnis (Zahlen)<br />

• Integer-Methoden<br />

• Verallgemeinerungen von Daten und Methoden<br />

• Prozeduren und Methoden mit Parametern<br />

• Prozeduren und Methoden, die sich selbst aufrufen<br />

(Rekursion)<br />

<strong>Hamster</strong>-Programmierung Seite 55


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Wiederholung / Motivation<br />

• Aufgabe<br />

– Gegeben seien die beiden folgenden <strong>Hamster</strong>-Territorien:<br />

Der <strong>Hamster</strong> soll in Blickrichtung bis zur nächsten Wand laufen.<br />

• Programme<br />

void main()<br />

{<br />

vor();<br />

vor();<br />

}<br />

void main()<br />

{<br />

vor(); vor();<br />

vor(); vor();<br />

}<br />

• Allgemeingültig: solange vornFrei() wiederhole vor();<br />

<strong>Hamster</strong>-Programmierung Seite 56<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Wiederholung / while-Anweisung<br />

• while-Anweisung (while-Schleife):<br />

– Wiederholte Ausführung einer Anweisung (Iterationsanweisung)<br />

in Abhängigkeit von der Gültigkeit eines booleschen Ausdrucks<br />

while ( Boolescher Ausdruck ) Anweisung<br />

– Semantik (Bedeutung)<br />

1. Zuerst wird der boolesche Ausdruck ausgewertet.<br />

2. Falls die Auswertung den Wert true liefert,<br />

wird die Anweisung ausgeführt. Anschließend werden<br />

die Punkte 1 und 2 ein weiteres Mal ausgeführt.<br />

3. Wenn die Auswertung den Wert false liefert, ist die Ausführung der<br />

while-Anweisung beendet.<br />

• Anweisung<br />

– Grundanweisung<br />

(Grundbefehl)<br />

– Prozeduraufruf<br />

– Blockanweisung<br />

– Bedingte Anweisung<br />

– Alternativanweisung<br />

– while-Anweisung<br />

<strong>Hamster</strong>-Programmierung Seite 57


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / while-Anweisung / Darstellung<br />

• while-Schleifen<br />

– abhängig vom Ergebnis der Testbedingung werden<br />

Aktionen im Anweisungsblock wiederholt abgearbeitet<br />

Solange Bedingung wahr ist<br />

Anweisungsblock<br />

• Beispiel: bis zum Hindernis laufen<br />

solange „vornFrei“<br />

vor<br />

<strong>Hamster</strong>-Programmierung Seite 58<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Korrekte <strong>Hamster</strong>-Programme<br />

Gegeben: eine <strong>Hamster</strong>-Aufgabe mit der Charakterisierung von<br />

<strong>Hamster</strong>landschaften, also i. a. kein spezielles<br />

<strong>Hamster</strong>-Territorium.<br />

• Ein <strong>Hamster</strong>-Programm ist korrekt, wenn es alle folgenden<br />

Bedingungen erfüllt:<br />

– Es muß syntaktisch korrekt sein.<br />

– Es muß die <strong>Aufgaben</strong>stellung für alle sich aus der<br />

Landschaftscharakterisierung ergebenden möglichen<br />

Ausgangssituationen korrekt und vollständig lösen.<br />

Das Programm<br />

– verursacht keine Laufzeitfehler und<br />

– hält nach endlicher Zeit an (terminiert).<br />

<strong>Hamster</strong>-Programmierung Seite 59


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Wiederholung / Beispiel<br />

• Aufgabe<br />

– Der <strong>Hamster</strong> befindet sich auf einer beliebigen Kachel in einem<br />

durch Mauern abgeschlossenen <strong>Hamster</strong>-Territorium<br />

unbekannter Größe.<br />

Typische <strong>Hamster</strong>landschaften:<br />

Der <strong>Hamster</strong> soll in Blickrichtung bis zur nächsten Wand laufen.<br />

• Programm<br />

void main()<br />

{<br />

while (vornFrei())<br />

vor();<br />

}<br />

<strong>Hamster</strong>-Programmierung Seite 60<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Wiederholung / Beispiel<br />

• Aufgabe<br />

– Der <strong>Hamster</strong> befindet sich auf einer beliebigen Kachel in einem<br />

durch Mauern abgeschlossenen ansonsten aber mauerlosen<br />

<strong>Hamster</strong>-Territorium unbekannter Größe.<br />

Typische <strong>Hamster</strong>landschaften:<br />

Der <strong>Hamster</strong> soll in eine Ecke laufen und dabei alle Körner<br />

einsammeln.<br />

<strong>Hamster</strong>-Programmierung Seite 61


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Wiederholung / Beispiel<br />

• Aufgabe (Fortsetzung)<br />

– Der <strong>Hamster</strong> befindet sich auf einer beliebigen Kachel in einem<br />

durch Mauern abgeschlossenen ansonsten aber mauerlosen<br />

<strong>Hamster</strong>-Territorium unbekannter Größe.<br />

Der <strong>Hamster</strong> soll in eine Ecke laufen und dabei alle Körner<br />

einsammeln.<br />

• Programm<br />

void main() {<br />

sammle(); laufeBisZurNaechstenWandUndSammle();<br />

linksUm(); laufeBisZurNaechstenWandUndSammle();<br />

}<br />

void sammle() {<br />

while (kornDa())<br />

{ nimm(); }<br />

}<br />

void laufeBisZurNaechstenWandUndSammle() {<br />

while (vornFrei()) {<br />

vor();<br />

sammle();<br />

}<br />

}<br />

<strong>Hamster</strong>-Programmierung Seite 62<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Wiederholung / do-Anweisung<br />

• do-Anweisung (do-Schleife):<br />

– die Iterationsanweisung wird mindestens einmal ausgeführt<br />

do Anweisung while ( Boolescher Ausdruck );<br />

– Semantik (Bedeutung)<br />

0. Ausführung der Anweisung<br />

1. Der boolesche Ausdruck wird ausgewertet.<br />

2. Falls die Auswertung den Wert true (!) liefert,<br />

wird die Anweisung ausgeführt. Anschließend werden<br />

die Punkte 1 und 2 ein weiteres Mal ausgeführt.<br />

3. Wenn die Auswertung den Wert false liefert, ist die Ausführung der<br />

do-Anweisung beendet.<br />

• Anweisung<br />

– Grundanweisung<br />

(Grundbefehl)<br />

– Prozeduraufruf<br />

– Blockanweisung<br />

– Bedingte Anweisung<br />

– Alternativanweisung<br />

– while-Anweisung<br />

– do-Anweisung<br />

Schleifen<br />

<strong>Hamster</strong>-Programmierung Seite 63


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / do-Anweisung / Darstellung<br />

• do-Schleifen<br />

– Anweisungsblock wird beim Betreten der Schleife<br />

vor dem Test abgearbeitet<br />

– abhängig vom Ergebnis der Testbedingung werden<br />

Aktionen im Anweisungsblock wiederholt<br />

Anweisungsblock<br />

Solange Bedingung wahr ist<br />

• Beispiel: Ablegen aller Körner<br />

gib ein Korn<br />

solange „Korn im Maul“<br />

<strong>Hamster</strong>-Programmierung Seite 64<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Wiederholung / Beispiel<br />

• Aufgabe<br />

– Der <strong>Hamster</strong> hat eine bestimmte Anzahl (>0) von Körnern im<br />

Maul, die er alle ablegen soll.<br />

• Programm<br />

void main()<br />

{<br />

do {<br />

}<br />

gib();<br />

}<br />

while (!maulLeer());<br />

<strong>Hamster</strong>-Programmierung Seite 65


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Wiederholung / Beispiel<br />

• Aufgabe<br />

– Der <strong>Hamster</strong> befindet sich mit Blickrichtung Ost in der linken<br />

unteren Ecke eines durch Mauern abgeschlossenen ansonsten<br />

aber mauerlosen <strong>Hamster</strong>-Territoriums unbekannter Größe. Auf<br />

jeder Kachel innerhalb der Mauern befindet sich mindestens ein<br />

Korn.<br />

Typische <strong>Hamster</strong>landschaften:<br />

Der <strong>Hamster</strong> soll entlang der Mauern laufen und dabei alle<br />

Körner einsammeln. Alle Körner, die er im Maul hat, soll er<br />

anschließend in der linken unteren Ecke ablegen.<br />

<strong>Hamster</strong>-Programmierung Seite 66<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Wiederholung / Beispiel<br />

• Aufgabe (Fortsetzung)<br />

– Der <strong>Hamster</strong> ... . Auf jeder Kachel innerhalb der Mauern befindet sich<br />

mindestens ein Korn.<br />

Der <strong>Hamster</strong> soll entlang der Mauern laufen und dabei alle Körner<br />

einsammeln. Alle Körner, die er im Maul hat, soll er anschließend in der<br />

linken unteren Ecke ablegen.<br />

• Programm<br />

void main() {<br />

// sammle();<br />

laufeInDieNaechsteEckeUndSammle();<br />

linksUm(); laufeInDieNaechsteEckeUndSammle();<br />

linksUm(); laufeInDieNaechsteEckeUndSammle();<br />

linksUm(); laufeInDieNaechsteEckeUndSammle();<br />

legAb();<br />

}<br />

void sammle() {<br />

do {<br />

nimm();<br />

}<br />

while (kornDa());<br />

}<br />

...<br />

<strong>Hamster</strong>-Programmierung Seite 67


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Wiederholung / Beispiel<br />

Aufgabe (Fortsetzung)<br />

– Der <strong>Hamster</strong> ... . Auf jeder Kachel innerhalb der Mauern befindet sich<br />

mindestens ein Korn.<br />

Der <strong>Hamster</strong> soll entlang der Mauern laufen und dabei alle Körner<br />

einsammeln. Alle Körner, die er im Maul hat, soll er anschließend in der<br />

linken unteren Ecke ablegen.<br />

Programm<br />

...<br />

void laufeInDieNaechsteEckeUndSammle(){<br />

while (vornFrei()) {<br />

vor();<br />

sammle();<br />

}<br />

}<br />

void legAb() {<br />

do {<br />

gib();<br />

}<br />

while (!maulLeer());<br />

}<br />

<strong>Hamster</strong>-Programmierung Seite 68<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Wiederholung<br />

geschachtelte Schleifen<br />

• Aufgabe<br />

– Der <strong>Hamster</strong> befindet sich auf einer beliebigen Kachel in einem<br />

durch Mauern abgeschlossenen ansonsten aber mauerlosen<br />

<strong>Hamster</strong>-Territorium unbekannter Größe.<br />

Der <strong>Hamster</strong> soll in Blickrichtung bis zur nächsten Wand laufen<br />

und dabei alle Körner einsammeln, ausgenommen die Körner<br />

auf der letzten Kachel vor der Mauer.<br />

• Programm mit geschachtelten while-Schleifen<br />

void main() {<br />

while (vornFrei()) {<br />

// sammle<br />

while (kornDa())<br />

nimm();<br />

vor();<br />

}<br />

}<br />

<strong>Hamster</strong>-Programmierung Seite 69


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Wiederholung / Endlosschleife<br />

• Endlosschleife<br />

– die Schleifenbedingung hat immer den Wert true<br />

Beispiel:<br />

Bei der Ausführung des Programms<br />

void main() {<br />

while (vornFrei()) {<br />

while (kornDa())<br />

nimm();<br />

}<br />

}<br />

mit dem <strong>Hamster</strong>-Territorium<br />

ergibt sich eine Endlosschleife.<br />

<strong>Hamster</strong>-Programmierung Seite 70<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / <strong>Aufgaben</strong><br />

• Aufgabe 8:<br />

– In einem rechteckigen, geschlossenen Raum unbekannter<br />

Größe ohne innere Mauern sind wahllos eine unbekannte<br />

Anzahl an Körnern verstreut.<br />

Typische <strong>Hamster</strong>landschaften:<br />

Der <strong>Hamster</strong>, der sich zu Anfang in der linken unteren Ecke des<br />

<strong>Hamster</strong>-Territoriums mit Blickrichtung Ost befindet, soll alle Körner<br />

aufsammeln und dann stehenbleiben.<br />

<strong>Hamster</strong>-Programmierung Seite 71


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / <strong>Aufgaben</strong><br />

• Aufgabe 9:<br />

– Der <strong>Hamster</strong> steht vor einer regelmäßigen Mulde unbekannter<br />

Tiefe. Es liegen keine Körner im <strong>Hamster</strong>-Territorium.<br />

Typische <strong>Hamster</strong>landschaften:<br />

Der <strong>Hamster</strong>, der anfangs genau ein Korn im Maul hat, soll bis zur<br />

tiefsten Stelle der Mulde hinabsteigen, sich umdrehen, wieder<br />

hinaufsteigen und an seiner Anfangsposition stehenbleiben.<br />

<strong>Hamster</strong>-Programmierung Seite 72<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / <strong>Aufgaben</strong><br />

• Aufgabe 10:<br />

– Der <strong>Hamster</strong> befindet sich in der unteren Ecke eines<br />

gleichmäßigen rautenförmigen Territoriums beliebiger Größe. Er<br />

schaut gen Norden. Das Territorium ist durch Mauern<br />

abgeschlossen; ansonsten existieren jedoch keine Mauern. In<br />

dem Territorium befindet sich genau ein Korn.<br />

Typische <strong>Hamster</strong>landschaften:<br />

Der <strong>Hamster</strong> soll sich auf die Suche nach dem Korn machen und<br />

es schließlich fressen.<br />

<strong>Hamster</strong>-Programmierung Seite 73


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Wiederholung<br />

• Auswahlanweisungen <br />

• Wiederholungsanweisungen <br />

• Boolesche Methoden<br />

• Strukturieren von Programmen<br />

• <strong>Hamster</strong> mit Gedächtnis (Boolesche Variablen)<br />

• <strong>Hamster</strong> mit Gedächtnis (Zahlen)<br />

• Integer-Methoden<br />

• Verallgemeinerungen von Daten und Methoden<br />

• Prozeduren und Methoden mit Parametern<br />

• Prozeduren und Methoden, die sich selbst aufrufen<br />

(Rekursion)<br />

<strong>Hamster</strong>-Programmierung Seite 74<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Test-Methoden / Motivation<br />

• Prozeduren<br />

– definieren neue Befehle (Anweisungen)<br />

Beispiel:<br />

– rechtsUm();<br />

• Test-Methoden<br />

– definieren neue Testbefehle (boolesche Methoden)<br />

– liefern als Ergebnis einen booleschen Wert<br />

Beispiele:<br />

– mauerDa()<br />

– linksFrei()<br />

– rechtsFrei()<br />

– fuenfKoernerDa()<br />

<strong>Hamster</strong>-Programmierung Seite 75


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / return-Anweisung<br />

• Boolesche return-Anweisung:<br />

– liefern des Wertes einer booleschen Methode<br />

return Boolescher Ausdruck;<br />

– Semantik (Bedeutung)<br />

1. Der Wert des Booleschen Ausdrucks wird berechnet.<br />

2. Die Ausführung der booleschen Methode, die diese return-<br />

Anweisung enthält, wird beendet.<br />

3. Der Wert des Booleschen Ausdrucks wird als Ergebnis der<br />

booleschen Methode zurückgegeben.<br />

• Anweisung<br />

– Grundanweisung – Alternativanweisung<br />

(Grundbefehl)<br />

– while-Anweisung<br />

– Prozeduraufruf – do-Anweisung<br />

– Blockanweisung – return-Anweisung<br />

– Bedingte Anweisung<br />

<strong>Hamster</strong>-Programmierung Seite 76<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / return-Anweisung / Beispiele<br />

• Beispiele für die Anwendung der booleschen return-Anweisung<br />

– return true;<br />

– return vornFrei();<br />

– return maulLeer() || vornFrei();<br />

– return (kornDa() && !vornFrei());<br />

<strong>Hamster</strong>-Programmierung Seite 77


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Boolesche Methoden / Deklaration<br />

• Boolesche Methodedeklaration:<br />

– Vereinbarung eines neuen Testbefehls<br />

boolean MethodenName() { Anweisungsfolge }<br />

Methodenkopf<br />

Methodenrumpf<br />

Zusatzbedingung:<br />

» In jedem möglichen Weg durch den Methodenrumpf muß<br />

eine boolesche return-Anweisung stehen!<br />

Beispiel:<br />

boolean mauerDa()<br />

{<br />

return !vornFrei();<br />

}<br />

<strong>Hamster</strong>-Programmierung Seite 78<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Boolesche Methoden / Aufruf<br />

• Methodenaufruf:<br />

– Aufruf einer booleschen Methode<br />

MethodenName()<br />

Zusatzbedingung:<br />

» Boolesche Methodenaufrufe dürfen überall dort auftreten,<br />

wo auch die 3 vordefinierten Testbefehle aufgerufen<br />

werden dürfen, nämlich in booleschen Ausdrücken.<br />

– Semantik (Bedeutung)<br />

» Ausführung des Methodenrumpfs<br />

» Der zurückgegebene Wert wird bei der weiteren Auswertung des<br />

booleschen Ausdrucks an der Stelle verwendet, an der der<br />

Methodenaufruf stand.<br />

Beispiel:<br />

void main(){<br />

if (mauerDa())<br />

linksUm();<br />

}<br />

<strong>Hamster</strong>-Programmierung Seite 79


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Boolesche Methoden / Programm<br />

• Methoden:<br />

– Prozeduren<br />

– boolesche Methoden<br />

• Programm mit Methoden<br />

void main() { Anweisungsfolge }<br />

Methodendeklaration ... Methodendeklaration<br />

Dabei müssen die folgenden Bedingungen gelten:<br />

– Die Methodennamen sind paarweise verschieden.<br />

– Innerhalb der Methodenrümpfe werden nur Methoden<br />

aufgerufen, die auch deklariert sind.<br />

Es spielt keine Rolle, ob die aufgerufene Methode vor oder nach<br />

dem Aufruf deklariert wird!<br />

– Die Methodendeklarationen sind nicht geschachtelt.<br />

<strong>Hamster</strong>-Programmierung Seite 80<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Boolesche Methoden / Beispiel<br />

• Programm<br />

void main()<br />

{ if (linksFrei())<br />

linksUm();<br />

else {<br />

linksUm();<br />

linksUm();<br />

}<br />

}<br />

boolean linksFrei()<br />

{ linksUm();<br />

return vornFrei();<br />

}<br />

• Programm<br />

void main()<br />

{ if (linksFrei())<br />

linksUm();<br />

if (!linksFrei()) {<br />

linksUm();<br />

linksUm();<br />

}<br />

}<br />

boolean linksFrei()<br />

{ linksUm();<br />

return vornFrei();<br />

}<br />

<strong>Hamster</strong>-Programmierung Seite 81


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Boolesche Methoden / Seiteneffekt<br />

• Seiteneffekt einer booleschen Methode<br />

– nach Beendigung des Methodenaufrufs ist nicht nur der<br />

Ergebniswert berechnet, sondern auch der Zustand des<br />

<strong>Hamster</strong>s oder der <strong>Hamster</strong>landschaft verändert.<br />

• Boolesche Methoden sollten in der Regel wegen<br />

– des besseren Verständnisses<br />

– der Reduzierung der Komplexität<br />

– der geringeren Fehleranfälligkeit<br />

keine Seiteneffekte hervorrufen.<br />

Die von einer booleschen Methode bewirkten<br />

Zustandsänderungen müssen von dieser vor der Beendigung<br />

wieder rückgängig gemacht werden.<br />

<strong>Hamster</strong>-Programmierung Seite 82<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / Boolesche Methoden / Beispiel<br />

• Boolesche Methode linksFrei() ohne Seiteneffekt<br />

boolean linksFrei() {<br />

linksUm();<br />

if (vornFrei()) {<br />

rechtsUm();<br />

return true;<br />

}<br />

else {<br />

rechtsUm();<br />

return false;<br />

}<br />

}<br />

<strong>Hamster</strong>-Programmierung Seite 83


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / <strong>Aufgaben</strong><br />

• Aufgabe 11:<br />

– Der <strong>Hamster</strong> steht mit Blickrichtung Ost vor einer<br />

unregelmäßigen und mit Körnern gefüllten Mulde (ohne<br />

Überhänge!). Er weiß nicht, wie breit und tief die Mulde ist.<br />

Typische <strong>Hamster</strong>landschaften:<br />

Der <strong>Hamster</strong> soll alle Körner einsammeln und anschließend auf<br />

einer beliebigen Kachel der tiefsten Ebene sitzen bleiben.<br />

<strong>Hamster</strong>-Programmierung Seite 84<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / <strong>Aufgaben</strong><br />

• Aufgabe 12:<br />

– Der <strong>Hamster</strong>, der genau ein Korn im Maul hat, sitzt in einem<br />

geschlossenen, körnerlosen Raum unbekannter Größe. Rechts<br />

von ihm befindet sich eine Wand; das Feld vor ihm ist frei.<br />

Typische <strong>Hamster</strong>landschaften:<br />

Der <strong>Hamster</strong> soll solange an der Wand entlang laufen, bis er<br />

wieder sein Ausgangsfeld erreicht.<br />

<strong>Hamster</strong>-Programmierung Seite 85


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / <strong>Aufgaben</strong><br />

• Aufgabe 13:<br />

– Der <strong>Hamster</strong> ist zum Skifahrer mutiert. Vor ihm befindet sich ein<br />

Slalom-Parcours mit einem Korn am Ende, das das Ziel<br />

markiert.<br />

Typische <strong>Hamster</strong>landschaft mit Wegbeschreibung:<br />

Der <strong>Hamster</strong> soll den Slalom-Parcours bewältigen und das Korn<br />

fressen.<br />

<strong>Hamster</strong>-Programmierung Seite 86<br />

Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

<strong>Hamster</strong>-<strong>Modell</strong> / <strong>Aufgaben</strong><br />

• Aufgabe 14:<br />

– Der <strong>Hamster</strong> steht in der linken unteren Ecke eines Labyrinths.<br />

Dieses besteht aus Gängen, die jeweils so breit sind, wie eine<br />

Mauer. Die Gänge können verzweigen, es gibt jedoch keine<br />

Rundgänge.<br />

Typische <strong>Hamster</strong>landschaft:<br />

Der <strong>Hamster</strong> „riecht“ das einzige Korn im Labyrinth. Da er Hunger<br />

hat, versucht er natürlich, das Korn zu finden und zu fressen.<br />

<strong>Hamster</strong>-Programmierung Seite 87


Hochschule Harz<br />

Fachbereich Automatisierung und Informatik<br />

© Prof. Dr. Bernhard Zimmermann<br />

• Auswahlanweisungen <br />

<strong>Hamster</strong>-<strong>Modell</strong> / Ausblick<br />

• Wiederholungsanweisungen <br />

• Boolesche Methoden <br />

• Strukturieren von Programmen<br />

• <strong>Hamster</strong> mit Gedächtnis (Boolesche Variablen)<br />

• <strong>Hamster</strong> mit Gedächtnis (Zahlen)<br />

• Integer-Methoden<br />

• Verallgemeinerungen von Daten und Methoden<br />

• Prozeduren und Methoden mit Parametern<br />

• Prozeduren und Methoden, die sich selbst aufrufen<br />

(Rekursion)<br />

<strong>Hamster</strong>-Programmierung Seite 88

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!