Eljárások és függvények

Slides:



Advertisements
Hasonló előadás
Vezérlő utasítások.
Advertisements

Koordináták, függvények
Definíciók: Algoritmus: bármely véges sok lépéssel leírható tevékenység. Olyan pontos előírás, amely megmondja, hogy egy adott típushoz tartozó feladat.
 Megfigyelhető, hogy amikor több elem közötti összehasonlítás történik, akkor szükség van egyszerre több értékre is, főleg akkor, ha ezek az értékek jóval.
Gyakorló feladatsor eljárásokra Készítette: Rummel Szabolcs Elérhetősé:
Összefoglalás 1. Pascal program szerkezete 2. Pascal típusai
LFüggvények Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 20./0. lFüggvények deklarációja és prototípusa lA függvénydefiníció lHivatkozás.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Programozás alapjai.
Turbo Pascal Változók.
Dinamikus tömbök.
Sztringek.
Bevezetés a Java programozásba
5. előadás (2005. március 22.) Függvények definíciója, deklarációja, hívása Enumerációs adattípus 1.
Táblázatkezelés alapjai MS Excel, OpenOffice Calc
Függvények, mutatók Csernoch Mária.
C A C nyelv utasításai.
Mutatók, tömbök, függvények
C A C nyelv utasításai. Ismétlés Utasítások csoportosítása.
Készítette: Pető László
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
Programozás I Függvények általános jellemzői
Microsoft Excel Függvények VII..
Programozás C# -ban Elágazások.
P ROGRAMOZÁS I/O műveletek. S YSTEM.C ONSOLE A programjainknak fontos része a felhasználóval való kommunikáció. Adatokat kell kérni tőle, vagy közölnünk.
C nyelv utasításai.
Alprogramok deklarációja, definíciója és meghívása Páll Boglárka.
Programozási nyelvek Páll Boglárka.
A Pascal programozási nyelv alapjai
Ismétlés A pascal program szerkezete: program programnev; Programfej
Alprogramok paraméterei. Procedure ( ); Function ( ): ; [var] p1,...,pn:típus1; q1,...,q2:típus2; cím szerinti parméterátadaás (értékváltozás hatással.
A Pascal programozási nyelv alapjai
Tömbök és programozási tételek
Ciklusok (iterációk).
Szintaktikai, szemantikai szabályok
1.3. Pascal program felépítése Az els ő program. Program ; … Begin … End. Program fej Deklarációs rész Végrehajtó rész.
Összetett adattípusok
Kétdimenziós tömbök Mátrixok
Operátorok Értékadások
Algoritmus gyakorlati feladatok
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Turbo Pascal Indítás: C:\LANGS\Turbo Pascal Turbo Pascal.
Java programozási nyelv Metódusok
Objektum orientált programozás
Objektum orientált programozás
A Visual Basic nyelvi elemei
Táblázatkezelés KÉPLETEK.
Török Katalin és Marosi Nóra 11/c. Pascal: Az es években megjelent magas szintű programozási nyelv, közel áll az emberi gondolkodáshoz. Nevét.
Mintapélda Készítsünk programot, amely beolvas egy egész számot, és eldönti arról, hogy prímszám-e. Készítsünk programot, amely beolvas egy egész számot,
Függvények a C nyelvben 1 Függvényeket a következő esetekben szokás írni: Ha ugyanazt a tevékenységet többször is el kell végeznünk ugyanolyan típusú,
1. feladat  Készíts olyan függvényt, mely paraméterül kapja két egész típusú változó címét, s hívása után a két változó értéke helyet cserél.
Free pascal feladatok
A 2. géptermi beszámoló VBA anyagának összefoglalása
Összeállította: Gergely János
Programtervezés, programozás I. 2.5 tömbök,stringek
Az 5,6,7 laborok VBA anyagának összefoglalása
Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési.
Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési.
Informatikai gyakorlatok 11. évfolyam
a programegységek között
Kifejezések C#-ban.
Programozási nyelvek típusossága.
Beépített függvények használata programozáskor
Programozás C# -ban Elágazások.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Algoritmus készítés.
Előadás másolata:

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.

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.

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

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;

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}

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.

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;

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.

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.

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;

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

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.

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

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

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.

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.

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

É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

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)

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.

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.

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.

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

4.példa: írjatok egy olyan eljárást amely feltölt és kiírat egy egydimenziós tömböt

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.

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

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

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).

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.

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.

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;

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.

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

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.

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.

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;

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!

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.

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;

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.

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.