Schleifen

Einleitung

Computer sind unglaublich praktisch, wenn es darum geht, immer die gleiche Aufgabe xmal hintereinander zu wiederholen. Weil solche Aufgaben sehr oft programmiert werden, gibt es dafür besondere Kontrollstrukturen, so genannte Schleifen.

In diesem Kapitel lernst du die drei Kontrollstrukturen while, do while und for kennen. Du lernst auch, warum Endlosschleifen deinen Computer blockieren und wie du damit umgehen kannst.

Inhalt:
while
do while
for
Endlosschleifen

Allgemeiner Aufbau von Schleifen

Jede Schleife ist nach dem selben Grundprinzip aufgebaut:
Sie wiederholt einen Codeblock (den "Schleifenkörper") solange, wie eine bestimmte Bedingung erfüllt ist.

Im Kapitel Programmieren hast du bereits eine solche Schleife kennengelernt:

1: Anfang 2: Orange nehmen 3: Schalenstück abreissen 4: 3 wiederholen, solange noch Schale vorhanden 5: Meldung: Orange geschält. 6: Ende

Zeile 4 beschreibt eine Schleife mit der Bedingung "solange noch Schale vorhanden" und dem Schleifenkörper "Schalenstück abreissen".

while

Die while-Schleife führt den Schleifenkörper solange aus, wie die Bedingung erfüllt ist.

i=0; while(i<2) { i++; output(i); } output('Ende');

Die Bedingung wird zwischen Klammern gleich nach dem Schlüsselwort while geschrieben. Der Schleifenkörper wird danach zwischen zwei geschwungenen Klammern notiert.

Das Programm arbeitet wie folgt:

  1. Es speichert den Wert 0 in der Variable i.
  2. Es überprüft die Bedingung der while-Schleife. 0 ist kleiner als 2, also wird der Schleifenkörper ausgeführt.
  3. Es erhöht den Wert der Variable i um 1.
  4. Gibt den Wert von i (im Moment 1) aus. Der Schleifenkörper ist hier zu Ende.
  5. Das Programm überprüft erneut die Bedingung. 1 ist kleiner als 2, also geht es wieder in der Schleife weiter. i wird um 1 erhöht und ausgegeben (2).
  6. Nun wird wieder die Bedingung überprüft. 2 ist nicht kleiner als 2, der Schleifenkörper wird also nicht ausgeführt.
  7. Das Programm gibt 'Ende' aus.
Um Fehler zu vermeiden, sollten alle Variablen, die in der Schleifenbedingung vorkommen, klar definiert sein.
Ist die Bedingung von Anfang an nicht erfüllt, wird der Schleifenkörper nie ausgeführt.

do while

Die do-while-Schleife funktioniert genau so wie die while-Schleife, mit dem einzigen Unterschied, dass sie die Bedingung nach der Ausführung des Schleifenkörpers überprüft.

i=0; do { i++; output(i); } while(i<2); output('Ende');

Der Schleifenkörper wird zwischen geschweiften Klammern gleich nach dem Schlüsselwort do geschrieben. Darauf folgt das Schlüsselwort while mit der Bedingung in Klammern. Die ganze Struktur muss mit einem Strichpunkt abgeschlossen werden.

for-Schleife

Eine besondere Schleife ist die for-Schleife. Sie überprüft nicht nur vor jedem Durchgang eine Bedingung, sondern ändert auch jedesmal den Wert eines Zählers.

for(i=0; i<2; i++) { output(i); } output('Ende');

In der Klammer nach dem Schlüsselwort for müssen drei Anweisungen gemacht werden:

  1. Initialisierung der Zählervariable.
    Es ist üblich als Variablennamen für Zähler 'i' zu verwenden. Der Wert, welcher der Zählervariable zugewiesen wird, gilt für den ersten Durchgang.
  2. Die Bedingung.
    Normalerweise enthält die Bedingung die Zählervariable (i). Die Schleife wird solange ausgeführt, wie die Bedinung erfüllt ist.
  3. Eine Änderungsoperation für die Zählervariable.
    Meistens muss die Variable um 1 erhöht werden.

Endlosschleifen

Wenn in einer Schleife die Bedingung auf jeden Fall immer erfüllt ist, spricht man von einer Endlosschleife. Gerät ein Programm in eine Endlosschleife, kann es nicht mehr gestoppt werden und bringt im schlimmsten Fall den Computer zum Absturz!
Endlosschleifen entstehen, wenn man nicht versteht, was die Schleife genau macht oder wenn die Bedingung nicht genau durchdacht ist.

Endlosschleifen im CodeLab haben je nach verwendetem Browser unterschiedlich schwerwiegende Auswirkungen.
Unter Umständen reagiert der Browser nicht mehr und "friert ein". In diesem Fall muss das Programm über Apfel-Alt-Esc (bei Mac OS X) oder über Ctrl-Alt-Delete (bei Windows) beendet werden.

Beispiel:

i=0; while(i<10) /*Endlosschleife*/ { i++; output(i); if(i==4) { i=0; } }