for — Eröffnet einen Schleifenblock, der i.d.R. mit einer festen Anzahl an
Durchläufen ausgeführt wird.
Schreibweise in HDevelop: for Index := Start to End by Step
for eröffnet einen Schleifenblock, der i.d.R. mit einer festen
Anzahl an Durchläufen ausgeführt wird.
Der for-Block erstreckt sich bis zur zugehörigen
endfor-Anweisung.
Die Anzahl der Durchläufe wird durch die Werte für Start,
End und die Schrittweite Step festgelegt.
Diese Parameter können neben konstanten Werten auch durch Ausdrücke oder
Variablen initialisiert werden.
Es ist zu beachten, dass die Schleifenparameter nur am Anfang, beim
Betreten der for-Schleife ausgewertet werden.
Innerhalb der for-Schleife haben Änderung an den Variablen, die zur
Initialisierung der Schleife verwendet wurden keinen Einfluss auf die Anzahl
an Durchläufen.
Die übergebenen Schleifenparameter müssen vom Typ integer oder
real sein.
Sind alle Eingabevariablen vom Typ integer, so ist die Variable
Index ebenfalls vom Typ integer.
In allen anderen Fällen ist die Variable Index vom Typ
real.
Vor jedem Schleifendurchlauf wird der Wert der Laufvariablen
Index mit dem Endwert verglichen.
Ist -- bei einer positiven Schrittweite -- der Wert größer als der (bei der
Initialisierung gesetzte) Endwert, wird die for-Schleife beendet und
das Programm hinter der korrespondierenden endfor-Anweisung
fortgesetzt.
Bei einer negativen Schrittweite muss die Index-Variable kleiner
als der Endwert sein, damit die Schleife abgebrochen wird.
Achtung: Ist die Schrittweite vom Typ real kann es
passieren, dass -- wenn auf Gleichheit zwischen Laufvariable und Endwert
getestet wird -- der letzte Schleifendurchlauf aufgrund von Rundungsfehlern
nicht mehr ausgeführt wird.
So wird auf manchen Systemen die folgende Schleife nicht wie erwartet vier
mal durchlaufen (mit den Werten 1.3, 1.4, 1.5 und 1.6), sondern nur drei
mal, da die Indexvariable nach drei Additionen mit 0.1 etwas
größer als 1.6 ist:
I:=[]
for Index := 1.3 to 1.6 by 0.1
I := [I,Index]
endfor
Nach dem Abarbeiten der Anweisungen des Schleifenkörpers, d.h. nach dem
Erreichen der korrespondierenden endfor-Anweisung oder einer
continue-Anweisung, wird die (bei der Initialisierung gesetzte)
Schrittweite auf den aktuellen Wert der Index-Variable aufaddiert,
und die Schleifenbedingung wie oben beschrieben erneut ausgewertet.
Das Ergebnis der Auswertung bestimmt, ob die Schleife durch einen Sprung
auf die erste Anweisung des Schleifenkörpers erneut ausgeführt wird, oder ob
die Schleife durch einen Sprung auf die erste Anweisung hinter der
korrespondierenden endfor-Anweisung beendet wird.
Der Aufruf einer break-Anweisung innerhalb des
Schleifenkörpers bewirkt das sofortige Verlassen der for-Schleife.
Das Programm wird hinter der korrespondierenden
endfor-Anweisung fortgesetzt.
Eine continue-Anweisung dagegen führt dazu, dass der Rest des
Schleifenkörpers ignoriert wird und das Program direkt mit dem Anpassen der
Laufvariablen und der Auswertung der Schleifenbedingung fortgesetzt wird.
Achtung: Es wird empfohlen darauf zu verzichten, die Laufvariable innerhalb der Schleife zu verändern.
Wird die for-Schleife durch eine stop-Anweisung oder durch
Drücken des Knopfes Stop angehalten und die Ausführungsmarke
manuell umgesetzt, so wird die for-Schleife in der aktuellen
Iteration fortgeführt, solange die Ausführungsmarke nur innerhalb der
for-Schleife oder auf die endfor-Anweisung gesetzt wird.
Wird die Ausführungsmarke auf oder vor die for-Anweisung gesetzt
und die Ausführung fortgesetzt, so wird die Schleife neu initialisiert und
erneut komplett durchlaufen.
Start (input_control) number → (integer / real)
Startwert des Schleifenzählers.
Defaultwert: 1
End (input_control) number → (integer / real)
Endwert des Schleifenzählers.
Defaultwert: 5
Step (input_control) number → (integer / real)
Änderung bei jedem Schleifendurchgang
Defaultwert: 1
Index (output_control) number → (integer / real)
Laufvariable.
read_image (Image, 'fabrik')
threshold (Image, Region, 128, 255)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 150, 99999)
area_center (SelectedRegions, Area, Row, Column)
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_display (Image)
dev_display (SelectedRegions)
dev_set_color ('white')
for Index := 0 to |Area| - 1 by 1
set_tposition (WindowHandle, Row[Index], Column[Index])
write_string (WindowHandle, 'Area=' + Area[Index])
endfor
Sind die Parameterwerte korrekt, dann liefert
for (als Operator) den Wert 2 (H_MSG_TRUE).
Andernfalls wird eine Fehlerbehandlung durchgeführt und ein Fehlercode
zurückgeliefert.
repeat,
break,
continue,
endfor
Foundation