Wählen Sie oben rechts eine andere Programmiersprache aus.

Wählen Sie oben rechts eine andere Programmiersprache aus.

Wählen Sie oben rechts eine andere Programmiersprache aus.

Wählen Sie oben rechts eine andere Programmiersprache aus.

forforForForfor (Operator)

Name

forforForForfor — Eröffnet einen Schleifenblock, der i.d.R. mit einer festen Anzahl an Durchläufen ausgeführt wird.

Signatur

for( : : Start, End, Step : Index)

Herror for(const Hlong Start, const Hlong End, const Hlong Step, Hlong* Index)

Herror T_for(const Htuple Start, const Htuple End, const Htuple Step, Htuple* Index)

void For(const HTuple& Start, const HTuple& End, const HTuple& Step, HTuple* Index)

static void HOperatorSet.For(HTuple start, HTuple end, HTuple step, out HTuple index)

def for(start: Union[float, int], end: Union[float, int], step: Union[float, int]) -> Union[float, int]

Beschreibung

Schreibweise in HDevelop: for Index := Start to End by Step

forforForForfor eröffnet einen Schleifenblock, der i.d.R. mit einer festen Anzahl an Durchläufen ausgeführt wird. Der forforForForfor-Block erstreckt sich bis zur zugehörigen endforendforEndforEndforendfor-Anweisung.

Die Anzahl der Durchläufe wird durch die Werte für StartStartStartstartstart, EndEndEndendend und die Schrittweite StepStepStepstepstep 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 forforForForfor-Schleife ausgewertet werden. Innerhalb der forforForForfor-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 IndexIndexIndexindexindex ebenfalls vom Typ integer. In allen anderen Fällen ist die Variable IndexIndexIndexindexindex vom Typ real.

Vor jedem Schleifendurchlauf wird der Wert der Laufvariablen IndexIndexIndexindexindex mit dem Endwert verglichen. Ist -- bei einer positiven Schrittweite -- der Wert größer als der (bei der Initialisierung gesetzte) Endwert, wird die forforForForfor-Schleife beendet und das Programm hinter der korrespondierenden endforendforEndforEndforendfor-Anweisung fortgesetzt. Bei einer negativen Schrittweite muss die IndexIndexIndexindexindex-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 endforendforEndforEndforendfor-Anweisung oder einer continuecontinueContinueContinuecontinue-Anweisung, wird die (bei der Initialisierung gesetzte) Schrittweite auf den aktuellen Wert der IndexIndexIndexindexindex-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 endforendforEndforEndforendfor-Anweisung beendet wird.

Der Aufruf einer breakbreakBreakBreakbreak-Anweisung innerhalb des Schleifenkörpers bewirkt das sofortige Verlassen der forforForForfor-Schleife. Das Programm wird hinter der korrespondierenden endforendforEndforEndforendfor-Anweisung fortgesetzt. Eine continuecontinueContinueContinuecontinue-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 forforForForfor-Schleife durch eine stopstopStopStopstop-Anweisung oder durch Drücken des Knopfes Stop angehalten und die Ausführungsmarke manuell umgesetzt, so wird die forforForForfor-Schleife in der aktuellen Iteration fortgeführt, solange die Ausführungsmarke nur innerhalb der forforForForfor-Schleife oder auf die endforendforEndforEndforendfor-Anweisung gesetzt wird. Wird die Ausführungsmarke auf oder vor die forforForForfor-Anweisung gesetzt und die Ausführung fortgesetzt, so wird die Schleife neu initialisiert und erneut komplett durchlaufen.

Parameter

StartStartStartstartstart (input_control)  number HTupleUnion[float, int]HTupleHtuple (integer / real) (int / long / double) (Hlong / double) (Hlong / double)

Startwert des Schleifenzählers.

Default: 1

EndEndEndendend (input_control)  number HTupleUnion[float, int]HTupleHtuple (integer / real) (int / long / double) (Hlong / double) (Hlong / double)

Endwert des Schleifenzählers.

Default: 5

StepStepStepstepstep (input_control)  number HTupleUnion[float, int]HTupleHtuple (integer / real) (int / long / double) (Hlong / double) (Hlong / double)

Änderung bei jedem Schleifendurchgang

Default: 1

IndexIndexIndexindexindex (output_control)  number HTupleUnion[float, int]HTupleHtuple (integer / real) (int / long / double) (Hlong / double) (Hlong / double)

Laufvariable.

Beispiel (HDevelop)

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

Ergebnis

Sind die Parameterwerte korrekt, dann liefert forforForForfor (als Operator) den Wert 2 ( H_MSG_TRUE) . Andernfalls wird eine Fehlerbehandlung durchgeführt und ein Fehlercode zurückgeliefert.

Alternativen

whilewhileWhileWhilewhile, untiluntilUntilUntiluntil

Siehe auch

repeatrepeatRepeatRepeatrepeat, breakbreakBreakBreakbreak, continuecontinueContinueContinuecontinue, endforendforEndforEndforendfor

Modul

Foundation