Uvod u funkcije Kolegij: Programski jezik C++ Ak. god. 2018/19 Izv. Prof. Dr. Sc. Marko Maliković
Što su funkcije? Funkcije (ili metode) su nizovi naredbi koji opisuju neki postupak zajednički nizu ulaznih vrijednosti Funkcije se pišu kao zasebni blokovi naredbi prije ili poslije glavne funkcije main (main je također funkcija) Dakle: nasa_funkcija int main () { ... }
Primjer #include <iostream> using namespace std; const double pi=3.1415926; double opseg_kruga (double r) { return 2.*r*pi; } int main() { cout << opseg_kruga(5); return 0; Funkcija s nazivom opseg_kruga čiji argument je radijus r Uporaba funkcije opseg_kruga u glavnom dijelu programa
Deklaracija i definicija funkcija povratni_tip ime_funkcije (tip arg_1, ..., tip arg_n) { naredbe; return povratna_vrijednost; }
Deklaracija i definicija funkcija povratni_tip ime_funkcije (tip arg_1, ..., tip arg_n) { naredbe; return povratna_vrijednost; } Crveno = Deklaracija funkcije
Deklaracija i definicija funkcija povratni_tip ime_funkcije (tip arg_1, ..., tip arg_n) { naredbe; return povratna_vrijednost; } Crveno = Deklaracija funkcije Plavo = Definicija funkcije
Deklaracija i definicija funkcija povratni_tip ime_funkcije (tip arg_1, ..., tip arg_n) { naredbe; return povratna_vrijednost; } Oprez: Ako je tip povratne vrijednosti funkcije različit od povratnog tipa funkcije onda se rezultat pravilima pretvorbe svodi na povratni tip funkcije
Pozivanje funkcija Kada se iz glavnog programa poziva neka funkcija tada se izvođenje glavnog programa trenutno prekida i tijek izvođenja se prenosi na funkciju Nakon što se kôd u funkciji izvede, glavni program se nastavlja od slijedeće naredbe iza poziva funkcije nasa_funkcija int main () { ... nasa_funkcija; }
Pozivanje funkcija Funkcije se ponašaju kao zasebne cjeline Njihovo unutarnje ustrojstvo ne mora biti poznato korisniku funkcije Pozivatelj funkcije mora znati što funkcija čini, ali mu ne mora biti važno kako ona to čini Funkcije imaju parametre (argumente) koje pozivatelj zadaje prilikom poziva Funkcije vraćaju povratnu vrijednost Neka funkcija može pozivati i samu sebe (o tome više kasnije →)
Pozivanje funkcija Iz neke funkcije može se pozvati i neka druga funkcija Nasa_funkcija_1 () { ... Nasa_funkcija_2; } Nasa_funkcija_2 int main () { Nasa_funkcija_1;
Zašto koristiti funkcije? Razbijanjem programa u funkcije doprinosi se njegovoj modularnosti Modularni program – program koji je razbijen na manje cjeline koje je lakše koristiti Primjer: Za program za izračunavanje binomnih koeficijenata odnosno: ... možemo iskoristiti program za izračunavanje faktorijela kojeg smo već napisali tako da od njega napravimo funkciju
Program za izračunavanje binomnih koeficijenata Već smo imali: //Program za računanje faktorijela #include <iostream> using namespace std; int main() { int n; cout << "Upisi prirodan broj: "; cin >> n; long fjel = 1; for (int i = 2; i <= n; ++i) {fjel = fjel * i;} cout << n <<"! = " << fjel << endl; return 0; }
Program za izračunavanje binomnih koeficijenata #include <iostream> using namespace std; int fact(int n) { long fjel = 1; for (int i = 2; i <= n; ++i) {fjel = fjel * i;} cout << n <<"! = " << fjel << endl; return fjel; } int main() { int p, r; cout << "Upisi broj p: "; cin >> p; cout << endl << "Upisi broj r: "; cin >> r; int bk = fact(p) / (fact(r) * fact(p-r)); cout << "Binomni koeficijent brojeva " << p << " i " << r << " je: " << bk << endl << endl; return 0; Ako ne bismo koristili funkcije tada bismo zasebno u programu morali izračunati p!, r! i (p-r)!
Funkcija kao argument Moguće je i poziv funkcije smjestiti kao argument poziva funkcije Na primjer: ... int fact(int n) { … … float Kvadrat(x) = x*x; float factNa2 = Kvadrat(fact(x));
Funkcije koje ne vraćaju nikakvu konkretnu vrijednost Funkcija ne mora vraćati nikakvu konkretnu vrijednost To se može naznačiti tako da se funkcija deklarira tipom void Na primjer: void IspisiKvadrat(double x) { cout << (x*x) << endl; return; } U takvom slučaju naredba return ne sadrži nikakav podatak (može se i izostaviti)
Povratak iz funkcije u glavni program Povratak je moguć s bilo kojeg mjesta unutar funkcije Zato se naredba return može pojavljivati na više mjesta Izvršiti će se jedna naredba return – ovisno o tome do koje kôd dođe
Više naredbi return - primjer #include <iostream> using namespace std; bool pravokutan(int a,int b,int c) { if (a*a+b*b==c*c || b*b+c*c==a*a || a*a+c*c==b*b) return true; else return false; } int main() { int a, b, c; cout << "Upisi a: "; cin >> a; cout << "Upisi b: "; cin >> b; cout << "Upisi c: "; cin >> c; if (pravokutan(a,b,c)) cout << "Trokut je pravokutan!"; cout << "Trokut nije pravokutan!"; return 0;