Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
158 KAPITEL 12. PROGRAMMENTWURF<br />
{<br />
}<br />
rechts_um();<br />
vor();<br />
rechts_um();<br />
Damit sind alle Prozeduren bzw. booleschen Funktionen implementiert, das Hamsterprogramm<br />
ist fertiggestellt.<br />
12.7.4 Implementierung<br />
In der Implementierungsphase wird der Programmcode nun mit einem Editor in den Rechner<br />
eingegeben und auf syntaktische Fehler untersucht.<br />
12.7.5 Test<br />
In der Testphase wird das Programm auf allen Landschaften der Testmenge (siehe Abbildung<br />
12.3 gestartet. In den Fallen (a) und (c) liefert es auch die erwarteten korrekten Ergebnisse. In<br />
Fall (b) gerat das Programm jedoch in eine Endlosschleife: Die beiden Reihen werden ununterbrochen<br />
zyklisch vom Hamster durchlaufen. Also ist das Programm nicht korrekt!<br />
Es mu nun untersucht werden, woran der Fehler liegt: Der Hamster erntet die untere Reihe ab<br />
und testet die Bedingung der while-Schleife. Die boolesche Funktion liefert den Wert true, d.h.<br />
die while-Schleife wird betreten. Also begibt sich der Hamster in die obere Reihe und erntet.<br />
Anschlie end wird die Bedingung der if-Anweisung uberpruft. Die boolesche Funktion liefert<br />
den Wert false, weil sich rechts vom Hamster eine Mauer be ndet. Da die if-Anweisungen<br />
keinen else-Teil enthalt, wird als nachstes wieder die Bedingung der while-Schleife uberpruft.<br />
Eigentlich mu te diese nun den Wert false liefern, weil ja alle Reihen abgegrast sind. Tut sie<br />
aber leider nicht. Der Grund hierfur ist der, da als Vorbedingung fur die boolesche Funktion<br />
weitere reihe links vom hamster existiert, die in der Bedingung der while-Schleife aufgerufen,<br />
angenommen wird, da der Hamster gerade in Blickrichtung Osten schaut. Diese Vorbedingung<br />
ist aber nicht erfullt; denn ein Richtungswechsel wird nur im true-Teil der if-Anweisung,<br />
nicht aber im false-Teil der if-Anweisung vorgenommen. Dies haben wir bei der obigen Losung<br />
schlicht vergessen. Wir mussen das Hauptprogramm dementsprechend korrigieren:<br />
// der Hamster soll einzelne Koernerreihen abgrasen,<br />
// solange wie noch weitere Reihen existieren; er unterscheidet<br />
// dabei, ob er die Reihen von Osten oder von Westen aus abgrast<br />
void main()<br />
{<br />
ernte_eine_reihe_nach_osten();<br />
while (weitere_reihe_links_vom_hamster_existiert())<br />
{<br />
begib_dich_links_um_in_naechste_reihe();<br />
ernte_eine_reihe_nach_westen();<br />
if (weitere_reihe_rechts_vom_hamster_existiert())