1 / 36

Programozás I. 3.1. Függvények általános jellemzői

Programozás I. 3.1. Függvények általános jellemzői. Rendszer és Szoftvertechnológia Tanszék. 3.1. Függvények általános jellemzői. Problémaosztályok előadáson elhangzottakat átnézni ! Eljárás, szubrutin : meghatározott tevékenységsorozat végrehajtását jelenti.

maalik
Download Presentation

Programozás I. 3.1. Függvények általános jellemzői

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programozás I. 3.1. Függvények általános jellemzői Rendszer és Szoftvertechnológia Tanszék

  2. 3.1. Függvények általános jellemzői • Problémaosztályok előadáson elhangzottakat átnézni ! • Eljárás, szubrutin: meghatározott tevékenységsorozat végrehajtását jelenti. • Függvény: Olyan szubrutin, amely meghatározott tevékenységsorozat végrehajtását jelenti, melynek eredményeként a függvény egy értéket állít elő és ad vissza a hívási pontra. • A C-ben és a C++-ban a programok építőkövei a függvények. • Példa: y = sin (x) + cos (x); z = sqrt (y); PTE PMMFK Számítástechnika Tanszék

  3. 3.1. Függvények általános jellemzői A függvények általános alakja: visszatérési_típus függvénynév (paraméterlista) { függvénytörzs } Visszatérési típus: visszatérési érték típusa. (Alapért.: egész típus) Függvénynév: az egyszerű változó nevével kapcs. szabályokat ... Paraméterlista: azon – típussal és névvel megadott – változók felsorolása (vesszővel elválasztva), amelyekkel az átadott paraméterekre hivatkozhatunk a függvényen belül. Ha nincs paraméter: void (C-ben kötelező) Függvénytörzs: deklarációk, utasítások PTE PMMFK Számítástechnika Tanszék

  4. 3.1. Függvények általános jellemzői • A függvényen belül a végrehajtás végét az utolsó zárójel jelenti, ekkor a hívó eljárás visszakapja a vezérlést. • Ennél korábbi visszatérést a return utasítással kényszeríthetünk ki. • Egy nem void-ként deklarált függvény visszatérési értékként a return utasítás mögött álló kifejezés értékét kapja meg. • Egy függvényen belül tetszőleges számú return utasítás elhelyezhető. PTE PMMFK Számítástechnika Tanszék

  5. 3.1.1. feladatKészítsen egy olyan függvényt, amely valamilyen üdvözlő szöveget ír ki a képernyőre, véletlenszerűen választva 5 letárolt üzenetből. Hívja meg a függvényt háromszor egymás után. void koszon (void);// A koszon fgv.prototípusa voidmain (void) { int i; randomize (); for (i=1; i<4; i++) koszon (); //a fv hívása getch(); } PTE PMMFK Számítástechnika Tanszék

  6. 3.1.1. feladat PTE PMMFK Számítástechnika Tanszék

  7. 3.1.2. feladatKészítsen egy olyan függvényt, amely adott sorszámú üzenetet ír ki a képernyőre. Hívja meg a függvényt ötször, öt különböző sorszámú üzenet kiírásához. Megoldás: A függvénynek egy paramétere van, a kiírandó üzenet sorszáma, visszatérési értéke 0, ha nincs az átadott paraméternek megfelelő üzenet és 1, ha az üzenet kiírása sikeres volt. PTE PMMFK Számítástechnika Tanszék

  8. 3.1.2. feladat #include <stdio.h> #include <conio.h> int uzen (int); // Azuzen függv. prototípusa void main (void) { int i, ok; clrscr (); //meghívjuk az uzen függvényt hatszor for (i=1; i<7; i++) { ok = uzen (i); //Az uzen függvény hívása printf (" ** %2d **", ok); } } PTE PMMFK Számítástechnika Tanszék

  9. 3.1.2. feladat int uzen (int sorszam) //Az uzen fv definíciója { switch (sorszam) { case 1: printf("\nElső üzenet"); return 1; case 2: printf("\nMásodik üzenet"); return 1; case 3: printf("\nHarmadik üzenet"); return 1; case 4: printf("\nNegyedik üzenet"); return 1; case 5: printf("\nÖtödik üzenet"); return 1; default: return 0; } } PTE PMMFK Számítástechnika Tanszék

  10. 3.1. Függvények általános jellemzői • A függvényen belül a végrehajtás végét az utolsó zárójel jelenti, ekkor a hívó eljárás visszakapja a vezérlést. Ennél korábbi visszatérést a return utasítással kényszeríthetünk ki. • Egy nem void-ként deklarált függvény visszatérési értékként a return utasítás mögött álló kifejezés értékét kapja meg. • Egy függvényen belül tetszőleges számú return utasítás elhelyezhető. PTE PMMFK Számítástechnika Tanszék

  11. Függvények definíciója és deklarációja • A saját függvényeinket mindig definiálni kell. • A definíciót csak egyszer lehet megadni. • A definíció C programon belül bárhol elhelyezkedhet, de ha a függvény hívás után helyezzük el (pl. a main függvény után), akkor kötelező a prototípus megadása a hívási pont előtt. • Ha a definíció megelőzi a hívás (felhasználás) helyét, akkor ez egyben a függvény deklarációja is. • Tilos a függvényeket egymásba ágyazni ! PTE PMMFK Számítástechnika Tanszék

  12. Függvények definíciója Általános alak: Visszatérési érték típusa függvénynév (f. param. l.) /* Függvényfej, melyet nem zár le pontosvessző ! */ { /* A függvény törzse */ lokális definíciók és deklarációk utasítások } PTE PMMFK Számítástechnika Tanszék

  13. Függvények prototípusa • Általános alak: Visszatérési érték típusa függvénynév (formális paraméterek típusainak felsorolása); • C++-ban csak a prototípus használható. • (Könyvtári függvények: prototípus az include állományokban …) PTE PMMFK Számítástechnika Tanszék

  14. Függvények prototípusa, példák float sum ( int , float ); fgvnév: sum paraméter: 2 db, int és float típusú vissz.ért.típus: float uj ( int, long ); fgvnév: uj paraméter: 2 db, int és long vissz.ért.típus: int ( default ) PTE PMMFK Számítástechnika Tanszék

  15. A függvények paraméterei • Függvény definíció, paraméterlista: minden paraméter előtt ott áll a paraméter típusa. FORMÁLIS PARAMÉTEREK: Példa: int uzen (int sorszam) { if (sorszam < 0) return 0; } A deklarált paraméterek a függvényen belül mint a függvény lokális változói használhatók, a függvényen kívülről azonban nem érhetők el. Prototípus: csak a típusok felsorolása, de a sorrend azonos kell legyen ! A deklarált paraméterek a függvényen belül mint a függvény lokális változói használhatók, a függvényen kívülről nem érhetők el. PTE PMMFK Számítástechnika Tanszék

  16. A függvényhívás menete • A függvényhívás során a vezérlés átadódik a hívó függvénytől az aktivizált függvényhez. • A paraméterek (ha vannak) szintén átadódnak a meghívott függvénynek. • A már bemutatott return utasítás végrehajtásakor, vagy a függvénytörzs utolsó utasításának végrehajtása után a vezérlés visszakerül a hívás helyére. • Ha a függvény típusa nem void, akkor kötelező a return utasítás használata, s ekkor a return utasításban szereplő kifejezés értéke, mint függvényérték (visszatérési érték) jelenik meg. • A függvény hívásnál megadott paramétereket AKTUÁLIS PARAMÉTEReknek nevezzük. PTE PMMFK Számítástechnika Tanszék

  17. 3.1. Függvények általános jellemzői • Paraméter átadási módok: • Érték szerinti • Cím szerinti • A gyakorlatokon csak az érték szerinti paraméterátadást használjuk. PTE PMMFK Számítástechnika Tanszék

  18. Érték szerinti paraméterátadás -1 • A formális paraméter számára lefoglalódik egy megfelelő méretű memóriaterület.A: 5Az A aktuális paraméter értéke 5 • Ide átmásolódik az aktuális paraméterértéke. • Lehet kifejezés is az aktuális paraméter, ekkor a kifejezés értéke kerül másolásra.F: 5Az F formális param., megfeleltetve az A akt. paraméternek • A rutinban ezen a külön memóriaterületendolgozunk a formális paraméter értékének módosításakor.A: 5 F: 5 módosítás F: 3 • A rutin végén a formális paraméterek számára lefoglalt memóriaterületfelszabadul.A: 5F: 3 PTE PMMFK Számítástechnika Tanszék

  19. Érték szerinti paraméterátadás - 2 int szamol (int fparam) { fparam = fparam + 5; return fparam; } void main (void) { int aparam = 10; printf (”\na fv. visszaadott értéke:%3d”, szamol (aparam)); printf (”\n aparam értéke: %5d”,aparam); } PTE PMMFK Számítástechnika Tanszék

  20. Érték szerinti paraméterátadás - 3 A paraméter értéke a rutin szempontjából csak bemenő, input érték. • A rutin során nem történhet olyan értékadás, amely az algoritmust az eljáráson kívül befolyásolja. • Hátránya: a másolat egy új helyen kerül tárolásra. PTE PMMFK Számítástechnika Tanszék

  21. Cím szerinti paraméterátadás - 1 • Az aktuális paraméter címe rendelődik a formális paraméterhez. • Nincs külön memóriafoglalás, ugyanaz a memóriaterülete az aktuális és a formális paraméternek. • A rutinban módosítva a formális paraméter értékét, az aktuális paraméter értéke is megváltozik. • A rutin végén a formális paraméterhozzárendelése a memóriaterülethez megszűnik. PTE PMMFK Számítástechnika Tanszék

  22. Cím szerinti paraméterátadás - 2 • A paraméter értéke a rutin szempontjából kimenő, output érték is lehet! • A paraméternek a rutinban történő módosítása hatással van az algoritmusra a rutinon kívül. PTE PMMFK Számítástechnika Tanszék

  23. Aktuális és formális paraméterek • Az aktuális és a formális paraméterek megfeleltetése balról jobbra, a felsorolás sorrendjében történik. • Az aktuális és a formális paramétereknek (típusban), sorrendben és darabszámban egyezniük kell. • C-ben csak érték szerinti paraméterátadás van. • A paraméterek cím szerint történő átadásáról nekünk kell gondoskodni. PTE PMMFK Számítástechnika Tanszék

  24. 3.1.3. feladatKészítsen programot, amely bekér egy természetes számot, majd kiírja a faktoriálisát.A faktoriális meghatározására készítsünk függvényt! Írjunk egy billentyűre váró eljárást is! // n faktoriális számítása unsigned long fakt(int); void bill(void); void main(void) { int n; printf("Kérem n értekét!"); scanf("%d",&n); printf("\nA faktoriális értéke : %lu" , fakt(n)); bill(); } // main PTE PMMFK Számítástechnika Tanszék

  25. 3.1.3. feladat void bill() { //tetszőleges billentyű leütésére vár... gotoxy(1,24); printf("Bármely billentyűre tovább...."); getch(); } // bill PTE PMMFK Számítástechnika Tanszék

  26. 3.1.3. feladat unsigned long fakt(int n) { //paraméter: egész szám //visszatérési érték: a szám faktoriálisa int i ; unsigned long f=1; for (i=1 ; i<=n ; i++) f *= i; return f; } // fakt PTE PMMFK Számítástechnika Tanszék

  27. A main függvény paraméterei és visszatérési értéke • A C programon belül a main függvénynek kitüntetett szerepe van, mivel kijelöli a program belépési pontját. • A main függvénynek nulla, egy vagy két paramétere is lehet. (ld. Szakirodalom). • A main visszatérési értékét, mely általában int típusú,a main függvényen belüli return utasításban, vagy a program tetszőleges pontján az exit könyvtári függvény argumentumában adhatjuk meg. PTE PMMFK Számítástechnika Tanszék

  28. Változók érvényességi köre • A függvények alkalmazása felveti azt a kérdést, hogy egy adott változó milyen érvényességi körrel (láthatósággal) rendelkezik. • Globális változók: a függvényeken kívül deklaráljuk, többnyire a main előtt. Ezek a változók a teljes program futása alatt fennmaradnak és a program valamennyi függvényében “láthatók”. • Lokális változók: egy adott függvényben deklaráljuk, tehát a függvény hívásakor “keletkeznek” és a függvényből való kilépéskor “megszűnnek”. Ezek a változók csak az adott függvényen belül “láthatók”. • Lehetőleg kerülni kell a globális változók használatát ! PTE PMMFK Számítástechnika Tanszék

  29. Címszerinti paraméterátadás a C-ben • A függvény meghívásakor az aktuálisparaméterlistában a megfelelő változócímét kell elhelyezni az & címoperátort használva. • A formálisparaméterlistában a megfelelő típusra mutató pointert kell deklarálni. • A függvénytörzsben az indirekció * operátorát használva hivatkozunk a változóra. ( Használjuk az ökölszabályt! ) PTE PMMFK Számítástechnika Tanszék

  30. Címszerinti paraméterátadás a C-ben 3.1.5. feladat • Beolvasunk két egész számot. A CSEREL eljárás segítségével felcseréljük a két változó tartalmát, majd kiírjuk őket. • void main(void) • { • int a,b; • void cserel(int *,int *); //cserel prototípusa • printf("\nKérem a két számot"); scanf("%d%d",&a,&b); • cserel(&a,&b); //cserel hívása • printf("\n\nMegcserélve %d - %d",a,b); • getch(); • } // main PTE PMMFK Számítástechnika Tanszék

  31. Címszerinti paraméterátadás a C-ben 3.1.5. feladat • Beolvasunk két egész számot. A CSEREL eljárás segítségével felcseréljük a két változó tartalmát, majd kiírjuk őket. void cserel(int *x,int *y) //cserel definíciója { int s; s=*x; *x = *y; *y = s; } // cserel PTE PMMFK Számítástechnika Tanszék

  32. 3.1.8. feladat Készítsen programot, amely egy 2003-as dátumról (hónap, nap) megmondja, hogy az az évnek hányadik napja és milyen napra esik. 1. részfeladat: ellenőrzött adat bevitel: int típusú szám beolvasása, amely adott (h1, h2) határok közé esik. prototípus: int adatbe (int, int); 2. részfeladat: szökőév ellenőrzés fv. prototípus: int szokoev (evszam); a visszatérési érték = 1, ha szökőév, egyébként nulla 3. részfeladat: nap sorszáma éven belül fv. prototípus: int napsorszam (ho, nap); 4. részfeladat: fv. prototípus: void napnevek (sorszam, eltolas); PTE PMMFK Számítástechnika Tanszék

  33. 1.6.7. Pointer operátorok • A C nyelvben kiemelt szerepe van egy olyan speciális változónak, amely más objektumok címét tárolja, ez a mutató (pointer): • Amikor deklaráljuk a mutatót, meg kell adnunk a nevét, és azt, hogy milyen típusú változóra fog mutatni. • A C nyelvben két speciális egyoperandusú művelet van, melyeket a mutatókkal kapcsolatosan használunk. • A "címe" (&) művelet eredménye az operandusként megadott memóriaobjektum címe: int a, *pa; pa = &a; • A másik mutató operátor (*) az indirekt hivatkozás elvégzéséhez szükséges: *pa = *pa + 5; A *pa kifejezés a pa pointer által mutatott objektumot jelenti, a fenti példában az a változót. PTE PMMFK Számítástechnika Tanszék

  34. Pointer aritmetika A mutató léptetése a szomszédos elemre többféle módon is elvégezhető: int *p, *q, j; p = p + 1; p += 1; p++; ++p; PTE PMMFK Számítástechnika Tanszék

  35. Pointer aritmetika Az előző elemre visszalépésre szintén többféle lehetőség van: p = p - 1; p -= 1; p--; --p; • Két mutató különbsége valójában a két mutató között elhelyezkedő elemek számát jelenti: • j = p - q; • A léptető és az indirektség operátorok együttes alkalmazásához kellő óvatosság szükséges, mivel ez a két operátor azonos precedenciával rendelkezik. PTE PMMFK Számítástechnika Tanszék

  36. PTE PMMFK Számítástechnika Tanszék

More Related