Читать книгу Algorithmen und Datenstrukturen - Gunter Saake - Страница 35
Varianten der Iteration
ОглавлениеDie bisherige Schleifenvariante hat jeweils den Schleifenrumpf ausgeführt, um danach zu testen, ob sie eine weitere Iteration durchführt oder die Schleife abbricht. Der Schleifenrumpf wird somit mindestens einmal durchlaufen. Eine andere verbreitete Notation führt diesen Test am Beginn jeden Durchlaufs durch:
solange Bedingung
führe aus Schritte
While-Schleife
Nach der englischen Übersetzung des Schlüsselwortes ist diese Variante insbesondere unter dem Namen While-Schleife bekannt. Ein Beispiel für den Einsatz der While-Schleife zeigt folgender Algorithmus:
/* Bestimmung der größten Zahl einer Liste */
Setze erste Zahl als bislang größte Zahl;
solange Liste nicht erschöpft
führe aus
Lies nächste Zahl der Liste;
falls diese Zahl > bislang größte Zahl
dann setze diese Zahl als bislang größte Zahl;
gebe bislang größte Zahl aus
Bei While-Schleifen kann der Fall auftreten, dass der Schleifenrumpf keinmal ausgeführt wird, da die Abbruchbedingung bereits vor dem ersten Durchlauf zutrifft.
Iteration über festen Bereich
Die letzte verbreitete Variante ist die Iteration über einen festen Bereich, zum Beispiel über einen Zahlenbereich. Wir notieren diesen Fall wie folgt:
wiederhole für Bereichsangabe
Schleifenrumpf
For-Schleife
Nach dem englischen Schlüsselwort sind derartige Schleifen als For-Schleifen bekannt. Typische Bereichsangaben wären z.B. »jede Zahl zwischen 1 und 100«, »jedes Wagenrad«, »jeden Hörer der Vorlesung«. Der Bereich, und somit die Zahl der Ausführungen des Schleifenrumpfs, ist – im Gegensatz zu den bisher diskutierten Varianten – bei Beginn der Schleifenausführung festgelegt.
Die vorgestellten Schleifenkonstrukte entsprechen wieder jeweils Programmiersprachenkonstrukten:
wiederhole ... bis repeat ... until ...
do ... while not ...
solange ... führe aus while ... do ...
while (...) ...
wiederhole für for each ... do ...
for ... do ...
for (...) ...
Bei der Umsetzung von wiederhole... bis mit einem do-while-Konstrukt ist jedoch zu beachten, dass dabei die Bedingung negiert wird, da erstere Variante eine Abbruchbedingung erwartet, während bei der letzteren die Schleife so lange ausgeführt wird, wie die Bedingung erfüllt ist.