Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
Eljárások és függvények
Az eddig elkészített programokban az utasítások a főprogram részben szerepeltek. A Pascalban lehetőség van arra, hogy ha a program futása során, több helyen is ugyanazt az utasítássorozatot kell végrehajtani, akkor ezt az utasításcsoportot egy alprogramba foglalhassuk. Kétféle alprogramot hozhatunk létre: eljárást vagy függvényt.
2
A programban deklarált eljárások és függvények arra adnak lehetőséget, hogy a programunkat logikailag és funkcionálisan meghatározott különálló egységekre bontsuk. Az eljárásokat és függvényeket a főprogram vagy egy másik eljárás vezérli.
3
Miről lesz szó? Hogyan kell saját eljárásokat és függvényeket (rutinokat) írni Hogyan lehet ezekkel a rutinokkal paramétereken keresztül kommunikálni A rutinok saját (lokális) deklarációi és közös (globális) deklarációi
4
Meghívásuk: function fuggvenynev(parameterek):típus;
Az eljárás (alprogram) tevékenységek összessége (utasítások), melyet az eljárás nevére való hivatkozással és az eljárás paramétereinek megadásával hívunk meg a főprogram bármely pontján: procedure eljarasnev(parameterek); function fuggvenynev(parameterek):típus;
5
Helyük a Pascal programban:
Az alprogramokat a program deklarációs részében kell elhelyezni. {globális deklarációk} Label … {címke} Const … {konstans} {Program deklarációs része} Type … {típus} Var … {változó} Procedure eljárásnév(paraméterek); {lokális deklarációk} begin {Eljárástörzs, végrehajtó rész} … end; Function függvénynév(paraméterek):típus; begin {Függvénytörzs, végrehajtó rész} függvénynév:=utasítás; {a függvény értéke}
6
Eljárások Miért? Eljárást akkor előnyös alkalmazni, ha:
egy- egy hasonló feladatot többször akarunk a programban elvégezni, ekkor az ismételt művelet elvégzéséhez elegendő az alprogramot újra meghívni. Ez a programrészlet csak egy példányban szerepel a programban, így a program olvashatósága és karbantarthatósága javul. Ugyancsak egyszerűvé és biztonságossá válik a programrészlet módosítása és javítása, hiszen csak egyetlen helyt kell azt elvégezni Minden alprogram rendelkezik egy saját belső (lokális) világgal és egy jól definiált kapcsolódási felületet (interfészt) mutat a külvilág fele.
7
Szerkezete: Hasonlít a programéhoz. procedure eljarasnev (parameterek); {Eljárás feje} Const … Type … {Deklarációs rész} Var … begin {Eljárástörzs, végrehajtó rész} … end;
8
A program szintjén deklarált konstansokat, változókat globális deklarációknak nevezzük, valamint az eljárásban, helyileg deklarált dolgokat lokális deklarációknak nevezzük. Globális deklarációk:-at az egész program látja, tehát a program összes eljárása használhatja, ami azt jelenti, hogy mindegyik eljárás azokat össze vissza módosítgathatja. Lokális deklarációk:-at csak az illető eljárás látja, tehát ez sok esetben rendkívüli programvédelmet jelent, hiszen biztosak lehetünk, hogy más eljárás nem nyúl a változókhoz.
9
Amikor a program vezérlése az eljáráshívó utasításhoz ér, akkor a processzor megjegyzi azt a helyet ahová a végrehajtás után vissza kell térnie, majd ugrik a megadott azonosítójú eljárás Begin- jére. Végrehajtja az utasításokat egészen az End;-ig, majd visszaugrik a megjegyzett utasításra. A visszatérési cím azért fontos, mert az eljárást a program bármely részéről hívhatnánk. Egyetlen megkötés van, hogy az eljárást még a hívás előtt kell deklarálni.
10
HÍVÓ PROGRAM (főprogram)
… Procedure eljárásnév(paraméterek); {lokális deklarációk} begin {Eljárástörzs, végrehajtó rész} end; HÍVÓ PROGRAM (főprogram) Eljárásnév(paraméterek); Utasítás;
11
1. paraméter nélküli eljárás 2. érték szerinti paraméterátadás
Típusai: 1. paraméter nélküli eljárás 2. érték szerinti paraméterátadás 3. cím szerinti paraméterátadás
12
Az eljárás paraméterei
A paramétereket az eljárás fejlécében a név után, kerek zárójelek között kell felsorolnunk, melyek lehetővé teszik hogy ugyanazt a programrészt kicsit másképpen, más adatokkal futtassunk.
13
Paraméter nélküli eljárás
Paraméter nélküli eljárás - általában mindig ugyanazt a műveletet végzik 1.példa: ez az eljárás minden híváskor egy 50 egységnyi hosszúságú szaggatott vonalat húz a képernyőre
14
Ha egy paraméter nélküli eljárás működését mégis kívülről kívánjuk vezérelni, akkor globális változókat használhatunk az alprogrammal való kommunikációra. 2.példa:ez az eljárás minden híváskor különböző hosszúságú szaggatott vonalat húz a képernyőre
15
3.példa: Töltsetek fel egy tömböt, majd írassátok ki a tömb elemeit a megadás sorrendjében, majd rendezetten is és keressétek ki a tömbből a legnagyobb elemet.
16
Az előző programrészlet jó példa arra, hogy:
hogy nem szabad programot készíteni. A paraméter nélküli eljárások és a globális változók együttes használata rossz programozási technikát takar, ilyenkor elmondható hogy ennek az oka az, hogy a programozó nem igazán érti a paraméterátadási módokat és nem érti a paraméterezésben rejlő előnyöket.
17
2. Érték szerinti paraméterátadás (érték paraméterek)
- az eljárás fejlécében szereplő paramétereket formális paramétereknek nevezzük. Ezek meghatározzák, hogy az eljárás hívásakor hány és milyen típusú adatot (hívási paramétert) kell megadnunk. az eljárás törzsében a formális paraméterekre mint helyi (lokális) változókra hivatkozhatunk. Az érték szerinti paraméterátadás csak egyirányú kommunikációt tesz lehetővé a hívó program és a hívott eljárás között. Eljáráshíváskor minden egyes aktuális (hívási) paraméter értéke a paraméterlista azonos helyén álló formális paraméterbe másolódik. Az eljárásokon belül az átadott értékeket a formális paraméteren keresztül érhetjük el és használhatjuk fel
18
Érték szerinti paraméterátadás
A fordítóprogram az eljárás hívásakor ellenőrzi, hogy az aktuális és a formális paraméterek száma és típusa megegyezik-e. ha a paraméterek száma különböző, vagy ha a két típus nem értékadás kompatibilis, akkor hibajelzést kapunk. … Procedure eljárásnév(paraméter: típus); {lokális deklarációk} begin {Eljárástörzs, végrehajtó rész} end; Var változó: típus; Begin eljárásnév(változó); End. Formális paraméter (értékparaméter): csak addig van, amíg az eljárást meg nem hívják egy aktuális paraméterrel Aktuális paraméter : Érték szerinti paraméterátadás
19
A paraméterlista megadásánál az alábbi szabályokat kell figyelembe venni:
az azonos típusú paramétereket vesszővel elválasztva lehet felsorolni, az utolsó azonos típusú paraméter után kettőspontot téve kell megadni a paraméter típusát, ha különböző paraméterek szerepelnek a listán, akkor azok közé pontosvesszőt kell tenni, pl.(x,y:integer; s:string)
20
1.példa:ez az eljárás minden híváskor különböző hosszúságú szaggatott vonalat húz a képernyőre míg nullát vagy nullánál kisebb értéket adunk.
21
2.példa:ez az eljárás minden híváskor különböző hosszúságú, a felhasználó által megadott karakterből kialakított vonalat húz a képernyőre.
22
3.példa: írjatok egy olyan eljárást amely eldönti két valós számról hogy milyen matematikai reláció van közöttük.
23
Az értékparaméter összetett típusú is lehet
Az értékparaméter összetett típusú is lehet. Ekkor a paraméterdeklarációban használt típusnévvel deklaráljuk a hívási paraméterlistában megadott változókat is
24
4.példa: írjatok egy olyan eljárást amely feltölt és kiírat egy egydimenziós tömböt
25
3. Cím szerinti paraméterátadás (változó paraméterek)
Gyakran találkozunk olyan feladattal, amikor egy eljárás paraméterein fejti ki hatását (csökkenti, növeli, felcseréli). Ekkor a bemenő (egyirányú) értékparaméterek használatával nem érjük el célunkat, hiszen ilyen paramétereken elvégzett műveletek hatása csak az eljáráson belül érzékelhető. Megoldást az ún. változó-paraméterek bevezetése jelenti számunkra, amely kétirányú adatcserét biztosít a hívó program és a hívott eljárás között. Ebben az esetben az eljárásnak nem akarunk értéket küldeni, hanem azt akarjuk, hogy az eljárás új értéket szolgáltasson. Ez csakis úgy lehetséges, ha a kifejezés értéke egy változó, ilyenkor nem értéket adunk neki, hanem címét adjuk meg.
26
Var, mindig a legközelebbi pontosvesszőig érvényes
Procedure eljárásnév ( var paraméter: típus); {lokális deklarációk} begin {Eljárástörzs, végrehajtó rész} … end; Var változó: típus; Begin eljárásnév(változó); End. Cím szerinti paraméterátadás során a bevitt adatok megváltoznak és a megváltozott érétket az eljáráson kívül is feltudjuk használni, ezért is a név, változó paraméterek. Var, mindig a legközelebbi pontosvesszőig érvényes
27
1.példa: írjatok egy olyan eljárást amely feltölt és kiírat egy egydimenziós tömböt, majd rendezi annak elemeit
28
Paraméter átadás Az érték szerinti paraméterátadás során az átadott paraméterek értékének megváltozása nincs hatással a főprogramra (csak bemenő paraméterek). A cím szerinti paraméterátadás során az átadott paraméterek értékének megváltozása hatással van a főprogramra (kimenő paraméterek).
29
Az eljárásoknak is van saját deklarációs részük, ahol olyan változókat deklarálhatunk,melyek csak az eljárásban ismertek. Ezek a lokális változók, ezek érvényessége csak az eljárásra korlátozódik. Míg a főprogramban deklarált globális változók az egész program futása alatt élnek, addig az alprogramokban deklarált változók csak az alprogram hívásakor keletkeznek és annak végrehajtása után meg is szűnnek.
31
valtozo:=fuggvenynev(parameterek);
Függvények Programjainkban használtunk már függvényeket, mint például a négyzetre emelés (Sqr), gyökvonás (Sqrt), stb. A függvények olyan alprogramok, melyek a főprogram bármely pontján meghívhatók a következõképpen: valtozo:=fuggvenynev(parameterek); A függvényhívás az értékadó utasítás jobb oldalán történik, míg a bal oldalon az a változó szerepel, melybe majd a függvény értéke kerül.
32
Saját függvényeket a következőképpen írhatunk:
function fuggvenynev (parameterek): fuggvény_típusa; {deklarációk} begin {függvénytörzs} fuggvenynev:= utasitas; {függvény eredménye} end;
33
1.példa: írjatok egy olyan eljárást amely feltölt és kiírat egy egydimenziós tömböt, majd egy függvényt, amely összegzi a tömb elemeit.
34
2. példa: Írj egy függvényt, amely kiszámítja egy tetszőleges szám
2.példa: Írj egy függvényt, amely kiszámítja egy tetszőleges szám faktoriális értékét. n!= 1*2*3* … *n pl. 5!= 1*2*3*4*5=120
35
Feladatok: 1. Írj eljárást, amely kiszámolja egy kör kerületét és területét. Készítsd el a programot függvény segítségével is és kérdezze meg a felhasználótól hogy mit szeretne kiszámoltatni a programmal.
36
2. Írj egy függvényt, amely elvégzi a hatványozás matematikai
2. Írj egy függvényt, amely elvégzi a hatványozás matematikai műveletét.
37
3. Írjatok egy olyan programot, amely tartalmazza a következőket:
egy függvényt, melynek értéke egy logikai érték, eldönti három értékről hogy alkothatják-e egy háromszög három oldalát? Ha igen akkor írjatok egy eljárást amely eldönti hogy milyen típusú háromszögről van szó (szabályos, egyenlő szárú vagy általános) és egy-egy másik függvényt melynek segítségével kiszámoljátok a háromszög kerületét és területét. Procedure hszog(var a,b,c:real); Var f: boolean; Begin repeat writeln(‘A 3szog oldalai:’); writeln(‘Az a oldal hossza:’); readln(a); writeln(‘Az b oldal hossza:’); readln(b); writeln(‘Az c oldal hossza:’); readln(c); if (a+b>c) and (a+c>b) and (b+c>a) then f:=true else begin f:=false; writeln(‘HIBÁS adatok’!); end; writeln; until f; End;
38
4. Írjatok egy függvényt, melynek értéke egy logikai érték, eldönti egy háromszögről hogy derékszögű-e!
39
5. Írj eljárást amely három nevet rendez abc sorrendbe.
6. Írj programot amely eljárások és függvények segítségével megoldja a következőket: - feltölt egy tömböt - kiíratja a tömb elemeit - rendezi a tömb elemeit - kiválogatja a páros elemeket - megkeresi a pozitív elemeket és a negatívakat külön- külön és meghatározza hány van belőlük - meghatározza elemeinek összegét, átlagát. Készíts a feladathoz egy menüt, melynek segítségével a felhasználó meghívhatja rendre mindenik eljárást és függvényt anélkül hogy újra futtatná a programot. 7. Írj programot, amely mértani formák kerületét és területét számolja ki. Készíts menüt a feladathoz.
40
Procedure menu; Var ch:char; Begin repeat repeat clrscr; writeln(‘Egyszerű menü készítése: ’); … writeln(‘_______________________’); … writeln(‘a. Beolvasás’:15); … writeln(‘b. Kiíratás’:15); … writeln(‘c. Rendezés’:15); … writeln(‘d. Átlag:’:15); … writeln(‘e. Keresés’:15); writeln; writeln(‘x. Kilépés’:15); … repeat ch:=readkey; until ch in [‘A’..’a’, ‘B’..’b’, ‘C’..’c’, ‘D’..’d’, ‘E’..’e’,’X’..’x’]; case ch of ‘A’, ’a’: Beolvasas; ‘B’, ’b’: Kiiratas; ‘C’, ’c’: Rendezes; ‘D’, ’d’: Atlag; ‘E’, ’e’: Kereses; ‘X’, ’x’: halt; end; until false; until ch=X or ch=x; End;
41
8. Egy meteorológiai állomásnál mindennap jelzik a naponta mért hőmérsékleteket. Ilyenkor feljegyzik a szolgálatban lévő meteorológus nevét és az általa °C mért hőmérsékletet. N napig vezetik a naponta mért hőmérsékletet. Írassátok ki a következőket: - mi a legmagasabb hőmérséklet? - mikor mérték? - ki volt szolgálatban? 9. Töltsétek fel két halmaz elemeit 0 és 255 közötti értékekkel. írassátok ki mindkét halmaz elemeit egy sorba egymás után szóközzel elválasztva egymástól. A program írassa ki hogy „igen” ha a halmazok egyenlők, ellenkező esetben pedig hogy „nem”, majd jelenítse meg a két halmaz egyesítését, metszetét és különbségét.
42
10. Olvassatok be a billentyűzetről karaktereket, egy személy nevét.
Ellenőrizzük le hogy a név helyesen lett-e beírva, ha igen, akkor írassuk ki az eltérő karakterek halmazát ebből a névből.
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.