Hamster-Modell / Aufgaben
Hamster-Modell / Aufgaben
Hamster-Modell / Aufgaben
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