4.3.4. for-Anweisung

Im Gegensatz zur repeat- und while-Anweisung wird bei einer for-Anweisung angegeben, wie oft die Schleife durchlaufen werden soll. Die Syntax einer for-Anweisung lautet
Quelltext-Beispiel:
1
for Zaehler := Anfangswert to Endwert do Anweisung
oder
Quelltext-Beispiel:
1
for Zaehler := Anfangswert downto Endwert do Anweisung
Die Variablen haben folgende Bedeutung:
Zaehler ist eine lokale Variable ordinalen Typs ohne Qualifizierer. Sie wird in dem Block deklariert, in dem die for-Anweisung enthalten ist. Die Variable muss dem Skript zuvor bekannt gemacht werden. Anfangswert und Endwert sind Ausdrücke, die zu Zaehler zuweisungskompatibel sind. Anweisung ist eine einfache oder eine strukturierte Anweisung, die den Wert von Zaehler nicht ändert.
Die for-Anweisung weist Zaehler den angegebenen Anfangswert zu und führt anschließend wiederholt Anweisung aus. Abhängig von der verwendeten Syntax wird der Wert von Zaehler bei jedem Durchlauf erhöht (for...to) oder erniedrigt (for...downto). Sobald der Wert von Zaehler mit dem Wert von Endwert identisch ist, wird Anweisung ein letztes Mal ausgeführt und anschließend die for-Anweisung beendet. Anweisung wird also einmal für jeden Wert ausgeführt, der im Bereich von Anfangswert bis Endwert liegt. Ist Anfangswert mit Endwert identisch, wird Anweisung genau einmal ausgeführt. Wenn Anfangswert in einer for...to-Anweisung größer als Endwert ist, wird Anweisung kein einziges Mal ausgeführt. Dasselbe gilt für eine for...downto Anweisung, in der Anfangswert kleiner als Endwert ist. Nach der Beendigung der for-Anweisung ist der Wert von Zähler nicht definiert.
Die Ausdrücke Anfangswert und Endwert werden zur Steuerung der Schleifenausführung nur einmal ausgewertet, und zwar vor Beginn der Schleife. Die for...to-Anweisung hat starke Ähnlichkeit mit dem folgenden while-Konstrukt:
Quelltext-Beispiel:
1
2
3
4
5
6
7
Zaehler := Anfangswert;

while Zaehler <= Endwert do
begin
  Anweisung;
  Zaehler := Succ(Zähler);
end;
Im Unterschied zur for...to-Anweisung wird Endwert aber in der while-Schleife vor jedem Durchlauf erneut ausgewertet. Wenn Endwert ein komplexer Ausdruck ist, kann dies eine Verlangsamung der Ausführungsgeschwindigkeit zur Folge haben. Außerdem können sich von Anweisung verursachte Änderungen an Endwert auf die Ausführung der Schleife auswirken. Hier einige Beispiele für for-Anweisungen:
Quelltext-Beispiel:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for I := 2 to 63 do
  if Data[I] > Max then
    Max := Data[I];

for I := 1 to 10 do
  for J := 1 to 10 do
  begin
    X := 0;

    for K := 1 to 10 do
      X := X + Mat1[I, K] * Mat2[K, J];

    Mat[I, J] := X;
  end;