fel
le

Ciklusok

A programok megírása során eddig felhasználtuk a szekvencia és szelekció programvezérlési szerkezeteket. Az előbbi segít abban, hogy az utasításaink ugyanabban a sorrendben kerüljenek végrehajtásra, mint amilyen sorrendben őket a program szövegében szerepeltettük. A második (elágazás) segítségével érhetjük el, hogy egyes utasításaink csakis akkor hajtódjanak végre, ha azokra szükség lenne. Egy feltétellel, vagy feltételrendszerrel írhatjuk le, melyekre van szükség, melyek hajtódhatnak végre a program futásának adott pontján.

A ciklusok akkor szükségesek, mikor valamely utasítást, vagy utasítások sorozatát nem csak egyszer, hanem többször is végre szeretnénk hajtani.

A ciklusok két jellemző részből állnak. Egyrészt definiálni kell ezt a bizonyos utasításblokkot, melyet ismételni szeretnénk. Ezt a részt ciklusmagnak nevezzük. Ezen felül szükséges megadni azt a részt, amely befolyásolja a ciklus ismétlését. Ehhez egy logikai feltételt használunk, mely értelemszerűen igaz vagy hamis értékű lehet. Ezt a feltételt ciklus vezérlő feltételnek nevezzük.

1. ábra: Ciklus részei

Vezérlés

Annak megfelelően, hogy a ciklus ismétlését az igaz vagy a hamis értékhez kapcsoljuk, beszélhetünk pozitív vezérlésű vagy negatív vezérlésű ciklusokról.

2. ábra: Pozitív vezérlésű ciklus (igaz-ra ismétel)
Egy ciklust pozitív vezérlésű ciklusnak nevezünk, ha a vezérlő feltétel igaz értéke esetén hajtja újra végre a ciklusmag utasításait. Ez esetben a vezérlő feltételt a ciklusban maradás feltételének is nevezzük.
3. ábra: Negatív vezérlésű ciklus (hamis-ra ismétel)

A negatív vezérlésű ciklusok mindenben egyenértékűek a pozitív vezérlésű ciklusokkal, de ők a ciklusmag ismétlését a vezérlő feltétel hamis értékéhez kötik. Ha a feltételünk igaz értékű lenne, úgy abbamarad a ciklus működése. Ezért ez esetben a vezérlő feltételt a ciklusból kilépés feltételének is nevezzük.

Tesztelés

Legyen bár ciklusunk negatív vagy pozitív vezérlésű - mindenképpen két fázisból áll a működése:

  • a vezérlő feltétel kiértékelése,
  • a ciklusmag utasítássorozatának végrehajtása.

Különbség adódhat abból, hogy a melyik fázissal kezdődik a ciklus működése. Kezdhetünk a vezérlő feltétel kiértékelésével, de kezdhetjük rögtön a ciklusmaggal is. Második esetben a ciklus vezérlő feltételének szerepét értelmezhetjük úgy is, hogy kell-e még egyszer végrehajtani. Első esetben azonban előállhat olyan szituáció, hogy a vezérlő feltétel már a legelső kiértékeléskor is elutasító értékű - ez esetben a ciklusmagot egyetlen egyszer sem kell végrehajtani.

Amennyiben a ciklus legelső lépésben rögtön a vezérlő feltétel kiértékelésével kezd, és így adódhat, hogy a ciklusmag egyetlen egyszer sem kerül végrehajtása - előltesztelő ciklusról beszélünk. Ellenkező esetben hátultesztelő ciklusnak nevezzük.
4. ábra: Előltesztelő (pozitív vezérlésű) ciklus

Vegyük észre, hogy az előltesztelőség vagy hátultesztelőség nem igényli egyértelműen sem a pozitív, sem a negatív kiértékelést. Ennek megfelelően négyfajta ciklus képzelhető el:

  • előltesztelő, pozitív vezérlésű,
  • előltesztelő, negatív vezérlésű,
  • hátultesztelő, pozitív vezérlésű,
  • hátultesztelő, negatív vezérlésű.

5. ábra: Hátultesztelő (pozitív vezérlésű) ciklus

A Pascal nyelven a while ciklus pozitív vezérlésű, mig a repeat ciklus negatív vezérlésű. A programozási nyelvek ebben eltérhetnek, milyen vezérlésű ciklusokat valósítanak meg. A BASIC nyelven például mind a négy ciklus szerepel.

A C# nyelven látni fogjuk, hogy csak pozitív vezérlésű ciklusok léteznek, és bár összesen négy lehetőségünk van ciklust fogalmazni, de az egyetlen (ritkább esetkben alkalmazható) hátultesztelős ciklust leszámítva a maradék három mindegyike előltesztelős viselkedésű.

Hernyák Zoltán
2013-01-24 10:45:50