Akcia DO_LOOP, EXIT_LOOP, END_LOOP


Funkcia
Pomocou akcií je možné implementovať cyklus.
Deklarácia
[FOR  _ctrlVar [RANGE struct | = lBoundExpr TO uBoundExpr] ] DO_LOOP
 
 ...; akcie 1
 
 [EXIT_LOOP [expression]]
 
 ...; akcie 2
 
 [EXIT_LOOP [expression]]
 
 ...; akcie 3
 
 END_LOOP

Parametre
expression in Výraz typu Bool.

Popis
Cyklus má dva varianty:
  1. Cyklus s riadiacou premennou.
    Na začiatku cyklu je riadiaca premenná nastavená na hodnotu 1 (variant s kľúčovým slovom RANGE) alebo na hodnotu danú výrazom lBoundExpr. Hodnota výrazu musí byť platná. Taktiež sa jedenkrát vyhodnotí horné obmedzenie pre hodnotu riadiacej premennej.
    V prvom prípade (variant RANGE) je to rozmer danej štruktúry (struct\DIM).
    V druhom prípade je horné obmedzenie získané vyhodnotením výrazu uBoundExpr. Hodnota výrazu musí byť platná. Riadiaca premenná cyklu bude pri jednotlivých iteráciách automaticky postupne zvyšovaná až po horné obmedzenie. Riadiaca premenná musí byť deklarovaná typu INT. V tele cyklu je možné ju meniť. Prípadné zneplatnenie jej hodnoty spôsobí chybu za behu pri vykonávaní akcie END_LOOP. Cyklus je možné predčasne ukončiť akciou EXIT_LOOP.
    Po ukončení cyklu má riadiaca premenná hodnotu o 1 väčšiu ako horné obmedzenie.

     INT _i
     INT _uBound
     
     _uBound := 10
     FOR _i=2 TO _uBound DO_LOOP
       _uBound := _uBound + 1 ; zmena hodnoty nemá vplyv na počet iterácií
     END_LOOP
     ; hodnota premennej _i je 11
     

     INT _i
     RECORD (SD.ArchVal) _struct
     
     REDIM _struct[10]
     FOR _i RANGE _struct DO_LOOP
       REDIM _struct[2] ; zmena rozmeru nemá vplyv na počet iterácií
     END_LOOP
     ; hodnota premennej _i je 11
     


  2. Cyklus bez riadiacej premennej.
    Akcie uzavreté medzi akcie DO_LOOP a END_LOOP budú cyklicky vykonávané. Ukončiť cyklus je možné akciou EXIT_LOOP. Ak je akcia s parametrom, cyklus bude ukončený ak expression nadobudne hodnotu @TRUE.

     INT _i
     
     _i := 1
     DO_LOOP
       EXIT_LOOP _i = 10
       _i := _i + 1
     END_LOOP
     

    Ekvivalentný zápis bez podmieneného ukončenia cyklu:

     INT _i
     
     _i := 1
     DO_LOOP
       IF _i = 10 THEN
         EXIT_LOOP
       ENDIF
       _i := _i + 1
     END_LOOP
     

Poznámka
Chybný zápis cyklu nastane, ak je jeho začiatok a koniec "prekrížený" s akciou IF THEN.

Napríklad:
 
 INT _i
 _i := 1
 
 IF Sec = 1 THEN
   DO_LOOP
 ENDIF
   EXIT_LOOP _i = 10
   _i := _i + 1
 END_LOOP 

 
alebo
 
 INT _i
 
 _i := 1
 DO_LOOP
   IF _i = 10 THEN
     EXIT_LOOP
   ENDIF
   _i := _i + 1
 IF Sec = 1 THEN
     _i := _i + 1
   END_LOOP
 ELSE
   END_LOOP
 ENDIF 


Súvisiace stránky:

Napíšte komentár