2019. január 14., hétfő

Elől tesztelő logikai ciklusok

Mi az a ciklus



A ciklus egy olyan programvezérlési szerkezet, amely mindig legalább két részből áll:

ciklusmag: ez valamely utasítás-sorozatot tartalmaz
vezérlő feltétel: ez jellemzően valamely logikai feltétel
A ciklus, mint vezérlési szerkezet a végrehajtása során a ciklusmag utasításait képes akár többször is, ismételten végrehajtani.
Az ismétlés addig tart, amíg a vezérlő feltétel értéke ezt megengedi. Ha a vezérlő feltétel megengedi a ciklusmag végrehajtását, akkor a ciklusmag összes utasítása végrehajtásra kerül a megfelelő sorrendben. Tehát a ciklus vezérlő feltételének következő kiértékeléséhez meg kell várni, amíg a ciklusmag teljesen befejeződik.
Amennyiben a vezérlő feltétel hibásan kerül megfogalmazásra, úgy előfordulhat, hogy mindig újra és újra engedélyezi a ciklusmag végrehajtását. Ekkor a ciklus a végtelenségig ismételgeti a ciklusmagját. Az ilyen program úgy viselkedik, mintha lefagyott volna. Mindenképpen hibás működés jele.

Előltesztelő ciklusok felépítése

A C-ben többféleképpen tudunk ciklusokat készíteni. Az egyik ilyen a while ciklus. Általános alakja:
while (<feltétel>) utasítás;
A while ciklus egy előltesztelő pozitív vezérlésű ciklus. A feltétel itt egy logikai típusú feltétel. Az utasítás lehet egy darab utasítás, vagy több utasítás is (utasításblokk). Ez utóbbi esetben az utasításokat blokkjelek közé kell zárni („ {…} ”).
Pl.:
int osszeg = 0, i=1;
while (i<=100){
osszeg = osszeg + i;
i++;
}
printf(”Az első 100 egész szám összege=%d”, osszeg);


Előltesztelő ciklus működése
A ’C’-ben a while ciklus végrehajtási menete az alábbi:

a logikai feltétel kiértékelése
amennyiben a feltétel HAMIS, úgy az (5) pont következik
a ciklusmag utasításainak végrehajtása
újra az (1)-es pont következik
a program folytatása a ’while’-t követő utasítással
A while ciklus feltételét a ’ciklusban maradás’ feltételének is nevezhetjük, mivel ha a feltétel igaz értékű, akkor maradunk a ciklusban.

Elől tesztelő ciklusok
A ciklus működése során már a ciklusmag legelső ismétlését is megelőzi a ciklus vezérlő feltételének ellenőrzése, akkor elöl tesztelő ciklusról beszélünk.
Az elől tesztelő ciklusok sajátossága, hogy amennyiben ezen a legelső tesztelés során a ciklus vezérlő feltétele nem engedélyezné a ciklusmag ismétlését, úgy az egyszer sem kerül végrehajtásra.

BREAK utasítás
A ciklusmagba elhelyezhetünk ’break’ utasítást. Ennek jelentése ’while’ ciklus esetében: szakítsd meg a ciklus futását azonnal. Ennek hatására a program működése nem áll le, hanem folytatódik a ciklust követő utasításon.
Természetesen a ’break’ hatása eléggé végleges. Ha a ciklusmag direktben tartalmaz break utasítást, akkor az nem ciklus-szerű működésű lesz, hiszen a ciklusmag első végrehajtása egyben az utolsó is lesz.
Ezért a ’break’-et egy ’if’ belsejébe szoktuk elvégezni. Ez esetben az ’if’ a ciklus rendkívüli megszakítására szolgál.

Pl.:
int db = 0, a;
while ( 1 )
{
scanf(”%d”,&a); 
if (a==0) break; 
db++;
}
printf(”Összesen %d db 0-tól különböző számot írtál be”,db;


CONTINUE utasítás
A ciklusmagba elhelyezhetünk ’continue’ utasítást. Ennek jelentése ebben az esetben: szakítsd meg a ciklusmag maradék részének végrehajtását, és lépj újra a ciklus feltétel kiértékelésére.
Természetesen a continue hatása eléggé végleges. Ha a ciklusmag direktben tartalmaz continue utasítást, akkor a continue utáni ciklusmag-utasítások sosem kerülnek végrehajtásra. Ezért a continue-t egy ’if’ belsejébe szoktuk elvégezni. 
Pl.:
int db = 0, a=1;
while ( a!=0 )
{
scanf(”%d”,&a) ;
if (a<=0) continue;
db++;
}
printf(”Összesen %d db 0-tól különböző pozitív számot írtál be”,db);



Negatív vezérlésű ciklusok
Ha a ciklusmag végrehajtását a vezérlő feltétel HAMIS értéke engedélyezi, akkor negatív vezérlésű ciklusról beszélünk.

Pozitív vezérlésű ciklusok
A ciklusmag ismétlése addig tart, amíg a vezérlő feltétel értéke ezt megengedi. Ha az ismétlést a vezérlő feltétel IGAZ értéke írja elő, akkor pozitív vezérlésű ciklusról beszélünk.


Nincsenek megjegyzések:

Megjegyzés küldése