Eme cikkemben kicsit (kicsit nagyon ) rövid leszek. Elozo számunkban vettük az elöl és hátultesztelo ciklusokat ezekre mind a stuktogrammi ábrát, ill. Pascal-ban és C-ben példát. A léptetéses ciklusra csak a stuktogrammbeli ábráját vettük, elevenítsük fel:

Ezután szeretnék nyelvi példát mutatni a léptetéses ciklusra:

A Pascal nyelvben használatos léptetéses ciklus

for ciklusváltozó := kezdoérték to végérték do utasítás vagy utasítás blokk. {maga a ciklus mag} for ciklusváltozó := kezdoérték downto végérték do utasítás vagy utasítás blokk. {maga a ciklus mag}
A ciklusra jellemzo tudnivalók:
  • A ciklusváltozó CSAK egész típus lehet.
  • A ciklusváltozó alap-beállítás szerint TO-nál eggyel no DOWNTO-nál eggyel csökken.
Valósítsuk meg az elozo számban közölt stuktogramm Pascal forráskódját. Íme a stuktogramm:

Íme a Pascal forráskód:

var mennyi, ossz, i, szam: Integer; BEGIN   Write('Mennyi szám összege lesz: '); Readln(mennyi); WriteLn;   ossz:=0;   for i:=1 to mennyi do   begin     ReadLn(szam);     ossz:=ossz+szam;    end;   WriteLn('Az összeg: ', ossz); END.

Lássuk a C nyelv léptetéses ciklusát

for ( inicializáló rész; lefutási feltétel; módosító rész )   utasítás(blokk);  //ez maga a ciklus mag
Láthatjuk, hogy ez már kicsit összetettebb, mint a Pascal megfeleloje és ebbol következoen sokkal rugalmasabban is kezelheto. Lássuk a jellemzoit ennek is:
  • Látható, hogy a for utáni feltétel ( ) - tehát zárójelben van.
  • Az inicializáló rész arra szolgál, hogy kezdo értéket adjuk a ciklus változónak, vagy a ciklus változóknak ugyanis több is lehet. Fontos!!! bármilyen numerikus típus lehet a ciklusváltozó, tehát valós is !

  • Ha több ciklusváltozó van akkor azokat , (veszzovel) választjuk el egymástól.
    Ha befejeztük a inicializáló részt akkor azt ; (pontoszvesszovel) zárjuk le.
    (Érdekesség képpen megemlítem, hogy a C++ még lokális deklarációt is megenged az inicializáló részben. De ezzel óvatosan bánjunk.)
  • Mivel a C rugalmasabb, ezért teljesen a while() ciklusra formája szerint épül fel a léptetéses ciklus. (Így lehetséges, a valós változó ciklus-változóként történo használata.)

  • Tehát a lefutási feltétel a while()-hoz hasonlóan értékelodik ki:
    - ha feltétel nem 0 akkor lefut a ciklus, ha 0 akkor kilép a ciklusból
    A lefutási feltételhez megadhatunk veszovel elválasztva több feltételt is, de mindig csak az utolsó vezérel, ez értékelodik ki.
    (Nem szükséges összefüggésbe hoznunk a ciklusváltozót, a lefutási-feltétellel.)
  • Most jön egy érdekesebb rész a módosító rész, mely ugyancsak több veszovel elválasztott utasításból is állhat. A módosító rész, mint neve is mutatja általában a ciklusváltozót módosítja, de bármely C-ben megengedett parancs - függvény is állhat itt, pl:
  • for (i=1; i<10; printf("%d", i), i++); ennek másik megfeleloje: for (i=1; i<10; i++)   printf("%d", i)
  • Pár megjegyzendo apróság:

  • - Amint látjuk egy utasításra érvényes, a közvetlenül mögötte állóra. Ha nincs mögötte semmi akkor ne felejtsük el kirakni a pontosvesszot.
    - Használható utasításblokkban is, a {} - a megszokott kapcsozárójelekkel.
    - Bármely rész (inicializáló, lefutási feltétel, módosító) elhagyható, a fordító nem jelez hibát. A pontosvesszoknek viszont kint kell lenniük. (pl: for(;;))
    - Ha a lefutási feltételt elhagyjuk akkor oda automatikusan 1 (igaz) helyettesítodik be (pl: for(;1;)) ami végtelen ciklust jelent. Így óvatosan bánjunk a részek elhagyásával.
Lássuk a stuktogramm C-beli megvalósítását:
#include <stdio.h> #include <conio.h> void main() {   int mennyi, ossz, i, szam;   printf("Mennyi szám összege lesz: "); scanf("%d", &mennyi);   ossz=0;   for (i=1; i<=mennyi; i++)   {     scanf("%d", &szam);     ossz+=szam;         // ossz = ossz + szam   }   printf("\n\n Összeg: %d", ossz); }
Persze a módosító rész liberális voltából a ciklus egy sorral is megadható:
for (i=1; i<=mennyi; scanf("%d", &szam), ossz+=szam, i++);
Nos ennyit a léptetéses ciklusról, következo cikkünkben a szubrutinokkal foglalkozunk.

A példaprogramok a Forráskód.zip-ben vannak.