Zählschleife und allgemeine Schleife


Wenn die Anzahl der Schleifendurchläufe vorweg bekannt ist, kann man die Zählschleife
FOR <V> := <E1> TO <E2> BY <E3> DO <S> END
mit Vorteil verwenden. Sie bedeutet folgendes:

Die drei Ausdrücke <E1> für den Startwert, <E2> für den Endwert und <E3> für die Schrittweite der Schleifenvariablen <V> werden ausgewertet (der Teil "BY <E3>" fehlt oft, dann wird E3 = 1 angenommen). Die Variable <V> wird auf den Startwert gesetzt und dann jeweils mit der Schrittweite fortgeschaltet, solange sie nicht jenseits des Endwertes angekommen ist. Dabei wird jedesmal der Rumpf <S> der Schleife ausgeführt; der Wert der Variablen <V> kann dort verwendet werden.

Warnung:  liegt der Startwert (in der durch die Schrittweite gegebenen Richtung) bereits jenseits des Endwertes, so wird der Rumpf <S> gar nicht ausgeführt.

Warnung:  den Wert von <V> im Rumpf <S> der Schleife explizit zu verändern, ist in Modula 2 möglich, aber weniger empfehlenswert ! Auch die Weiterverwendung des Endwertes von <V> nach Verlassen der Schleife ist schlechter Programmierstil.

Bemerkung:  die Ausdrücke <E1> und <E2> und die Schleifenvariable <V> können aus einem beliebigen skalaren Typ sein; <E3> ist INTEGER und gibt an, um wie viele Schritte in der Folge der Werte des Typs jeweils weiter bzw. zurück gegangen wird.

Die allgemeine Schleife

LOOP <S> END
wird beliebig oft durchlaufen; verlassen wird sie nur durch Ausführung einer irgendwo in der Anweisungsfolge <S> enthaltenen Anweisung EXIT. Ihre Verifikation ist in der Regel nicht einfach.

Bemerkung : Die in den Sprachen C, C++ und Java verwendete Schleifenkonstruktion

for (<S1> ; <C> ; <S2>) <S3>
ist gleichbedeutend mit dem Modula 2-Konstrukt
<S1> ; WHILE <C> DO <S3> ; <S2> END
führt aber auf Grund der extrem knappen Notation öfters zu Fehlern.
zurück | Inhalt | Index | vor | Vorlesung

Klaus Lagally, 22. Februar 2000, 19:36