- Do-while-Schleife
-
In den meisten imperativen Programmiersprachen gibt es eine Kontrollstruktur namens Do-while-Schleife, die es ermöglicht, dass abhängig von einer gegebenen Booleschen Bedingung ein Codeabschnitt wiederholt ausgeführt wird.
Das Do-while-Konstrukt besteht aus einem Codeblock (Rumpf) und einer Bedingung. Der Code innerhalb des Rumpfes wird zuerst ausgeführt, dann wird die Bedingung ausgewertet. Falls die Bedingung wahr ist, so wird der Code innerhalb des Rumpfes erneut ausgeführt. Dies wiederholt sich, bis die Bedingung falsch wird. Weil die Do-while-Schleife die Bedingung überprüft, nachdem der Rumpf bereits ausgeführt wurde, nennt man diese Kontrollstruktur häufig auch eine fußgesteuerte Schleife oder Schleife mit nachfolgender Prüfung. Betrachte zum Vergleich die While-Schleife, die zunächst die Bedingung prüft, bevor der Code innerhalb des Rumpfes ausgeführt wird.
Dabei ist es möglich und in manchen Fällen auch erwünscht, dass die Bedingung stets wahr bleibt, sodass eine Endlosschleife entsteht. Wenn eine solche Schleife absichtlich erzeugt wird, dann gibt es für gewöhnlich eine weitere Kontrollstruktur (wie z. B. eine Break-Anweisung), mit der man unabhängig von der Bedingung die Terminierung der Schleife steuern kann.
Betrachte folgendes Beispiel in der Sprache C:
x = 0; do { x = x + 1; } while (x < 3);
Dies führt zunächst die Instruktion x = x + 1 aus, prüft dann die Bedingung x < 3, die erfüllt ist, also wird der Rumpf erneut ausgeführt. Dieser Prozess des Ausführens und Prüfens wird solange wiederholt, bis die Variable x ≥ 3 ist.
In den Pascal-artigen Programmiersprachen, einschließlich Delphi, gibt es keine Do-While-Schleife sondern eine Repeat-Until-Schleife, welche den gleichen Zweck erfüllt. Repeat-Until unterscheidet sich von Do-While dadurch, dass bei Repeat-Until die Bedingung wahr sein muss, um abzubrechen. Außerdem benötigt diese Schleife als einzige keinen "begin-end"-Block, um mehrere Anweisungen abzuarbeiten.
Anwendungsbeispiele für Do-while-Schleifen
Diese Do-while-Schleifen berechnen die Fakultät einer Zahl:
In QBasic:
Dim Zaehler as Byte, Fakultaet as Long Zaehler = 5 'Zahl, deren Fakultät berechnet wird. Fakultaet = 1 Do Fakultaet = Fakultaet * Zaehler Zaehler = Zaehler - 1 While (Zaehler > 0) Print Fakultaet 'Gibt das Ergebnis aus.
#include <stdio.h> int main(void) { unsigned int Zaehler = 5; unsigned long Fakultaet = 1; do Fakultaet *= Zaehler--; /*Multipliziert und dekrementiert anschließend.*/ while (Zaehler > 0); printf("%lu\n", Fakultaet); return 0; }
In Java:
int zaehler = 5; int fakultaet = 1; do { fakultaet = fakultaet*zaehler; zaehler--; } while(zaehler > 0); System.out.println(fakultaet);
In Delphi:
var Zaehler, Fakultaet : Integer; begin Zaehler := 5; Fakultaet := 1; repeat Fakultaet := Fakultaet * Zaehler; dec(Zaehler); until Zaehler = 0; ShowMessage(IntToStr(Fakultaet)); end;
Siehe auch
Wikimedia Foundation.