FUNKCIJE U PROGRAMSKOM JEZIKU C/C++
1. Zamena mesta
2. Da li je broj prost
3. Ispisivanje niza
4. Izdvajanje parnih elemenata niza
5. Broj ponavljanja određenog karaktera
6. Računanje faktorijela od n
Uneti broj, npr. 5. Pozvati novu funkciju koja računa faktorijel i proslediti joj n kao parametar. Funkcija Faktorijel: Proveriti da li je n == 0 i ako jeste vratiti 1 (jer je 0! = 1). U nastavku kreirati proizvod kroz petlju, tako da se u svakom ciklusu prethodni proizvod pomnoži sa tekućom vrednošću promenljive i. Kontrolnu promenljivu umanjivati za 1, počevši od n pa do 1.
#include <stdio.h>
/* Rešenje za programski jezik C (kompajlabilno u C89/C99 i novijim) */
int faktorijel(int n)
{
int f;
if (n == 0)
{
return 1;
if (n < 0)
{
return -1; /* indikator greške */
f = 1;
for (i = n; i > 0; i--)
{
return f;
int main(void)
{
printf("Unesite neki broj n: ");
if (scanf("%d", &n) != 1)
{
return 1;
if (n >= 0)
{
printf("Faktorijel iznosi %d\n", f);
else
{
return 0;
#include <iostream>
/* Rešenje za programski jezik C++ (kompajlabilno sa modernim C++ kompajlerima) */
unsigned long long factorial(int n)
{
if (n < 0) return 0ULL; /* indikator greške, ovde vraćamo 0 */
unsigned long long f = 1ULL;
for (int i = 1; i <= n; ++i)
{
return f;
int main()
{
std::cout << "Unesite neki broj n: ";<br>
if (!(std::cin >> n))
{
return 1;
if (n < 0)
{
return 0;
unsigned long long result = factorial(n);
std::cout << "Faktorijel iznosi " << result << std::endl;
return 0;
7. Zbir faktorijela prvih n prirodnih brojeva
8. Dnevnice
Primer:
Ulaz:
12_2_2021 2045.33
23_8_2021 1034.66
15_4_2021 1567.99
Izlaz:
Niz1:
12.02.2021
23.08.2021
15.04.2021
Niz2:
2045.31
1034.66
1567.99
9. Logovanje
Primer:
Ulaz:
Uneste vaše korisničko ime i šifru:
"Mika"
"korisnik1"
Ponovite unos netačna lozinka
"admin"
"korisnik"
Izlaz:
Korisnik je uspešno ulogovan
10. Određivanje maksimuma
Učitati dva cela broja i odrediti njihov maksimum koristeći prethodno definisanu funkciju.
Kreirati funkciju "maksimum()", koja kao parametre prima dva cela broja, a i b, a zatim, unutar funkcije ispitati koji je od njih veći.
Ako je "a" veći, funkcija treba kao povratnu vrednost da vrati podatak "a", a u suprotnom "b".
Unutar glavne(main) funkcije, uneti dva cela broja, a zatim pozvati prethodno kreiranu funkciju za određivanje maksimuma, da bi se on odredio. Odštampati tu vrednost u nastavku programa.
/*Rešenje za programski jezik C*/
int maksimum(int a, int b)
{
{
else
{
int main()
{
printf("a=?,b=?\n");
scanf("%d%d",&a,&b);
maxAB = maximum(a,b);
printf("Maksimum je %d",maxAB);
return 0;
11. Određivanje da li je broj prost
Učitati ceo broj i odrediti da li je prost koristeći prethodno definisanu funkciju.
Više o prostim brojevima pročitajte na web strani: Prosti brojevi i faktorizacija
/*Rešenje za programski jezik C*/
int prost(int a)
{
if(a==1 || a==2){
int d=2;
while(d < a){
break;
d++;
int main()
{
printf("x=?\n");
scanf("%d",&x);
if(prost(x)){
else{
return 0;
12. Ispisivanje bitova sa leva na desno
Kreirati funkciju "bitovi()", koja kao parametar prima ceo broj "a".
Unutar funkcije upotrebom petlje kreirati stepene broja 2, počev od 215, a zatim smanjivati izložilac kroz cikluse.
Ispitati u svakom ciklusu, da li je taj stepen broja dva manji od ostatka broja, koji je u početku jednak celom poslatom broju "a".
Ako jeste, štampati 1 kao bit, ako nije štampati nulu. Preračunati ostatak broja koji ostane kad od prethodnog ostatka oduzmemo trenutni stepen broja 2.
U glavnoj "main" funkciji pozvati prethodno napravljenu funkciju da se izvrši.
/*Rešenje za programski jezik C*/
int bitovi(int a)
{
for(int i = 15;i >= 0;i--){
if(a <= ost){
ost=ost % a; //a=4, ost=7%4=3; a=2, ost=3%2=1; a=1, ost=1%1=0
else{
printf("\n");
int main()
{
printf("x=?\n");
scanf("%d",&x);
bitovi(x);
return 0;
13. Zaokruživanje na K decimala.
Učitati tri cela broja M,N i K.(npr. 13,3,2)
Naći količnik M/N,(npr.13/3=4.333333), a kao tip podataka odabrati double ili float, kako bi se sačuvale decimale.
Dobijeni broj pomnožiti sa 10K, a zatim taj broj pretvoriti u ceo broj, kako bi on sadržao i cifre rezultata i cifre koje treba da budu prikazane posle decimalne tačke(npr. 433).
Izvući iz ovog broja i celobrojni rezultat, deljenjem sa 10K, kao i decimalni deo traženjem ostatka deljenja sa 10K.
Ispisati prvo celobrojni deo, zatim staviti "." i u nastavku dodati decimalni deo.
/*Rešenje za programski jezik C*/
int main()
{
double rezD;
printf("M=?,N=?,K=?\n");
scanf("%d%d%d",&M,&N,&K); //13,3,2
rezD=(double)M/N; //4.333333
printf("rez=%f\n",rezD);
koef=(int)pow(10,K); //100
rez=rezD*koef; //433
rezD=(double)rez/koef; //4.3300000
printf("rez=%g\n",rezD);
int br,dec;
br=rez/koef;//4
dec=rez%koef;//33
printf("%d.%d\n",br,dec);
14. Računanje kombinacija.
S=Cn k-Cn k+1 +..+(-1)p*Cn k+p,
po formuli za računanje kombinacija
15. Bit na zadatoj poziciji.
16. Broj u inverznom poretku.
312 * 221 = 68952
213 * 122 = 25986
17. Najbliži broj koji zadovoljava uslov.
n+S(n)+S(S(n))+S(S(S(n)))+S(S(....S(n)....)=2003
18. Slova u novom poretku.
"MILOSCGRABDEFHJKNPQTUVWXYZ"
a) Napisati funkciju koja prema novom poretku slova poredi dva stringa
b) testirati funkciju tako što će se niz imena novoimenovanih ambasadora štampati u poretku definisanom po novom alfabetu
Kombinovani zadaci sa upotrebom funkcija
Zadatak 1: Pomeri elemente niza ulevo (rotacija)
Napišite funkciju u C jeziku koja pomera sve elemente niza za jedno mesto ulevo (ciklična rotacija). Funkcija treba da modifikuje niz in-place i pri tome poslednji element treba da postane prethodno prvi element.
- Kreirajte funkciju
ciklus_levokoja prima parametreint A[]iint n. - U main funkciji: pročitajte veličinu n, unesite n elemenata niza, pozovite
ciklus_levoi zatim prikažite rezultat pozivom pomoćne funkcijestampaj_niz. - Obratite pažnju na ivične slučajeve: n <= 1 (niz se ne menja).
Kratko objašnjenje zadatka:
Cilj je da demonstrirate kako se niz menja direktno u funkciji (prosleđivanjem pokazivača na prvi element) i da razumete jednostavnu algoritamsku operaciju pomeranja elemenata (O(n) vremenska složenost).
Zadatak 2: Sortiranje niza metodom Bubble Sort
Napišite C program koji sortira niz celih brojeva koristeći standardni
Bubble Sort algoritam. Implementirajte funkciju
bubble_sort koja prima niz i njegovu dužinu i sortira elemente
in-place. U main-u pročitajte veličinu niza, učitajte elemente,
pozovite sortiranje i prikažite rezultat.
- Kreirajte funkciju
bubble_sort(int A[], int n). - Dodajte pomoćnu funkciju
stampaj_nizza ispis niza. - Optimizujte Bubble Sort da izlazi ranije ako je niz već sortiran (koristeći flag).
Kratko objašnjenje zadatka:
Bubble sort poredi susedne parove i, po potrebi, ih zamenjuje tako da se najveći element "izbubbles" na kraj u jednoj iteraciji. Ponoviti postupak dok niz nije sortiran. Algoritam je jednostavan za implementaciju (stabilan), ali ima vremensku složenost O(n²).
#include <stdio.h> #include <stdlib.h> /* Pomoćna funkcija za ispis niza */ void stampaj_niz(int A[], int n) {printf("stampaj_niz:\n"); for (int i = 0; i < n; i++) {} /* Bubble sort (optimizovana verzija sa flagom za raniji izlaz) */ void bubble_sort(int A[], int n) {printf("%d ", A[i]);} printf("\n");for (int pass = 0; pass < n - 1; pass++) {} int main() {int swapped = 0; for (int i = 0; i < n - pass - 1; i++) {}// Ako je element na poziciji i veći od sledećeg, zamenimo if (A[i] > A[i + 1]) {} if (!swapped) {int temp = A[i]; A[i] = A[i + 1]; A[i + 1] = temp; swapped = 1;}// Nema zamena u ovoj prolazu — niz je već sortiran break;}int n; // Učitavanje veličine niza scanf("%d", &n); // Napomena: koristi se VLA (C99). Za starije standarde koristite malloc. int niz[n]; for (int i = 0; i < n; i++) {}printf("Unesi %d. element niza\n", (i + 1)); scanf("%d", &niz[i]);} // Sortiranje bubble_sort(niz, n); // Ispis sortiranog niza stampaj_niz(niz, n); return 0;
Objašnjenje rešenja
- Princip: Bubble sort poredi susedne elemente i zamenom većeg sa manjim pomera veće elemente ka kraju.
-
Optimizacija: Koristimo promenljivu
swappedkako bismo prekinuli izvođenje ako je u celom prolazu bilo nula zamena — to znači da je niz već sortiran i možemo ranije izaći. -
In-place: Sortiranje menja sadržaj prosleđenog niza direktno (nije potrebna dodatna memorija osim privremenog
temp). - Stabilnost: Bubble sort je stabilan algoritam — relativni poredak jednakih elemenata se čuva.
-
Vremenska složenost:
- Najgori i prosečni slučaj: O(n²).
- Najbolji slučaj (već sortiran niz, zahvaljujući flagu): O(n).
-
Prostor: O(1) dodatne memorije (samo
tempi flag). - Napomena o kompatibilnosti C: ako želite portabilnost na stare C kompilatore, umesto VLA koristite malloc i free.
Proširenje (opciono): Implementirajte verziju koja sortira u opadajućem redosledu ili koja vraća broj prolaza potrebnih za sortiranje.
Zadatak 3: Obrni niz (reverse)
Napišite program u C koji implementira funkciju koja obrće elemente celobrojnog niza in-place. Funkcija treba da zameni elemente tako da prvi postane poslednji, drugi postane pretposlednji itd. U main-u pročitajte veličinu niza, unesite elemente, pozovite funkciju za obrtanje i prikažite rezultat.
- Kreirajte funkciju
obrni_niz(int A[], int n)koja menja niz direktno. - U main-u: učitajte n, popunite niz, pozovite
obrni_nizi zatim ispišite niz pomoćustampaj_niz. - Obratite pažnju na ivične slučajeve (n <= 1).
Kratko objašnjenje zadatka:
Cilj je demonstrirati manipulaciju elementima niza korišćenjem dva indeksa (levo/desno) i zamenu elemenata dok se ne pređu. Algoritam radi in-place sa O(1) dodatne memorije i vremenskom složenošću O(n).
#include <stdio.h> #include <stdlib.h> /* Pomoćna funkcija za ispis niza */ void stampaj_niz(int A[], int n) {printf("stampaj_niz:\n"); for (int i = 0; i < n; i++) {} /* Funkcija koja obrće niz 'in-place' koristeći dve pokazivačke pozicije */ void obrni_niz(int A[], int n) {printf("%d ", A[i]);} printf("\n");// Ako je niz prazan ili ima jedan element, nema šta da se menja if (n <= 1) {} int main() {return;} int levo = 0; int desno = n - 1; while (levo < desno) {int tmp = A[levo]; A[levo] = A[desno]; A[desno] = tmp; levo++; desno--;}int n; // Učitavanje veličine niza scanf("%d", &n); // Napomena: koristi se VLA (C99). Za starije standarde koristite malloc. int niz[n]; for (int i = 0; i < n; i++) {}printf("Unesi %d. element niza\n", (i + 1)); scanf("%d", &niz[i]);} // Poziv funkcije koja obrće niz obrni_niz(niz, n); // Ispis rezultata stampaj_niz(niz, n); return 0;
Objašnjenje rešenja
-
Funkcija
obrni_nizkoristi dva indeksa: levo počinje od nultog indeksa, a desno od poslednjeg elementa. -
U while petlji dok god je levo < desno zamenjujemo vrednosti na tim pozicijama pomoću privremene promenljive
tmp, zatim pomeramo levo++ i desno--. Time je zagarantovano da svaki par bude zamenjen samo jednom. - Algoritam radi in-place (bez dodatnih velikih buffera) i koristi O(1) dodatne memorije. Vremenska složenost je O(n) jer svaki element učestvuje u najviše jednoj zamenI.
-
Edge cases: ako je
n <= 1funkcija odmah vraća jer nema promena; ako jenveoma veliko razmotrite korišćenje dinamičke alokacije umesto VLA radi portabilnosti. - Prednosti pristupa: jednostavnost, efikasnost i mala potrošnja memorije. Pogodno za primenu kada treba brzo obrnuti redosled elemenata.
Proširenje (opciono): Napišite verziju koja vraća novi alocirani niz (ne menja original), ili generičku funkciju koja obrće niz tipa void* pomoću funkcije za zamenu elemenata (korisno za rad sa drugim tipovima).
|
Prethodno
|< Matrice primeri |
Sledeće
Algoritmi-primeri >| |

