Professional Documents
Culture Documents
P12 Funkcije
P12 Funkcije
Funkcije
Doc. dr Vedran Ljubovi
ta su to funkcije?
1.12.2015
1.12.2015
1.12.2015
1.12.2015
1.12.2015
1.12.2015
1.12.2015
Procedure
1.12.2015
Deklaracija funkcije
prototipa funkcije i
implementacije funkcije
1.12.2015
10
Prototip funkcije
Prototip funkcije:
tip ime(tip param1, tip param2, ...)
1.12.2015
11
Implementacija funkcije
1.12.2015
12
Poziv funkcije
1.12.2015
13
Primjer
#include <stdio.h>
int f(int a) {
printf("Poziv funkcije f, a je %d\n", a);
return a*2+1;
}
int main() {
int x, y;
printf("Unesite broj x: ");
scanf("%d", &x);
printf("Sada pozivamo funkciju...\n");
y = f(x);
printf("Nakon poziva y je: %d\n", y);
return 0;
}
1.12.2015
14
Primjer
#include <stdio.h>
Prototip funkcije.
Funkcija ima jedan parametar
tipa int, vraa vrijednost tipa int.
int f(int a) {
printf("Poziv funkcije f, a je %d\n", a);
return a*2+1;
}
int main() {
int x, y;
printf("Unesite broj x: ");
scanf("%d", &x);
printf("Sada pozivamo funkciju...\n");
y = f(x);
printf("Nakon poziva y je: %d\n", y);
return 0;
}
1.12.2015
15
Primjer
#include <stdio.h>
Prototip funkcije.
Funkcija ima jedan parametar
tipa int, vraa vrijednost tipa int.
int f(int a) {
printf("Poziv funkcije f, a je %d\n", a);
return a*2+1;
}
Implementacija funkcije
int main() {
int x, y;
printf("Unesite broj x: ");
scanf("%d", &x);
printf("Sada pozivamo funkciju...\n");
y = f(x);
printf("Nakon poziva y je: %d\n", y);
return 0;
}
1.12.2015
16
Primjer
#include <stdio.h>
Prototip funkcije.
Funkcija ima jedan parametar
tipa int, vraa vrijednost tipa int.
int f(int a) {
printf("Poziv funkcije f, a je %d\n", a);
return a*2+1;
}
Implementacija funkcije
int main() {
int x, y;
printf("Unesite broj x: ");
scanf("%d", &x);
printf("Sada pozivamo funkciju...\n");
y = f(x);
printf("Nakon poziva y Poziv
je: %d\n",
funkcije y);
f.
return 0;
Proslijeena vrijednost x.
}
1.12.2015
17
Primjer
#include <stdio.h>
int f(int a) {
printf("Poziv funkcije f, a je %d\n", a);
return a*2+1;
}
int main() {
int x, y;
printf("Unesite broj x: ");
scanf("%d", &x);
printf("Sada pozivamo funkciju...\n");
y = f(x);
printf("Nakon poziva y je: %d\n", y);
return 0;
}
1.12.2015
18
Primjer
#include <stdio.h>
int f(int a) {
printf("Poziv funkcije f, a je %d\n", a);
return a*2+1;
}
Unesite broj x: 5
Sada pozivamo funkciju...
int main() {
Poziv funkcije f, a je 5
int x, y;
Nakon poziva y je: 11
printf("Unesite broj x: ");
1.12.2015
scanf("%d", &x);
printf("Sada pozivamo funkciju...\n");
y = f(x);
printf("Nakon poziva y je: %d\n", y);
return 0;
19
Primjer
#include <stdio.h>
int f(int a) {
printf("Poziv funkcije f, a je %d\n", a);
return a*2+1;
}
x=?, y=?
int main() {
int x, y;
printf("Unesite broj x: ");
scanf("%d", &x);
printf("Sada pozivamo funkciju...\n");
y = f(x);
printf("Nakon poziva y je: %d\n", y);
return 0;
}
1.12.2015
20
Primjer
#include <stdio.h>
int f(int a) {
Izvravanje programa kree
printf("Poziv funkcije f, a je %d\n", a);
od main funkcije
return a*2+1;
}
x=?, y=?
int main() {
int x, y;
printf("Unesite broj x: ");
scanf("%d", &x);
printf("Sada pozivamo funkciju...\n");
y = f(x);
printf("Nakon poziva y je: %d\n", y);
return 0;
}
1.12.2015
21
Primjer
#include <stdio.h>
int f(int a) {
printf("Poziv funkcije f, a je %d\n", a);
return a*2+1;
}
x=?, y=?
x=5
int main() {
int x, y;
printf("Unesite broj x: ");
scanf("%d", &x);
printf("Sada pozivamo funkciju...\n");
y = f(x);
printf("Nakon poziva y je: %d\n", y);
return 0;
}
1.12.2015
22
Primjer
#include <stdio.h>
int f(int a) {
printf("Poziv funkcije f, a je %d\n", a);
return a*2+1;
}
x=?, y=?
x=5
"Sada pozivamo..."
int main() {
int x, y;
printf("Unesite broj x: ");
scanf("%d", &x);
printf("Sada pozivamo funkciju...\n");
y = f(x);
printf("Nakon poziva y je: %d\n", y);
return 0;
}
1.12.2015
23
Primjer
#include <stdio.h>
int f(int a) {
printf("Poziv funkcije f, a je %d\n", a);
return a*2+1;
}
x=?, y=?
x=5
"Sada pozivamo..."
int main() {
int x, y;
printf("Unesite broj x: ");
scanf("%d", &x);
printf("Sada pozivamo funkciju...\n");
y = f(x);
printf("Nakon poziva y je: %d\n", y);
return 0;
}
1.12.2015
24
Poziv po vrijednosti
1.12.2015
25
Primjer
#include <stdio.h>
int f(int a) {
printf("Poziv funkcije f, a je %d\n", a);
return a*2+1;
}
x=?, y=?
x=5
"Sada pozivamo..."
int main() {
int x, y;
printf("Unesite broj x: ");
scanf("%d", &x);
printf("Sada pozivamo funkciju...\n");
y = f(x);
printf("Nakon poziva y je: %d\n", y);
return 0;
}
1.12.2015
26
Primjer
#include <stdio.h>
int f(int a) {
printf("Poziv funkcije f, a je %d\n", a);
return a*2+1;
}
x=?, y=?
x=5
"Sada pozivamo..."
a=5
int main() {
int x, y;
printf("Unesite broj x: ");
scanf("%d", &x);
printf("Sada pozivamo funkciju...\n");
y = f(x);
printf("Nakon poziva y je: %d\n", y);
return 0;
}
1.12.2015
27
Primjer
Parametar funkcije a
dobija vrijednost 5
#include <stdio.h>
int f(int a) {
printf("Poziv funkcije f, a je %d\n", a);
return a*2+1;
}
x=?, y=?
x=5
"Sada pozivamo..."
a=5
int main() {
int x, y;
printf("Unesite broj x: ");
scanf("%d", &x);
printf("Sada pozivamo funkciju...\n");
y = f(x);
printf("Nakon poziva y je: %d\n", y);
return 0;
}
1.12.2015
28
Parametri funkcije
1.12.2015
29
Primjer
#include <stdio.h>
int f(int a) {
printf("Poziv funkcije f, a je %d\n", a);
return a*2+1;
}
x=?, y=?
x=5
"Sada pozivamo..."
a=5
"Poziv... a je 5"
int main() {
int x, y;
printf("Unesite broj x: ");
scanf("%d", &x);
printf("Sada pozivamo funkciju...\n");
y = f(x);
printf("Nakon poziva y je: %d\n", y);
return 0;
}
1.12.2015
30
Primjer
#include <stdio.h>
int f(int a) {
printf("Poziv funkcije f, a je %d\n", a);
a++;
return a*2+1;
}
x=?, y=?
x=5
"Sada pozivamo..."
a=5
"Poziv... a je 5"
int main() {
int x, y;
printf("Unesite broj x: ");
scanf("%d", &x);
printf("Sada pozivamo funkciju...\n");
y = f(x);
printf("Nakon poziva y je: %d\n", y);
return 0;
}
1.12.2015
31
Primjer
Mogli smo promijeniti a
u funkciji...
#include <stdio.h>
int f(int a) {
printf("Poziv funkcije f, a je %d\n", a);
a++;
return a*2+1;
}
x=?, y=?
x=5
"Sada pozivamo..."
a=5
"Poziv... a je 5"
int main() {
int x, y;
printf("Unesite broj x: ");
scanf("%d", &x);
printf("Sada pozivamo funkciju...\n");
y = f(x);
printf("Nakon poziva y je: %d\n", y);
return 0;
}
1.12.2015
32
Primjer
Mogli smo promijeniti a
u funkciji...
#include <stdio.h>
int f(int a) {
printf("Poziv funkcije f, a je %d\n", a);
a++;
return a*2+1;
}
x=?, y=?
x=5
"Sada pozivamo..."
a=5
"Poziv... a je 5"
int main() {
int x, y;
...x bibroj
ostalox:5 ");
printf("Unesite
scanf("%d", &x);
printf("Sada pozivamo funkciju...\n");
y = f(x);
printf("Nakon poziva y je: %d\n", y);
return 0;
}
1.12.2015
33
Primjer
#include <stdio.h>
int f(int a) {
printf("Poziv funkcije f, a je %d\n", a);
return a*2+1;
}
int main() {
int x, y;
printf("Unesite broj x: ");
scanf("%d", &x);
printf("Sada pozivamo funkciju...\n");
y = f(x);
printf("Nakon poziva y je: %d\n", y);
return 0;
}
1.12.2015
x=?, y=?
x=5
"Sada pozivamo..."
a=5
"Poziv... a je 5"
a*2+1 = 11
return 11
34
Naredba return
1.12.2015
35
Naredba return
1.12.2015
36
Primjer
#include <stdio.h>
int f(int a) {
printf("Poziv funkcije f, a je %d\n", a);
return a*2+1;
}
int main() {
int x, y;
printf("Unesite broj x: ");
scanf("%d", &x);
printf("Sada pozivamo funkciju...\n");
y = f(x);
printf("Nakon poziva y je: %d\n", y);
return 0;
}
1.12.2015
x=?, y=?
x=5
"Sada pozivamo..."
a=5
"Poziv... a je 5"
a*2+1 = 11
return 11
37
Primjer
#include <stdio.h>
int f(int a) {
printf("Poziv funkcije f, a je %d\n", a);
return a*2+1;
}
int main() {
int x, y;
printf("Unesite broj x: ");
scanf("%d", &x);
printf("Sada pozivamo funkciju...\n");
y = f(x);
printf("Nakon poziva y je: %d\n", y);
return 0;
}
1.12.2015
x=?, y=?
x=5
"Sada pozivamo..."
a=5
"Poziv... a je 5"
a*2+1 = 11
return 11
y=11
38
Primjer
#include <stdio.h>
int f(int a) {
printf("Poziv funkcije f, a je %d\n", a);
return a*2+1;
}
int main() {
int x, y;
printf("Unesite broj x: ");
scanf("%d", &x);
printf("Sada pozivamo funkciju...\n");
y = f(x);
printf("Nakon poziva y je: %d\n", y);
return 0;
}
1.12.2015
x=?, y=?
x=5
"Sada pozivamo..."
a=5
"Poziv... a je 5"
a*2+1 = 11
return 11
y=11
"Nakon... y je: 11"
39
Primjer
#include <stdio.h>
int f(int a) {
printf("Poziv funkcije f, a je %d\n", a);
return a*2+1;
}
Unesite broj x: 5
Sada pozivamo funkciju...
int main() {
Poziv funkcije f, a je 5
int x, y;
Nakon poziva y je: 11
printf("Unesite broj x: ");
1.12.2015
scanf("%d", &x);
printf("Sada pozivamo funkciju...\n");
y = f(x);
printf("Nakon poziva y je: %d\n", y);
return 0;
40
Lokalne promjenljive
int a=5;
printf("a je %d\n", a);
}
printf("a sada je %d\n", a);
return 0;
1.12.2015
41
Lokalne promjenljive
int a=5;
printf("a je %d\n", a);
Greka!
'a' undeclared
}
printf("a sada je %d\n", a);
return 0;
1.12.2015
42
Lokalne promjenljive
1.12.2015
43
Lokalne promjenljive
a je 5
a sada je 3
1.12.2015
44
Lokalne promjenljive
a je 5
a sada je 3
1.12.2015
45
Primjer 2
#include <stdio.h>
void c(int b, int a) {
a++; b++;
printf("U funkciji a=%d, b=%d\n", a, b);
}
int main() {
int a=5, b=3;
printf("Prije poziva a=%d, b=%d\n", a, b);
c(a,b);
printf("Nakon poziva a=%d, b=%d\n", a, b);
return 0;
}
1.12.2015
46
Primjer 2
#include <stdio.h>
void c(int b, int a) {
a++; b++;
printf("U funkciji a=%d, b=%d\n", a, b); a=5, b=3
}
int main() {
int a=5, b=3;
printf("Prije poziva a=%d, b=%d\n", a, b);
c(a,b);
printf("Nakon poziva a=%d, b=%d\n", a, b);
return 0;
}
1.12.2015
47
Primjer 2
#include <stdio.h>
void c(int b, int a) {
a++; b++;
printf("U funkciji a=%d, b=%d\n", a, b); a=5, b=3
}
a=4, b=6
int main() {
int a=5, b=3;
printf("Prije poziva a=%d, b=%d\n", a, b);
c(a,b);
printf("Nakon poziva a=%d, b=%d\n", a, b);
return 0;
}
1.12.2015
48
Primjer 2
#include <stdio.h>
void c(int b, int a) {
a++; b++;
printf("U funkciji a=%d, b=%d\n", a, b); a=5, b=3
}
a=4, b=6
a=5, b=3
int main() {
int a=5, b=3;
printf("Prije poziva a=%d, b=%d\n", a, b);
c(a,b);
printf("Nakon poziva a=%d, b=%d\n", a, b);
return 0;
}
1.12.2015
49
Primjer 2
#include <stdio.h>
1.12.2015
50
Primjer 2
#include <stdio.h>
1.12.2015
51
Primjer 2
#include <stdio.h>
Ovo su lokalne
promjenljive
1.12.2015
52
Primjer 2a
#include <stdio.h>
void c(int b, int a) {
a++; b++;
printf("U funkciji a=%d, b=%d\n", a, b);
}
int main() {
int a=5, b=3, z;
printf("Prije poziva a=%d, b=%d\n", a, b);
z=c(a,b);
printf("Nakon poziva a=%d, b=%d\n", a, b);
return 0;
}
1.12.2015
53
Primjer 2a
#include <stdio.h>
void c(int b, int a) {
a++; b++;
printf("U funkciji a=%d, b=%d\n", a, b);
}
int main() {
Greka! Funkcija je
int a=5, b=3, z;
tipa void
printf("Prije poziva a=%d, b=%d\n", a, b);
z=c(a,b);
printf("Nakon poziva a=%d, b=%d\n", a, b);
return 0;
}
1.12.2015
54
Primjer 2b
#include <stdio.h>
void c(int b, int a) {
a++; b++;
printf("U funkciji a=%d, b=%d\n", a, b);
return a+b;
}
int main() {
int a=5, b=3;
printf("Prije poziva a=%d, b=%d\n", a, b);
c(a,b);
printf("Nakon poziva a=%d, b=%d\n", a, b);
return 0;
}
1.12.2015
55
Primjer 2b
#include <stdio.h>
void c(int b, int a) {Greka! Funkcija je
a++; b++;
tipa void
printf("U funkciji a=%d, b=%d\n", a, b);
return a+b;
}
int main() {
int a=5, b=3;
printf("Prije poziva a=%d, b=%d\n", a, b);
c(a,b);
printf("Nakon poziva a=%d, b=%d\n", a, b);
return 0;
}
1.12.2015
56
Primjer 2c
#include <stdio.h>
void c(int b, int a) {
a++; b++;
printf("U funkciji a=%d, b=%d\n", a, b);
return;
}
int main() {
int a=5, b=3;
printf("Prije poziva a=%d, b=%d\n", a, b);
c(a,b);
printf("Nakon poziva a=%d, b=%d\n", a, b);
return 0;
}
1.12.2015
57
Primjer 2c
#include <stdio.h>
void c(int b, int a) {
a++; b++;
Ovo je a=%d,
ok (ali nepotrebno)
printf("U funkciji
b=%d\n", a, b);
return;
}
int main() {
int a=5, b=3;
printf("Prije poziva a=%d, b=%d\n", a, b);
c(a,b);
printf("Nakon poziva a=%d, b=%d\n", a, b);
return 0;
}
1.12.2015
58
Primjer 2d
#include <stdio.h>
void c(int b, int a) {
a++; b++;
return;
printf("U funkciji a=%d, b=%d\n", a, b);
}
int main() {
int a=5, b=3;
printf("Prije poziva a=%d, b=%d\n", a, b);
c(a,b);
printf("Nakon poziva a=%d, b=%d\n", a, b);
return 0;
}
1.12.2015
59
Primjer 2d
#include <stdio.h>
void c(int b, int a) {
a++; b++;
return;
printf("U funkciji a=%d, b=%d\n", a, b); a=5, b=3
a=5, b=3
}
int main() {
int a=5, b=3;
printf("Prije poziva a=%d, b=%d\n", a, b);
c(a,b);
printf("Nakon poziva a=%d, b=%d\n", a, b);
return 0;
}
1.12.2015
60
Primjer 2d
#include <stdio.h>
printf se nikada
void c(int b, int a) {nee izvriti
a++; b++;
return;
printf("U funkciji a=%d, b=%d\n", a, b); a=5, b=3
a=5, b=3
int main() {
int a=5, b=3;
printf("Prije poziva a=%d, b=%d\n", a, b);
c(a,b);
printf("Nakon poziva a=%d, b=%d\n", a, b);
return 0;
}
1.12.2015
61
1.12.2015
62
ta ova funkcija
ustvari vraa??
1.12.2015
63
Globalne promjenljive
1.12.2015
64
1.12.2015
65
1.12.2015
66
#include <stdio.h>
int a;
void c(int b) {
a++; b++;
printf("U funkciji a=%d, b=%d\n", a, b); a=5, b=3
}
a=6, b=4
a=6, b=3
int main() {
int b=3;
a=5;
printf("Prije poziva a=%d, b=%d\n", a, b);
c(b);
printf("Nakon poziva a=%d, b=%d\n", a, b);
return 0;
}
1.12.2015
67
#include <stdio.h>
int a;
void c(int b) {
Lokalna
a++; b++;
printf("U funkcijipromjenljiva
a=%d, b=%d\n", a, b); a=5, b=3
}
a=6, b=4
a=6, b=3
int main() {
int b=3;
a=5;
printf("Prije poziva a=%d, b=%d\n", a, b);
c(b);
printf("Nakon poziva a=%d, b=%d\n", a, b);
return 0;
}
1.12.2015
68
#include <stdio.h>
int a;
void c(int b) {
Lokalna
a++; b++;
printf("U funkcijipromjenljiva
a=%d, b=%d\n", a, b); a=5, b=3
}
a=6, b=4
a=6, b=3
int main() {
int b=3;
a=5;
printf("Prije poziva a=%d, b=%d\n", a, b);
c(b);
printf("Nakon poziva a=%d, b=%d\n", a, b);
return 0;
Nije jasno (bez itanja koda)
}
da e se u funkciji promijeniti a
1.12.2015
69
1.12.2015
70
1.12.2015
71
1.12.2015
72
Zadatak: faktorijel
1.12.2015
73
Zadatak: faktorijel
1.12.2015
74
Zadatak: faktorijel
1.12.2015
75
Zadatak: faktorijel
1.12.2015
76
Zadatak: faktorijel
1.12.2015
77
Zadatak: faktorijel
1.12.2015
78
Zadatak: faktorijel
1.12.2015
79
Zadatak: faktorijel
1.12.2015
80
Zadatak: faktorijel
Implementacija funkcije:
long long faktorijel (int x) {
long long fakt=1;
int i;
for (i=2; i<=x; i++)
fakt = fakt*i;
return fakt;
}
1.12.2015
81
Zadatak: faktorijel
Implementacija funkcije:
long long faktorijel (int x) {
long long fakt=1;
Moramo deklarisati promjenljivu
int i;
u kojoj emo drati rezultat
for (i=2; i<=x; i++)
fakt = fakt*i;
return fakt;
}
1.12.2015
82
Zadatak: faktorijel
Implementacija funkcije:
long long faktorijel (int x) {
long long fakt=1;
Moramo deklarisati promjenljivu
int i;
u kojoj emo drati rezultat
for (i=2; i<=x; i++)
fakt = fakt*i;
return fakt;
}
1.12.2015
83
Zadatak: faktorijel
x)
Implementacija funkcije:
long long faktorijel (int x) {
long long fakt=1;
Moramo deklarisati promjenljivu
int i;
u kojoj emo drati rezultat
for (i=2; i<=x; i++)
fakt = fakt*i;
return fakt;
}
1.12.2015
84
Zadatak: faktorijel
x)
Implementacija funkcije:
long long faktorijel (int x) {
long long fakt=1;
Moramo deklarisati promjenljivu
int i;
u kojoj emo drati rezultat
for (i=2; i<=x; i++)
fakt = fakt*i;
return fakt;
}
1.12.2015
u mainu.
85
Zadatak: faktorijel
1.12.2015
86
Zadatak: faktorijel
1.12.2015
87
Zadatak: faktorijel
1.12.2015
88
Zadatak: faktorijel
1.12.2015
89
Zadatak: faktorijel
1.12.2015
90
Zadatak: faktorijel
...nije isto to i
long long faktorijel ovo
(int
x !x) {
...nije isto to i
ovo i !
int main() {
Ovo x...
int x, i;
printf("Unesite broj x: ");
Ovo i...
scanf("%d", &x);
for (i=1; i<=x; i++)
printf("%d!=%d\n", i, faktorijel(i));
return 0;
Rezultat funkcije je direktno
}
1.12.2015
91
Zadatak: faktorijel
Sve su to
promjenljive koje su
lokalne za svoje
funkcije
#include <stdio.h>
#include <math.h>
...nije isto to i
long long faktorijel ovo
(int
x !x) {
...nije isto to i
ovo i !
int main() {
Ovo x...
int x, i;
printf("Unesite broj x: ");
Ovo i...
scanf("%d", &x);
for (i=1; i<=x; i++)
printf("%d!=%d\n", i, faktorijel(i));
return 0;
Rezultat funkcije je direktno
}
1.12.2015
92
Savjeti
1.12.2015
Zadaci esto postaju trivijalni ako moete sve bitno (ulaze i izlaze) prebaciti
u funkciju... dok poenta zadatka je da nauite lokalne vs. globalne
promjenljive i poziv po vrijednosti.
93
1.12.2015
a=2
a=2
a=2
...
94
Statike promjenljive
1.12.2015
a=2
a=3
a=4
...
95
Rekurzija
1.12.2015
96
Rekurzija
1.12.2015
97
Rekurzija
1.12.2015
98
Rekurzija
1.12.2015
99
Rekurzija
1.12.2015
100
1.12.2015
101