Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
108 KAPITEL 10. WIEDERHOLUNGSANWEISUNGEN<br />
void main()<br />
{<br />
while (vorn_frei())<br />
{<br />
links_um();<br />
}<br />
}<br />
######<br />
# # #<br />
# #<br />
#<br />
#<br />
o o #<br />
> # #<br />
o o #<br />
# o # # #<br />
# #####<br />
Abbildung 10.6: Endlosschleifen<br />
Die Ausfuhrung des Programms wird niemals enden. Da sich um den Hamster herum keine<br />
Mauern be nden und der Hamster bei der Ausfuhrung der Iterationsanweisung die Kachel nie<br />
verla t, wird die Schleifenbedingung immer den Wert true liefern.<br />
Eine while-Anweisung, deren Schleifenbedingung immer den Wert true liefert, wird Endlosschleife<br />
genannt. Da eine Endlosschleife niemals endet, endet auch niemals das Programm, in<br />
dem die Schleife aufgerufen wird. Derartige Endlos-Programme sind im allgemeinen fehlerhaft,<br />
es sei denn, in der Aufgabenstellung wird dies explizit erlaubt. Endlosschleifen treten hau g auf,<br />
weil bestimmte Anweisungen innerhalb der Iterationsanweisung vergessen werden. Uberprufen<br />
Sie deshalb Ihre Programme, ob Situationen moglich sind, die zu einer Endlosschleife fuhren<br />
konnen. Ergreifen Sie Ma nahmen, die diesen Fehlerfall beseitigen.<br />
Im obigen Beispiel werden Sie relativ schnell merken, da sich das Programm in einer Endlosschleife<br />
be ndet; der Hamster dreht sich namlich fortwahrend im Kreis. Das mu aber nicht<br />
immer der Fall sein. Im folgenden Programm hat der Programmierer innerhalb der Iterationsanweisung<br />
der while-Schleife der main-Prozedur den Befehl vor(); vergessen. Be ndet sich der<br />
Hamster anfangs nicht vor einer Mauer, sammelt er zunachst alle Korner ein. Danach werden<br />
jeweils abwechselnd die beiden Schleifenbedingungen uberpruft, ohne das der Hamster irgendwas<br />
fur Sie Sichtbares tut; vorn frei() liefert immer den Wert true, bedingt also die Endlosschleife,<br />
und korn da() liefert immer den Wert false, da der Hamster ja bereits anfangs alle Korner<br />
gefressen hat.<br />
void main()<br />
{<br />
while (vorn_frei())<br />
{<br />
// sammle<br />
while (korn_da())<br />
{