Professional Documents
Culture Documents
3 - Функције
3 - Функције
Programski jezici
2017/18
Funkcije
• Kod pisanja programa koji trebaju da riješe neke
složenje probleme, problemi se razlažu na niz
jednostavnih (elementarnih) problema
• Za rješavanje elementarnih problema pišu se
potprogrami (funkcije)
• Složeni problem se rješava pozivanjem funkcija koje
rješavaju elementarne probleme
• Funkcija predstavlja modul ili blok programskog koda
koji izvršava određeni zadatak
• Primjeri: printf, scanf, strlen, malloc, calloc, realloc...
Definisanje funkcije
[<tip_povratne_vrednosti>] <ime_funkcije> ([<lista_parametara>])
{
<telo_funkcije>
}
int a = minimalni(5,3);
Naredba return
• Ovom naredbom prekida se izvršenje funkcije
• Može da vrati i rezultat funkcije koji prihvata
pozivajuća funkcija
• Rezultat koji funkcija vraća je tipa koji je naveden kao
tip povratne vrijednosti funkcije
• Funkcija može da sadrži nijednu (ako je tipa void),
jednu ili više naredbi return
• Postoje dva oblika:
– return (<vrijednost>); - <vrijednost> je rezultat funckije
– return; - ne vraća ništa, za fukncije tipa void
Deklaracija funkcije
• Omogućava poziv funkcije prije njenog
definisanja
[<tip_rezultata>] <ime_funkcije>();
• <tip_rezultata> mora da se poklapa sa tipom u
kasnijoj definiciji fukncije
• U deklaraciji se mogu navesti i tipovi argumenata
(imena nisu obavezna)
int minimalni(int, int);
Primjer 2
#include<stdio.h>
void main()
{
poziv int min = minimalni(5, 3);
}
void ispis(int);
void main()
{
int broj = 5;
printf("Prije poziva: %d\n", broj);
ispis(broj);
printf("Posle poziva: %d\n", broj);
}
void main()
{
int x, y, zbir, razlika;
printf("Unesite dva cijela broja: ");
scanf("%d %d", &x, &y);
system("pause");
}
void zbirIRazlika();
void main()
{
printf("Unesite dva cijela broja: ");
scanf("%d %d", &x, &y);
zbirIRazlika();
printf("Zbir: %d\nRazlika: %d\n", zbir, razlika);
system("pause");
}
void zbirIRazlika()
{
zbir = x + y;
razlika = x - y;
return zbir;
}
Primjer 5
Napisati funkciju koja računa cjelobrojan
pozitivan stepen realne osnove. U galvnoj funkciji
omoguciti unos osnove i eksponenta, pa rezultat
dobijen pozivom funkcije ispisati na ekran.
Primjer 5 - Rješenje
#include <stdio.h>
void main()
{
int eksponent;
float osnova;
printf("Unesite osnovu i eksponent:\n");
scanf("%f %d", &osnova, &eksponent);
printf("rez=%f\n", stepen(osnova, eksponent));
system("pause");
}
int suma(int mat[][10], int m, int n); int suma(int mat[][10], int m, int n)
void ispisi(int mat[][10], int m, int n); {
int i, j, suma = 0;
void main() for (i = 0; i < n; i++)
{ for (j = 0; j < n; j++)
int mat[10][10], m, n, i, j; suma += mat[i][j];
int sumaElemenata;
printf("Unesite m i n: "); return suma;
scanf("%d %d", &m, &n); }
printf("Unesite matricu:\n");
for (i = 0; i < m; i++) void ispisi(int mat[][10], int m, int n)
for (j = 0; j < n; j++) {
scanf("%d", mat[i] + j); int i, j, suma = 0;
for (i = 0; i < n; i++)
sumaElemenata = suma(mat, m, n); {
printf("\nUnijeli ste matricu:\n"); for (j = 0; j < n; j++)
ispisi(mat, m, n); printf("%d ", mat[i][j]);
printf("Suma elemenata je: %d\n", sumaElemenata); printf("\n");
}
system("pause"); }
}
Rekurzivne funkcije
4! = 4 * 3! = 4 * 3 * 2! = 4 * 3 * 3 * 1! = 4 * 3 * 2 * 1
Primjer 8 - Rješenje
#include <stdio.h>
void main()
{
int broj;
printf("Unesite cijeli broj (veci od 1): ");
scanf("%d", &broj);
int faktorijel(int n)
{
if (n == 1)
return 1;
else
return n*faktorijel(n - 1);
}
Primjer 9
Napisati rekurzivnu funkciju za računanje i-tog
člana Fibonačijevog niza, zatim omogućiti
korisniku unos indeksa člana, i na ekranu prikazati
vrijednosti člana sa unijetim indeksom.
1,1,2,3,5,8,13,21,…
F[i] = F[i-1] + F[i-2]
Primjer 10
Napisati program koji omogućava korisniku unos stringa, a
potom napisati funkcije koje konvertuju dati string u sva
mala i sva velika slova. U glavnoj funkciji pozvati ove
funkcije i njihov rezultat prikazati na ekranu.
Primjer 11
Napisati program koji omogućava korisniku da unese niz
od N cijelih brojeva. N se unosi sa tastature. Niz cuvati u
dinamickoj zoni memorije.
• Napisati funkciju koja racuna geometrijsku sredinu
elemenata niza.
• Napisati funkciju koja iz niza izbacuje sve elemente
koji su manji od geometrijske sredine (niz uvijek treba
da zauzima tačno onoliko prostora koliko mu je
potrebno) *
Primjer 12
Napisati program koji omogućava unos ocjena sa tastature
(od 1 do 10) sve dok se ne unese 0. Niz ocjena čuvati u
dinamičkoj zoni memorije, i omogućiti da uvijek zauzima
tačno onoliko prostora koliko je potrebno.
Napisati funkcije za ispis histograma ocjena na ekran koje
omogućavaju izbor karaktera od koga se pravi histogram.
10 *****
9 *******
8 ******
7 **********
6 *********
...
Primjer 13
Napisati program koji omogućava unos matrice mxn (m, n
< 10). Potom omogućiti unos cijelog broja X koji je u
granicama 0<X<m. Napisati funkciju koja računa sumu
elemenata i-te vrste matrice, pa koristeći tu funkciju
ispisati na ekran sumu vrste X date matrice.
Globalne promjenljive
C program sastoji se od skupa globalnih objekata, koji
mogu biti:
• promjenljive
• funkcije
Globalne promjenljive su definisane izvan svake funkcije i
zato su potencijalno na raspolaganju raznim funkcijama.
Funkcije su uvijek globalne, jer C ne dozvoljava
definisanje funkcija unutar drugih funkcija.
Primjer 14
#include <stdio.h> void prebrojZnakove()
{
/*Globalne promjenljive*/ char c;
int br_slova, br_cifara;
printf("Unesite tekst: ");
void prebrojZnakove(); c = getchar();
c = getchar();
}
}
Poređenje globalnih i lokalnih
promjenljivih