A for ciklus szintaxisa
A Free Pascalban a számláló ciklusok szintaxisa a következő:
For ciklusváltozó := kezdőérték To|DownTo végérték Do
utasítás
A kezdőérték és végérték közé a To kulcsszót kell írnunk, ha kezdőérték <= végérték, illetve a DownTo kulcsszót, ha kezdőérték >= végérték. A ciklusváltozónak sorszámozott típusúnak kell lennie. Lépésközt nem lehet megadni, a Free Pascal For ciklusa mindig egyesével számol felfelé vagy lefelé a kezdőértéktől a végértékig. Pontosabban a ciklusváltozó aktuális értékére rákövetkező illetve az azt megelőző érték lesz a következő érték. Ez azt jelenti, hogy futáskor a ciklusváltozó felveszi a kezdőértéktől a végértékig az összes, a két érték közötti értéket (beleértve a határokat is), a ciklus futási irányának megfelelő sorrendben.
A Free Pascalban a ciklus magja egyetlen utasítás lehet. Ha több utasítást szeretnénk a ciklus magjában végrehajtani, zárjuk őket Begin és End kulcsszavak, vagyis utasítászárójelek közé.
A For ciklust nagyon gyakran használjuk tömbelemek feldolgozásához, például elemi programozási feladatokban, mint az összegzés, vagy a kiválogatás tétele.
A ciklusváltozó lehetséges típusai
A ciklusváltozó típusa bármilyen sorszámozott típus lehet, azaz bármilyen egész típus, résztartomány típus, felsorolt típus, logikai, illetve karakter típus.
Előfeltételes vagy utófeltételes
A Free Pascal számlálós ciklusa előfeltételes működésű. Az ilyen ciklusoknál a ciklusmag végrehajtása előtt értékeli ki a futtatórendszer a ciklus feltételét. A számláló ciklusok esetében a ciklusfeltétel az, hogy a ciklusváltozó még nem haladta meg a végértéket a megadott irányban.
Példa:
for a := 10 to 1 do
b := b + a * 10;
A ciklus üres ciklus lesz, mivel a kezdetén a ciklusváltozó felveszi a 10-es kezdőértéket, majd a ciklusmag végrehajtása előtt ellenőrzi, hogy a megadott irányban (+1-esével) a végértékig van-e még felvehető érték. Mivel nincs, a ciklusmagot nem hajtja végre, és a ciklusváltozó értéke sem változik.
Ha a ciklus futása végfeltételes lenne, a ciklusmag egyszer végrehajtódna és csak ezután lépne ki a vezérlés a ciklusból.
Üres ciklus
Üres ciklusnak nevezzük azt a ciklust, melynek ciklusmagja egyszer sem fut le. A For ciklus lehet üres, bár ilyenre viszonylag ritkán van szükség. Válhat továbbá végtelenné, például úgy, ha a ciklusmagban megváltoztatjuk a ciklusváltozó értékét. Ez mindenképpen kerülendő, de a Free Pascal egyébként is tiltja (a Turbo Pascal nem).
Olyan ciklusfajta, amelyben a ciklusmag egyszer sem fut le. Feltételes ciklusok esetében ez nem ritka esemény.
A for ... in ciklus szintaxisa
A Free Pascalban az iterátor ciklus szintaxisa a következő:
For ciklusváltozó In típus|kifejezés Do utasítás
Az In kulcsszó után sorszámozott típus vagy ilyen típusú kifejezés állhat, és a ciklusváltozónak ennek megfelelőnek kell lennie.
Az alábbi példában a program első For ... In ciklusa kiírja a hét napjait, míg a második csak a munkanapokat. A harmadik fajta For ... In ciklus egy tömb bejárását végzi el. A közvetlen utánuk lévő utasítások ugyanazt a feladatot végzik el, csak a "hagyományos" For ... To ciklus segítségével.
Példa:
Type
TNapok = (hetfo, kedd, szerda, csutortok, pentek, szombat, vasarnap);
Var
Nap : TNapok;
Mnap : Set Of TNapok = [hetfo..pentek];
A : Array[1..7] of String
= ('hétfő','kedd','szerda','csütörtök','péntek','szombat','vasárnap');
S : String;
I : Byte;
Begin
For Nap In TNapok Do // a hét napjai FOR ... IN
Write(Nap,' ');
WriteLn;
For Nap:=Low(TNapok) To High(TNapok) Do // ugyanaz FOR ... TO
Write(Nap,' ');
WriteLn;
For Nap In Mnap Do // a hétköznapok FOR ... IN
write(Nap,' ');
WriteLn;
For Nap:=hetfo To pentek Do // ugyanaz FOR ... TO
Write(Nap,' ');
WriteLn;
For S In A Do // tömb bejárás FOR ... IN
Write(S,' ');
WriteLn;
For I:=1 To 7 Do // ugyanaz FOR ... TO
Write(A[I],' ');
WriteLn;
ReadLn
End.
FOR ciklusváltozó := kezdőérték TO|DOWNTO végérték DO utasítás
Olyan ciklusfajta, amely szintaxisában a számlálós ciklusokhoz hasonlít, de a ciklusváltozó nem egy kezdőérték és egy határ közötti értékeket vesz fel, hanem egy adatsorozat (pl. egy halmaz) valamennyi elemének értékét. A Turbo Pascal nem ismeri ezt a ciklusfajtát, de a Free Pascal igen. Ez a For ... In ciklus.
Az az érték, amelyet a ciklusváltozó elsőként vesz fel.
Az az érték, amelyet a ciklusváltozó vett fel és amelyre a ciklusmag utoljára lefutott. Azokban a nyelvekben, ahol van lehetőség a ±1-től különböző lépésköz megadására, a ciklus végértéke és a ciklus határa nem feltétlenül egyezik meg.
Az az érték, amellyel a ciklusváltozó értéke nő vagy csökken egy iterációs lépés után. Free Pascalban ez nem adható meg, helyette a sorozatban következő- illetve megelőző értéket veszi fel a ciklusváltozó.
Olyan ciklusfajta, amelyben a ciklusmag (elvileg) végtelenszer lefut. Ennek két oka lehet: vagy nem határoztunk meg semmilyen ciklusfeltételt (a Free Pascal nem ismeri ezt a fajta ciklust), vagy a megadott ciklusfeltétel sosem lesz olyan, hogy a ciklusból kilépjünk. Más szóval: WHILE-ciklusban a ciklus feltétele sosem válik hamissá, REPEAT-UNTIL-ciklusban a ciklus feltétele sosem válik igazzá.