06.08.2013 Aufrufe

PDF-Datei (ca. 1 MByte)

PDF-Datei (ca. 1 MByte)

PDF-Datei (ca. 1 MByte)

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.

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())

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!