„Függvény (programozás)” változatai közötti eltérés
[nem ellenőrzött változat] | [ellenőrzött változat] |
Tartalom törölve Tartalom hozzáadva
a Visszaállítottam a lap korábbi változatát: 80.99.25.241 (vita) szerkesztéséről 89.134.223.181 szerkesztésére |
|||
4. sor:
== A szubrutin ==
[[Kép:Illusztráció szubrutin.png|thumbnail|jobbra|A kék szubrutin három helyről van meghívva, és mindig a hívás helyéhez tér vissza]]
Ha egy adott műveletsorra egy programban több helyen is szükség van, az elemi megoldás az, hogy az adott kódrészletet mindenhol elhelyezzük, beillesztve a környezetébe. Ha újabb helyen merül fel rá igény, akkor a kódrészletet átmásoljuk a következő helyre is és így tovább. Ez terjengős és nehezen elemezhető forráskódot eredményezne, valamint nagyon sok fölösleges munkát. Ezért minden már a legkorábbi számítógépek kódkészlete is tartalmazott vezérlés átadó utasítást (Pl:[[Minszk–22#Vezérlésátadó utasítások|Minszk–22]]), amelyet oda kell elhelyezni, ahol az adott kódrészletnek szerepelnie kellene, maga a kódrészlet (''rutin'') pedig a programban tetszőleges, külön helyen lehet. A rutint helyettesítő utasítás végrehajtásakor a számítógép odaugrik a rutin kezdőpontjára, végrehajtja a benne levő utasításokat, majd amikor egy utasítás jelzi, hogy ez a rutin véget ért, automatikusan visszatér az előző helyre, és onnan folytatódik a program végrehajtása, ahonnan a külön rutinra való átirányítás volt. A rutint elindító utasítás szakkifejezéssel ''meghívta'' a külön programrészletet, amelyet, mivel logikailag alárendelt része lett az egész programnak, valójában a ''szubrutin'' (al-rutin) névvel illetnek. A módszer előnye az, hogy ha egy másik helyen van szükség ugyanerre a szubrutinra, oda is csak a meghívó utasítás kerül, és amikor a szubrutin véget ért, a program automatikusan onnan folytatódik, ahonnan ''most'' a szubrutint meghívták. Tehát a visszatérés mindig az éppen aktuális meghívás helyére történik. Ebből eredően a szubrutin tetszőleges helyről tetszőleges alkalommal használatba vehető, és a kódját csak egyszer kellett megírni. (A szubrutin kódja egyenértékű a többi kóddal, ezért a szubrutinból is meghívhatók újabb szubrutinok is.) Ha pedig a szubrutinban levő műveletsoron változtatni kellett, így egyetlen helyen is elég volt a változást elvégezni.
Ez a megoldás annyira alapvetővé vált a számítógépes programokban, hogy a legalacsonyabb szinten, magában a [[gépi kód]]ban is megvan a hívó és visszatérési utasítások megfelelője.
24. sor:
== A függvény és az eljárás különbsége ==
Az eljárás a végrehajtása során keletkező új adatokat a program egy közös tárhelyen helyezi el, amelyeket a program többi része az egyéb esetekben szokásos módon használ fel. A programokban kényelmesebb nem minden egyes elemi lépésre önálló utasítást adni, hanem ezekből néhányat egyszerűsítve összevonni is lehet, a programnyelvek ehhez különböző mértékű és fajtájú segítséget adnak. Az összevonások egyik fő fajtája a ''kifejezések'' használata. Ha például egy adott számot meg akarunk szorozni 2-vel, majd hozzáadni 3-at, a két lépés egyben írható le az X×2+3 alakkal. Ez már egy kifejezés, amelynek van egy végső értéke, eredménye. Ha a 2 helyén egy olyan számértéknek kellene állnia, amelyet egy eljárás számít ki, akkor megtehetjük, hogy az eljárás az eredményt először egy Y nevű tárolóelembe teszi, majd a
A matematikai függvények elvi jellegzetessége az, hogy a számítási képlet – amelynek a programban a számítást elvégző programrész felel meg – értéke egy vagy több megadott ''függvényváltozó'' értékétől függ. A programokban is megengedett ez; ha a területszámításhoz meg kell adni a téglalap A és B oldalait, akkor az eljárást elindító utasítás nézhet ki így:
HÍV TERÜLET(A,B)
Ha a TERÜLET nem csak eljárás, hanem függvény, tehát önmaga helyettesíti az eredményt, értéket ad vissza, akkor a függvény így, paraméterekkel együtt szerepelhet a kifejezésben is:
X×TERÜLET(A,B)+3
55 ⟶ 57 sor:
* visszatérési érték, amely a hívás helyére adódik vissza<!-- a value that is returned to the point where the call occurs -->
== Példa az
Legyen a feladat a megadandó középpontú és sugarú kör rajzolása. Az erre megírt [[Pascal (programozási nyelv)|Pascal]] nyelvű eljárás első, ún. deklarációs sora így nézhet ki:
<source lang="pascal">
PROCEDURE rajzolKor(origox, origoy : Integer; r : Real);
</source>
amely tartalmazza az eljárásnak a programozó által választott nevét (rajzolKor), továbbá azt, hogy a középpont koordinátájának két átadandó számértékét egy ''origox'' és ''origoy'' nevű tárelem fogja tárolni, amelyek csak egész számok lehetnek, a kör sugara pedig egy ''r'' nevű tárolóelemben lesz található, ez lehet törtszám is. Ez után a sor után következik a feladat megoldására szolgáló utasítássorozat.
Egy másik feladat legyen a megadandó sugarú kör területének a kiszámolása egy függvénnyel, vagyis a függvény neve logikailag szimbolizálni fogja a számítás végeredményét. Látható lesz, hogy a függvény programkódjának egyértelműen jelölve van a kezdete és vége is, így elkülönül a program többi részétől.
87 ⟶ 97 sor:
std::cout << SzamolKorKerulet(r) << std::endl;
</source>
* ''nálóknak'' (LSI Oktatóközpont, 1998) - ''Eljárások és függvények''▼
== Források ==
* dr. Úry László: ''Commodore 64 I-II.'' (LSI Alkalmazástechnikai Tanácsadó Szolgálat, Budapest, 1985)
▲* Kaszanyiczki László: ''
* [http://prog.ide.sk/pas2.php Programozás – Pascal II.] (prog.ide.sk)
|