Professional Documents
Culture Documents
Prilikom kreiranja funkcije definiše se šta funkcija treba da radi. Da bi se funkcija izvršila ona
se mora pozvati. Kada program (funkcija) pozove funkciju kontrola se iz glavnog programa
(funkcije) prenosi na pozvanu funkciju. Funkcija se izvršava sve dok ne dođe do kraja ili do
naredbe return. Tada funkcija završava izvršavanje i vraća kontrolu glavnom program (funkciji).
Da bi funkcija bila pozvana potrebno je da se navede njeno ime i proslede konkretne vrednosti
parametara kako je predviđeno u njenoj deklaraciji. Ukoliko funkcija vraća vrednost, nju treba
upotrebiti ili zapamtiti u odgovarajućoj promenljivoj kao što je ilustrovano sledećim primerom.
int main() {
int x = 3;
int y = 8;
int rez1 = min(3, 1); //Poziv f-je min konkretne vrednosti
int rez2 = min(x, y); //Poziv f-je min za promenljive x i y
cout << "Prvi minimum je " << rez1 << ", a drugi minimum je
"<< rez2<< endl;
return 0;
}
1. Prenos parametara po vrednosti podrazumeva da sve što se desi u funkciji nema nikakvog
uticaja na vrednost promenljivih u glavnom programu. Prilikom poziva funkcije prave se kopije
prosleđenih parametara koje postoje samo dok funkcija ne završi sa izvršavanjem.
1
Univerzitet u Beogradu Programiranje (Vežbe)
Tehnički fakultet u Boru
Rekurzivne funkcije
Rekurzija je pojava kada funkcija poziva samu sebe kao što je to prikazano sledećim
primerom.
void rekurzija() {
rekurzija(); /*funkcija poziva samu sebe*/
}
void main() {
rekurzija(); /*Poziv f-je u programu(funkciji)*/
}
U programskom jeziku C++ rekurzivno pozivanje funkcije je dozvoljeno, ali se naročito mora
voditi računa o definisanju kada se rekurzivni poziv funkcije završava. U protivnom postoji
opasnost od kreiranja mrtve (beskonačne) petlje.
Rekurzivni poziv funkcije predstavlja jedan od osnovnih programerskih metoda za rešavanje
određenih klasa problema, naročito matematičkih. Primeri primene predstavljaju računanje
faktorijela broja, fibonačijevog niza, implementaciju algoritma sortiranja i pretraživanja (quick sort
i dr.).
Zadaci za vežbu
Zadatak 1. Napisati program koji u sebi sadrži funkciju za proveru unete brojne vrednosti. Funkcija
int Provera(float Broj)potrebno je da izvrši proveru da li je uneti broj nula ili različit od
nule. Na osnovu toga ispisati odgovarajuću poruku.
#include<iostream>
using namespace std;
int main() {
float x;
cout << "Unesi realan broj: ";
cin >> x;
Provera(x); //Poziv funkcije u programu(funkciji)
return 0;
}
2
Univerzitet u Beogradu Programiranje (Vežbe)
Tehnički fakultet u Boru
𝑎2
Zadatak 2. Napisati program koji izračunava vrednost iztaza 𝑐 = , na osnovu unetih vrednosti za
𝑏
a i b. Program napisati koristeći funkciju int Provera(float a, float b) koja vrši proveru
parametar b da li je različit od nule.
#include<iostream>
using namespace std;
int Provera(float a, float b) {//Deklaracija i definicija funkcije
float c;
if (b == 0)
cout << "Parametar b je NULA. Nedozvoljena vrednost.";
else {
c = (a*a) / b;
cout << "Vrednost izraza c = " << "(" << a << "*" << a <<
")" << "/" << b <<endl;
cout << "je c = " << c;
}
return 0;
}
int main() {
float x, y;
cout << "Unesite vrednost promenljive a: ";
cin >> x;
cout << "Unesite vrednost promenljive b: ";
cin >> y;
Provera(x, y); //Poziv funkcije u programu(funkciji)
return 0;
}
3
Univerzitet u Beogradu Programiranje (Vežbe)
Tehnički fakultet u Boru
int main() {
int x = 10, y = 20;
cout << "U programu originalne vrednosti za x i y su: x = "<< x
<< ", y = "<< y<< endl;
promeni(x, y); //Poziv funkcije po vrednosti
cout << "U programu nakon poziva funkcije vrednosti za x i y su:
x = " << x << ", y = " << y << endl;
return 0;
}
4
Univerzitet u Beogradu Programiranje (Vežbe)
Tehnički fakultet u Boru
Zadatak 4-1. Napisati program za prenos argumenata pozivom po referenci pomoću pokazivača.
#include <iostream>
using namespace std;
int promeni(int *x, int *y); //Deklaracija funkcije
int main() {
int x = 10, y = 20;
cout << "U programu originalne vrednosti za x i y su: x = " << x
<< ", y = " << y << endl;
promeni(&x, &y); //Poziv funkcije po referenci
cout << "U programu nakon poziva funkcije vrednosti za x i y su:
x = " << x << ", y = " << y << endl;
return 0;
}
Iz dobijenog rezulta na osnovu poziva funkcije po referenci možete videti da originalne vrednosti
promenljivih x i y su zamenile vrednosti u programu (funkciji) nakon poziva funkcije po referenci.
5
Univerzitet u Beogradu Programiranje (Vežbe)
Tehnički fakultet u Boru
Zadatak 4-2. Napisati program za prenos argumenata pozivom po referenci pomoću upućivača.
#include <iostream>
using namespace std;
int promeni(int &x, int &y); //Deklaracija funkcije
int main() {
int x = 10, y = 20;
cout << "U programu originalne vrednosti za x i y su: x = " << x
<< ", y = " << y << endl;
promeni(x, y); //Poziv funkcije po referenci pomocu upucivaca
cout << "U programu nakon poziva funkcije vrednosti za x i y su:
x = " << x << ", y = " << y << endl;
return 0;
}
Iz dobijenog rezulta na osnovu poziva funkcije po referenci pomoću upućivača možete videti da
originalne vrednosti promenljivih x i y su zamenile vrednosti u programu (funkciji) nakon poziva
funkcije po referenci pomoću upućivača.
6
Univerzitet u Beogradu Programiranje (Vežbe)
Tehnički fakultet u Boru
Zadatak 5. Napisati program za određivanje aritmrtičke sredine dinamičkog niza celih brojeva.
Elemente niza unosimo koristeći funkciju unos_elemenata, a za prikazivanje elemenata
koristimo funkciju stampaj. Aritmetičku sredinu unetih elemenata određujemo uz pomoć
funkcije a_sredina.
#include <iostream>
using namespace std;
int unos_elemenata(int *a, int n); //Deklaracija funkcije
int stampaj(int *a, int n); //Deklaracija funkcije
float a_sredina(int *a, int n); //Deklaracija funkcije
int main() {
int n, i, j;
cout << "Unesite duzinu niza n = ";
cin >> n;
while (n <= 0) {
cout << "Za duzinu niza uneliste nulu ili negativan
broj. Unesite duzinu niza: ";
cin >> n;
}
int * a = new int[n];
unos_elemenata(a, n); //Poziv funkcije
float sredina = a_sredina(a, n); //Poziv funkcije
cout << "Aritmeticka sredina elemenata niza je: " << sredina
<< endl;
stampaj(a, n); //Poziv funkcije
delete[] a;
return 0;
}
int unos_elemenata(int *a, int n) {//Definicija funkcije
cout << "Unesite elemente niza:" << endl;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
return 0;
}
int stampaj(int *a, int n) {//Definicija funkcije
cout << "Uneti niz:" << endl;
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
cout << endl;
return 0;
}
float a_sredina(int *a,int n) {//Definicija funkcije
int j;
float s = 0, as;
for (j = 0; j < n; j++)
s += a[j];
as = (float)s / n;
return as;
}
7
Univerzitet u Beogradu Programiranje (Vežbe)
Tehnički fakultet u Boru
Zadatak 6. Napisati program koji prikazuje sve proste brojevi do zadatog prirodnog broja n.
#include <iostream>
using namespace std;
int prost(int broj); //Deklaracija funkcije
int main() {
int n, i;
cout << "Unesi prirodan broj veci od jedan."<< endl;
cin >> n;
cout << "Svi prosti brojevi manji ili jednaki od broja " << n
<<" su:" << endl;
for (i = 2; i <= n; i++)
if (prost(i) == 1) //Poziv funkcije
cout << i << " ";
return 0;
}
int main() {
int n, i;
cout << "Unesi prirodan broj: ";
cin >> n;
cout << n<<"! = " << faktorijel(n) << endl; //Poziv funkcije
return 0;
}
8
Univerzitet u Beogradu Programiranje (Vežbe)
Tehnički fakultet u Boru
Zadatak 8. Napisati rekurzivnu funkciju koja izračunava faktorijel datog broja. Funkcija faktorijela
se rekurzivno može predstaviti kao f(n)=n*f(n-1) sa početnim uslovom f(1)=1.
#include<iostream>
using namespace std;
long faktorijel(int broj); //Deklaracija funkcije
int main() {
int n, i;
cout << "Unesi prirodan broj: ";
cin >> n;
cout << n << "! = " << faktorijel(n) << endl; //Poziv funkcije
return 0;
}
Zadatak 9. Napisati program koji prikazuje sve trocifrene brojeve koji su jednaki sumi faktorijela
svojih cifara. (primer: 123 treba da bude jednak zbiru 1! + 2! + 3! da bi bio prikazan)
#include<iostream>
using namespace std;
long fakt(int k); //Deklaracija funkcije
int main() {
long i;
unsigned a, b, c;
for (i = 100; i <= 999; i++) {
a = i % 10;
b = i % 100 / 10;
c = i / 100;
if (fakt(a) + fakt(b) + fakt(c) == i) //Poziv funkcije
cout << i<< endl;
}
return 0;
}
9
Univerzitet u Beogradu Programiranje (Vežbe)
Tehnički fakultet u Boru
Zadatak 1. Napisati program za izračunavanje funkcije 𝑦(𝑎, 𝑏). U glavnom program učitati
vrednost promenljivih a i b, zatim pozvati funkciju float y_a_b(int a, int b) u glavnom
program da izračuna vrednost funkcije 𝑦(𝑎, 𝑏) pod datim uslovima i na kraju prikazati dobijeni
rezultat. Promenljive a i b su integer tipa.
3 ∗ 𝑎 + 2 ∗ 𝑏, 𝑎 < 𝑏
𝑦(𝑎, 𝑏) = { − 5 ∗ 𝑏,
𝑎 𝑎 = 𝑏.
𝑏
𝑎3 − 2 , 𝑎>𝑏
10