Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
104 KAPITEL 10. WIEDERHOLUNGSANWEISUNGEN<br />
Test Testen wir das Programm einmal fur die Landschaft in Abbildung 10.4 (links) (siehe auch<br />
Abbildung 10.5 (a)). Die Schleifenbedingung der ersten while-Anweisung wird insgesamt viermal<br />
uberpruft. Die ersten drei Male liefert sie den Wert true, d.h. der vor();-Befehl innerhalb der<br />
Iterationsanweisung wird dreimal ausgefuhrt. Bei der vierten Uberprufung steht der Hamster<br />
inzwischen vor der Mauer (siehe Abbildung 10.5 (b)), so da der Testbefehl vorn frei() nun<br />
den Wert false liefert. Damit ist die erste while-Anweisung des Hamsterprogramms beendet.<br />
Als nachste Anweisung folgt nun der links um();-Befehl. Nach seiner Ausfuhrung ergibt sich die<br />
Situation in Abbildung 10.5 (c). Nun folgt eine zweite while-Anweisung. Die Schleifenbedingung<br />
dieser while-Anweisung wird nun wiederholt ausgewertet, zweimal liefert sie den Wert true, so<br />
da der Hamster zweimal den Befehl vor(); ausfuhrt. Dann steht ervor einer Mauer, genauer<br />
gesagt in einer Ecke (siehe Abbildung 10.5 (d)), die Schleifenbedingung ist nicht mehr erfullt.<br />
Damit ist die while-Anweisung und { weil dies die letzte Anweisung des Hauptprogrammes war<br />
{ auch das gesamte Programm beendet, und zwar korrekt: Der Hamster steht in einer Ecke.<br />
######<br />
# #<br />
#<br />
#<br />
#<br />
><br />
o o #<br />
#<br />
#<br />
# o #<br />
# #####<br />
######<br />
# #<br />
#<br />
#<br />
#<br />
o o #<br />
> #<br />
#<br />
# o #<br />
# #####<br />
######<br />
# #<br />
# o o #<br />
#<br />
#<br />
^ #<br />
#<br />
# o #<br />
# #####<br />
######<br />
#<br />
#<br />
#<br />
o o #<br />
# #<br />
# #<br />
# o #<br />
# #####<br />
^<br />
(a) (b) (c) (d)<br />
Abbildung 10.5: Test von Beispiel 2<br />
Uberprufen Sie bitte selbstandig, da das Programm auch fur die anderen vorgegebenen Landschaften<br />
aus Abbildung 10.4 korrekt arbeitet. Insbesondere ist die Abbildung rechts interessant.<br />
Hier be ndet sich der Hamster bereits zu Anfang in einer Ecke.<br />
Verbesserung Sie haben sicher schon festgestellt, da die beiden while-Anweisungen des Programmes<br />
identisch sind. Aus Grunden der Ubersichtlichkeit bietet es sich also an, eine Prozedur<br />
laufe bis zur naechsten wand zu de nieren und diese zweimal aufzurufen. Damit sieht das<br />
Programm dann folgenderma en aus:<br />
void main()<br />
{<br />
laufe_bis_zur_naechsten_wand();<br />
links_um();<br />
laufe_bis_zur_naechsten_wand();<br />
}<br />
void laufe_bis_zur_naechsten_wand()<br />
{<br />
while (vorn_frei())<br />
{<br />
vor();