Oszd meg!

Add a Twitter-hez Add a Facebook-hoz Add a Startlaphoz Add az iWiW-hez Add a Google Reader-hez

Közösség

Belépés

E-mail cím:
Jelszó:

CIKLUSOK

CIKLUSOK

A ciklusokról általában

Általánosságban bármilyen ismétlõdõ tevékenységet ciklusnak nevezünk, strukturális programozásban szokásos elnevezése az iteráció. Az ismétlés kapcsán meg kell mondanunk, hogy a tevékenységet

-         hányszor hajtsuk végre, vagy

-         meddig tartson az ismétlés, vagy

-         mikor hagyjuk abba az ismétlést.

Ha elõre tudjuk, hogy hány alkalommal kell a tevékenységet végrehajtani, akkor számláló ciklusról beszélünk. A számláló (vagy számlálós) ciklus esetén tehát megadjuk, hogy mit kell elvégezni és hogy hány alkalommal. Az általunk vett programnyelvben ennek megvalósítása a FOR kulcsszóhoz kapcsolódik, ezért ezt gyakran For ciklusnak is nevezzük. Mivel a Pascal nem ad lehetõséget a lépésköz megválasztására, ezért itt az általásosságok közt sem tárgyaljuk ezt az esetet.

Adott számszor ismétlõdõ tevékenység pl: Lépj elõre hetet! Számolj le 10db 1000 forintost! Tapsolj ötöt! Nagyon fontos, hogy az ismétlõdõ mozzanat mindig egy elemi tevékenység, amit megfelelõ számszor ugyanúgy végzünk el, hajtunk végre. (De bármit tekinthetünk elemi tevékenységnek pl: Építs 10 házat!) Ezért a For ciklusnál is mindig alkalmazzuk majd a Begin End párt annak az elemi tevékenységnek a kijelölésére, amire az ismétlés vonatkozik.!

A „Tapsolj ötöt!”, esetén a tapsolás az elemi tevékenység, az ötöt (vagyis ötször) az ismétlés száma. Ez egy számlálós típus lesz, melyet többféle képpen meg lehet valósítani. Egy kicsit formalizálva a leírást:

Ismétlés ötször

Taps

formában írhatjuk ezt le a „Tapsolj ötöt” utasítást[1]. Tehát elõbb megadjuk, hogy hányszor, aztán hogy mit is kell ismételten végrehajtani, milyen utasítást. Egy kicsit másként leírva megadjuk, hogy mettõl meddig számlálva kell minden egyes szám elhangzása után tapsolni.

1-tõl 5-ig számlálva minden egyes számra

taps.

Mely végrehajtva így néz ki:

1 és taps

2 és taps

3 és taps

4 és taps

5 és taps

A számlálást tetszõéleges helyen kezdhetjük, lehetne például 2-tõl 6-ig, de a természetes 1-tõl 5-ig.

A programnyelvek (egy része) megkövetelik, hogy megadjuk mi menjen, változzon, számláljon 1-tõl 5-ig. Azt a változót ami 1-tõl 5-ig változik ciklusváltozónak nevezzük.  A leírás így történik:

Ismétlés i :=1 –tõl 5-ig

            Taps

Másképpen leírva:

Ciklus i :=1 –tõl 5-ig

            Taps

Tehát i a ciklusváltozó. Az i ciklusváltozó változik 1-tõl 5-ig. Az i kezdeti értéke 1 lesz és egyesével fog 5-ig (azt is felvéve) változni, növekedni. Az i minden egyes értékére történik egy taps. Tehát i felveszi a kezdõértéket, ez 1, utána taps, aztán i értéke 2 lesz, utána taps….végül i értéke 5 lesz utána taps. Amikor i felvette a végértékét befejezõdik a ciklus és más tevékenység következik. A ciklusból kilépve a ciklus utáni utasítás következik végrehajtásra. Az i ciklusváltozó értéke az egyes nyelvekben a ciklusból kilépve eltérhet a megjelölt végértéktõl, sõt van ahol nem is tudjuk i-t tovább használni, tehát szokjuk meg, hogy már most sem használjuk tovább az i-t, csak a ciklus vezérlésére. Az i ciklusváltozó szerepe a ciklus vezérlése, értéke a ciklusban használható, utána már nem.

A fenti leírást bizonyos esetekben helyettesíthetjük például azzal, hogy

Ciklus i:=2-tõl 6-ig

            Taps

Ha a ciklus belsejében fontos i értéke, akkor a kezdõ és végérték fontos. Ha az a feladatunk, hogy egy szövegben a 7. betûtõl írjunk ki még 5 betût egyenként akkor feltétlenül 7-tõl kell 11-ig futtatni a ciklusváltozó érétkét.

A fenti esetekben tárgyalt számláló ciklust abban az esetben, ha a kezdõérték kisebb mint a végérték néha növekményes ciklusnak is nevezik.

 

Ciklus i:=1-tõl 6-ig

            Kiír: i

egy növekményes ciklus, i értéke 1-gyel kezdõdõen 6-ig, azzal bezárólag egyenként megjelenik a monitoron. Az i kezdõértéke 1 és végértéke 6. Tehát az íráskép

123456

vagy valami ilyesmi lesz.

Ha a ciklusváltozó kezdeti értéke nagyobb mint a végérték azt csökkenõ (nem csökkeményes) ciklusnak nevezzük. A csökkenés tényét külön jelezni kell!

Ciklus i:=5 –tõl 1-ig csökkenõ

            Kiír: i

Az íráskép a monitoron ekkor

            54321

vagy valami ilyesmi, de ezzel a tartalommal lesz.

 

A számlálós ciklus algoritmusát mindig az alábbi forma alapján írd!

Növekvõ esetén:
Ciklus i:=k-tól v-ig
    ciklusmag
 Ciklus vége
 

Csökkenõ esetén:

Ciklus i:=k-tól v-ig [csökkenõ]
    ciklusmag
 Ciklus vége

 

Tehát kölezõ jelezni, hogy ciklusról van szó, ezt követi a ciklusváltozó neve (i), majd, hogy mi a kezdõváltozó neve (k), vagy értéke és mi a végérték, vagy annak neve (v). A ciklus végét is feltétlenül jelezni kell! Ügyelj a struktúrált írásra, a ciklusmag mindig kerüljön beljebb!

 

A számlálós ciklus után térjünk át az elöl tesztelõ ciklusra! Ha tudjuk hogy meddig tartson a tevékenység (tehát nem hányszor) akkor, úgy kell leírni az ismétlést, ciklust, hogy elõbb megadjuk, hogy meddig, mely feltétel igaz értékéig akarunk ismételni, majd megadjuk, hogy mi az a tevékenység amit ismételni akarunk. Amíg bírod addig táncolj. Amíg éhes vagy addig egyél! Amíg van mit enni addig egyél! (A mondatok a magyar nyelv sajátságai miatt másként is hangozhatnának pl: „Egyél, amíg van mit!”. De ezekben a formákban a mi szempontunknak kevésbé felelnek meg. A mondatainkat mindig alakítsuk át az elõbbi, talán egy kicsit kicsavart, de a célnak jobban megfelelõ formára!) 

A „Míg van kedved, addig tapsolj!” mondatban a tapsolás az elemi tevékenység az ismétlés számát azonban nem tudjuk elõre. Ha van kedvem tapsolni, akkor tapsolok egyet, s ha a tapsolás után még mindig van kedvem, akkor újabbat tapsolok. Minden tapsolás után átgondolom, van-e kedvem tovább tapsolni? Az fontos, hogy a tapsolás, tehát az ismétlõdõ elemi tevékenység elvégzése befolyásolja a tapsoláshoz való kedvemet. (Egyszer csak elmegy a kedvem a tapsolástól, mert elkezd fájni a tenyerem, vagy elfáradok.) Formálisan leírva

Míg van kedved

Taps

Utalva az ismétlésre a tevékenységgel kapcsolatban inkább így kell írnunk:

Ciklus míg van kedved

            Taps

Ha egyáltalán nincs kedved tapsolni, akkor azt el sem kezded. Tehát lehet, hogy az ilyen, az ismétlés feltételét elõl tarlamazó, elöl tesztelõ ciklus egyszer sem hajtódik végre. Itt is igaz, hogy az elemi tevékenység bármi lehet és annak jelzésére a programban kötelezõ használni a Begin End zárójel párt.

Ennél a ciklusfajtánál a logikai kifejezés a ciklusmag végrehajtása elõtt kerül kiértékelésre. Ha az eleve hamis, akkor a ciklus egyszer sem kerül végrehajtásra. Ezért ezt a logikai kifejezést belépési feltételnek is hívjuk. Az egyetlen utasításból álló ciklusmag (ha több utasítás, akkor blokk) addig kerül végrehajtásra, amíg a logikai kifejezés igaz. A logikai kifejezésben szereplõ változókat a kiértékelés elõtt értékkel kell ellátni. A ciklus belsejében zajló tevékenység a logikai kifejezésben levõ változó értékét kell, hogy változtassa!

(Mivel a hátultesztelõ ciklusokat az egyes programnyelvek másképpen értelmezik, akár egymással ellentétes logikával, így nem foglalkozunk velük.  A programozás alapjainak elsajátítása után más programnyelvi környezetben majd tanulunk a hátultesztelõ ciklusról.)

 

Mindkét ciklusfajtánál (igazán mindháromnál) felfedezhetünk közös elemeket. Mindkettõ megvizsgál valamilyen feltételt, amit ciklusfeltételnek nevezünk. Döntenünk kell az ismétlésrõl vagy az ismétlés befejezésérõl. A ciklusfeltételt tartalmazó rész a ciklus fej. Mindkét ciklus tartalmaz olyan utasítás(oka)t, amit(ket) ismételni kell. Az ismétlõdõ utasítás a ciklus belsejét alkotja, ez a ciklusmag vagy ciklustörzs. Az elöl tesztelõ és a számláló ciklusok felépítése tehát:

Ciklus fej

ciklus törzs

 

Mindkét ciklusnál  elõbb tesztelünk és csak utána hajtjuk végre a ciklusmagot.A számláló ciklus teszje, hogy a ciklusváltozó értéke elérte-e a végértéket[2]. Az elöl tesztelõ ciklus esetén a teszt a feltétel teljesülésének, igaz voltának a vizsgálata.

Megjegyzések, feladatok:

A magyar nyelv, vagy agy egy ismétlõdõ tevékenység esetén általában nem a folytatásának hanem a befejezésének feltételét adja meg. Ezek tipikusan hátultesztelõ ciklusok lesznek. A hátul tesztelõ ciklusnál a tevékenység egyszer mindenképp végrehajtódik. Ilyenek az alábbi mondatok:

Keverd, míg fokhagyma szagú nem lesz! (Keverés után, ha megcsap a fokhagyma szag, abbahagyom.)

Fõzd, míg elég sûrûvé nem válik! (Fõzés után, ha megáll benne a kanál abbahagyom.)

Húzd, míg el nem szakad! (Húzom, ha elszakadt nem húzom tovább.)

Persze van mondásunk az elöl tesztelõre is:

Addig üsd a vasat, amíg meleg! (Elõbb megnézem meleg-e, s ha igen, ütöm, egyet ütök, majd újra nézem meleg-e még?!.) A mondást így kell átírni, értelmezni: Amíg meleg a vas addig üsd!

Próbálj önállóan ilyen mondatokat, mondásokat gyûjteni és elemzni, leírni a vett módon!

 

 


[1] Vegyük észre, hogy az utasítás fogalma igen rugalmas. Ha egy utasítást tovább már nem bonthatunk az lesza z elemi utasítás pl egy szorzás a mi programnyelvünkben.

[2] A tesztelést a program automatikusan végzi, mi nem is tudjuk hogyan. (A forráskódok általában nem nyiltak.)