In Programmen ist es die Regel, dass die gleichen Dinge mit unterschiedlichen Daten immer wieder durchgeführt werden müssen. Um z.B. eine Datei auszulesen, muss immer wieder die nächste Zeile gelesen werden, und dann entschieden werden, was mit dieser Zeile gemacht wird. Ein anderes Beispiel ist eine Animation, in der immer wieder aufs neue berechnet wird, wo sich die Objekte gerade befinden, die auf dem Bildschirm dargestellt werden sollen. Noch ein anderes Beispiel ist eine Datenreihe, in der jeder einzelne Eintrag gemäss bestimmten Regeln verarbeitet werden muss.
Für derartige Aufgaben gibt es in allen Programmiersprachen so genannte
Schleifenkonstruktionen. In allen C-ähnlichen Sprachen gibt es zumindest die
while()-Schleife, die do .. while()-Schleife und die
for()-Schleife.
while()-SchleifeDie while()-Schleife erwartet zwischen den Klammern nach dem
while eine Bedingung
(siehe Vergleiche und bedingte Ausführung). Ist diese
Bedingung wahr, so wird der Code, der nach dem while() in geschweiften
Klammern steht, ausgeführt. Andernfalls geht der Programmablauf hinter diesem
Code weiter. Nach einmaliger Ausführung wird die Bedingung erneut getestet,
und je nach Ausgang wird nochmals gleiche Code ausgeführt, oder der Ablauf
geht nach dem Schleifencode weiter (man sagt dann, die Schleife wird verlassen).
Das folgende Beispiel zeigt, wie man mit einer while()-Schleife alle
Quadratzahlen addieren kann, die kleiner sind als 1000.
i = 1; // i durchläuft alle Zahlen ab 1
summe = 0;
while(i * i < 1000) { // solange das Quadrat von i kleiner als 1000 ist
summe += i*i; // zähle i*i zu summe dazu
i++; // erhöhe i um 1
}
Dieses Beispiel kann ebensogut JavaScript wie Java oder auch C oder C++ sein. In PHP oder Perl würde man noch allen Variablen einen Dollar voranstellen.
Ein praxisnähreres Beispiel findet sich z.B. im Abschnitt Ein- und Ausgabe.
do { } while()-Schleife Die do { } while()-Schleife unterscheidet sich von der
while()-Schleife dadurch, dass die Bedingung für die Wiederholung
der Schleife jeweils nicht am Schleifenbeginn, sondern am Schleifenende getestet wird.
Die do { } while()-Schleife wird daher im Gegensatz zur
while()-Schleife immer mindestens einmal durchgeführt.
Das folgende Beispiel zeigt einen Passwort-Einlesevorgang. Um nicht das
Wesentliche aus den Augen zu verlieren, werden dabei einige Funktionen verwendet,
die man natürlich je nach Sprache unterschiedlich programmieren müsste.
Dabei muss die Funktion passwort_kontrolle() so gedacht werden, dass
sie 0 zurückgibt, wenn das Passwort stimmt, und einen anderen Wert als 0, wenn das
Passwort falsch ist. In diesem Beispiel wird nach 3 Fehlversuchen abgebrochen.
i = 0;
do {
passwort = passwort_einlesen();
i++;
} while(i <= 3 && passwort_kontrolle(name, passwort) != 0);
Widerum könnte dieses Beispiel in C, C++, Java oder JavaScript geschrieben sein, während man in Perl oder PHP noch Dollarzeichen vor den Variablen setzen müsste, um das Beispiel zu übernehmen.
for(;;)-SchleifeDie for(;;)-Schleife wird dann gewählt, wenn sich vor dem
Durchlauf der Schleife bereits ermitteln lässt, wie oft die Schleife
durchlaufen werden muss. Die for(;;)-Schleife enthält
zwischen den Klammern drei Anweisungen, die durch Strichpunkte getrennt werden.
Diese Anweisungen werden zu unterschiedlichen Zeitpunkten ausgeführt und
bewirken verschiedenes:
while()-Schleife. Sobald die
Bedingung zum ersten Mal nicht mehr erfüllt ist, wird die Schleife verlassen und
der Code dahinter ausgeführt.Das folgende Beispiel zeigt die Berechnung der
Fakultät1 einer Zahl n
mit Hilfe einer for(;;)-Schleife.
fakultaet = 1;
for(i = 2; i <= n; i++) {
fakultaet *= i; // fakultaet mit i multiplizieren
}
Auch dieses Beispiel ist in C, C++, Java und JavaScript gleich, und kann nach Perl oder PHP übersetzt werden, indem man jeder Variablen einen Dollar voranstellt. Das Resultat ist übrigens auch richtig, wenn n = 1 oder n = 0 ist, weil dann die Schleife gar nicht ausgeführt wird.
1Die Fakultät einer Zahl n, kurz n!, berechnet das Produkt 1×2×3×...×(n-1)×n. Man braucht die Funktion u.a. in der Kombinatorik. Z.B. gibt es n! Möglichkeiten, um für n verschiedene Objekte eine Reihenfolge festzulegen. (zurück)