- Definicija funkcije (opis šta treba da uradi)
- Poziv funkcije (korišćenje)
DEFINICIJA funkcije se sastoji od naslova i tela
Naslov funkcije opisuje ime funkcije, tipove i imena podataka koje preuzima (ulazni parametri) i tip podatka koji vraća (rezultat).
Primer:
long faktorijel(int n)
je naslov funkcije koja preuzima jedan ceo broj (n), zove se faktorijel i vraća ceo broj kao rezultat.
Telo funkcije opisuje komande koje treba izvršiti nad ulaznim podacima da bi se dobio rezultat. Rezultat se vraća komandom
return izraz;
gde je vrednost izraza rešenje (izlazni podatak funkcije).
Dozvoljeno je i da funkcija nema nikakav rezultat. U tom slučaju tip rezultata je void
Primer:
void ispisi(int x, float y)
Ova funkcija preuzima dva podataka - ceo broj x i decimalni broj y i ne vraća nikakav rezultat. Naziv funkcije je ispisi.
POZIV funkcije: funkcija se poziva navodjenjem imena i promenljivih ili izraza čije se vrednosti koriste.
Primeri:
a = faktorijel(7);
Poziva funkciju sa imenom faktorijel i argumentom 7 (vrednost za n). Rezultat funkcije se upisuje u promenljivu a.
ispisi(243, -87.51);
Poziva funkciju sa imenom ispisi i argumentima 243 (vrednost za x) i -87.51 (vrednost za y). Funkcija nema rezultat.
U telu funkcije dozovoljene su sve komande koje su inače dozvoljene u programu ali ima i nekih novih mogućnosti. Funkcija može pozivati samu sebe (sa izmenjenim ulaznim parametrima) i to se u programiranju zove rekurzija a takva funkcija - rekurzivna funkcija.
QUICK sort je primer rekurzivne funkcije.
Treba imati na umu da rekurzivne funkcije traže više memorijskog prostora računara (svaki rekurzivni poziv zahteva od računara čuvanje trenutnih vrednosti promenljivih i vraćanje tih vrednosti po završetku rekurzivnog poziva) pa ih ne možemo uvek koristiti na takmičenju - zbog ograničenja.
Treba imati na umu da rekurzivne funkcije traže više memorijskog prostora računara (svaki rekurzivni poziv zahteva od računara čuvanje trenutnih vrednosti promenljivih i vraćanje tih vrednosti po završetku rekurzivnog poziva) pa ih ne možemo uvek koristiti na takmičenju - zbog ograničenja.
PRIMER
Napisati funkciju koja za dati prirodan broj određuje zbir cifara.
Napisati funkciju koja za dati prirodan broj određuje zbir cifara.
a) nerekurzivno (iterativno)
b) rekurzivno
b) rekurzivno
Rešenje
a) iterativno int zbirCifara(int broj) { int zbir=0; while(broj!=0) { zbir += (broj%10); broj /= 10; } return zbir; } b) rekurzivno int zbirCifara(int broj) { if(broj==0) return 0; else return broj%10 + zbirCifara(broj/10); } Korišćenje (poziv) funkcije int main() { int broj, zbir; scanf("%d", &broj); zbir = zbirCifara(broj); printf("Zbir cifara broja %d je %d",broj, zbir); return 0; }
No comments:
Post a Comment