Petrik tananyagtár: Algoritmikus szerkezetek Petrik Lajos Vegyipari, Környezetvédelmi és Informatikai Szakközépiskola Szoftverfejlesztő szak, 14. évfolyam, OKJ szám: 54 481 02 0010 54 04
___________________________________________________________________________
ALGORITMIKUS SZERKEZETEK ELÁGAZÁSOK, CIKLUSOK, FÜGGVÉNYEK 1.
ELÁGAZÁSOK ÉS CIKLUSOK SZERVEZÉSE
Az adatszerkezetek mellett a programok másik alapvető fontosságú építőkövei az ún. algoritmikus szerkezetek. Ezeknek három fő típusa létezik:
Szekvencia
Elágazás (szelekció)
Ciklus (iteráció)
A szekvencia olyan utasítássorozat, amelynek utasításait egymás után, a leírás sorrendjében kell végrehajtani. Az elágazás olyan programrészlet, amelynek részeit (ágait) különböző feltételek teljesülése, esetleg nem teljesülése esetén kell végrehajtani. A ciklus olyan programrészlet, amely egy utasítást, vagy utasítássorozatot ismétel. A strukturált programok kizárólag ezekből a szerkezetekből épülnek fel. Az elágazásoknak és ciklusoknak létezik több különböző altípusa, ezeket részletesen tárgyaljuk a következőkben. Bizonyos programozási nyelvek megengedik a feltétel nélküli vezérlésátadást, a „goto”-t is, azonban ennek az alkalmazása komoly veszélyeket rejt magában, áttekinthetetlenné, esetleg javíthatatlanná teheti programunkat, ezért lehetőség szerint kerüljük. 1.1
Elágazások
1.1.1 Egyszerű feltételes szerkezet Az egyszerű feltételes szerkezet a legegyszerűbb elágazásfajta. Valójában nem is nevezhető elágazásnak, hiszen csak egy „ága” van, amely egy feltételtől függően vagy végrehajtódik, vagy nem. Általános formája: Ha
akkor Elágazás vége
Működése: Ha a igaz, akkor végrehajtódik az . Megjegyzések: -
A bármilyen egyszerű, vagy összetett kifejezés lehet, amely logikai értéket ad eredményül.
-
Az lehet egyetlen programsor, vagy összetett utasítás.
-
Az Elágazás vége jelzés használata ajánlott, ugyanis ezzel tesszük egyértelművé, hogy meddig tart a feltételesen végrehajtandó programrész. Amennyiben az nem összetett, és az algoritmus megértését nem zavarja, elhagyhatjuk.
1
Petrik tananyagtár: Algoritmikus szerkezetek Petrik Lajos Vegyipari, Környezetvédelmi és Informatikai Szakközépiskola Szoftverfejlesztő szak, 14. évfolyam, OKJ szám: 54 481 02 0010 54 04
___________________________________________________________________________
1.1.2 Kétirányú elágazás Az elágazás talán leggyakrabban használt fajtája. A program a feltétel kiértékelése után két különböző ágon haladhat tovább. Általános formája: Ha akkor különben Elágazás vége
Működése: Ha a igaz, akkor az hajtódik végre, ha a hamis, akkor pedig az . Megjegyzés: Az egyszerű feltételes szerkezet kapcsán a -ről és az -ról leírtak itt is érvényesek. 1.1.3 Többirányú elágazás Gyakori eset, hogy egy programban nem két, hanem három, négy, esetleg még ennél is több irányban kell elágaztatnunk, bizonyos feltételektől függően. Általános formája: Elágazás esetén esetén ... esetén különben Elágazás vége
Működése: Ha a igaz, akkor az . hajtódik végre. Ha egyik feltétel sem igaz, akkor az kerül végrehajtásra. Megjegyzés: A többirányú elágazás általános formáját a legtöbb programozási nyelvben kétirányú elágazások egymásba ágyazásával kódolhatjuk. A többirányú elágazás speciális formája az érték szerinti elágazás. Ez esetben egy változó, vagy egy kifejezés lehetséges értékeihez megadhatjuk a végrehajtandó tevékenységet. Algoritmusban a többirányú elágazás általános formáját használhatjuk ezen elágazástípus leírásához. 1.2
Ciklusok
A ciklus ismételt utasítássorozat. Ez az algoritmikus szerkezet szinte minden programban előfordul, hiszen íratlan szabály, hogy egy programnak a különböző tevékenységeit többször is végre kell hajtani. Másrészt, vannak olyan programozói rutinfeladatok (pl. ellenőrzött adatbekérés, vagy vektorfeltöltés), amelyek csak ciklussal oldhatók meg. A ciklus által ismételt utasításokat ciklusmagnak nevezzük.
2
Petrik tananyagtár: Algoritmikus szerkezetek Petrik Lajos Vegyipari, Környezetvédelmi és Informatikai Szakközépiskola Szoftverfejlesztő szak, 14. évfolyam, OKJ szám: 54 481 02 0010 54 04
___________________________________________________________________________ 1.2.1 Hátultesztelős ciklus Általános formája: Ciklus amíg nem( )
vagy Ciklus amíg
Működése: A mindaddig ismételten végrehajtódik, amíg a nem teljesül, illetve amíg a teljesül. Ha a igazzá, vagy a hamissá válik, akkor a program kilép a ciklusból. Megjegyzések: -
A ciklusmagban lennie kell olyan utasításnak, amely a kilépési feltételt véges sok ismétlés után igazzá teszi (vagy a bentmaradási feltételt hamissá), ellenkező esetben sosem lépnénk ki a ciklusból, „végtelen ciklust” kapnánk.
-
A hátultesztelős ciklus magja legalább egyszer végrehajtódik.
-
Az algoritmusban a kilépési feltétel előtt a „nem” szócskát csak a magyar nyelv sajátosságai miatt használjuk, forrásnyelven nem kódoljuk!
-
Programozási nyelvtől függhet, hogy a hátultesztelős ciklusokban kilépési, vagy bentmaradási feltételt kell megadnunk, az algoritmusban szabadon dönthetünk.
1.2.2 Elöltesztelős ciklus Általános formája: Ciklus amíg Ciklus vége
Működése: A mindaddig ismételten végrehajtódik, amíg a teljesül. Ha a hamissá válik, akkor a program kilép a ciklusból. Megjegyzések: -
A ciklusmagban lennie kell olyan utasításnak, amely a bentmaradási feltételt befolyásolja, biztosítva, hogy véges sok ismétlés után kiléphessünk a ciklusból.
-
Előfordulhat, hogy az elöltesztelős ciklus magja egyetlen egyszer sem hajtódik végre. Ez akkor következik be, ha a bentmaradási feltétel már a ciklusmag első végrehajtása előtt hamissá válik.
3
Petrik tananyagtár: Algoritmikus szerkezetek Petrik Lajos Vegyipari, Környezetvédelmi és Informatikai Szakközépiskola Szoftverfejlesztő szak, 14. évfolyam, OKJ szám: 54 481 02 0010 54 04
___________________________________________________________________________ 1.2.3 Számlálós ciklus Általános formája: Ciklus :=-től -ig [-zel] Ciklus vége
Működése: A felveszi a -et, és ha értéke nem haladja meg a -et, akkor végrehajtódik a , majd a értéke a -zel megváltozik. Ezután a program újra ellenőrzi a ciklusváltozó értékét, és ha az nem haladja meg a végértéket, újból végrehajtja a ciklusmagot, és így tovább. Ha a ciklusváltozó meghaladja a végértéket, akkor kilép a ciklusból. Rövidebben: a számlálós ciklus magja mindaddig ismételten végrehajtódik amíg a ciklusváltozó értéke a kezdőérték és a végérték közé esik, beleértve a kezdő- és végértéket is. A ciklusváltozó növelése automatikus, az mindig a ciklusmag végrehajtása után történik. Megjegyzések: -
A ciklusváltozó bármely diszkrét típusú lehet, leggyakrabban egész szám, esetleg karakter. A ciklusváltozó aktuális értékét gyakran felhasználjuk a ciklusmag utasításaiban.
-
A lépésközt nem kötelező megadnunk, a legtöbb programozási nyelv csak az 1 és –1 értéket engedi meg.
-
Ha a ciklusváltozó kezdőértéke és végértéke megegyezik, akkor a ciklusmag pontosan egyszer hajtódik végre.
-
Ha a ciklusváltozó kezdőértéke azonnal meghaladja a végértéket, akkor a ciklusmag egyszer sem hajtódik végre.
-
A ciklusváltozó ciklusmagon belüli, direkt módon történő megváltoztatása TILOS!
2.
FÜGGVÉNYEK, ELJÁRÁSOK
Az eljárás (más néven alprogram, rutin, szubrutin) olyan önálló programegység, amely saját azonosítóval (névvel) rendelkezik, és egy meghatározott tevékenységet végez el. Az olyan speciális eljárásokat, amelyek kiszámítanak, majd a hívó program számára visszaadnak egy meghatározott típusú értéket, függvényeknek nevezzük. Megjegyzés: a C alapú programozási nyelvekben nincs különbségtétel az eljárások és a függvények között, a void visszatérési típusú függvények tekinthetők eljárásoknak. Eljárásokat, függvényeket a következő esetekben célszerű alkalmaznunk:
Ha egy programon belül ugyanazt a kódrészletet több alkalommal is ugyanúgy, vagy hasonló módon le kellene írnunk.
Ha egy programrészlet általános feladatot valósít meg, melyet esetleg más programokban is felhasználhatunk.
Ha terjedelmes programjainkat tagoltabbá, olvashatóbbá, áttekinthetőbbé szeretnénk tenni.
4
Petrik tananyagtár: Algoritmikus szerkezetek Petrik Lajos Vegyipari, Környezetvédelmi és Informatikai Szakközépiskola Szoftverfejlesztő szak, 14. évfolyam, OKJ szám: 54 481 02 0010 54 04
___________________________________________________________________________
Ha következetesen szeretnénk alkalmazni a felülről lefelé történő programtervezés technikáját.
A következőkben felsorolunk néhány, az eljárások, függvények témaköréhez kapcsolódó, fontos fogalmat.
Függvény-, vagy eljárásdefiníció. Az eljárásokat, függvényeket a legtöbb programozási nyelvben a főprogram előtt kell definiálnunk. Az eljárás definíciója nem jelenti annak a végrehajtását.
Függvény, vagy eljáráshívás. A függvények, eljárások programból történő végrehajtását a nevük leírásával kezdeményezhetjük. o A definiált függvényeket, eljárásokat ugyanazon programból több alkalommal is meghívhatjuk. o Gyakran előfordul, hogy egy függvényt, vagy eljárást egy másik függvényből, vagy eljárásból hívunk meg. o Sőt, egy eljárás, vagy függvény akár saját magát is hívhatja, ezt rekurziónak nevezzük. o A függvényeket olyan helyen kell meghívnunk, ahol a visszatérési típusnak megfelelő érték szerepelhet!
Paraméterek. Az eljárások és függvények bemenő, ill. kimenő adatai. o A paraméterek használata nem kötelező, de ha általános célú eljárást készítünk, akkor alkalmazásuk kifejezetten ajánlott. o Paraméteres eljárások hívásakor az eljárás neve után meg kell adnunk az aktuális paramétereket is, azaz, azokat az adatokat, amelyekkel az eljárást végre kell hajtani.
Lokális változók. Az eljárások és függvények saját változói. o Csak az eljárás, ill. függvény futásának az idejében léteznek, és azon kívülről nem érhetők el.
2.1.1 Eljárások definiálása és alkalmazása algoritmusokban Az eljárások általános formája: Eljárás eljárásnév(<paraméterlista>) <eljárástörzs> Eljárás vége
Megjegyzések: -
Az eljárásnév megadása kötelező, célszerű olyan nevet adni, amely utal az eljárás által végrehajtott tevékenységre. Ha az eljárásnév esetleg több szóból áll, akkor is egybe kell írnunk, mivel a programozási nyelvek csak „egyszavas” azonosítók alkalmazását engedik meg. Ilyen esetben szokás a szóhatárokat nagybetűvel kezdeni.
5
Petrik tananyagtár: Algoritmikus szerkezetek Petrik Lajos Vegyipari, Környezetvédelmi és Informatikai Szakközépiskola Szoftverfejlesztő szak, 14. évfolyam, OKJ szám: 54 481 02 0010 54 04
___________________________________________________________________________ -
A <paraméterlista> az eljárás bemenő és kimenő adatainak a felsorolása. A paramétereket el kell neveznünk, és meg kell adnunk a típusukat. Amennyiben paraméter nélküli eljárást írunk, az eljárásnév után nem kell semmit írnunk.
-
A rész az eljárás saját változóinak a felsorolását tartalmazza. A változókat – a paraméterekhez hasonlóan – el kell neveznünk, és meg kell adnunk a típusukat.
-
Az <eljárástörzs> tartalmazza mindazokat az utasításokat, amelyek az eljárás végrehajt. Az utasítások általában felhasználják a paramétereket, illetve a lokális változókat.
-
Ha egy lokális változó típusa és szerepe egyértelmű, akkor az algoritmusban a felsorolása elhagyható! (Pl. I, J ciklusváltozók)
2.1.2 Függvények definiálása és alkalmazása algoritmusokban A függvények olyan eljárások, amelyek kiszámítanak egy értéket és visszaadják a hívó programrésznek. A függvények általános formája: Függvény függvénynév(<paraméterlista>): függvénynév:= Függvény vége
Megjegyzések: -
A <paraméterlista> megadása ugyanúgy történik, mint az eljárások esetében, de függvények esetében ritkábban alkalmazunk változó paramétereket, azaz cím szerinti paraméterátadást!
-
A kötelezően megadandó, itt kell rögzítenünk, hogy a függvényünk milyen típusú adatot ad vissza.
-
A utasításai végzik el a meghatározásához szükséges műveleteket, számításokat.
-
A függvénynév:= sor végrehajtásával történik meg a kiszámított függvényérték visszaadása a hívó program számára! Ha ez a sor elmarad, akkor a kiszámított érték elveszik, és a hívó program egy nem meghatározható értéket kap.
-
A tetszőleges kifejezés, típusa meg kell hogy egyezzen a fejlécben megadott típussal.
Példa függvénydefinícióra: Függvény Hatvany(X:valós;N:egész):valós Változó H:Valós H:=1 Ciklus I:=1-től N-ig H:=H*X Ciklus vége Hatvany:=H Függvény vége
6
Petrik tananyagtár: Algoritmikus szerkezetek Petrik Lajos Vegyipari, Környezetvédelmi és Informatikai Szakközépiskola Szoftverfejlesztő szak, 14. évfolyam, OKJ szám: 54 481 02 0010 54 04
___________________________________________________________________________ A függvény hívása, pl: Be: alap, kitevo Ki: Hatvany(alap,kitevo)
vagy Valós a:=Hatvany(2.5,5)
Megjegyzések: -
A függvény két konstans paraméterrel rendelkezik, visszatérési értékének típusa valós, lokális változókat is használ. A H lokális változó a hatvány kiszámítására, a részeredmények tárolásához kell.
-
A kiszámított függvényértéket célszerű felhasználnunk, például kiíratásban, értékadásban, esetleg összetett kifejezésben. A függvény a program minden olyan pontján meghívható, ahol a visszatérési értéknek megfelelő típusú adat szerepeltethető.
-
Ha a függvényünket eljárásszerűen hívjuk meg, akkor ugyan végrehajtódik a függvénytörzs, de a kiszámított érték elveszik.
-
A függvények fontos kategóriáját jelentik az ún. tulajdonságfüggvények, melyek visszatérési értékének típusa logikai.
-
A logikai értékű függvényeket elágazások, vagy ciklusok feltételében hívjuk meg.
7