110 likes | 354 Views
Funkcie. Funkcie. Funkcia je základným stavebným blokom C++ Aj samotný program je funkciou – funkcia main () Vytvorenie ďalších funkcií má zmysel, ak sa nejaká časť kódu často opakuje Do funkcie môžeme poslať parametre, funkcia môže vracať výsledok. Funkcie - syntax. Deklarácia funkcie
E N D
Funkcie • Funkcia je základným stavebným blokom C++ • Aj samotný program je funkciou – funkcia main() • Vytvorenie ďalších funkcií má zmysel, ak sa nejaká časť kódu často opakuje • Do funkcie môžeme poslať parametre, funkcia môže vracať výsledok
Funkcie - syntax Deklarácia funkcie (pomoc kompilátoru) floatMocnina3(float); intmain() { float x=1,y; y = Mocnina3(x); ... return 0; } float Mocnina3(float a) { return a*a*a; } Volanie funkcie (hodnota x sa odovzdá funkcii) (vrátená hodnota sa priradí do y) Začiatok kódu funkcie (vytvorí sa nová premenná a,naplní sa prijatou hodnotou) Jadro funkcie - výpočet (vracia sa 3. mocnina)
Funkcie – príklad (kombinačné číslo) longdoubleFaktorial(int); intmain() { intn,k; cout << “Zadaj n,k oddelene medzerou: “; cin >> n; cin >> k; cout << Faktorial(n)/Faktorial(n-k)/Faktorial(k); return 0; } longdoubleFaktorial(intn) { int i; longdoublevysledok = 1; for(i=1;i<=n;i++) vysledok*= i; returnvysledok; }
Funkcie – príklad (kombinačné číslo) longdoubleFaktorial(int); longdoubleKombinacneCislo(int,int); intmain() { intn,k; cout << “Zadaj n,k oddelene medzerou: “; cin >> n; cin >> k; cout << KombinacneCislo(n,k); return 0; } longdoubleKombinacneCislo(int n, int k) { returnFaktorial(n)/Faktorial(n-k)/Faktorial(k); } longdoubleFaktorial(intn) { int i;longdoublevysledok = 1; for(i=1;i<=n;i++) vysledok*= i; returnvysledok; }
Funkcie – lokálne premenné • Všetky premenné vo funkcii sú novovytvorené, aj pre odovzdanie argumentov funkcie sa vytvorí kópia premennej. • Vo funkcii sa dokonca môžu používať premenné s tým istým názvom, ako v hlavnom programe – neovplyvňujú sa intmain() { inti=5, j; cout << i << endl; j = Funkcia(i); cout << j<< endl; cout << i << endl; return 0; } int Funkcia(int n) { int i = 2,vysledok; vysledok = i*n; n = 0; cout << “Vo funkcii: i= “ << i << “ n= “ << n << endl; returnvysledok; }
Funkcie – globálne premenné • Globálna premenná – deklarovaná mimo akejkoľvek funkcie • Globálne premenné „sú viditeľné“ všetkým funkciám z daného *.cpp súboru • Ak vo funkcii deklarujeme lokálnu premennú s rovnakým menom, ako má nejaká globálna premenná, vždy platí lokálna premenná (globálna premenná sa neovplyvní). • V ukážke funkcia neovplyvní globálnu premennú i:
Funkcie – globálne premenné int i = 5; //globálna premenná – deklarovaná mimo funkcií intmain() { intj; //lokálna premenná – platí v main() cout << i << endl; j = Funkcia(i); cout << j<< endl; cout << i << endl; return 0; } int Funkcia(int n) { int i = 2; //meni sa obsah globalnej premennej cout << i << endl; returni*n; }
Funkcie – návratový typ void • Funkcia nemusí dostať a ani vracať žiadnu hodnotu. Môže slúžiť iba ako časť kódu, ktorý sa často opakuje, alebo pracuje s globálnymi premennými (ako v ukážke). Je to však nezvyklé a neodporúča sa to. inti,j; intmain() { i=2; j=3; Funkcia(); return 0; } void Funkcia() { j = i*j; return; }
Lokálne premenné v rámci bloku • Premenná môže mať aj ešte menšiu oblasť platnosti (angl. scope), než je funkcia. Ak je deklarovaná vo vnútri bloku { ... }, platí iba v ňom: intmain() { intj; //lokálna premenná – platí iba v main() j = 2; for(int i=0; i<j; i++) // i platí iba v cykle for { j = j + i; } if(j>3) { int i = 2; //toto i plati iba v if, nemanic // spolocne s i z for j = j*i; } }
Funkcie a premenné - zhrnutie • Funkcia je oblasť kódu, ktorá sa obvykle často opakuje • Do funkcie vstupuje jedna alebo viac premenných, vracia sa jedna alebo žiadna premenná • Funkciu treba na vrchu programu deklarovať (pomôcka pre kompilátor a pre nás) • Premenné platia iba v rámci bloku (scope), kde boli deklarované. Lokálne premenné neovplyvňujú obsah vyššie deklarovaných premenných, aj keď majú rovnaké meno. • Globálne premenné (deklarované mimo funkcií) platia v celom súbore *.cpp • Globálnepremennésaneodporúča používať, ťažko sa počas behu programu ustráži, aby nedošlo k jej neželanej zmene. • Ak potrebujete, aby funkcia zmenila obsah premennej deklarovanej vo volajúcej funkcii, použite referencie.