You are on page 1of 59

Zadaci za vebu iz programskog jezika C II kolokvijum

IZVOD IZ ZBIRKE ZADATAKA UVOD U PROGRAMIRANJE

M. KARI, V. RADOVI

Funkcije i pokazivai
Pokazivai
Memoriju raunara moemo da posmatramo kao niz sukcesivnih memorijskih lokacija obeleenih brojevima od 0 pa do
kapaciteta memorije raunara. Broj memorijske lokacije je memorijska adresa.
Kada smo u pedhodnim vebama rekli da promenljiva zauzima memorijski prostor, pre svega smo mislili da zauzima
jedan ili vie sukcesivnih bajtova u memoriji. Koliko bajtova tano promenljiva zauzima, zavisi od njenog tipa (char 1
bajt, int 4 bajta, double 8 bajtova).
Kada imamo promenljivu X tipa T, tada kaemo da promenljiva P pokazuje (referencira) na X ako je vrednost
promenljive P adresa memorijske lokacije na kojoj se nalazi promenljiva X. U tom sluaju promenljiva P je tipa
pokaziva na tip T. Vrednost promenljive P moemo menjati tokom izvrenja programa.
Da bismo pristupili samoj vrednosti na koju pokazuje P, koristimo operator dereferenciranja. Drugim reima, ako P i dalje
pokazuje na X, onda je *P isto to i X. Bitno je zapamtiti da oni nemaju jednake vrednosti ve istu vrednost, tj. kada se
promeni jedno menja se i drugo!
sizeof (x) veliina memorijskog prostora koji zauzimajupromenljiva ili tip
&x
memorijska adresa promenljive x
*p
dereferenciranje pokazivaa, tj. pristup mem. lokaciji na adresi p
Funkcije
Do sada smo esto koristili funkcije poput scanf, printf, abs i mnogih drugih. Te funkcije se nalaze u bibliotekama
poput stdio.h i math.h i to su standardne biblioteke koje dobijamo uz programski jezik C.
Do sada smo razmatrali funkciju main, koja je glavni deo progama koja mora da postoji u svakom programu. Osim te
funkcije, na slian nain moemo napisati dodatne funkcije:
tipf funkcija (tipa arg) {
naredbe;
}

Ime funkcije moe biti proizvoljno, s tim da vae ista pravila kao i za ime promenljive. Tip f j e tip povratne vrednosti
(tj . rezultata) funkcije, dok je tipa tip argumenta koji funkcija prima. Funkcija moe da ima vei broj argumenata s tim
da se argumenti odvajaju zarezom ispred svakog argumenta mora da stoji njegov tip.
Funkcija vraa vrednost pomou naredbe return. Kada funkcija ne vraa vrednost, treba staviti povratni tip void.
Rekurzija

Rekurzija je pojava da unutar tela funkcije pozivamo istu funkciju. Ako bi takav poziv bio bezuslovan, rekurtija bi bila
beskonana. Poto tako neto nema smisla, potrebno je definisati izlazni kriterijum. tj. definisati kada treba stati sa
rekurzivnim pozivima.
void beskonacnost {

beskonacnost () ;

Uglavnom je kriterijum izlaza trenutni broj ponavljanja ili preostali broj ponavljanja, ali moe biti definisan i na drugi nain
(nema preostalih podataka u baferu, nema vie fajlova na disku itd.)
void primer (int n) {

A
}

(1)
(2)
(3)

void primer (int n) {

B
}

(1)
(2)
(3)

void primer (int n) {

(1) printf("%d",n);
(2)if(n<3) primer(n+l);
(3)printf("%d",n);

Kada iz glavnog programa pozovemo funkciju primer za n=1, na ekranu se ispisuje 123321. Redosled izvravanja
naredabaje A1, A2, B1, B2, C1, C2, C3 B3, A3. Dakle, primer(n) uva svoje parametre lokalne promenljive u memoriji i
nastavlja da se izvrava nakon povratka iz funkcije primer(n+1).
U optem sluaju, kada jedna funkcija poziva drugu, prva nastavlja da se izvrava tek kada se zavri druga. Cak kada
pozivamo istu funkciju, moemo smatrati da su u pitanju dve razliite funkcije koje imaju isti kod.

Primeri
1. Napisati program koji ispisuje vei od dva broja koristei funkciju max(a,b).
#include <stdio.h>
int max(int a,int b) {
return ((a>b)?a:b);
}
int main(){
int a,b;
scanf("%d%d", &a,&b);
printf ("Najveci broj je : %d", max(a, b) ) ;
retura 0;
}

2. Napisati funkciju kojom se na ekranu ispisuje ceo broj koji joj se prosleuje kao argument.
#include <stdio.h>
void ispis(int broj) {
printf("Broj = %d",broj);
int main(){
int a;
scanf("%d",&a);
ispis(a);
retura 0;
}

3.Napisati funkciju odd(x) koja proverava da li je broj x neparan. Ako je x paran, funkcija kao rezultat treba da vrati 0, a 1
ako je x neprno.
I nain:
int odd(int broj) {
if(broj%2 == 0 ) return 0;
else return 1;
}

II nain.

int odd(int broj) {


retura broi %2;
}

4. Napisati funkciju prost(x) koja izraunava da li je broj x prost. Napisati glavni program koji poziva funkciju prost(x) za
sve brojeve od 1 do N i ispisuje one koji su prosti.
#include <stdio.h>
#include <math.h>
int prostf(int x) {
int i;
if(x==l) retura 0;
for(i=2;i<=sqrt(x);i++)
if(x%i==0) return 0;
return 1;
}
int main() {
int i,n;
scanf(n%d",&n);
for (i=2;i<=n;i++)
if (prost (i) ) printf ('%d\n",i);
return 0;
}

5. (Hanojska kula) Na ploi se nalaze tri stuba. Na levom se nalazi n diskova iji poluprenici opadaju idui ka vrhu.
Napisati funkciju koja ispisuje koji su koraci potrebni da se diskovi prebace na krajnji desni stub tako da se u svakom
koraku prebaci samo jedan disk. Zabranjeno je da vei disk ide preko manjeg.
void prebaci (int n,int sa,int na,int pom) {
prebaci (n-1,sa,pom,na);
printf("%d->%d\n",sa,na);
prebaci(n-l,pom,na,sa);
}

6. Napisati rekurzivnu funkciju kija rauna vrednost n!.


int fakt(int n) {
if(n==0) return 1;
else return n*fakt (n-1);
}

7. Napisati rekurzivnu i iterativnu funkciju koja rauna razlomak:


2+

double f_rek(int n) {
if(n==l) return sqrt(2);
return sqrt (2+f_rejc(--n) );
}
double f_iter(int n) {
double i, sum=sqrt (2);
for(i=l;i<n;i++)
sum=sqrt (2+sum);
return sum;
}

8. Napisati funkciju swap(a,b) koja zamenjuje vrednosti promenljivama a b testirati je u glavnom programu
#include <stdio.h>
void swap(int* a,int* b) {
int tmp=*a;
*a=*b;
*b=tmp;
}
int main () {
int a,b;
scanf ("%d%d" &a, &b);
printf("a=%d b=%d\n" ,a,b);
swap(&a,&b);
printf("a=%d b=%d\n" a,b);
return 0;
}

9. Definisati funkciju min_max koja pronalazi najmanji i najvei od etiri broja. U glavnom programu je
testirati tako to za uneta etiri broja treba ispisati zbir najveeg i najmanjeg broja.
#include <stdio.h>
void min_max(int a,int b, int c, int d, int* max, int* min) {
*max=a; *min=a;
if(b>*max) *max=b;
if(c>*max) *max=c;
if(d>*max) *max=d;
if(b<*min) *min=b;
if(c<*min) *min=c;
if(d<*min) *min=d;
}
int main () {
int a,b,c,d;
int max,min;
scanf("%d%d%d%d",&a,&b,&c,&d);
min_max(a,b,c.d,&max,&min);
printf("Zbir je: %d",min+max);
retura 0;
}

Zadaci
1. Izraunati sumu brojeva od 1 do N koristei funkciju suma(N).
2. Napisati program koji pomou funkcije aritm_sr rauna aritmetiku sredinu N brojeva koje unosi korisnik.
3. Implementirati funkciju powl(a,n) i napisati program koji je testira.
4. Napisati program koji za uneti prirodan broj vei od 1 odreuje njegov najblii prost broj. Ako su dva prosta broja na
istom rastojanju, tampati oba.
5. Implementirati funkciju fabsx koja rauna apsolutnu vrednost zadatog decimalnog broja x.
6. Napisati funkciju povrsina koja rauna povrinu trougla. Poznati podaci su sve tri stranice trougla.
Napomena: Ako su nam date tri stranice trougla, a, b i c, povrinu moemo izraunati pomou Heronovog obrasca: P =
SQRT(p(p -a)(p- b)(p c)), gde je p poluobim trougla.
7. Napisati program koji pomou funkcije merse proverava da li je dati prirodan broj Mersenov.
Napomena: Broj je Mersenov ako je prost i ako se moe napisati u obliku 2*p-1 gde je p prost broj.
8. Napisa funkciju koja izraunava dan u nedelji za Gregorijanski kalendar. U glavnom programu se unosi redni broj dana u
mesecu, mesec i godina, a kao izlaz se spisuje koji dan u nedelji odgovara tom datumu.

Napomena: Da bismo dobili dan u nedelji, prvo treba da pronaemo Julijanski dan za zadati datum. Julijanski datum (JD)
jeste vreme u danima od 1. januara 4713. godine p.n.e. u 12h po Grinikom vremenu (UT). Celobrojni deo Julijanskog
datuma moemo dobiti pomou formule:
JDN = dan +(153+2)/5 + 365y+ y/4-y/100+y/400-32045, gde je [x] ceo deo od x, konstante m i y se raunaju pomou
formula
a = [14-mes/12], y = god + 4800-a, m = mes+12a-3. Dan u nedelji se dobija celobrojnim deljenjem sa 7: DN = JDN
mod 7 +1.
9. Napisati funkciju koja rauna najvei zajedniki delilac (nzd) dva broja pomou Euklidovog algoritma.
10. Program treba da proverava da li su dva prirodna broja blizanci. Brojevi su bilizanci ako su prosti i meusobno se
razlikuju za 2. ( Brojevi 11 i 13 su blizanci).
11. Goldbah je dao hipotezu prema kojoj se svaki paran broj vei od 2 moe predstavi i zbirom dva prosta broja. Napisati
program koji pomou funkcije goldbah ispisuje od kojih prostih brojeva se mogu dobiti parni brojevi iz intervala od M do
N.
Napomena . Goldbahova pretpostavka je proverena za sve brojeve do 6*10 16. Interesantno je da je u periodu od 2000. do
2002. godine postojala nagrada u iznosu od milion dolara za onoga ko dokae pretpostavku, ali to jo nikome nije polo
za rukom, tako da je i danas pretpostavka ostala nedokazana.
12. Ispisai sve savrene brojeve od 1 do N. Broj je savren ako je jednak sumi svojih delitelja izuzev njega samog.
13. Napisati funkciju koja iscrtava pravougaonik od zvezdica ako se kao argument unese duzina stranica pravougaonika. U
glavnom program, koristeci ovu funkciju iscrtati pravougaonik za parameter koje unosi korisnik.
14. Emirp je prost broj koji se pretvara u drugi prost broj kada mu se cifre izokrenu. (Emirp je prost broj itan unazad, broj
37 je emirp jer je i 73 prost broj). Napisati program koji pomou funkcije emirp proverava da li je broj emirp, a u glavnom programu se ispisuje prvih N emirpa.
Napomena: Evo nekoliko primera emirpa: 13, 17, 31, 37, 71, 79,107. 113...
15. Napisati program koji tekst sa standardnog ulaza prepisuje na izlaz pretvarajui poetna slova reenice u velika
(pomou funkcije toVelikoSlovo) . Pretpostaviti da se u tekstu znaci ? ! . pojavljuju kao markeri kraja reenice.
16. Napisati rekurzivnu i iterativnu funkciju koja rauna dati razlomak :

17. Napisati program koji ispisuje unetu re unazad.


18. Napisati program koji ispisuje prvo samoglasnike, a zatim suglasnike u datoj rei.
19. Napisati funkciju koja ispisuje N-ti red Paskalovog trougla. Napomena: Prvih 6 redova Paskalovog trougla su:
1
11
1 21
13 31
14 6 41
1 5 10 10 5 1
20. Dat je potpis funkcije void f (int br, int *n) ;. Objasniti koji su od sledeih poziva funkcije neispravni i zato?
Promenljive k, n i br definisane su u glavnom programu.
a)
f(k,n);
b) f(&k,&n);
c)
f(2*n-l,&k);
d) f(k,n,br);
21. Sta se ispisuje kada se izvri program s navedenim ulaznim parametrima.
#include <stdio.h>
void f (int *n) {
*n++;
}
int main () {
int n;
scanf(%d",&n);
f(&n);
printf ("n= %d",n);
return 0;
}

Za n= 4
Za n= -15
Za n=123

izlaz je:
izlaz je:
izlaz je:

22. ta se i pisuje kada se izvri program s navedenim ulaznim parametrima.


#include <stdio.h>
void f(int *n) {
(*n)++;
int main() {
int n;
scanf("%d",&n);
f (&n) ;
printf("n= %d",n);
return 0;
}

Za n= 4
Za n=-1
Za n=123

izlaz je:______
izlaz je:_____ .
izlaz je:______

23. Za unetih N brojeva napisati funkciju koja kao rezultat vraa koliko ima pamih i nepamih brojeva.

Za dac i za ve bu
24.
25.
26.
27.

Napisati funkciju max4 koja rauna najvei od etiri broja


Napisati funkciju koja odreuje rastojanje izmeu taaka T1(X1,Y1) i T2(X2,Y2).
Napisati uinkciju fakt koja rauna faktorijel broja n.
Za uneta etiri broja ispisati onaj ija je poslednja cifra najvea. Za reavanje zadatka koristiti funkciju max4 koja
rauna najvei od etiri broja.
28. Proveriti da li je prost broj p Vilsonov pomocu funkcije vilson. Prost broj j je Vilsonov kada je (p-1)l!+ 1 deljivo sa p2.
Dana" su poznata samo tri Vilsonova broja: 5,13, 563.
29. Napisati funkciju koja proverava da li je ceo broj p superprost. Broj je superprost ako je prost i ako se odbacivanjem
jedne po jedno cifre sa desne strane dobijaju prosti brojevi.
30. Napisati program koji pomou funkcije ab rauna an-bn koristei datu formulu:
n-1

an -bn =(a-b) an-k-1*bk


k=0

31. Napisati rekurzivnu funkciju koja ispisuje binarni ekvivalent broja N.


32. Napisati rekurzivnu i iterattvnu funkciju kojom se izraunava zbir cifara zadatog prirodnog broja N.
33. Napisati funkciju koja ispisuje Paskalov trougao.
34. Funkcija kao argument dobija broj N i kao rezultat treba da vrati broj parnih i nepamih cifara u datom broju N
Reenja
1.
#include <stdio.h>; int
int suma(int n) {
int i,sum=0;
for (i=l;i<=n;i++)
sum+=i;
return sum;
}
int main(){
int n;
scanf("%d",&n);
printf(Suma brojeva je: %d",suma (n));
return 0;
}
2.

#include <stdio.h>
#include <math.h>
double aritm_sr(int n) {
int i,nl=n;
double br,sum=0;
while(n-->=l) {
printf ("Unesite broj : );
scanf ("%lf,&br);
sum+=br;

}
return sum/nl;
}
int main () {
int n;
double ar_sum;
scanf("%d,&n);
ar_sum=aritm_sr(n);
printf("Aritmeticka suma je %f",ar_sum);
return 0;
}
3.
#include <stdio.h>
int powl(int a, int n) {
int i p=l;
for (i=l;i<=n;i++)
p*=a;
return p;
}
int main(){
int a,n;
scanf("%d%d",&a,&n);
printf("pow1(%d,%d)=%d" a,n,powl(a,n));
return 0;
}
4.
#include <stdio.h>
#include <math.h>
int prost(int x) {
int i;
if(x==l) retum 0;
for(i=2;i<=sqrt(x);i++)
if(x%i==0) return 0;
return 1;
}
int main(){
int i=l,n;
scanf("%d",&n);
while(!(prost(n+i) || prost(n-i)))
i++;
if(prost(n+i)) printf("Broj %d \n",n+i);
if(prost(n-i)) printf("Broj %d \n",n-i);
return 0;
}
5.
double fabsx (double x) {
return x<0 ? x:x;
}
6.
double povrsina(double a,double b,double c) {
double p=(a+b+c)/2;
return sqrt (p*(p-a)*(p-b)*(p-c));
7.

#include <stdio.h>
#include <math.h>
int prost(int br) {
int i,;
if(x==l) return 0;
for(i=2;i<=sqrt(br);i++)
if(br%i==0) retura 0;
return 1;
}
int merse(int br) {
if(prost(br) && prost((br+1)/2))
return 1;
return 0;
}
int main() {
int i;
for(i=l,-i<=1000;i++)
if (merse (i)) printf ("%d\n",1);
return 0;
}

8.
#include <stdio.h>
#include <math.h>
int JD(int g,int m,int d) {
double y,a,JDN ml;
a=floor((double)(14-m)/12);
y=g+4800-a;
ml=m+12*a-3;
JDN = d+floor((double)(153*ml+2)/5)+365*y+floor(y/4)- floor(y/100)+floor(y/400)-32045;
return JDN;
}
int main(){
int mesec,dan,godina,rez;
printf("Unesite dan: ");
scanf("%d",&dan);
printf("Unesite mesec: ");
scanf("%d",&mesec);
printf("Unesite godinu: ");
scanf("%d",&godina);
rez=JD(godina,mesec,dan);
printf("Dan u nedelji je ");
switch(rez%7+l) {
case 1: printf("Ponedeljak\n"); break;
case 2: printf("Utorak\n"); break;
case 3: printf("Sreda\n"); break;
case 4 printf ("Cetvrtak\n"); break;
case 5: printf ("Petak\n"); break;
case 6: printf("Subota\n"); break;
case 7: printf ("Nedelja\n"); break;
default: printf("Doslo je do greske!");
return 1;
}
return 0;
}
9.
#include <stdio.h>
int nzd_iter(int a,int b) {
int tmp;
while (b! =0) {
tmp=b;
b=a%b;
a=tmp;
}
return a;
}
int nzd_rek(int a,int b) {
if(b==0) return a;
else return nzd_rek(b,a%b);
}
int main () {
int a,b;
scanf("%d%d",&a, &b);
printf("nzd_iter(%d,%d)=%d\n",a,b,nzd_iter(a,b));
printf ("nzd rek(%d,%d)=%d\n", a,b ,nzd_rek(a,b));
return 0;
}
10.
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int prost(int br) {
int i;
if(br == 1) return 0;
for (i=2;i<=sqrt(br);i++)
if(br%i==0) return 0;
return 1;
}
int blizanci(int brl,int br2) {
return prost (brl) && prost(br2) && abs (br2-brl) ==2
}
int main () {
int br1, br2;
printf("Oneti dva broja ");
scanf("%d%d", &brl,&br2);
if(blizanci(brl,br2))
printf("Brojevi %d i %d su blizanci\n",brl,br2);
else printf("Brojevi %d i %d nisu blizanci\n", brl,br2);

}
11.
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int prost(int br) {
int i;
if(br == 1) return 0;
for(i=2;i<=sqrt(br);i++)
if(br%i==0) return 0;
return 1;
}
void goldbah (int br) {
int i,j;
for(i=l;i<=br;i++);
for(j =1;j<=i;j++)
if(prost(i) && prost(j) && (i+j)==br)
printf("Broj %d = %d + %d\n",br,i,j);
}
int main () {
int i,n,m;
printf("Uneti interval [M,N]:");
scanf("%d%d",&m,&n);
if(m%2) m++;
// U slucaju da M nije paran broj
for (i=m; i<=n; i+=2)
goldbah(i);
}
12.
#include <stdio.h>
#include <math. h>
int savrsen(int br) {
int i sum=l;
// Svi brojevi su deljivi sa 1
for(i=2;i<=br/2;i++)
if(br%i==0)
sum+=i;
return sum==br;
int main () {
int i,n;
scanf("%d",&n);
for (i=2;i<=n;i++)
if (savrsen(i)) printf ("%d\n",i);
}
13.
#include <stdio.h>
void iscrtaj pravougaonik (int a,int b) {
int j,i;
for(i=l;i<=a;i++) {
for(j=l;j<=b;j++)
if(i==l || i==a) printf ("*");
else if (j==1 || j==b) printf ("*");
else printf (" );
printf("\n");
}
int main () {
int a,b;
printf ("Uneti duzine a i b pravougaonika: ");
scanf("%d%d",&a,&b);
iscrtaj pravougaonik(a,b);
}
14.
#include <stdio.h>
#include <math.h>
int prost(int br) {
int i;
if(br == 1) retum 0;
for (i=2;i<=sqrt(br);i++)
if(br%i==0) return 0;
return 1;
}
int emirp(int br) {
int noviBr=0;
if (!prost(br)) retum 0;
while(br) {
int ostatak = br%10;
noviBr=10*noviBr+ostatak;

br/=10;
}
return prost(noviBr));
}
int main ()
int i,n;
scanf("%d",&n);
if(!n%2) n--;
for(i=10;i<=n;i++)
if(emirp(i)) printf("Emirp: %d\n",i);
return 0;
}
15.
#include <stdio.h>
char toVelikoSlovc(char c) {
if(c>=`a` || c<=`z') return c-32;
else return c;
}
int main(){
char ch,pch=EOF;
while((ch=getchar()) !=EOF) {
if(pch == '.' ||pch== '!' || pch =='?' || pch==EOF)
putchar (toVelikoSlovo (ch));
else putchar(ch);
pch=ch;
}
return 0;
}
16.
#include <stdi.h>
#include <math.h>
double f_rek(int i, int n) {
if (i==n) return sqrt(i);
return sqrt(i+f_rek(i+2,n));
}
double f_iter(int n) {
double i,sum=sqrt(2*n-l);
for(i=2*n-3;i>0;i=i-2)
sum=sqrt(i+sum);
return sum;
}
int main () {
int n;
scanf("%d",&n);
printf ("Iter : %f\n",f_iter(n);
printf("%Rek:%f\n,f rek(1,2*n-l));
return 0;
}
17.
#include <stdio.h>
void f_rek i) {
char ch=getchar();
if (ch! =`\n`) f_rek();
putchar(ch);
}
int main(){
f_rek ();
return 0;
}
18.
#include <stdio.h>
void f_rek () {
char ch=getchar();
if(ch!='\n') {
if(ch=='a' || ch=='e' || ch=='i' || ch=='o' || ch=='u')
putohar(ch);
f rek();
if(ch! ='a' && ch!='e' && ch! ='i' && ch!='o' && ch! ='u') putchar(ch);
}
}
int main(){
f_rek();
return 0;

}
19.
#include <stdio.h>
int pascal(int n,int i) {
//n - red, i- kolona
if (n==l |[ i==l || i==n) return 1;
return pascal(n-l,i)+pascal(n-l,i-l);
}
int main () {
int i;
for(i=l;i<=6;i++)
printf(%4d",pascal(6,i));
}
20.
Jedini ispravan poziv je po c) f(2*n-l,&k);.Poziv funkcije pod a) je neispravan jer se ne prenosi
adresa drugog argumerta ve njegova brojna vrednost. U sluaju poziva pod b) prenosi se adresa
promenljive k a ne njena vrednost kako se oekuje. Poziv funkcije pod d) ima jedan argument vie.
21.
Izlaz je identian ulaznom parametru n, jer se u funkciji f ne menja vrednost parametra n, ve se
vrednost pokazivaa uveava za 1 tj. vrednost memorijske adrese, pa se zatim pristupa toj vrednosti
bez menjanja njenog sadraja. U sluaju da menjamo sadraj program bi mogao da padne ako pokuamo da
pristupimo delu memorije koji nam nije dozvoljen ili ga koristi neki drugi program.
Za n= 4
izlaz je 4
Za n=-15
izlaz je -15
Za n=123
izlaz je 123
22.
U programu se, zahvaljujui funkciji f, vrednost promenljive n uveava za 1 poto se prvo pristupi
vrednosti promenljive n, pa se nakon toga ona uvea.
Za n= 4
izlaz je 5
Za n=-15
izlaz je -14
Za n=123
izlaz je 124
23.
#include <stdio.h>
void par_nepar(int n, int* br_p, int* br_n) {
int broj;
*br_p=*br_n=0;
while(n--) {
printf("Uneti broj : );
scanf("%d",&broj);
if(broj %2) (*br_n)++
else(*br_p)++;
}
}
int main(){
int n,br_p,br_n;
scanf(%d,&n);
par_nepar(n,&br_p,&br_n);
printf ("Broj parnih je %d\nBroj neparnih je %d" br_p,br_n);
return 0;
}

Nizovi imatrice
Nizovi
U programiraiiju, niz;" odreen >rc sukcesivnih memorijskih lokacija koje imaju isti naziv. Pojedinaflim vrednosti- ma
pristupamo pomou razliitih i deksa. Indeksi niza u programskom jeziku C piu se u uglastim zagradama i numeraci- ja
poinje uvek od 0.

Ako nam treba niz deset celih brojeva, moemc da ga deklariemo kac itA[10]. Time smo deklarisali da se niz zove A;
prvi element je A[0], a poslednj A.[9], Uobiajna poetnika greka je da se koristi elemeni A[10] koji nismo deklarisali
greka se zove ,,off by one"
Postoji bliska veza izmeu nizova pokazivaa, tj. moemo da kaemo da je A pokaziva na svoj nulti element (A[0] je isto
to i *A). Takoe, koristei pokazi- vaku aritmetiku, *(A+7) predstavlja memorijsku lokaciju udaljenu 28 bf ova od A[0]
(svaki ceo broj, int, zauzima 4 bajta na veini arhitektura), to otlno zapisu- jemo kao A[7]. Poto je *(A+7) isto to i
*(7+A), programskom jeziku C e se podjednako svideti i da napiete 7[A] koliko god da to bilo nepraktino
Poto niz ima jednu dimenziju" po kojoj se reaju elementi (ima jedar. ndeks), za prolazak kroz niz neophodna nam je
jedna petlja for.

Sortiranje nizova
Postoji veliki broj algoritama za sortiranje koji omoguavaju da elemente n:~a rasporedimo u eljenom poretku. Ovde su
prikazani algoritmi koji se najese koriste, a implementirani su u zadacima od 20 do 24. U sledeim opisima algori- tama
pretDOStavlja se rastui redosled. Za onadajui redosled, postupak je analo- gan.
Selectiort sorti. Sukcesivno trai najmanji element od ostatka niza i stav a ga na tekuu poziciju. Postoji skraena varijanta
ovog algoritma koja se ee upotreb- ljava u praksi.
Insertion sort. U svakom trenutku izvravanja ovog algoritma, levo od tekueg elementa su sortirani elementi, dok su ne
sortirani desno. Ideja je da se tekui ele- ment ubaci na pravu poziciju u sortiranorfi levom delu.
Bubble sort: Specifinost ovog algoritma je da pri jednom prolazu ispituje samo susedne elemente; ako nisu u
odgovarajuem poretku, bivaju zamenjeni. Prolazi se ponavljaju dok god se elementi zamenjuju. Simulacijom ovog
algoritma moe se primetiti da mal_ rednosti isplivavaju" na poetak, dok. velike vrednosti ,4spli- vavaju" na kraj kao
mehurii (engl. bubble).
Merge sort. Ideja je da se od dva sortirana izvora podataka (niza) napravi rezul- tantni niz koji takoe treba da bude
sortiran.
Da bismo dobili ulazne nizove, poetni niz delimo rekurzijom dok ne dobijemo nizove veliine jedan. Ti nizovi su
automatski sortirani. Svi ostali delovi se dva po dva kombinuju u nove nizove tako aa se ouva sortiran poredak.
Nizovi se spajaj'i tako to se uvek,u rezultantni niz prvo dodaje manji od dva elementa koja su po redu u ulazni| :lemei ma.
Nakon toga se uporeuje preostali element sa sledeim elementom u niz iz koga smo uzeli element itd.
Quick sort: Ovaj algoritam je poznat po svojoj fikasnosti, pa otuda njegov naziv. On takoe rekurzivno deli niz na manje
celine u kojima se bira odreena vrednost - pivot. U svakoj celini, jednim prolaskom kroz elemente prebacujemo one
manje od pivota levo od njega a vee elemente desno od njega.
T: 1 prebacivanjem nismo elemente jo uvek sortirali, ali smo izolovali dve grupe nad kojima moemo ponovo rekurzivno
primeniti ovaj algoritam.
U zadacima u kojima nije posebno naglaeno koji algoritam treba upotrebiti, savetujemo upotrebu skraenog algoritma
selection sort. On se najsporije izvrava, ali se najlake implementira, pa se smanjuje mogunost pogrenog kodiranja

M atrice

Dvodimenzionalni niz se drugaije naziva ma-trica. Matrice imaju veliku ulogu pre svega u uvanju i obradi tabelarnih
podataka. Da bismo dobro vladali matricama, moramC' odlino poznavati viestruke petlje for.
Frolazak kroz matricu je ablonski postupak
svodi se na upotrebu dve petlje for, od kojih je spoljna petlja za redove, a unutranja za kolone. Tako prolazimo kroz
matricu red po red.

Postoje dva naina za definisanje matrica, mada se najee upotret avaj - ravo- ugaor matrice. Pravougaona matrica celih
broieva k"'a ima 10 redova i 10 kolo- na deklarie se na sledei larm:
int a [10] [10] ,-

Prvi broj u deklaraciji matrice je ukupan broj redova, dok je drugi ukupan broj kolona. Elementu ove matrice koji se nalazi
u redu 3 (etvrti red) i koloni 4 (peta kolona) pristupamo sa a[3][4], Poto je brojanje od nule, ne postoje ni red, ni kolona
sa indeksom 10!
Programski jezik C sve.redove ovako deklarisane matrice stavlja u memoriju
:dan za Irugim, kao da je'u pitanju niz od 100 elemenata. U naem primeru, na svakih 10 elemenata poinje novi red, a ime
matrice je pokaziva na taj niz! Uzev- i to u obzir, element a[5][7] nalazi se na poziciji 5*10+7 u memoriji iza prvog
elementa.
Vano je zapamtiti da zbog toga pri prenosu matrice kao argumenta funkcije moemo izostaviti prvu dimenziju, kao kod
niza, ali moramo precizirati kolika je druga dimenzija inae kompjuter nee moi da nae pravi element!
Primer:
void fn(int a[] [10], int n, int m)
Pri prenosu viedimenzionalnih nizova, sve dimenzije osim prve moraju biti pre- cizirane. Drugi nain za definisanje
matrica jeste kao niz pokazivaa na nizove.

Primeri
1. Napisati program koji izraunava srednj vrednost niza od n elemenata (n < 100).
#include <stdio.h>
#define MAX_SIZE 100
int main() {
int n,i,x[MAX_SIZE],suma=0;
printf("Unesite dimenziju niza: " );
scanf("%d",&n);
if(n > MAX_SIZE) {
printf("Uneli ste pogresnu dimenziju n<100!\n");
retum 1;

}
for (i=0;i<n;i++){
printf(\na[%d] = ,i);
scanf("%d,&x[i]);
suma+=x[i];

}
printf("\nSrednja vrednost niza je \n %f",(double) suma)/n);
return 0;

2. Nai najvei element niza od najvie 100 elemenata indeks tog elementa, pa ispisati njihovu vrednost na standardni
izlaz:
I nain:
#include <stdio.h>
#define MAX_SIZE 100
void ucitaj_niz(int *a,int n) {
int i;
for(i=0;i<n;i++) {

printf("Unesite a[%d]= ",i);


scanf("%d",(a+i));

}
}
int main() {
int n,i,max_i=0, max, x[MAX_SIZE];
printf("Unesite dimenziju niza: " );
scanfi(%dn,&n);
if (n > MAX_SIZE) {
printf ("Uneli ste pogresnu dimenziju n<100!\n");
return 1;

ucitaj_niz(x,n);
max = x [0];
for (i=l;i<n;i++)
if(x[i]>max) {
max=x[i];
max_i=i;

printf("\nNajveci broj u nizu je %d",max);


printf("Njegov indeks je %d\n",max_i);
return 0;

II nain:
#include <stdio.h>
#define MAX_SIZE 100
int mair () {
int n,i,max_i=0,x[MAX_SIZE],max;
printf("Unesite dimenziju niza: " );
scanf("%d",&n);
if (n > MAX_SIZE) {
printf("Uneli ste pogresnu dimenziju n<100!\n");
return 1;

printf("\na[0] = ");
scanf("%d",&x[0]);
max = x[0];
for(i=l;i<n;i++) {
printf("\na[%d] = ",i);
scanf("%d",&x[i]);
if(x[i]>max) {
max=x [i];
max_i=i;

printf("\nNajveci broj u nizu je %d",max);


printf ("Njegov indeks je %d\n" max_i+l);
return 0;

3. Napisati program koji od datog niza an formira nizove b i c, tako da su elementi niza b pami lanovi niza a, a elementi niza c
neprni lanovi.
#include

<stdio.h> #
define MAX_SIZE 100
void ispisi_niz(int a[],int n) {
int i;
for(i=0;i<n;i++);
printf("%d. element je %d\n",i,a[i]);

}
int main() {
int a[MAX_SIZE],b[MAX_SIZE],c[MAX_SIZE];
int i,n_a,n_b=0 n_c=0;
printf("Uneti dimenziju niza ");
scanf("%d",&n_a)
if(n_a>MAX_SIZE) {
printf("Greska pri unosu dimenzije niza! ");
return 1;

}
for(i=0;i<n_a;i++) {
printf("Unesite a[%d]= ",i);
scanf("%d",&a[i]);
if(a[i]%2==0) b[n_b++]=a[i];
else c[n_c++]=a[i];

printf("Niz b : \n");

ispisi_niz(b,n_b);
printf("Niz c :\n");
ispisi_niz (c,n_c);
return 0;

4. Napisati program koji uitava i ispisuje matricu dimenzije NxM.


#include <stdio.h> #
define MAX_SIZE 100
void unesi_matricu(int mat[][MAX_SIZE],int n,int m) {
int i,j;
printf("Unesite clanove matrice\n ");
for(i=;,i<n;i++)
for(j=0;j<m;j++) {
printf("\n[%d][%d] = ",i,j);
scanf("%d",&mat[i],[j]);

}
}

void ispisi_matricu (int mat[][MAX_SIZE],int n,int m) {


int i,j;
for (i=0;i<n;i++){
for(j=0;j<m;j++)
printf("%4d ",mat [i][j]);
printf("\n");

}
}

int main() {
int mat[MAX_SIZE][MAX_ IZE];
int n,m;
v.
printf("Unesite n i m \n");
scanf("%d",&n);scanf("%d",&m);
unesi_matricu(mat,n,m);
ispisi_matricu(mat,n,m);
return 0;

5.

Formirati i ispisati kvadratnu matricu tako da je 1 na glavnoj dijagonali, 2 iznad glavne dijagonale, a 3 ispod glavne dijagonale.
#include <stdio.h>
#define MAX_SIZE 100
void ispisi_matricu(int mat[][MAX_SIZE],int n) {
int i,j;
for(i=0;i<n;i++){
for(j=0;j<n;j++)
printf("%d",mat[i][j]);
printf("\n");

}
}

int main () {
int mat[MAX_SIZE][MAX_SIZE];
int n,i,j;
printf("Unesite n \n");
scanf(%d",&n);
for (i=0;i<n;i++)
for(j=0;j<n;j++)
if(i==j) mat[i][j]=l;
else if(i>j) mat [i] [j]=3;
else mat [i] [j]=2;
ispisi_matricu(mat,n);
return 0;

}
6. Sta radi sledea tunkcija::

float funkcija(int *x,int p) {


int i,pr, *pok;
pr=0;
pok=&p;
for(i=0;i<*pok;pr+=*(x+i),i++);
return((float)pr/(*pok));

Funkcija izraunava aritmetiku sredinu niza x. Pokaziva pok pokazuje na promenljivu, tj. dimenziju niza
x (jer u ciklusu for indeksi idu od 0 do *pok, odnosno p) Promenljiva pr je zbir elemenata niza x, uzima
poetnu vrednost 0 i u svakom koraktu ciklusa uveava se za vrednost *(x+i), odnosno za naredni element u
nizu, poto su svi elementi niza smeteni u memoriji jedan do drugog. Na kraju, funkcija vraa
aritmetiku sredinu tako to deli zbir (pr) sa ukupnim brojem elemenata u nizu (*pok).

Zadaci:

1. Ocene studenta se unose kao elementi niza. Napraviti program koji izraunava prosek za svaku godinu studiranja
ukupan prosek studija, ako studije traju 4 godine student nema vie od 15 predmeta po godini.
2. Napisati program koj: rauna koliko u nizu c ima parnih brojeva veih od unetog broja p.
3. Ispisati broi ponavljanja svake cifre u datom broju n.
4. Napisati program koji od datog niza a2 formira nizove b i c tako da su ele- menti niza b: a[l],a[3],a[5],...,a[2n-l] ,
a niza c: a[0],a[2],a[4],a[6],...,a[2n].
5. Napisati program koji na osnovu datog niza an formira niz bn tako da vai
b[i]= a[i] /a[i + 1]
6. Na osnovu niza a2n formirati niz bn po formuli:
b[i]=a[i]+a[i+1]-a[2n-1-i] / 2
7. Na osnovu niza o formirati niz s iji se element s[j] dobija kao srednja vred- nost niza a iz koga je izbaen element
naj'-toj poziciji.
8. Dato je n intervala pomou nizova a i b: (a[0],b[0]), (a[l],b[l]), (a[2],b[2]) , ..., (a[n-ll,b[n-l]). Formirati niz c u kome
se nalaze indeksi intervala kojima pripada taka C, odrediti koji od njih je najkrai ispisati ga.
9. Napisati funkciju koja parne elemente niza a premeta na poetak, a neparne na kraj.
10.Napisati program koji na osnovu unetog niza a fcrmira niz b koj sadri sve elemente niza a cirkulamo pomerene ulevo
za n mesta.
11.Napisati program koji na osnovu unetog niza a formira niz b sastavljen od elemenata niza a kojima su cifre poreane
obmutim redosledom.
12.Napisati program koji na osnovu unetog niza c, formira niz b sastavljen od elemenata niza a koji sadre cifru C.
13.U datom nizu a orediti broj promena znaka ako nulu raunamo kao neutralan element.
14.Pomou funkcije provera proveriti da li su /aka dva susedna elementa niza a razliita. Napisati glavni program u kome
e se unositi niz a i proveravati da li su mu susedni elementi razliiti.
15.Dat je niz realnih brojeva. Potrebno je odrediti zbir elemenata koji prethode prvom pojavljivanju datog realnog broja P
u nizu.
16. Korisnik unosi celobrojni niz a i cefobrojne vrednosti x\y. Odrediti proizvod elemenata u nizu a koji se nalaze izmeu
prve-pojave vrednosti x u nizu prve pojave vrednosti y u nizu. "
17 Ako je polinom P(x) = a0+a1x + a2x2+...+anxn dat nizom svojih koeficijenata, napsati program koji izraunava
vrednost polinoma za dato x.
18.Ako su dva polinoma P(x) i Q(x) dati nizom svojih koeficijenata, napisati program koji rauna njihov zbir i proizvod
pomou odgovarajuih funkcija.
19.Napisati funkciju koja proverava da li je niz sortiran i, ako jeste, ispisuje kojim redosledom je sortiran.
20.Napisati funkciju koja implementira algoritam bubble sort.
21.Na sati funkciju koja implementira algoritam selection sort. 2: .
22.Na sa funkciju koja implementira algoritam insertion sort.
23.Napisati funkciju koja implemntira algoritam quick sort.
24.Napisati funkciju koja implementira algoritam merge sort.
25. Napisati funkciju koja ubacuje broj R u sortiran niz a.
26.Napisati program koji uneti niz a sortira tako da elementi na prnim indeksima budu sortirani u rastuem, a neparni u
opadajuem poretku.
27.Na osnovu unetog niza a, formirati niz b koji se sastoji iz prostih lanova niza a sortiranih u opadajuem poretku.
28.Napisati funkciju koja istovremeno vraa najmanju i najveu vrednost niza.
29.Napisati fiinkciju koja istovremeno rauna aritmetiku sredinu parnih lanova aritmetiku sredinu prostih lanova
unetog niza a.
ta radi sledea fiinkcija (30-36):

30.
void funkcija (float *a,int n) {
int i,j;
for{i=0;i<n-l;i++)
for(j =i+l;j <n;j++)
if(*(a+i)>*(a+j))
pom_f(a+i,a+j;

}
Void pom_f(float *a,float *b) {
float pr;
pr=*a;
*a=*b;
*b=pr;

31.
void fuiikcija (int* a ,int n) {
int pom,i;
pom=*a;
for(i=l;i<n;*(a+i-1)=*(a+i),i++);
*(a+n-1)=pom;

32.
void funkcija (int n, int m,int *q,int * r) {
int i,j=0,*pom=&j;
*q=*pom;
*r=*pom;
for (i=m;i<=n;i++) {
*q+=i*i;
*r+=i*i*i;

}
}

33.
void funkcija (int *a,int pr, int *kol) {
int i,*pom;
pom=&pr;
*kol=*a;
for(i=l;i<*pom;i++)
if (* (a+i) > *kol) *kol=* (a+i);

34.
void funkcija (int *b,int x,int *srv) {
int i,*pom;
pom=&x;
*srv=*b;
for(i=l;i<*pom;i++)
if(*(b+i) < *srv) *srv=*(b+i);

35.
void funkcija (int *a,int pr,int *kol) {
int i,*pom;
pom=&pr;
*kol=0;
for (i=0;i<*pom;*kol+=*(a+i),i++);

36.
void funkcija(int *a,int pr, int *kol) {
int i,*pom;
pom=&pr;
kol=1;
for(i=*pom-l;i>=0;*kol*=*(a+i),i--);

37. Sjaj zvezda (i nebesidh tela) iskazuje se u magnitudama. to je telo sjajnije, to je magnituda manja (Sjaj Sunca je -26.8,
punog Meseca -24.6, najsjajnije zvezde na nebu, Sirijusa 1.4, a neto manje sjajne zvezde Deneb1,.25). U nizu a[n] nalaze se magnitude n nebeskih tela. Potrebno ga je ispisati sortiranog od najsjajnijeg ka najmanje sjajnom telu i ispisati 4
najsjajnija objekta.
38. Ispisati zbir elemenata kvadratne matrice.
39. Napisati. program koji na osnovu unete matrice an,m formira matricu b iji su elementi ili 1 ili 0 i to, ako je element a[i]
[j] paran tada je b[i][j] jednak 0, a ako je neparan h[i][j] onda je jednak
40. Napisati program kojim se na osnovu kvadratne matrice a formira matrica b tako da su joj sporedna glavna dijagonala
jednake sporednoj i glavnoj dijagonali matrice a, dok su ostali elementi jednaki 0.
41. Data je matrica prirodnih brojeva dimenzije NxM. Napisati funkciju koja u matrici odreuje najvei i najmanji element.
42. Data je matrica prirodnih brojeva dimenzije NxM. Napisati funkciju koja u matrici odreuje zbir elemenata sa nepamim
indeksom i i parnim indeksom j.
43. Napisati funkciju koja proverava da li je kvadratna matrica simetrina u odnosu na glavnu dijagonalu.
44. Napisati funkciju koja menja matricu a tako to k-ti red zamenjuje odgovarajuim elementima niza b.
45. Napisati program koji matricu an,m menja tako da joj k-ti i p-ti red zamene mesta.
46. Formirati niz b od elemenata kvadratne natrice an,m koji predstavljaju najvee vrednosti odgovarajueg reda matrice i
niz c koji sadri najmanje vrednosti odgoarajueg reda matrice a.
47. Napisati program koji u niz b ubacuje proste lanove matrice dimenzije NxM i zatim ga ispisuje sortiranog rastuim
redosledom.
48. Napisati program kojim se formira niz b iji su elementi redom jednaki proizvodu elemenata kolone kvadratne matrice a
49. Korisnik unosi matricu an,m Pronai koliko elemenata u matrici su istovremeno najvei u svom redu i najmanji u svojoi
koloni i ispisati njihove indekse.
50. Napisati program koji za odgovarajue N formira i ispisuje kvadratnu matricu sledeeg oblika, npr zaN=4:
1
12
11
10

2
13
16
9

3
14
15
8

4
5
6
7

Zadaci za vebu:
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.

Napisati program koji rauna proizvod elemenata niza an.


Uitati niz od n elemenata ispisati koliko u njemu ima negativnih, a koliko pozitivnih brojeva.
Program treba da ispie koja se cifra u datom broju TVnajvie puta ponovila.
Napisati program koji na osnovu unetog niza a formira niz b koji se satoji iz aritmetike sredine tri elemenata niza a, i
to na sledei nain: b[i]=(a[i]+a[i+l]+a[i+2])/3.
Na osnovu niza an i bn formirati niz cn po sledeoj formuli: c[i] = a[i]+b[n-l-i].
Napisati funkciju koja uklanja sve elemente niza b koji su jednaki datom elementu i kao rezultat vraa izmenjeni niz.
Napisati program koji rauna proizvod elemenata matrice anm.
Za datu kvadratnu matriu an,m napisati program koji pomou odgovarajuih funkcija rauna:
1. zbir elemenata ispod glavne dijagonale
2. zbir elemenata iznad sporedne dijagonale
Za unetu kvadratnu matricu a, ispisati zbir svih neparnih elemenata koji se nalaze na mestima gde je zbir indeksa i i j
jednak datom broju k, to jest i+j=k.
Napisati program koji ispisuje koliko se puta odreeni broj pojavio u matrici an,m. Matrica a treba da sadri samo
brojeve imeu 0 i 9.
Potrebno je popuniti kvadratnu matricu a na zadati nain. Npr. za unetu dimenziju 4 treba formirati ispisati matricu
oblika:
1
2
3
4

2
3
4
1

3
4
1
2

4
1
2
3

62. Na osnovu kvadratne matrice a formirati kvadratnu matricu b koja predstavlja matricu a u ogledalu (krajnja leva
kolona matrice a treba da bude krajnja desna matrice b itd.).
63. Napisati program koji menja datu matricu a tako to sortira elemente u svakom redu i to elemente u prvom redu
rastuim redosledom, elemente u drugom opadajuim, elemente u treem rastuim itd.

Reenja :
1. #include

<stdio.h>
#define MAX_SIZE 15
void ucitaj_niz(int *a,int n) {
int i;
for(i=0;i<n;i++) {
printf("a[%d]= ",i);
scanf("%d"; (a+i));

}
}
double arit_sr(int *a,int n) {
int i
double sum=0.0
for(i=0;i<n;i++)
sum+=*(a+i);
return sum/n;

}
int main() {
int I[MAX_SIZE],II[MAX_SIZE],III[MAX_SIZE],IV[MAX_SIZE];int n_i,n_ii,n_iii,n_iv;
double pI,pII,pIII,pIV,prosek;
printf("Unesite broj predmeta na I godini studija: ");
scanf("%d",&n_i);
printf("Ocene na I godini :\n");
ucitaj_niz (I,n_i);
printf("Unesite broj predmeta na II godini studija: ");
scanf("%d",&n_ii);
printf("Ocene na II godini: \n");
ucitaj_niz(II,n_ii);
printf("Unesite broj predmeta na III godini studija: ");
scanf ("%d",&n_iii);
printf("Ocene na III godini :\n");
ucitaj_niz(III,n_iii);
printf("Unesite broj predmeta na IV godini studija: ");
scanf("%d",&n_iv);
printf ("Ocene na IV godini: \n");
ucitaj_niz(IV,n_iv);
pI=arit_sr(I,n_i);
pII=arit_sr(II,n_ii);
pIII=arit_sr(III n_iii);
pIV=arit_sr(IV, n_i I;
prosek=(pI+pII+pIII+pIV)/4.0;
printf ("Prosek po godinama je:\n");
printf("I:%.2f,II:%.2f,III:%.2f i IV:%.2f\n",pI,pII,pIII,pIV);
printf("Ukupan prosek na studijama je %5. 2f: ",prosek);
return 0;

2.

#include <stdio.h>
#define MAX_SIZE 100
void ucitaj_niz (int *a, int n) {
int i;
for(i=0;i<n;i++) {
printf("a[%d]= ",i);
scanf ("%d",(a+i) );

}
}
int main() {
int a[MAX__SIZE];
int br_p=0,p,n,i;
printf("Unesite dimenziju niza ");
scanf("%d",&n);
if (n>MAX_SIZE) {
printf("Dimenzija je prevelika! ");
return 1;

}
printf("Uneti broj p ");
scanf("%d",&p);
ucitaj_niz(a,n);
for(i=0;i<n;i++)
if(a[i]%2==0 && a[i]>p) br_p++;
printf("Broj parnih brojeva vecih od %d je %d",p,br_p);
return 0;

3.

#include <stdio.h>
int main () {
int i,broj;
int cifre[] = {0,0,0 0 0 0,0 0 0 0};

printf ("Unesi broj ");


scanf (" %d",&broj );
while(broj) {
cifre [broj %10] ++;
broj/=10;

for(i=0;i<10;i++)
printf("Cifra %d se ponovila %d puta \n",i,cifre[i]);
return 0;

4. #include

<stdio.h>
#define MAX_SIZE 100
void ucitaj_niz(int *a,int n) {
int i;
for(i=0;i<n;i++) {
printf("a[%d]= ",i;
scanf("%d", (a+i));

}
}
void ispisi_niz(int *niz,int n) {
int i;
for(i=0;i<n;i++)
printf("%d ",*(niz+i));

}
int main() {
int i,ib=0,ic=0,dim,a[MAX_SIZE],b[MAX_SIZE],c[MAX_SIZE];
scanf("%d",&dim);
ucitaj_niz(a,dim);
for(i=0;i<dim;i++)
if(i%2 == 0) c[ic++]=a[i];
else b [ib++] =a [i];
printf("Niz b : ");
ispisi_niz(b,ib);
printf(" \nNiz c " );
ispisi_niz(c,ic);
return 0;

5. #include

<stdio.h>
#define MAX_SIZE 100
void ucitaj_niz(int *a,int n) {
int i;
for(i=0;i<n;i++) {
printf("a[%d] = " ,i);
scanf("%d",(a+i));

}
}

void ispisi_niz(double *niz,int n) {


int i;
for(i=0;i<n;i++)
printf("%f ",*(niz+i));

int main () {
int a[MAX_SIZE],i;
double b[MAX_SIZE-1];
int n;
scanf("%d",&n);
ucitaj_niz(a,n);
for(i=0;i<n-l;i++)
b[i]=(double)a[i]/a[i+1];
printf("Niz b :\n");
ispisi_niz(b,n-l);
return 0;

6. #incluae

<stdio.h>
#define MAX_SIZE 100
void ucitaj_niz(int *a,int n) {
int i;
for(i=0;i<n;i++) {
printf( "a[%d] = ",i);
scanf(%d",(a+i));

}
}
void ispisi_niz(double *niz,int n) {
int i;
for (i=0;i<n;i++)
printf("%f ", *(niz+i));

int main() {
int a[MAX_SIZE],i;
double b[MAX_SIZE/2];
int n;
scanf("%d",&n);
ucitaj_niz(a,n);
for(i=0;i<n/2;i++)
b[i]=(double)(a[i]+a[i+1]-a[n-l-i])/2;
printf("Niz b :\n");
ispisi_niz(b,n/2);
return 0;

7. #include

<stdio.h>
#define MAX_SIZE 100
void ucitaj niz(int *a,int n) {
int i;
for(i=0;i<n;i++) {
printf("a[%dn = ",i);
scanf("%d",(a+i);

}
}
void ispisi_niz(double *niz,int n) {
int i;
for(i=0;i<n;i++)

printf("%f ", * (niz+i));

double aritm_sr(int *a,int n,int k) {


int i;
double sum=0.0;
for(i=0;i<n;i++)
if(i!=k) sum+=*(a+i);
return sum/(n-1);

}
int main() {
int a[MAX_SIZE],i,n;
double s[MAX_SIZE];
scanf("%d",&n)
ucitaj_niz(a,n);
for(i=0;i<n;i++)
s[i]=aritm_sr(a,n,i);
printf("Niz S :\n");
ispisi_niz(s,n);
return 0;

8.

#include <stdio.h>
#define MAX_SIZE 100
void ucitaj_intervale(int *a,int *b,int n) {
int i;
for(i=0;i<n;i++) {
printf("Unesite %d interval [a,b]: " i+1);
scanf ("%d%d",a+i,b+i);

}
}
void ispisi_niz(int *niz,int n) {
int i;
for(i=0;i<n;i++)
printf("%d ",* (niz+i));
int main() {
int a[MAX_SIZE],b[MAX_SIZE],c[MAX_SIZE];
int C,i,n,n_c=0,min_i,min;
printf("Unesite broj intervala : ");
scanf("%d",&n);
ucitaj_intervale(a,b,n);
printf("Unesite broj C: ");
scanf("%d",&C);
min_i=0;
min = 0;
for(i=0;i<n;i++)
if(a[i]<C && b[i]>C) {
c[n_c++]=i;
if((b[i]-a[i]) < min) {
min=b[i]-a[i];
min_i=i;

}
}
ispisi_niz(c,n_c);

printf("\nNajmanji interval koji sadrzi %d je (%d,%d)\n",C,a[min_i],b[min_i]);


return 0;

9. #include

<stdio.h>
#define MAX_SIZE 100
void ucitaj_niz(int *a,int n) {
int i;
for(i=0;i<n;i++) {
printf("a[%d] = ",i);
scanf("%d",(a+i));

}
}
void ispisi_niz(int *a,int n) {
int i;
for(i=0;i<n;i++)
printf("%d",*(a+i));

}
void swap(int *a,int *b) {
int tmp=*a; *a=*b; *b=tmp;

}
int main() {
int a[MAX_SIZE],i,n,j;
scanf("%d",&n);
ucitaj_niz (a,n);
i=0; j=n-l;
while(l) {
while(a[i]%2==0 && i<j) i++;
while(a[j]%2 && j>i) j--;
if(i<j) swap(&a[i],&a[j]) else break;

ispisi_niz(a,n);
return 0;

10.

#include <stdio.h>
#define MAX_SIZE 100
void ucitaj_niz(int *a,int n) {...} //Funkcije se mogu videti
void ispisi_niz(int *a,int n) {... //u zadacima od 1 do 9
int mam () {
int a[MAX_SIZE],b[MAX_SIZE],dim,n,i;
printf("Uneti dimenzije niza a: ");
scanf("%d",&dim);
ucitaj_niz(a,dim);
printf(Unesite za koliko treba pomeriti elemente niza: ");
scanf("%d",&n);
for(i=0;i<dim;i++)
b[(i+n)%dim]=a[i];
printf("Niz a: \n");
ispisi_niz(a,dim);
printf("Niz b :\n");
ispisi_niz(b,dim);
return 0;

11.

#include <stdio.h>
#define MAX_SIZE 100
void ucitaj_niz(int *a,int n) {...}
voi ispisi_niz(int *a,int n)
int obrni(init br) {
int noviBr=0;
while(br) {
int ostatak = br%10;
noviBr=10*noviBr+ostatak;
br/=10;

return noviBr;

int main() {
int a[MAX_SIZE],b[MAX_SIZE],n,i;
scanf("%d",&n);
ucitaj_niz(a, n);
for(i=0;i<n;i++)
b[i]=obrni(a[i]);
printf("Niz a : \n");
ispisi_niz(a,n);
printf("Niz a : \n");
ispisi_niz(b,n);
return 0;

12.

#include <stdio.h>
#define MAX_SXZE 100
voiod ucitaj_niz(int *a,int n) {...}
void ispisi_niz(int *a,int n) { ... }
int sadrzi_cifru(int br, int cif) {
int korak=10;
while(br) {
int c = br%10;
if(c==cif) return 1;
br/=korak;

}
return 0;

int main() {
int a[MAX_SIZE],b[MAX_SIZE];
int n_b=0,n,i,c;
scanf("%d",&n);
ucitaj_niz(a,n);
printf("Unesite trazenu cifru : ");
scanf("%d",&c);
for(i=0;i<n;i++)
if(sadrzi_cifru(a[i],c)) b[n_b++]=a[i];
printf("Niz a : \n");
ispisi_niz(a,n);
printf("Niz a: \n");
ispisi_niz(b,n_b);
return 0;

13.

#include <stdio.h>
#define MAX_SIZE 100
void ucitaj_niz(int *a,int n) {. .}
int main () {
int a[MAX_SIZE];
int n,i,br=0;
scanf("%d",&n);
ucitaj_niz (a,n);
for(i=0;i<n-l;i++)
if(a[i]>0 && a[i+l]<0)||(a[i]<0 && a[i+l]>0)) br++;
printf("Broj promene znaka je %d",br);
return 0;

14.

#include <stdio.h>
#define MAX_SIZE 100
void ucitaj_niz(int *a,int n) {. .}
int provera(int a[],int n);
int i;
for(i=0;i<n-l:i++)
if(a[i] ==a[i+1]) return 0;
return 1;

int main () {
int a[MAX_SIZE];
int n,i,br=0;
scanf("%d",&n);
ucitaj_niz(a,n);
if(provera(a,n))
printf("Svaka dva susedna elementa su razlicita");
else printf("Postoje susedni elementi koji si identicni");
return 0;

15.

#include <stdio.h>
#define MAX_SIZE 100
void ucitaj_niz(double *a,int n) {
int i;
for(i=0;i<n;i++) {
printf("a[%d]= " ,i);
scanf("%1f",(a+i));

}
}

int main() {
double a[MAX_SIZE];
int n,i;
double p,sum=0.0;
scanf ("%d",&n);
ucitaj_niz(a,n);

printf("Unesite broj P: ");


scanf("%lf",&p);
for(i=0;i<n && a[i]!=p;i++)
sum+=a[i];
printf("Zbir elemenata do broja %f je %f",p,sum);
return 0;

16.

#include <stdio.h>
#define MAX_SIZE 100
void ucitaj_niz(int *a,int n) {...}
int pronadji_prvo (int *a,int n,int x, int pos) {
int i;
if(pos>n) return -1;
for(i=pos;i<n;i++)
if(*(a+i)==x ) return i;
return -1;

int main() {
int a[MAX_SIZE];
int n,i,pr=l,x,y,p_pos,l_pos ;
scanf(" %d",&n);
ucitaj_niz(a,n);
printf("Unesite brojeve ciji se proizvod racuna");
scanf("%d%d",&x,&y);
p_pos=pronadji_prvo(a,n x,0);
l_pos=pronadji_prvo(a,n,y,p_pos);
for(i=p_pos+l;L<l_pos;i++)
pr*=a[i];
printf("Proizvod elemenata izmedju %d i %d je %d",x,y,pr);
return 0;

17.

#inclue <stdio.h>
#include <math.h>
#define MAX_SIZE 100
void ucitaj_coef(int *pol,int deg) {
int i;
for(i=0;i<=deg;i++) {
printf("Uneti %d. koeficijent: ",i);
scanf("%d",(pol+i));

}
}
void ispisi_pol(int *pol,int deg) {
int i;
printf("P(x)=");
for(i=0;i<=deg;i++)
printf("%dx^%d%c",*(pol+i),i,(i==deg?' ':' + '));
printf("\n");

}
int vrednost_pol(int* pol,int deg int x) {
int i,sum=0.0;
for(i=0;i<=deg;i++)
sum+=pol[i]*pow(x,i);
return sum;

int main() {
int pol[MAX_SIZE];
int deg,x;
printf("Uneti stepen polinoma: ");
scanf("%d",&deg);
ucitaj_coef(pol,deg);
ispisi_pol(pol,deg);
printf("Unesite X : ");
scanf("%d",&x);
printf("P(%d)=%d",x,vrednost_pol(pol,deg,x));
return 0;

18.

#include <stdio.h>
#define MAX_SIZE 100
void ucitaj_coef(int *pol,int deg) {
int i;
for(i=0;i<=deg;i++) {
printf("Uneti %d. koeficijent: ",i);
scanf("%d",(pol+i));

}
}

void ispisi(int *pol,int deg) {


int i;
printf("P(x)=");
for (i=0;i<=deg;i++)
printf("%dx^%d%c",*(pol+i),i,(i==deg?' ':'+'));
printf("\n");
void saberi(int *p,int *q,int deg_p,int deg_q,int* r,int *deg) {
int i;
*deg=deg_p>deg_q?deg_p:deg_q;
for(i=0;i<=*deg;i++)
r[ij =0;
for (i=0;i<=deg_p;i++)
r[i]+=p[i];
for(i=0;i<=deg_q;i++)

r[i]+=q[i];
}
void pomnozi(int *p,int *q,int deg_p,int deg_q,int* r,int *deg) {
int i,j;
*deg=deg_p+deg_q;
for(i=0;i<=*deg;i++)
r[i]=0;
for(i=0;i<=deg_p;i++)
for(j=0;j<=deg_q;j++)
r[i+j]+=p[i]*q[j];

}
int main() {
int p[MAX_SIZE],c[MAX_SIZE],rez[MAX_SIZE;]
int degp,degq,deg;
'
printf("Uneti stepen polinoma p: ");
scanf("%d",&degp);
printf ("Uneti stepen polinoma q: ");
scanf("%d",&degq);
printf("Uneti koeficijente polinoma p: \n");
ucitaj_coef(p,degp);
printf("Uneti koeficijente polinoma q:\\n");
ucitaj_coef(q,degq)
printf("Zbir polinoma p i q \n");
saberi(p,q,degp,degq,rez,&deg);
ispisi(rez,deg);
printf("Proizvod polinoma p i q\n");
pomnozi(p,q,degp degq,rez,&deg);
ispisi(rez,deg);
return 0;

19.

#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
void ucitaj_niz(int *a,int n) {...}
int sig(int x) {
return x==0? 0 : x/abs (x);

int isSort(int *a,int n) {


int i,poredak=0,t;
for(i=0;i<n-l;i++) {
t=sig(a[i+1]-a[i]);
if(poredak==0) poredak=t;
if(t==0 || t==poredak) continue;
else return 2;

}
return poredak;

int main() {
int a[MAX_SIZE];
int p,n;
scanf("%d",&n)
if(n<=l) {
printf("Broj elemenata mora biti veci od 1");
return 1;

}
ucitaj_niz(a,n);
p=isSort(a,n);
switch(p) {
case -1: printf("Niz je nerastuci!"); break;
case 1: printf("Niz je neopadajuci!"); break;
case 2: printf("Niz nije sortiran"); break;
case 0: printf("Svi elementi su jednaki");

return 0;

20.

void bubble(int a [], int n) {


int ponovo,i,temp;
do {
ponovo=0;
for(i=l;i<n;i++)
if(a[i]<a[i-l]) {
temp=a[i];
a[i]=a[i-1];
a[i-1]=temp;
ponovo=l;

}
} while (ponovo);
}

21.

void selection(int a[],int n) {


int i,j,minidx,temp;
for(i=0;i<n-l;i++) {
minidx=i;
for(j=i+l; j<n; j++)
if(a[j]<a[minidx]) minidx=j;
if(i!=minidx) {
temp=a[i];
a[i]=a[minidx];
a[minidx]=temp

}
}
}

void compactselection(int a[],int n) {


int i,j temp;
for(i=0;i<n-l;i++)
for(j=i+l;j<n;j++)
if(a[j]<a[i]) {
temp=a[i];
a[i]=a[j];
a[j]=temp;

}
}

22.

void insertion(int a[],int n) {


int i,j value;
for(i=0;i<n;i++) {
value=a[i];
for(j=i-l;j>=0 && a[j]>value; j--)
a[j+l]=a[j];
a[j+1] =value;

}
}

23.

int partition ( int a[], int l, int r) {


int pivot,i,j,t;
pivot = a [l];
i = 1; j = r+1
while( l) {
do ++i; while( a[i] <= pivot && i <= r );
do --j; while( a[j] > pivot );
if ( i >= j )break;
t = a[i]; a[i] = a[j]; a[j] = t;

t = a[l]; a[l] = a[ j ]; a[j] = t;


return j;
j

void quick( int a[], int l, int r) {


int j;
if( l - r ) {
j = partition( a, 1, r);
quick( a, l, j-1);
quick( a, j+l, r);

}
}

24.

void combine (int a[], int prvi, int poslednji) {


int i, j, k, b[100],m=(prvi+poslednji)/2;
for(i=prvi;i<=poslednji; i++)
b[i]=a[i];
i=prvi; j=m+l; k=prvi;
while (i<=m && j<=poslednji)
if(b[i]<=b[j])
a[k++]=b[i++];

else

a[k++]=b[j++];
while (i<=m)
a[k++]=b[i++];

}
void merge(int a [], int prvi, int poslednji){
if(prvi<poslednji) {
int m=(prvi+poslednji)/2;
merge(a, prvi, m);
merge(a, m+l, poslednji);
combine(a, prvi , poslednji);

}
}

25.

#include <stdio.h>
#efine MAX_SIZE 100
void ucitaj_niz(int *a,int n) {...}
void ispisi_niz(int *a,int n) {...}
void ubaci(int *a, int n, int p) {
int i;
for(i=n-l;i>=0;i--)
if(a[i]>p)
a[i+1]=a[i];
else break;
a[i+1]=p

}
int main() {
int a[MAX_SIZE];
int n,p;
printf(Unesite dimenziju niza : ");
scanf("%d",&n);
ucitaj_niz (a,n);
printf("Unesite broj koji treba da se ubaci u niz:");
scanf("%d",&p);
ubaci(a,n,p);
ispisi_niz(a,n+1);
return 0;

26.

#include <stdio.h>
#define MAX_SIZE 100
void ucitaj_niz(int *a,int n) {---}
void ispisi_niz(int *a,int n) {...}
void swap(int *a,int *b){
int tmp=*a;
*a=*b;
*b=tmp;

void sort(int *a,int n) {


int i,j;
for(i=0;i<n-1;i+=2)
for(j=i+2;j<n;j+=2)
if(*(a+i)>=*(a+j)) swap(a+i,a+j);
for(i=l;i<n-l;i+=2)
for(j=i+2;j<n;j+=2)
if(*(a+i)<=*(a+j)) swap (a+i; a+j);

int main() {
int a[MAX_SIZE],n;
printf("Unesite dimenziju niza ");
scanf("%d",&n);
ucitaj_niz (a,n);
sort(a,n);
ispisi_niz(a,n);
return 0;

27.

#include <stdio.h>
#define MAX_SIZE 100
void ucitaj_niz(int *a,int n {...}
void ispisi_niz(int *a,int n){...}
int prost(int br) {
int i;
if(br == 1) return 0;
for(i=2;i<=sqrt(br);i++)
if(br%i==0) return 0;
return 1;

void sort(int *a,int dim) {


int i,j;
for(i=0;i<dim-l;i++)
for(j=i+l;j<dim;j++)
if(a[j]>a[i]) {
int tmp=a[j ];
a[j]=a[i];
a[i]=tmp;

int main() {
int a[MAX_SIZE], b[MAX_SIZE];
int i,n,p,n_b=0;
printf("Unesite dimenziju niza: ");
scanf("%d",&n);
ucitaj_niz (a,n);
for(i=0;i<n;i++)
if(prost(a[i])) b[n_b++]=a[i];
sort(b,n_b);
printf("Niz b: \n");
ispisi_niz (b,n_b);
return 0;

28.

#include <stdio.h>
#define MAX_SIZE 100
void ucitaj_niz(int *a,int n) {}
void min_max(int *a,int n,int *min,int *max) {
int i;
*min=*max=a[0]; // Mogli smo da stavimo i *a umesto a[0]
for(i=l;i<n;i++) {
if(*(a+i)>*max) *max=*(a+i);
if(*(a+i)<*min) *min=*(a+i);

}
}
int main() {
int a[MAX_SIZE] n,min,max;
printf("Unesite dimenziju niza ");
scanf("%d",&n);
ucitaj_niz(a,n);
min_max(a,n,&min,&max);
printf("Minimum niza je %d",min);
printf("\nMaksimum niza je %d" max);
return 0;

29.

#inclue <stdio.h>
#efine MAX_SIZE 100
voi ucitaj_niz (int *a,int n) {}
int prost(int br) {
int i;
if(br == 1) retum 0;
for(i=2;i<=sqrt(br);i++)
if(br%i==0) return 0;
return 1;

}
void aritm_sredine(int *a,int n,double *sr_parni,double *sr_rosti)

int i,br_parni=0,br_prosti=0;
*sr_parni=*sr_prosti=0.0;
for(i=0;i<n;i++) {
if(a[i]%2==01 {*sr_parni+=a[i]; br_parni++;}
if(prost(a[i]){*sr_prosti+=a[i]; br_prosti++;}

}
*sr_parni/=br_parni;
*sr_prosti/=br_prosti;

int main() {
int a[MAX_SIZE],n;
double sr_parni,sr_prosti;
printf("Unesite dimenziju niza: ");
scanf("%d",&n);
ucitaj_niz(a,n);
aritm_sredine(a,n,&sr_parni,&sr_prosti);
printf("Aritmeticka sredina prostih %f",sr_prosti);
printf("\nAritmeticka sredina parnih %f" sr_parni);
return 0;

3
}
4
.
3 30. Funkcija sortira niz a dimenzije n i tipa float. pom_f se korist kao swap funkcija koja zamenjuje mesta
dva elementa tipa float. Njoj se prosleuju vrednosti odgovarajuih elemenata u nizu pomou pokazivake
5
aritmetike.
.
3 31. Funkcija pomera ciklino sve elemente niza a tako da prvi element doe na kraj
6
. 32. Funkcija rauna zbir kvadrata i kubova brojeva izmeu m i n. Zbir kubova se smeta u promenljivu r, a zbir
3
kvadrata u promenljivu q.
7
,
33. Funkcija trai maksimum niza a ija dimenzija je smetena u promenljivu pr (odnosno pom). Maksimum niza se
smeta u promenljivu kol.

34.

Funkcija trai minimum niza b ija dimenzija je smetena u promenljivu x (to jest pom). Minimum niza se
smeta u promenljivu srv

35.

Funkcija rauna zbir elemenata u nizu a, dimenzije pr. Zbir elemenata se smeta u promenljivu kol.

36.

Funkcija rauna proizvod elemenata u nizu a, dimenzije pr. Proizvod elemenata se smeta u promenljivu
kol. U petlji for se kree od poslednjeg elementa ka prvom, to jest prvom elementu u nizu a.

37.

#include <stdio.h>
#define MAX_SIZE 100
void ucitaj_objekte(double *a,int n) {
int i;
for(i=0;i<n;i++)
|
printf("Unesite magnitudu %d. objekta = ",i+l);
scanf("%lf",(a+i));

}
}

int sort(double* a,int n) {


int i,j;
for(i=0;i<n-l;i++)
for(j=i+l;j<n;j++)
if(*(a+i)>*a+j)) {
double tmp=*(a+i);
*(a+i)=*(a+j);
*(a+j)=tmp;

}
}

void ispisi_objekte(double* a,int n) {


int i;
for(i=0;i<n;i++)
printf("%lf\n",a[i]);

int main() {
double objekti[MAX_SIZE];
int n;
printf("Unesite broj objekata ");
scanf("%d",&n);
ucitaj_objekte(objekti,n);
sort(objekti,n);
printf("Sortirani objekti :\n");
ispisi_objekte(objekti,n);
printf("Najsjajniji objekti su: \n");
printf("%lf\n,objekti[0]);
printf("%lf\n",objekti[l]);
printf("%lf\n",objekti[2]);
printf("%lf\n',objekti[3]);
return 0;

38.

#include <stdio.h>
#define MAX_SIZE 100
void unesi_matricu (int a[][MAX_SIZE],int n,int m) {
int i,j;
printf("Unesite clanove matrice ");
for(i=0;i<n;i++)
for(j=0;j<m;j++) {
printf("\na[%d][%d] = ",i,j);
scanf("%d",&a[i][j])

}
}

void ispisi_matricu(int a[][MAX_SIZE],int n,int m) {


int i,j;
for(i=0;i<n;i++){
for(j=0;j<m;j++)
printf("%d ",a[i][j]);
printf("\n");

}
}

int suma(int mat[][MAX_SIZE],int n,int m) {


int i,j,sum=0;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
sum+=mat[i][j];
return sum;

int main() {
int mat[MAX_SIZE][MAX_SIZE];
int n,m;
printf("Unesite n i m : \n");
scanf("%d%d",&n,&m);
unesi_matricu(mat,n,m);
printf("Suma elemenata u matrici je %d\n",suma(mat,n,m));
ispisi_matricu(mat,n,m);
return 0;

39.

#include <stdio.h>
#define MAX_SIZE 100
void unesi_matricu (int a[][MAX_SIZE],int n,int m) {...}
void ispisi_matricu (int a[] [MAT_SIZE],int n,int m) {...}
int main() {
int a[MAX_SIZE][MAX_SIZE];
int b[MAX_SIZE][MAX_SIZE];
int i,j,n,m;
printf ("Unesite dimenzije matrice a: ");
scanf("%d%d",&n,&m);
unesi_matricu(a,n,m);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(a[i][j]%2) b[i][j]=0;
else b[i][j]=l;
ispisi_matricu(b,n,m);
return 0;

40.

#include <stdio.h>
#define MAX_SIZE 100
void unesi_matricu (int a[][MAX_SIZE],int n,int m) {...}
void ispisi_matricu (int a[][MAX_SIZE],int n,int m) {...}
int main() {
int a[MAX_SIZE][MAX_SIZE];
int b[MAX_SIZE][MAX_SIZE];
int i,j,n;
printf("Unesite dimenzije kvaratne matrice a: ");
scanf("%d",&n);
unesi_matricu(a,n,n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if( i==j) b[i][i]=a[i][i];
else if(j==n-l-i) b[i][j]=a[i][j];
else b[i][j]=0;
ispisi_matricu(b,n,n);
return 0;

41.#include

<stdio.h>
#define MAX_SIZE 100
void unesi_matricu (int a[][MAX_SIZE],int n,int m) {...}
void ispisi_matricu (int a[][MAX_SIZE],int n,int m) {...}
void min_max(int a[][MAX_SIZE],int n,int m,int* min,int* max) {
int i,j;
*min=*max=a[0][0];
for(i=0;i<n;i++)
for(j=0;j<m;j++) {
if(a[i][j]>*max) *max=a[i][j];
if(a[i][j]<*min) *min=a[i][j];

int main() {
int a[MAX_SIZE][MAX_SIZE],i,j,rn,m,min,max;
printf("Unesite dimenzije matrice a: ");
scanf("%d%d",&n,&m);
unesi_matricu(a,n,m);
min_max(a,n,m,&min,&max);
printf("Minimum matrice je %d, a maksimum %d" min,max);
return 0;

42.

#include <stdio.h>
#define MAX_SIZE 100
void unesi_matricu(int a[][MAX_SIZE],int n,int m) {...}
void ispisi_matricu(int a[][MAX_SIZE],int n,int m) {...}
int sum (int a[][MAX_SIZE],int n,int m) {
int i,j,sum=0;
for(i=1;i<n;i+=2)
for(j=0;j<m;j+=2)
sum+=a[i][j];
return sum;

}
int main () {
int a[MAX_SIZE][MAX_SIZE],i,j,n,m;
printf("Unesite dimenzije matrice a: ");
scanf("%%d",&n,&m);
unesi_matricu(a,n,m);
printf("Suma je = %d",sum(a,n,m));
return 0;

43.

#include <stdio.h>
#define MAX_SIZE 100
void unesi_matricu (int a[][MAX_SIZE],int n,int m) {...}
void ispisi_matricu (int a[][MAX_SIZE],int n,int m) {...}
int simetricna (int a[][MAX_SIZE], int n) {
int i,j;
for(i=0;i<n;i++)
for(j=0;j<i;j++)
if(a[i][j]!=a[j][i] ) return 0;
return 1;

int main() {
int a[MAX_SIZE][MAX_SIZE],n;
printf("Unesite dimenzije kvadratne matrice a: ");
scanf("%d",&n);
unesi_matricu(a,n,n);
if(simetricna(a,n)) printf("Matrica je simetricna"");
else printf("Matrica nije simetricna");
return 0;

44.

#include <stdio.h>
#define MAX_SIZE 100
void unesi_matricu (int a[][MAX_SIZE],int n,int m) {...}
void ispisi_matricu (int a[][MAX_SIZE],int n,int m) {...}
void ucitaj_niz(int *a,int n) {...}
void promeni(int a[][MAX_SIZE],int *b,int n,int k) {
int i;
for(i=0;i<n;i++)
a[i][k] =b[k];

}
int main() {
int a[MAX_SIZE][MAX_SIZE],b[MAX_SIZE],m,n,k;
printf("Unesite dimenzije matrice a: ");

scanf("%d%d",&n,&m);
unesi_matricu(a,n,m);
ucitaj_niz(b,n);
printf("Unesite k : ");
scanf("%",&k);
promeni(a,b,n,k);
ispisi_matricu(a,n,m);
return 0;

45.

#include <stdio.h>
#define MAX_SlZE 100
void unesi_matricu (int a[][MAX_SIZE],int n,int m) {...}
void ispisi_matricu(int a[][MAX _SIZE],int n,int m) {...}
void swap_c (int a[][MAX_SIZE],int n,int k,int p) {
int i,tmp;
for(i=0;i<n;i++) {
tmp=a[k][i];
a[k][i]=a[p][i];
a[p][i]=tmp;

}
int main () {
int a[MAX_SIZE][MAX_SIZE],b[MAX_SIZE][MAX_SIZE];
int m,n,k p;
printf("Unesite dimenzije matrice a: ");
scanf("%d%d",&n,&m);
unesi_matricu(a,n,m);
printf ("Unesite k i p:");
scanf("%d%d",&k,&p)
swap_c(a,m,k,p);
ispisi_matricu(a,n,m);
return 0;

46.

#include <stdio.h>
#define MAX_SIZE 100
void unesi_matricu (int a[][MAX_SIZE],int n,int m) {...}
int max_niza(int *a,int n) {
int i,max=*a;
for(i=l;i<n;i++)
if(*(a+i)>max) max=*(a+i);
return max;

}
int min_niza(int *a,int n) {
int i,min=*a;
for(i=l;i<n;i++)
if(*(a+i)<min) min=*(a+i);
return min;

void j spisi_niz(int *a,int n) {...}


int main(){
int a[MAX_SIZE][MAX_SIZE];
int b[MAX_SIZE],c[MAX_SIZE];
int i,m,n;
printf("Unesite dimenzije matrice a: ");
scanf("%d%d",&n,&m);
unesi_matricu(a,i,m);
for(i=0;i<n;i++) {
b[i]=max_niza(a[i],m);
c[i]=min_niza(a[i],m);

printf("Niz b :\n");
ispisi_niz(b,m);
printf("Niz c : \n");
ispisi_niz(c,n);
retum 0;

47.

#include <stdio.h>
#include <math.h>
#define MAX_SIZE 100
void unesi_matricu (int a[][MAX_SIZE],int n,int m) {...}
int prost(int br) {
int i;
if(br == 1) return 0;
for(i=2;i<=sqrt(br);i++)
if(br%i==0) return 0;
return 1;

void ispisi_niz(int *a,int n) {...}


void sort(int *a,int n) {
int i,j tmp;
for(i=0;i<n-l;i++)
for(j=i+l;j<n;j++)
if(a[i]>a[j]) {
tmp=a[i];
a[i]=a[j];
a[j]=tmp;

}
}

int main() {
int a[MAX_SIZE][MAX_SIZE];
int b[MAX_SIZE];
int n_b=0,i,j,m,n;
printf("Unesite dimenzije matrice a: ");
scanf("%d%d",&n,&m);
unesi_matricu(a,n,m);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(prost(a[i][j])) b[n_b++]=a[i][j];
sort(b,n_b);
ispisi_niz(b,n_b);
return 0;

48.

#include <stdio.h>
#define MAX_SIZE 100
void unesi_matricu (int a[][MAX_SIZE],int n,int m) {...}
void ispisi_niz(int *a,int n) {...}
int main()
int a[MAX_SIZE][MAX_SIZE];
int b[MAX_SIZE];
int i,j,n;
printf("Unesite dimenzi]e matrice a: ");
scanf("%d",&n)
unesi_matricu(a,n,n);
for(i=0;i<n;i++) {
int p=l;
for(j=0;j<n;j++)
p*=a[j][i]
b[i]=p;

}
ispisi_niz(b,n);
return 0;

49.

#include <stdio.h>
#define MAX_SIZE 100 %
void unesi_matricu (int a[][MAX_SIZE],int n,int m) {...}
int najveci_u_redu(int vrednost, int red,int mat [][MAX_SIZE],int n,int m) {
int i;
for(i=0;i<m;i++)
if(mat[red][i]>vrenost) retura ;
return 1;

int najmanji_u_koloni(int vrenost,int kolona,int mat [][MAX_SIZE],int n,int m) {


int i;
for(i=0;i<n;i++)
if(mat[i][kolona]<vrenost) return 0;
return 1;

}
int main () {
int mat[MAX_SIZE][MAX_SIZE];
int n,m,i, j ,kol,red,br=0;
printf("Unesite dimenzije matrice: \n");
scanf("%d%d",&n,&m);
'
unesi_matricu(mat n,m);
for(i=0;i<n;i++)
for(j=0;j<m;j++) {
if(najveci_u_redu(mat[i][j],i,mat,n,m) && najmanji_u_koloni(mat[i][j],j,mat,n,m) ) {
printf("%d na mestu %d,%d\n",mat[i][j],i,j);
br++

}
}

printf("ukupno ih je %d",br);
return 0;

50.

#include <stdio.h>
#define MAX_SIZE 100
int main() {
int mat[MAX_SIZE],[MAX_SIZE],n,m,i,j;
int deltax[4]={l,0,-1,0};
int deltay[4]={0,1,0,-1};
int posx=0, posy=l, pravac=0;
printf("Unesite n i m : \n");
scanf("%d%d",&n,&m);
for(i=0;i<=n+l;i++)
for(j=0;j<=m+l;j++) {
if(i==0 || i== n+1 || j==0 || j==m+l) mat[i][j]=l;
else mat[i][j]=0;

}
for(i=l;i<=m*n;i++) {
if(mat[posy+deltay[pravac]][posx+deltax[pravac]]!=0) pravac=(pravac+1)%4;
mat[posy+deltay[pravac]][posx+deltax[pravac]]=i;
posx+=deltax[pravac];
posy+=deltay[pravac];

for(i=l;i<=n;i++){
for(j=l;j<=m;j ++)
printf("%d\t",mat[i][j]);
printf("\n");

}
return 0;

Stringovi
Stringovi
Za re ili reenicu potpuno prirodno kaemo da je niz slova ili, u optem slu aju, niz znakova (string). U programskom jeziku
C upravo emo ih tako i deklarisati.
char a [100];
char *b="Ovo je neki niz znakova"
char c []="Opet neki niz znkova"
Ovim primerima smo deklarisali da je a niz od 100 znakova, b i c su stringovi koji u startu sadre po reenicu, a razlikuju se
samo vizuelno poto je svejedno da li emo pri deklaraciji koristiti * ili [].
Bitno je zapamtiti da je na kraju stringa uvek znak `\0` jer je to znak za terminaciju stringa, to jest za njegov kraj. Ugraene
fiunkcije koje rade sa stringovima oekuju da se terminalni znak nalazi na kraju; ako ga nema program pada, a ako se nalazi u
sredini, ostatak stringa e biti zanemaren.
Stringovi se takoe ne mogu sabirati kao to se to moe raditi u nekim drugim jezicima, ve se spajaju posebnom funkcijom i
pri tom se mora voditi rauna da odredini string ima dovoljno mesta!
Funkcije za uitavanje i ispisivanje stringova:
printf ("%s" , a);

ispisuje string a

scanf ("%s" , a);

uitava string a; ispred a se ne pie &, jer je a ve pokaziva! Ova funkcija uitava
tekst do prvog razmaka.
takoe uitava string a, ali do kraja reda
ispisuje string a

gets (a);
puts (a);

esto se previdi da je &s[4j takoe string koji poinje od petog znaka (prvi je sa indeksom 0). To je korisno kada elimo da
naemo npr. sledeu pojavU nekog podstringa i tada kao argument funkcije strstr moemo umesto s da stavimo &s[4] ili samo s+4
(primer upotrebe pokazivake aritmetike), to se moe videti u mnogim uraenim zadacima.
esto se upotrebljava NULL vrednost (to je makro definisan u stdio.h) koji oznaava da pokaziva ne pokazuje ni na ta. Primer je
funkcija strstr koja vraa NULL ako se string t ne nalazi u stringu s.

Funkcije za rad sa znakovima (ctype.h):


isalpha(c)
isnumeric(c)
isalnum(c)
isspace(c)
isupper(c)

ispituje da li je c slovo
ispituje da li je c broj
ispituje da li je c slovo ili broj
ispituje da li je c neki od sledeih znakova ' ', '\t', '\n`, '\v`, `\f`,
ili `\r`, ili neka belina
ispituje da li je c veliko slovo

islower(c)
ispunct(c)
tolower(c)
toupper[c)

ispituje da li je c malo slovo


ispituje da li je c znak interpunkcije
pretvara c u malo slovo
pretvara c u veliko slovo
Funkcije za rad sa stringovima (string.h)

strcpy(d,s)

kopira string s u string d, unapred pretpostavljajui i da u stringu d ima dovoljno mesta

strncpy(d,s,n)
strcat(d,s)
strncat (d, s n)
strcmp(a,b)
strncmp (a,b n)
strcmpi(a,b)
strchr(s,c)
strstr(s,t)
strlen(s)
strpbrk(s,t)

kopira n znakova stringa s u string d


nadovezuje string s na string d
nadovezuje n znakova stringa s na string d
uporeuje stringove a i b i vraa -1,0 ili 1 za a<b, a=b i a>b
uporeuje prvih n znakova stringova a i b
ista kao funkcija strcmp samo to se sva slova pretvaraju u mala radi poreenja
vraa pokaziva na prvu pojavu znaka c u stringu s
vraa pokaziva na prvu pojavu stringa t u stringu s
vraa duinu stringa s
vraa pokaziva na prvu pojavu bilo kog znaka stringa t u stringu s, ili NULL ako nema takvih

A r g u m e n t i k o m a n d n e linije
Kao to funkciji prosleujemo parametre, nekada elimo da odmah prosledimo neke parametre programu koji smo
pokrenuli. Primer je program COPY koji moemo pokrenuti s komandne linije. Kada ga pokreemo, piemo razmak, ime
fajla koji treba kopirati, pa razmak ime novog fajla u koji se sadraj kopira. Da bismo mogli da piemo sline programe,
moramo znati kako da primimo te para-metre (argumente) u programu.
Do sada smo navikli da funkciju main piemo kao:
int m a i n ( ) { . . . }
Meutim, main ima i svoj drugi zapis koji omoguava itanje parametara koji su prosleeni programu s komandne linije:
int m a i n ( int argc, char **argv)
U ovom zapisu, argv je niz stringova veliine agrc. Dakle, svaki parametar je string, a nulti parameter je ime programa.
Primeri
1.

Napisati program koji ispisuje dati string u direktnom i inverznom poretku.


#include <stdio.h>
int main() {
char str [100];
char *pok;
printf ("Unesite string ");
pok=gets(str);
printf("String u direktnom poretku I: \n");
printf("%s\n",str);
printf ("String u direktnom poretku II: \n");
while(*pok!='\0)
// Cesto cemo pisati i kao while(*pok)
putchar (*pok++);
printf("\nString u inverznom poretku \n");

while(--pok>=str)
putchar(*pok);
return 0;
}

2. Napisati funkciju koja vraa pokaziva na prvo pojavljivanje znaka u stringu i glavni program koji ju testira.
#include <stdio.h>
// U string.h je definisana funkcija strchr koja radi isto sto i
// funkcija vrati_pok
char* vrati_pok(char* s, char c) {
char* pok=s;
while(*pok)
if (*pok++==c) return pok;
return NULL;
}
int main() {
char str [100];
char* pok,ch;
printf !"Unesite string : ");
gets(str);
printf("Unesite karakter ciju poziciju trazite : ");
fflush(stdin);
scanf("%c", &ch);
pok=vrati_pok(str,ch);
printf ("Ostatak stringa od te pozicije je: %s", (pok==NULL)?"Nema rezultata":pok);
return 0;
}

3. Napisati funkciju izbaci_praznine koja iz stringa str izbacuje sve praznine.


#include <stdio.h>
#define MAX_SIZE 100
void izbaci_praznine(char* s,char* rez) {
while (*s) {
if(*s== ||*s=='\t`) s++;
else *rez++=*s++;
}
*rez= \0';
}
int main() {
char rez [MAX_SIZE], str[MAX_SIZE];
if(gets (str) ==NULL) return 1;
izbaci_praznine(str, rez);
printf("%s\n",rez);
return 0;
}

4. Napisati program koji pomou funkcije sort_str sortira uitani niz stringova po alfabetskom redosledu.
#include <stdio.h>
#include <string.h>
#define MftX_SIZE 100
void sort_str (char* niz_str[], int n) {
int i,j;
for(i=0; i<n-l;i++)
for(j=i+l;j<n;j++)
if(strcmpi(niz_str[i],niz_str[j])>0)
{
char* tmp=niz_str[i];
niz_str[i]=niz_str[j];
niz_str[j]=tmp;
}
}
int main() {
char niz_str [MAX_SIZE] [MAX_SIZE];
char* pok [MAX_SIZE]
int i,j n;
do {
printf ("Koliko stringova ucitavate: );
scanf ("%d",&n);
if(n>MAX_SIZE)
printf("Vrednost je prevelika, pokusajte ponovo!");
}
while(n>MAX_SIZE);

;
fflush(stdin);
for(i=0;i<n;i++) {
printf ("\nUnesite %d. string ",i);
gets(niz_str [i] );
pok[i] =niz_str[i];
}
sort_str (pok,n);
for(i=0;i<n;i++)
puts(pok[i]); return 0;

5. Kao ulaz se unose dva stringa, sl i s2. Kao rezultat treba pisal string koji je nastao nadovezivanjem stringa s2 na kraj
stringa sl.
#include <stdio.h>
int main() {
char strl[100],str2 [100],str [200];
char* sl,*s2;
int i=0;
printf ("Unesite prvi string: ");
gets(str1);
printf ("Unesite drugi string: ");
gets(str2);
sl=strl;
s2=str2;
while(*sl)
str [i++]=*sl++;
while(*s2)
str [i++]=*s2++;
str[i] ='\0`;
printf("Rezultujuci string je: %s",str);
return 0;
}

6. Napisati program koji ispisuje broj argumenata i parametre komandne linije.


#include <stdio.h>
int main(int argc,char** argv)
{
int i;
printf("Broj argumenata komandne linije je %d\n",argc);
printf("Parametri komandne linije: \n");
for(i=0;i<argc;i++)
printf("%s\n" argv[i]);
return 0;
}

Zadaci
1. Napisati fiinkciju koja vraa poziciju prvog pojavljivanj i stringa s2 u stringu s1. Ako se string s2 ne nalazi u s1, funkcija kao
rezultat vraa -1.
2. Napisati program koji dati string str menja tako to mala slova pretvara u velika, a velika slova u mala.
3. Napisati program koji ispisuje koja slova se pojavljuju u stringu i koliko puta.
4. Napisati funkciju koja iz stringa s brie svako pojavljivanje znaka c.
5b. Napisati funkciju del koja iz stringa str brie d znakova, poevi od pozicije poz testirati je u glavnom programu. Pri brisanju
voditi rauna o tome da li u stringu ima d znakova od pozicije poz.
6. Napisati funkciju koja ispisuje indeks stringa s1 na kojem se pojavljuje string s2. Uraditi to za svako pojavljivanje stringa s2.
7. Napisati program koji pomou funkcije zamenjuje svako pojavljivanje stringa str1 u stringu s, stringom str2.
8. Napisati funkciju za ifrovanje Cezarovom ifrom pomou fiinkcije cesar. Tekst ifrovati tako da se svako slovo ciklino
pomeri za k mesta udesno. Npr. za k=2 a->c.
9. Napisati funkciju koja iz datog stringa str brie svaki znak koji odgovara bilo kom znaku stringa str2.
10. Napisati funkciju kojom se ispisuju svi podstringovi datog stringa str ukljuujui i njega samog.
11. Unose se dva stringa. Napraviti trei string na sledei nain: "beo"+"crn" treba da daju "bceron".
12. Napisati funkciju koja formira string s2, pri emu je s2 string s1 kome su uklonjeni svi znakovi smeteni izmeu zagrada (...)
Pretpostaviti da nema zagrada unutar zagrada.

13. Napisati program koji za uneti broj ispisujc tekstualno njegove cifre. Npr. ako je broj 123, program treba da napravi string ,
jedan dva tri" i ispie ga.
14. Napisati funkciju reci koja ispisuje sve rei koje se pojavljuju u zadatom stringu str.
15. Napisati program koji izraunava vrednost postfiksnog izraza koji se unosi kao string str. Operandi u izrazu su prirodni
brojevi, razdvojeni belinom, a operacije su + - * / (gde je / celobrojno deljenje). Pretpostavlja se da je izraz unet korektno.
Primer: 3 5 * je ekvivalentno izrazu 3 *5, a izraz 3 5 7 + * 2 / odgovara izrazu (3* (5+7) ) /2.
16. Napisati program koji omoguava sabiranje i mnoenje velikih brojeva koji se unose kao stringovi.
17. Napraviti igricu Veala. Igricu napraviti tako da se iz niza rei napisanih malim slovima na sluajan nain bira re koju igra
treba da pogodi. Na samom poetku se ispisuje koliko izabrana re ima slova i njen zapis pomou zvezdica. Korisnik unosi
slova (bilo velika ili mala) i ako se uneto slovo nalazi u rei, treba ga upisati umesto odgovarajue zvezdice. Kada korisnik
pogodi re, ispisati koliko pokuaja mu je bilo potrebno.
18. Napisati orogram Koji ispisuje rei koje se unose kao argumenti komandne linije; ako nema unetih rei, ispisuje
odgovarajuu poruku na ekran.
19. Napisati program koji ispisuje zbir dva broja koji se zadaju kao parametri komandne linije.
20. Reenica se unosi kao argument komandne linije. Ispisati rei koje se pojavljuju u reenici sortirane alfabetskim redosledom
21. Kao argument komandne linije navodi se opcioni argument (prethodi mu znak -") i re r. Napisati program koji omoguava
korisniku da unosi tekst i u zavisnosti od opcionog argumenta obavlja odgovarajue radnje. Ako je dat opcioni argument -n,
ispisati svaki red teksta koji korisnik unese zajedno sa njegovim rednim brojem. Ukoliko je naveden argument t, ispisuje se
samo redni broj reda ali ne i njegov sadraj osim ako je navedena re r. Ako je naveden argument -x, potrebno je u datom
tekstu pretvoriti sva mala slova u velika obratno.
Z a d a c i z a vebu

1.
2.
3.
4.
5.

U stringu itr odrediti broj praznina i interpunkcijskih znakova.


Implementirati funkciju int strlen(char* str).
Napisati funkciju koja iz stringa str eliminie svaku pojavu dekadnih cifara.
Napisati funkciju koja ispisuje sve rei u datom stringu Rei ispisivati po jednu u redu.
Pomou funkcije izbaci () eleminisati sve komentare oblika / / iz redova koje unosi korisnik i zatim ih ispisati.

Reenj a
1.
#include <stdio.h>
#include <string.h>
int pozicija1(char* sl, char* s2) {
if(strstr(sl,s2; ==NULL)
return -1;
else
return strstr(sl1,s2)-1l;
}

//prvi nacin

int pozicija2(char* s1, char* s2) {


//drugi nacin
char *p=s1, *q=s2;
while(*p) {
if (*p==*q) q++;
else q=s2;
if(*q==`\0`)
return p-sl1-(q-s2)+1;
p++,
}
return -1;
}
int main() {
char s1 [100], s2 [100];
printf("Unesite string: ");
gets (s1);
printf("Unesite string ciju poziciju trazite: ");
gets(s2);
printf("Pozicija : %d\n", pozicija1(&s1, &s2));
printf ("Pozicija : %d\n" pozicija2(&s1, &s2));
return 0;
}

2.

#include <stdio.h>
#include <ctype.h>
int main() {
char str[100] ;
char* s;
printf("Uneti string: ");
gets (str);
s=str;
while(*s) {
if(isupper(*s)) *s=tolower(*s);
else if(islower(*s)) *s=toupper(*s);
s++;
}
printf("String : %s",str);
return 0;
}

3.
include <stdio.h>
include <ctype.h>
int main() {
int slova[26], i;
char str [100] ;
char* s;
printf("Unesite string ");
gets(str);
s=str;
for(i=0:i<26;i++)
slova[i]=0;'
/ /Popunjavamo broj slova nulama
while(*s) {
if(isupper(*s)) slova[(*s)-'A']++;
else if(islower(*s)) slova[(*s)-'a']++;
s++;
}
for(i=0; i<26;i++)
if (slova[i] ! =0)
printf("%c se pojavilo %d puta\n", 'A`+i,slova[i]);
retura 0;
}

4.

5.

void brisi(char* s, char c) {


char* sl=s;
while(*sl) {
if(*sl!=c) *s++=*sl;
s1++;
}
*s='\0';
}

#include <stdio.h>
int del (char* s, int poz, int d) {
//prvi nacin
if(poz+d > strlen(s)) retura 0;
strcpy(s+poz.s+poz+d);
retura 1;
}
int del2 (char* s,int poz, int d) {
//drugi nacin
char *p=s+poz, *q=s+poz+d;
if(poz+d > strlen(s)) return 0;
while(*q)
*p++=*q++;
*p='\0`;
return 1;
}
int main () {
char str[100];
int poz,d;
printf("Oneti string: ");
gets (str);
printf'"Unesite poziciju od koje treba obrisati znakove: ");
scanf( 1 %d",&poz);
printf("Unesite koliko znakova treba obrisati: ");
scanf("%d" &d);
if(!del(&str,poz,d)) printf("Prevelik broj znakova");
else printf ("Novi string je : %s", str);
return 0;

6.
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100
void ispisi_mesta_pojavljivanja(char* sl, char* s2) {
char* p=sl-l;
while((p=strstr(p+1, s2))>0)
printf("Pozicija: %d\n",p-sl);
}
int main() {
char str [MAX_SIZE], str2 [MAX_SIZE] ;
printf ( "Unesite string : ");
gets(str);
printf("Unesite string koji se trazi; ");
gets(str2);
ispisi_mesta_pojavljivanja(&strl, &str2);
return 0;
}

7.

#include <stdic.h>
#include <string.h>
#define MAX_SIZE 100
void zameni1(char* str, char* sSta, char* sCim) {
char buffer[MAX_SIZE], *p=str;
int nsta=strlen(sSta),ncim=strlen(sCim);
while((p=strstr(p,sSta))!=NULL) {
strcpy(buffer,p+nsta);
strcpy(p,sCim);
strcpy(p+ncim,buffer);
p+=ncim;
}
}
void zameni (char* str, char* strl, ehar* sSta, char* sCim) {
char *p = str *e;
int nsta=strlen (sSta);
str1 [0] = '\0 ';
while ((e=strstr(p,sSta))!=NULL) {
strncat(strl, p, e-p);
strcat(strl, sCim);
p=e+nsta;
}
strcat(strl p);
int main(){
char s[MAX_SIZE],str1[MAX_SIZE],str2[MAX_SIZE];
char rez[MAX_SIZE];
printf("Unesite string: ");
gets (s);
printf("Unesite string koji se zamenjuje: ");
gets(strl);
printf("Unesite cime se zamenjuje: ");
gets(str2);
printf("Funkcija zameni: \n");
zameni(&s,&rez,&strl,&str2);
puts(rez);
printf("Funkcija zameni1: \n");
zameni1(&s,&strl,&str2);
puts(s);
return 0;

8.

#include <stdio.h.>
#include <ctype.h.>
#define MAX_SIZE 100
void cezar(char* tekst,int k) {
int t;
while(*tekst) {
if(isalpha(*tekst)) {
t=isupper(*tekst)? 'A':'a';
*tekst=(*tekst-t+k)%26+t;
}
tekst++;
}
}
int main() {
char s[100];
int k;

printf("Unesite string ");


gets(s);
printf ("Unesite k: ");
scanf("%d",k);
cezar(&s,k);
printf("%s",s);
return 0;

9.

#include <stIio.h.>
#include <string.h>
#define MAX_SIZE 100
void brisi(char* str, char* str2) {
int n=strlen(str),i, x =0;
for(i=0;i<n;i++) {
str[i-x =str[i];
if(strchr(str2,str[i]))
x++;
}
str[i-x] ='\0';
}
int main() {
char s1[MAX_SIZE],s2[MAX_SIZE];
printf("Unesite string: ");
gets(s1);
printf("Unesite drugi string; ");
gets(s2);
brisi(&sl,&S2);
printf("%s,s1);
return 0;
}

10.

#include <stdio. h>


#include <string.h>
#define MAX_SIZE 100
void ispisi_n_slova(char* str, int n) {
int i;
for(i=0;i<n;i++)
putchar(str[i]);
putchar('\n');
void ispisi_podstringove(char* str) {
int i,j,n=strlen(str);
for(i=0;i<n;i++)
for(j=i;j<n;j++)
ispisi_n_slova(&str[i],j-i+1);
}
int main() {
char str[MAX_SIZE];
printf("Unesite string: ");
gets(str);
ispisi_podstringove(&str);
return 0;
}

11.

#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100
int main () {
char a[MAX_SIZE],b[MAX_SIZE],c[MAX_SIZE];
char *ta=a, *tb=b, *tc=c;
int i=0;
printf("Unesite prvi string: ");
gets(a);
printf("Unesite drugi string: ");
gets(b);
while(*ta && *tb) {
*tc++=*ta++;
*tc++=*tb++;
}
while(*ta) *tc++=*ta++;
while(*tb) *tc++=*tb++;
*tc= '\0'
Printf( Rezultat: ");
puts(c);
return 0;
}

12.

void izbaci(char* sl,char *s2) {


char *pom,*pom2;

while(pom=strstr(s1,"(")) {
pom2=strstr(sl,")");
if(pom2==NDI,L) break;
strcpy(pom,pom2+l);
}
strcpy(s2,s1);

13.

#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100
void strins(char* s, char *t) {
char buf[MAX_SIZE];
strcpy(buf,s);
strcpy(s,t);
strcat(s,buf);

int main () {
int broj,add=0, i=0;
char s_broj[MAX_SIZE];
printf("Unesite broj : ");
scanf(%d,&broj);
while(broj) {
switch(broj%10) {
case 0: strings(s_broj,nula ); break;
case 1: strings(s_broj,jedan ); break;
case 2: strings(s_broj,dva ); break;
case 3: strings(s_broj,tri ); break;
case 4: strings(s_broj,cetiri ); break;
case 5: strings(s_broj,pet ); break;
case 6: strings(s_broj,sest ); break;
case 7: strings(s_broj,sedam ); break;
case 8: strings(s_broj,osam ); break;
case 9: strings(s_broj,devet ); break;

}
broj/=10;

printf("Broj : %s\n", s_broj);


return 0;

14.

#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100
void reci(char* s) {
int i;
for(i=0;i<strlen(s);i++)
if(s[i]== ') putchar( \n');
else putchar(s[i]);

int main () {
CHAR S[MAX_SIZE];
printf("Unesite string ");
gets(s);
reci(&s);
return 0;

15.

#include <stdio.h>
#include <ctype.h>
#define MAX_SIZE 100
int main() {
char izraz[MAX_SIZE],*iz;
int st[MAX_SIZE],i=0
printf("Unesite izraz ");
gets(izraz);
iz=izraz;
while(*iz) {
if(isdiait(*iz)) {
int br=0;
while(isdigit(*iz)) {
br=10*br+*iz-0;
iz++;
}
st[i++]=br;
continue;

}
switch(*iz)
case +
case *
case -
case /

{
:
:
:
:

st[i-2]=st[i-2]+st[i-1];
st[i-2]=st[i-2]*st[i-1];
st[i-2]=st[i-2]-st[i-1];
st[i-2]=st[i-2]/st[i-1];

i--;
i--;
i--;
i--;

iz++;

}
printf(Rezultat je: %d",st[0]);
return 0;

16.

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define MftX_SIZE 100
int cif(char* str, int n) {
if(n>=strlen(str)) return 0;
return str[n]0 ';
}
void okreni_str(char* p) {
char *q=p+strlen(p)-1,tmp;
while(p<q){
tmp=*p; *p=*q; *q=tmp;
p++;q--;

}
}
void zbir(char* brl, char* br2, char *rez) {
int a,b,c,i=0,p=0;
while(1) {
a=cif(br1,i);
b=cif(br2,i);
c=a+b+p;
if (!c) break;
rez[i]=c%10+'0';
p=c/10;
i++;
}
rez[i]='\0';
}
voi proizvod(char* brl, char* br2, char *rez) {
int a,b,c,i,j;
int d1=strlin(brl),d2=strlen(br2),
for(i=0; i<dl+d2; i++)
rez[i]='0';
for(i=0;i<d1;i++)
for(j=0;j<d2;j++) {
a=cif(brl,i);
b=cif(br2,j);
c=cif(rez,i+j)+a*b;
rez[i+j]=c%10+'0';
rez[i+j+1]=cif(rez,i+j+1)+c/10+'0';

if(rez[i+j-l]=='O')
rez[i+j-1]='\0';
else rez[i+j]='\0';

}
int main () {
char br1[MAX_SIZE],br2[MAX_SIZE];
char rez[MAX_SIZE];
printf("Unesite prvi broj: ");
gets(brl);
// okrecemo tako da su na poziciji 0 jedinice
okreni_str(brl);
printf ("Unesite drugi broj; ");
gets(br2);
// okrecemo tako da su na poziciji 0 jedinice
okreni_str(br2;)
zbir(&brl,&br2,&rez);
// vracamo rezultat da bismo ga ispisali
okreni_str(rez);
printf("Zbir brojeva je %s\n",rez);
proizvod(&brl,&br2,&rez);
// vracamo rezultat da bismo ga ispisali
okreni_str(rez);
printf ("Proizvod brojeva je %s\n" rez);
retura 0;

break;
break;
break;
break;

}
17.

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#define MAX_SIZE 100
int main() {
char* reci[]={"kruska",jabuka","malina","dud","banana","ananas,lubenica","kokos","kajsija","breskva};
char rec[50], korisnik_rec [50];
int dim_rec,i br_pok=l;
srand(time(0));
strcpy(rec,reci[rand()%10]);
dim_rec=strlen(rec);
for(i=0;i<dim_rec;i++)
*(korisnik_rec+i)= '*';
korisnik_rec[i]='\0';
printf("Diroenzija nepoznate reci je: %d\n",dim_rec);
while(l) {
char ch,*tmp=rec;
printf("%d:REC -> %s\n";br_pok,korisnik_rec);
printf("Unesite prvo slovo ");
fflush(stdin);
scanf("%c",&ch);
if(!isalpha(ch)) {
printf("Niste uneli slovo probajte ponovo! );
continue;

if(isupper(ch)) ch=tolower(ch);
while((tmp=strchr(tmp,ch))!=NULL) {
korisnik_rec[tmp-rec]=ch;
tmp+=l;

if(strcmp(rec,korisnik_rec)==0)
break;
br_pok++;

18.

}
printf("Pogodili ste rec %s u %d pokusaja!",korisnik_rec,br__pok);
return 0;

#include <stdio.h>
#include <stdlib.h>
int main(int argc,char** argv) {
int i;
if(argc==l) {
printf("Nema unetih reci!");
return 1;

for(i=l;i<argc,i++)
printf("%s\n",argv[i];
return 0;

}
19.

#inclue <stdio.h>
#include <stdlib.h>
int main(int argc,char** argv) {
int a,b;
if(argc < 3) {
printf("Nema dovoljno ulaznih parametara! ");
return 1;
}
a=atoi(argv[l]); // Funkcija atoi pretvara string u broj
b=atoi(argv[2]); // Nalazi se u stdlib.h
printf("Zbir unetih brojeva je: %d" a+b);
return 0;
}

20.

#include <stdio.h>
#include <string.h>
#define MAX_SIZ 100
void sort_str(char* niz_str[],int n) {
int i,j;
for(1=0;i<n-l;i++)
for (j=i+i;j<n;j++)

if(strcmpi(niz_str[i],niz_str[j])>0) {
char* tmp=niz_str[i];
niz_str[i]=niz_str[j];
niz_str[j]=tmp;
}

int main(int argc,char** argv) {


int i;
sort_str(argv,argc);
for(i=0;i<argc;i++)
puts(argv[i]);
retum 0;
}

21.

#include <stdio.n>
#include <string.h>
#define MAX_SIZE 100
int getline(char line [], int max_size) {
int dim;
char ch;
for(dim=0;dim<max_size-1 &&(ch=getchar()!=EOF && ch!='\n',-++dim)line[dim]=ch;
if(ch=='\n')
line[dim++]=ch;
line[dim] ='\0';
return dim;
}
//Funkcija koja pretvara mala slova u velika i velika c mala
void change(char* str) {
whlle(*str) {
if(isupper(*str)) *str=tolower(*str);
else if(islower(*str)) *str=toupper(*str);
str++;
}
}
int main(int argc,char **argv) {
char line[MAX_SIZE], *rec;
int br_line=0;
int dira_o;
if(argc < 3) {
printf("Nedovoljno ulaznih argumenata!");
return 1;
}
rec=argv[2];
dim_o=strlen(argv[1]);
i f ( a r g v [ l ] [ 0 ] | | dim_o==0 || dim_o>2 ) {
printf("Nisu korektno uneti opcioni argumenti!");
return 2;
}
while(getline(line MAX_SIZE)) {
br_line++;
*
switch(argv[l][1]) {
case 'n' : printf("%d : %s", br_line,line); break;
case 'x' : change(&line); puts(line); break;
case 't' :
if(strstr(line,rec)!=N0LL)
printf("%d : %s",br_line,line);
else printf("%d\n",br_line);
break;
default:
printf("Unet je pogresan opcioni argument\n");
return 3;
}
}
return 0;
}

Strukture i fajlovi
Strukture
structOsoba{
charime[20 ] ;
charprezime[20];
intgodiste;
char telefon[10];
};
struct Osoba pera, mika, zika;

Strukture koristimo kada opisujemo sloene pojmove, npr. osobu za koju navodimo dosta podataka poput imena, prezimena,
godita, telefona i drugih. Podaci mogu biti ugraenih tipova koji su razmotreni u prethodnim poglavljima ili nove strukture
sa svojim podacima.
Ovako definisane osobe pera, mika i zika imaju svoja imena, prezimena i ostale podatke koji su definisani u strukturi osoba,
a za pristup pojedinanim podacima koristi se taka, npr. mika.ime, pera.telefon ili zika.godiste. Ovo je prirodan nain jer
tano znamo kojoj osobi pripada koji detalj i ne postoji mogunost meanja.
Strukture takoe podravaju operator dodele kao i drugi tipovi, pa zato moemo da napiemo mika=zika. Takoe, moemo
dobiti adresu pomou operatora &. Strukture nadalje moemo da koristimo kao i sve druge ugraene tipove.
Strukture i typedef
Nepraktino je svaki put pisati struct Osoba kada treba da deklariemo neke nove promenljive tipa Osoba. Sreom postoji
elegantan nain da se to zaobie pomou typedef.
typedef struct {
char ime[20 ] ;
char prezime[20];
int godiste;
char telefon[10];
} Osoba;
Osoba pera, mika, zika

Fajlovi
Fajlovi su bitni u svakom programskom jeziku jer omoguavaju da trajno sauvamo vrednosti i time omoguimo kasniji
nastavak rada sa tim istim podacima. Zanimljiv primer je adresar koji ne bi bio praktian ako bismo pri svakom pokretanju
sve podatke ponovo unosili.
Fajl otvaramo funkcijom fopen koja nam vraa pokaziva na strukturu FILE. Sve ostale
funkcije za rad sa fajlovima koriste taj pokaziva umesto imena fajla. Sve funkcije
osim fopen vraaju int vrednost.
Mnoge funkcije za rad sa fajlovima (videti u tabeli) vraaju konstantu EOF (End Of
File) ukoliko nastane greka pri izvravanju ili ako se doe do kraja fajla.
Funkcija

fopen(ime, rezim)
fclose(f)
feof(f)
fseek(f, kol, odakle)
ftell(f)
ferror(f)
getc(f)
putc(znak, f)
fgetc(f)
fputc(znak, f)
fgets(f, kol., string)
fputs(string, f)
fscanf(f,maska,prom.)
fprintf(f,maska,prom.)
fflush(f)

opis
.
Otvaranje fajla datog imena. Reim "w"- pisanje, "r" - itanje, "a" - dodavanje
Zatvaranje fajla. (rezultat 0=uspeno, EOF neuspeno)
Ispitivanje da li je dolo do kraja fajla. (rezultat 0=nije kraj, >0 kraj)
Pozicioniranje.
Odakle: SEEK _SET od poetka, SEEK_CUR od trenutne pozicije i SEEK_END od kraja fajla
Trenutna pozicija u fajlu. (viaa int vrednost ili -1 za greku)
Ispitivanje greke u prethodnoj operaciji. (0=nema greke)
Citanje znaka iz fajla. (vraa int ili EOF u sluaju greke)
Upisivanje znaka u fajl. (isti karakter ili EOF u sluaju greke)
itanje znaka iz fajla. (isto kao getc)
Upisivanje znaka u fajl. (isto kao putc)
itanje stringa iz fajla. NULL ako nema vie podataka.
Upisivanje stringa u fajl. (vraa >0 ili EOF u sluaju greke)
itanje promenljivih iz fajla. Vraa broj proitanih znakova, negativnu vrednost za greku ili
EOF ako nema podataka.
Upisivanje promenljivih u fajl. Vraa broj upisanih znakova il negativnu vrednost u sluaju
greke
Pranjenje bafera. (0=uspeno, EOF neuspeno)

Tok je izvor ili odredite podatka, on se najee povezuje sa diskom, ekranom ili nekim drugim periferijskim ureajem. Tok
se povezuje sa fajlom ili ureajem tako to prvo otvori tok, a na kraju ga zatvori. Nakon svakog pokretanja programa,
automatski se otvaraju tri toka: stdin, stderr, stdout. Tok stdin se vezu za tastaturu, a stdout i stderr za ekran. Sledea dva
izraza su ekvivalentna:
printf (" Zdravo ! ") ; <=>
fprintf (stdout, " Zdravo!") ;
Funkcije system() i exit()
Funkcija system omoguava da izvrimo neku sistemsku funkciju poput npr. kopiranja ili brisanja fajla ili izrade
direktorijuma. Dobar primer je system( ''PAUSE'') koji zaustavlja rad programa dok korisnik ne pritisne neki taster.
Funkcija exit dovodi do prekida izvravanja programa. Ona zatvara sve fajlove otvorene pomou fopen. Kao indikator
naina zavretka programa mogu se koristiti vrednosti EXIT_FAILURE (nastala je greka) i EXIT_SUCCESS (normalan
zavretak programa).
Obe funkcije su definisane u stdlib.h.
Primeri
1. Napisati program Koji uitava ime, prezime godite dve osobei ispisuje podatke mlae.
#include <stdio.h>
typedef struct {
char ime[20];
char prezime[20] ;
int god;
} osoba;
int main() {
osoba o1,o2,m;
printf("Unesite ime i prezime prve osobe: ");
scanf ("%s%s",&o1.ime,&o1.prezime);
printf("Unesite godiste prve osobe: ");
scanf("%d", &o1.god);
printf("Unesite ime i prezime druge osobe: ");
scanf ("%s%s",&o2.ime,&o2 .prezime);
printf("Unesite godiste druge osobe: ");
scanf("%d", &o2.god);
m=o1.god > o2.god?o1:o2
printf("Ime i prezime: %s %s God.: %d\n", m. ime,m.prezime, m.god);
return 0;
}

2. Iz fajla out.txt uitati dva prirodna broja a i b i ispisati vrednost izraza ab


#include <stdio.h>
#include <stdlib.h.>
#include <math.h>
int main() {
FILE* tile;
int a,b;
if ((file=fopen( "C. \\out.txt","r") ) ==NULL) {
fprintf (stderr. "Greska pri otvaranju fajla");
exit (EXIT_FAILURE)
}
if(feof(file)) {
fprintf (stderr, "Podaci su nekorektno zapisani");
exit (EXIT_FAILUKE) ;
}
fscanf(file,"%d",&a);
fscanf (file, "%d",&b) ;
printf ("%d^%d = %. 01f ", a,b,pow(a,b));
fclose(file);
'
return 0;
}

3. Odrediti broj redova u tekstualnom fajlu ije ime unosi korisnik.


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
FILE* file;
char ime [100], ch;

int br_redova=0;
printf ("Unesite putanju do fajla: ");
scanf("%s", ime);
if((file=fopen(ime,"r")) ==NULL) {
fprintf(stderr,"Greska pri otvaranju fajla!");
exit(EXIT_FAILURE) ;
}
while((ch=fgetc(file))!=EOF)
if(ch= = ' \ n ' ) br_redova++;
printf("Broj redova u fajlu %s je %d\n", ime,br_redova) ;
fclose(file) ;
return 0;
}

4. Napisati program koji preko komandne linije prima putanju do dva fajla, i kopira sadraj prvog u drugi fajl bez brisanja
postojeih podataka u drugom fajlu.
I nain:
#include <stdio.h>
#inclue <stdlib.h>
#inclue <math.h>
int main(int argc,char **argv) {
FILE* in, *out;
char ch;
if(argc<3) {
fprintf(stderr, "Nema dovoljno argumenata!");
exit(EXIT_FAILURE) ;
}
in=fopen(argv[1] , "r") ;
out=fopen(arg [2],"a");
if(in==NULL || out==NULL) {
fprintf(stderr, "Greska pri otvaranju fajla!");
exit(EXIT_FAILURE);
}
while ( (ch=fgetc (in) ) ! =EOF)
fputc(ch,out);
fclose (in) ;
fclose (out);
return 0;
}

II nain:

#include <stdio.h>
#include <stdlib.h>
#define MAX_LINE 1000
int main(int argc,char **argv) {
FILE* in,*out;
char s[MAX_LINE];
if(argc<3] {
fprintf(stderr,"Nema dovoljno argumenata!");
exit (EXIT_FAILURE);
}
in=fopen(argv[1] , "r");
out=fopen(argv[2],"a");
if(in==NULL || out==NULL) {
fprintf(stderr,"Greska pri otvaranju fajla!");
exit (EXIT_FAILURE);
}
while (fgets (s,MAX_LINE, in) ! =NULL)
fputs(s,out);
fclose (in);
fclose(out);
return 0;
}

Zadaci:
1. Napisati program Koji omoguava izraunavanje rastojanja izmeu dve take, da li data prava prolazi kroz taku i povrinu
trougla odreenog sa tri take.
2. Uitati n osoba i ispisati ih sortirane alfabetskim redosledom po prezimenu.

3. Omoguiti da program moe da radi sa pravougaonicima. Pravougaonik je odreen ako su date dve take x I y gde je x donji
levi ugao, a y gornji desni ugao pravougaonika. Omoguiti izraunavanje obima, povrine i da li data taka z pripada
pravougaoniku. U glavnom programu se unosi niz pravougaonika, kao rezultat je potrebno ispisati koji pravougaonici sadre
taku z, ali tako da budu sortirani rastuim redosledom po povrini.
4. Napisati program koji prepisuje sadraj fajla u fajl g tako to svaki red ispisuje u fajl g zajedno sa njegovim rednim brojem.
5. U tekstualnom fajlu ije ime j dato preko argumenata komandne linije, odrediti najdui red i ispisati ga. Ukoliko se u fajlu
nalazi vie najduih redova, ispisati ih sve.
6. Napisati program koji omoguava da se uporedi sadraj dva fajla koji se unose preko komandne linije. Ukoliko su fajlovi
jednaki, program ispisuje da su dati fajlovi istovetni, a ako nisu, treba da ispie prvi red u kome se oni meusobno razlikuju.
7. Argumenti komandne linije su imena dve datoteke i prirodan broj n. Napisati program koji prvih n redova prve datoteke
upisuje na kraj druge datoteke. Pretpostaviti da redovi nisu dui od 100 znakova.
8. Napisati funkciju koja ifruje tekst u fajlu f Cezarovom ifrom i funkciju koja radi obmuto (deifruje tekst), i testirati ih u
glavnom programu.
9. Napisati program kojl preko komandne linije prima putanju do datoteke u kojoj se nalazi niz celih brojeva (svaki broj se
nalazi u posebnom redu ukupno in ima manje od 100). Potrebno je ispisati sve brojeve sortirane rastuim redosledom.
10. Napisati program koji iz fajla datum.txt uitava datume u obliku dd.mm.gggg. i ispisuje na ekran datume koji pripadaju
tekuoj godini (korisnik unosi koja je tekua godina)
11. Iz fajla koji se zadaje preko argumenata komandne linije uitati niz osoba (najvie 100) oblika: ime prezime godiste, i ispisati
na ekran samo osobe roene nakon 1980. godine.
12. U fajlu recnik.txt nalazi se n (pretpostavljamo da je n manje od 1000) rei sa odgovarajuim znaenjem (u svakom redu se
nalazi posebna re, a re i njeno znaenje odvojeni su razmakom). Napisati program koji omoguava ubacivanje nove rei u
renik, pronalazak znaenja date rei i ispis renika u fajl f, tako da su rei sortirane alfabetskim redosledom.
13. U fajlu studenti.txt nalazi se spisak studenata i osvojenih poena na kolokvijumima (svaki student je u posebnom redu, a
zapisani su u sledeem obliku: ime prezime index kolokvijuml kolokvijum2 ). Svaki kolokvijum nosi 50 poena. Student je
poloio ispit ako na svakom kolokvijumu ima vie od 24, a u zbiru vie od 55 poena. Program treba da u fajl rezultati.txt
upie one studente koji su poloili ispit, ali sortirane po opadajuem redosledu ukupnog broja poena.
14. U fajlu ije ime unosi korisnik nalaze se podaci o proizvodima koji se prodaju u supermarketu. Za svaki proizvod postoje
sledei podaci (redni_broj bar kod ime cena). Svaki proizvod je u posebnom redu i pretpostavlja se da ih nema vie od 1000.
Korisnik u glavnom programu unosi redne brojeve kupljenih artikala (najvie 500 artikala) i njihovu koliinu, a na ekran
treba da se ispiu podaci o kupljenim proizvodima i ukupna cena.
15. Napisati program koji iz fajla zadatog kao argument komandne linije uitava niz direktorijuma koje treba napraviti na lokaciji
koju unosi korisnik.
Napomena: Komanda za pravljenje direktorijuma je mkdir ime_direktorijuma.

Zadaci za vebu
16. Napisati program koji proverava da li su date tri take x, y, z kolinearne. Ako nisu, odreuje povrinu trougla koji formiraju
sredinjo take dui xy, yz, zx.
17. Omoguiti da program moe da radi sa trouglovima. Trougao je odreen ako su date koordinate svih njegovih temena.
Omoguiti izraunavanje obima, povrine trougla i da li data taka c pripada trouglu. U glavnom programu se unosi niz
trouglova, a kao rezultat je potrebno ispisati koji trouglovi sadre datu taku z (ukoliko je naveden opcioni argume: -a).
Ukoliko nije, treba pronai koji trougao ima najveu povrinu.
18. Unose se podaci o n knjiga (naslov, autor, ISBN, godina izdanja). U zavisnosti od opcija koje izabere korisnik, potrebno je
generisati sledee izvetaje:
za unetu godinu spisati sve autore koji su te godine izdali knjigu
za unetog autora ispisati sve njegove knjige
ispisati podatke o knjizi sa datim ISBN-om
za unet naslov knjige treba ispisati ime autora.
ispisati autora koji je date godine objavio najvie knjiga
21. Napisati program koji prepisuje sadraj fajla f u fajl g tako to svaku re ispisuje u posebnom redu.
22. Sifrovati tekst u fajlu f tako to se svako malo slovo zamenjuje velikim, a svaki razmak tabulatorom, i tako dobijen rezultat
upisati u fajl g.
23. Napisati program koji preko komandne linije prima putanju do fajla u kome se nalazi niz celih brojeva (brojevi su odvojeni
razmacima ukupno ih ima manje od 100). Potrebno je ispisati najvei broj i broj koji se najvie puta pojavio.
24. Napisati program koji izraunava sumu prirodnih brojeva zapisanih u datoteci ije ime unosi korisnik.

25. Napisati program koji iz fajla brojevi.txt uitava n velikih brojeva kao rezultat ispisuje najvei meu njima.
26. Program treba da olaka korisniku kopiranje fajlova. Kao argumenti komandne linije daju se putanje do dva fajla. U prvom
redu prvog fejla nalazi se putanja do direktorijuma gde su smeteni fajlovi koji se kopiraju. U ostalim redovima prvog fajla
nalazi se spisak imena fajlova za kopiranje (svaki fajl se nalazi u posebnom redu). U drugom fajlu je spisak lokacija u koje
treba kopirati fajlove iz prvog fajla, i to tako da prvom fajlu odgovara prva lokacija itd.
Reenja:
1.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct {
int x,y;
} tacka;
void ucitaj_tacku(tacka* t) {
printf("Unesi x koordinatu tacke "); scanf("%d",&t->x);
printf("Unesi y koordinatu tacke "); scanf("%d",&t->y);

}
double rastojanje(tacka tl,tacka t2) {
int dx=t2.x-t1.x,dy=t2.y-t1.y;
return sqrt (dx*dx+dy*dy) ;

}
int sadrzi_T (tacka t,int k,int n) {
if(t.y==k*t.x+n) return 1;
else return 0;

}
double p_trougla(tacka tl,tacka t2.tacka t3) {
//Povrsinu trougla racunamo pomocu Heronovog obrasca
double a=rastojanje(t1,t2),b=rastojanje(t2,t3);
double c=rastojanje(t1,t3);
double p = (a+b+c)/2;
return sqrt(p*(p-a)*(p-b)*(p-c));

int main () {
tacka t1,t2,t3;
double k,n;
printf("Prva tacka: \n");
ucitaj_tacku(&t1);
printf("Druga tacka \n");
ucitaj_tacku(&t2);
printf("Treca tacka \n");
ucitaj_tacku(&t3);
printf ("Rastojanje izmedju(%d, %d) i (%d,%d)",t1.x,t1.y, t2.x,t2.y);
printf(" je % 2.1f\n",rastojanje(t1,t2));
printf("Unesite podatke vezane za pravu (k,n): ");
scanf ("%1f%1f",&k,&n) ;
if(sadrzi_T(t1,k,n))
printf("Prava y=%.21fx+%.21f sadrzi tacku (%d,%d)\n", k,n,t1.x,t1.y);
else
printf("Prava y=%.21fx+%.21f ne sadrzi tacku (%d,%d)\n", k,n,t1.x,t1.y);
printf ("Povrsina trougla je %.21f\n",p_trougla(t1,t2,t3));
return 0;

2.

#include <stdio.h>
#include <stdlib.h>
#define MAX 100
typedef struct {
char ime [50];
char prezime [50];
int godiste;
} osoba;
void ucitaj_osobu(osoba* o) {
printf("Unesite ime osobe ");
gets(o->ime);
printf("Unesite prezime osobe : ");
gets(o->prezime);
printf("Koje godine je osoba rodjena: ");
scanf ("%d", &o->godiste);

void sort (osoba o [] , int n) {

int i,j;

!
for (i=0; i<n-1;i++)
for (j=i+1; j<n,j++)
*
if (strcmpi (o [i] .prezime o [j ] .prezime) >0) {

osoba tmp=o[i];
o[i]=o[j] ;
o [j] =tmp;

void ispisi_osobu (osoba o) {


printf("%s %s %d\n"', o.prezime, o. ime, o .godiste);

}
int main () {
int n,i;
osoba o [MAX];
printf("Unesite broj osoba (<100) ");
scanf ("%d",&n);
if(n>=100) {
fprintf (stderr, Uneli ste preveliko n!");
exit (EXIT_FAILURE);

}
for (i=0 ;i<n,-i++) {
fflush(stdin);
printf("Unesite %d. osobu\n",i);
ucitaj_osobu(&o [i]) ;

}
sort(o,n);
f or (i=0; i<n; i++)
ispisi_osobu(o[i]);
return 0;

3.

#include <stdio.h>
#include <stdlib.h>
typedef struct {
int x,y;
} tacka;
typedef struct {
tacka t1,t2;
} Pravougaonik;
int povrsina(Pravougaonik p) {
int a=p.t2.x-p.t1.x;
int b=p.t2 .y-p.t1.y;
return a*b;
}
int obim (Pravougaonik p) {
int a=p.t2.x-p.t1.x;
int b=p.t2.y-p.t1.y;
return (2*a+2*b);
}
int pripada(Pravougaonik p, tacka t) {
int b1=t.x>=p.t1.x && t.x<=p.t2.x;
int b2=t.y>=p.t1.y && t.y<=p.t2.y;
return (b1 && b2) ;

}
void ucitaj_tacku(tacka* t) {
printf ("Unesite x koordinatu: ") ; scanf ("%d", &t->x);
printf ("Unesite y koordinatu: "); scanf ("%d", &t->y);

}
void ucitaj_pravougaonik (Pravougaonik* p) {
printf("Unesite tacku u donjem levom uglu: \n");
ucitaj_tacku(&p->t1);
printf ("Unesite tacku u gornjem desnom uglu: \n");
ucitaj_tacku(&p->t2);

}
void ispisi_pravougaonik(Pravougaonik p) {
printf("Donji levi: (%d,%d) ",p.t1.x,p.t1.y);
printf("Gornji desni: (%d, %d) \n", p.t2.x, p.t2.y);

}
int main () {
Pravougaonik p[100],p1[100];
int i,j,n,dim=0;
tacka t;
printf ("Koliko pravougaonika ucitavate: );
scanf ("%d" , &n);
for (i=0;i<n;i++) {
printf ( " %d\n" , i);
ucitaj_pravougaonik(&p[i]);

}
printf("Unesi tacku : ");
ucitaj_tacku(&t);
for (i=0; i<n; i.++)

if (pripada (p [i] , t) ) p1[dim++] =p [i] ;


for(i=0;i<dim-l;i++)
for(j=i+1; j<dim;j++)
if(povrsina(p1[i]) < povrsina(p1[j])) {
Pravougaonik t=p1[i]; p1[i]=p1[j]; p1[j]=t;

}
for (i=0;i<dim; i++)
ispisi_pravougaonik(p1[i]);
return 0;

4.

#include <stdio,h>
#include <stdlib.h>
#define MAX 1000;
int getline (FILE *f,char line []) {
int i=0;
char ch;
while((ch=fgetc(f))!=E0F && ch!='\n')
line[i++]=ch;
if(ch==' \n') line[i++]=ch;
line [i] ='\0';
retum i;

}
int main() {
char f_ime [50] ,red[100] ,g_ime[50];
int br_reda;
FILE* f, *g;
printf("Fajl iz koga kopiramo sadrzaj: ");
gets(f_ime);
printf ("Fajl u koji kopiramo sadrzaj: ");
gets(g_ime);
\
f=fopen(f_ime, "r" );
'
g=fopen(g_ime,"w");
if(f==NULL || g==NULL) {
fprintf(stderr,"Greska pri otvaranju fajlova!");
exit (EXIT_FAILURE);

}
br_reda=0;
while(getline(f,&red) > 0)
fprintf(g,"%d: %s",br_reda++,red) ;
fclose(f);
fclose(g);
return 0;

5.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int getline(FILE *f, char line[]) {
int i=0;
char ch;
while [ (ch=fgetc (f) ) !=E0F && ch! = '\n')
line [i++] =ch;
if(ch=='\n') line[i++] =ch;
line [i] =' \0';
return i;

}
void obrisi(char* max[100],int n) {
int i;
for (i=0; i<n; i++)
max[i]= '\0';

}
int main (int argc char"* argv) {
FILE* f;
char max_[100] [100];
char lin[100];
int max=0,br=0,m,i;
if( argc < 2 ) {
fprintf(stderr,"Nema dovoljno argumenata!");
exit (EXIT_FAILURE)

}
if((f=fopen(argv[1],"r"))==NULL) {
fprintf (stderr. "Greska pri otvaranju fajla!");
exit (EXIT_FAILURE);

}
whilei(m=getline(f,lin)) > 0 ) {
if(m==max)
strcpy(max_[br++] ,&lin) ;

else if (m>max) {
max=m;
obrisi(&max,br);
br=0;
strcpy (max_[br++], &lin);

}
}
printf("Najduzi red ima %d znakova \n", br);
printf("To su: \n");
for (i=0 ;i<br;i++)
printf ("%s\n", max_ [i] );
return 0;

6.

#include <stdio.h>
#inclue <stdlib.h>
#include <string.h>
#define MAX 1000;
int getline(FILE *f, char line[]) {
int i=0;
char ch;
while( (ch=fgetc(f) ) !=E0F && ch! = '\n')
line[i++]=ch;
if(ch== '\n' )
line [i++] =ch;
line [i] =' \0 ';
return i;

}
int main(int argc, char** argv) {
char red1 [100] red2 [100];
FILE* f, *g;
if(argc < 3 ) {
fprintf(stderr,"Nema dovoljno argumenata!");
exit (EXIT_FAILURE)

}
f=fopen(argv[1],"r");
g=fopen(argv [2] , "r");
if(f==NULL || g==NULL) {
fprintf(stderr, "Greska pri otvaranju fajlova!");
exit (EXIT_FAILTTRE)

}
while(1) {
int br1, br2;
br1=getline(f ,&red1);
br2=getline[g, &red2);
if(br1==0 || br2==0) {
if (brl !=0) {
printf ("Fajl 1 je duzi!");
exit (EXIT_SUCCESS);

if (br2 !=0) {
printf("Fajl 2 je duzi!");
exit (EXIT_SUCCESS) ;

}
break;

}
if(strcmp(&red1,&red2, != 0) {
printf ("Fajlovi se razlikuju! \n");
printf("Fajl 1 : %s\n", red1);
printf("Fajl 2 %s",red2);
exit (EXIT_ "SUCCESS) ;

}
}
printf ("Fajlovi su identicni");
exit (EXIT_SUCCESS);

7.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int getline (FILE *f, char line [] ) {
int i=0;
char ch;
while((ch=fgetc(f)) !=EOF && ch!= ' \n')
line[i++]=ch;
if(ch=='\n') line[i++]=ch;
line [i] = '\0';

return i;
int main(int argc,char** argv) {
FILE* f.*g;
char red[100] ;
int n;
if(argc < 4 ) {
fprintf(stderr. "Nema dovoljno argumenata!");
exit (EXIT_FAILURE) ;

f=fopen(argv[1],"r");
g=fopen(argv[2],"a");
if(f= =NULL || g==NULL) {
fprintf(stderr,"Greska pri otvaranju fajlova!");
exit (EXIT_FAILURE) ;

n=atoi(argv [3]);
while(n--) {
if(!getline(f, red) > 0) break;
fprintf(g,"%s", red)

exit (EXIT_SUCCESS);

8.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void sif_cezar(FILE* f, FILE* o,int k) {
int pom,ch;
while( (ch=fgetc (f) ) !=EOF) {
if (isalpha(ch)) {
pom=isupper(ch)? 'A': 'a';
ch=(ch-pom+k) %26+pom;

}
fputc (ch, o) ;

void desif_cezar(FILE* f,FILE* o,int k) {


int pom, ch;
while((ch=fgetc(f) )!=EOF) {
if(isalpha (ch)) {
pom=isupper (ch) ? 'A': ' a';
ch= (ch-pom-k) %26+pom;

fputc (ch, o) ;

int main() {
FILE* in., * out;
char* f_ime="C:\\in.txt" , *out_ime="C:\\out.txt";
if ( (in=fopen (f_ime, "r ")) ==NUL {
fprintf (stderr, "Greska pri otvaranju fajla in.txt");
exit (EXIT_FAILURE);
if((out=fopen(out_ime,"w"))==NULL) {
fprintf(stderr, "Greska pri otvaranju fajla out.txt");
exit (EXIT_FAILURE) ;

9.

sif_cezar(in,out,3);
desif_cezar (out, in, 3);
exit(EXIT_SUCCESS);

#include <stdio.h>
#include <stdlib.h>
void sort(int* a,int dim) {
int i, j;
for(i=0; i<dim-l;i++)
for (j=i+l; j <dim; j++);
if (a[i] > a[j]) {
int tmp=a[i];
a[i] =a [ j ] ;
a [j] =tmp;

}
}
int main(int argc, char** argv) {
int niz [100],br=0,i;
char s [50] ;
FILE* f;
if(argc<2) {

fprintf(stderr,"Nema dovoljno argumenata!");


exit (EXIT_ FAILURE) ;

}
if ((f=fopen (argv[l] , "r" ) ==NULL) {
fprintf (stderr, "Greska pri otvaranju fajla");
exit (EX IT_FAILURE);

}
while((fgets(s,51,f)) !=NULL)
niz[br++]=atoi(s);
sort(niz,br);
for (i=0;i<br,-i++)
printf ("%4d ",niz[i]);
printf("\n");
exit(EXIT_SUCCESS) ;

10.

#include <stdio.h>
#include <stdlib.h>
int main() {
char* f_ime="C:\\datum.txt"; c
char datum[15] ;
FILE* f;
int godina;
printf("Unesite tekucu godinu: ");
scanf ("%d" , &godina) ;
if ( (f=fopen (f_ime "r"))==NULL) {
fprintf(stderr,"Greska pri otvaranju fajla");
exit (EXIT_FAILURE);

}
while ( (fgets (datum, 15, f) ) =NULL) {
int f_god=atoi(datum+6);
if(f_ 3d==godina) fprintf(stdout, "%s\n", datum);

}
exit (EXIT_SUCCESS) ;

11.

#include <stdio.h>
#include <stdlib.h>
typedef struct {
char ime[50];
char prezime[50];
int godiste
} Osoba;
void ispisi_osobu(Osoba o) {
printf('Ime : %s Prezime: %s Godiste: %d\n",o.ime,o.prezime,o.godiste);

}
int main(int argc, char** argv) {
FILE* f;
int br=0;
Osoba o[100];
if(argc<2) {
fprintf (stderr, "Nema dovoljno argumenata! ) ;
exit (EXIT_FAILURE);

}
if((f=fopen(argv[1],"r")]==NULL) {
fprintf(stderr, "Greska pri otvaranju fajla! ");
exit (EXIT_FAILURE);

while( fscanf(f,"%s %s %d", &o[br].ime, &o[br] .prezime, &o [br] godiste)>0) {


if (o [br] .godiste > 1980] ispisi_osobu (o [br]) ;
br++

}
}

12.

exit(EXIT_SUCCESS)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
tvpedef struct {
char rec[50];
char znacenj e[50];
} Recnik;
void upisi_u_fajl(Recnik r[],int n) {
FILE* out;
int i;
char out_ime[50];
printf("Unesite putanju do izlaznog fajla: \n");

gets(out_ime);
if ( (out=fopen (out_ime, "w") ) ==NULL) {
fprintf (stderr, "Greska pri otvaranju fajla");
exit (EXIT_FAILURE);

for (i=0; i<n; i++)


fprintf(out,"%s %s\n",r[i].rec,r[i].znacenje);
fclose(out);

void sort (Recnik r[], int n) {


int i, j;
for(i=0;i<n-1;i++)
for(j=i+l;j <n;j++)
if (strcmpi (r [i].rec,r[j].rec)>0) {
Recnik tmp=r[i]; r[i]=r[j]; r[j]=tmp;
int main() {
FILE* in;
Recnik r[1000];
int n=0,i;
char ch= d, *in_ime="C:\\recnik.txt";
if((in=fopen(in_ime,"r"))==NULL) {
fprintf(stderr, "Greska pri otvaranju fajla");
exit (EXIT FAILURE) ;

while(fscanf(in,"%s %s",&r[n].rec,&r[n].znacenje)!=EOF)
n++;
fclose(in) ;
if((in=fopen(in_ime,"a"))==NULL) {
fprintf(stderr, "Greska pri otvaranju fajla");
exit (EXIT_FAILURE)

do {
int izbor, p=0;
char rec[50], znacenje [50] ;
printf("Meni:\n");
printf('l. Ubaciti novu rec u recnik\n");
printf("2. Pronaci znacenje reci\n");
printf("3. Ispis recniika (sort) u fajl \n");
printf(" Unesite vas izbor:: (1,2 3)\n");
scanf (%d, &izbor) ;
fflush(stdin);
switch(izbor) {
case 1:
printf('Rec koju ubacujete u recnik: \n") ;
gets (rec) ;
printf ("Unesite njeno znacenje:\n");
gets (znacenje);
fprintf(in,"%s %s\n",rec znacenje);
break;
case 2:
printf(Rec cije znacenje trazite \n");
gets (rec);
for (i=0; i<n; i++)
if (strcnpi (rec, r [i]. rec)==0) {
printf(Znacenje reci %s je %s\n", rec,r[i].znacenje);
p=l;
break;

if(!p) printf(Rec nije pronadjena\n");


break;
case 3:
sort (r, n);
upisi_u_fajl (r, n);
break;
default:
printf ("Pogresili ste pri unosu opcije\n");
continue ;

printf("Da li zelite jos neku opciju? (d\\n)\n");


fflush(stdin);
scanf("%c", &ch);
} while(ch== d || ch==D);
exit (EXIT_SUCCESS);

13.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char ime [50] ;

char prezime[50] ;
char index[10] ;
int kol1;
int kol2;
int ukupan_br_poena;
} Student;
void sort (Student s[],int n) {
int i,j;
for(i=0; i<n-l;i++)
for(j =i+l j<n;j++)
if(s[i] .ukupan_br_poena < s[j].ukupan_br_poena) {
Student tmp=s[i];
s [i] =s [j ] ;
s [j] =tmp;

}
}
int main() {
FILE* f_stud;
Student stud[1000];
int n=0,i;
char* f_ime="C: \\studenti . txt" ;
if ( (f_stud=fopen (f_ime, "r") ) ==NULL) {
fprintf( (stderr,"Greska pri otvaranju fajla!");
exit (EXIT_FAILURE) ;

}
while(fscanf (f_stud, "%s %s %s %d %d", stud[n].ime,
&stud[n].kol1,&stud [n].kol2) !=EOF) {
stud[n],ukupan_br_poena=stud[n].kol1+stud[n].kol2;
n++:

&stud[n].prezime,

&stud

[n].index,

fclose(f_stud);
f_ime="C:\\rezultati.txt"
if ((f_stud=fopen(f_ime,"w"))==NULL) {
fprintf(stderr, "Greska pri otvaranju fajla!");
exit(EXIT_FAILURE);

sort(stud,n);
for(i=0;i<n;i++) {
if (stud[i].ukupan_br_poena > 55 && stud[i].kol1>=25 && stud[i].kol2>=25)
fprintf(f_stud,"%s %s %s %d %d %d\n", stud[i].ime,stud[i].prezime,stud[i].index,stud[i].kol1,stud[i].kol2,
stud[i].ukupan_br_poena);

exit (EXIT_SUCCESS) ;

14.

#include <stdio.h)
#include <stdlib.h)
#include <string.h>
typedef struct {
int r_broj;
char bar_kod[10];
char ime[20];
int cena;
int kol;
} Proizvod;
int main() {
Proizvod p [1000], kupljeni [1000];
FILE* f;
char f_ime[50];
int n=0, ukupna_cena=0
int i,dim=0;
printf("Uneti putanju do fajla sa podacima: \n");
gets(f_ime);
|
if((f=fopen(f_ime,"r"))==NULL {
fprintf(stderr,"Greska pri otvarnju fajla!");
exit (EXIT_FAILURE) ;

}
while(fscanf(f,"%d %s %s %d", &p[n].r_broj, &p [n].bar_kod, &p[n].ime, &p[n].cena ) !=E0F) p[n++].kol=l;
while(1) {
int rbr, kol;
printf("Unesite redni broj proizvoda ili 0 za kraj: ");
scanf("%d", &rbr);
if(rbr==0) break;
printf(" Unesite kolicinu: ");
scanf("%d", &kol);
for(i=0;i<n;i++)
if (p[i].r_broj==rbr) {
kupljeni [dim] =p [i] ;
kupljeni [dim++].kol=kol;

}
}
for(i=0;i<dim;i++) {
int cena=kupljeni [i].cena*kupljeni[i].kol;
printf("Proizvod:%s Kolicina: %d Cena %d\n", kupljeni[i].ime,kupljeni[i].kol,cena);
ukupna_cena+=cena;

}
}

15.

printf("UKUPNO: %d\n", ukupna_cena);


exit (EXIT_SUCCESS) ;

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char** argv) {
char putanja[50] ;
char komanda[200];
char ime_dir[50];
FILE* f;
if(argc < 2) {
fprintf(stderr,"Nema dovoljno argumenata");
exit (EXIT_FAILURE) ;

}
printf("Putanja gde treba napraviti direktorijume:\n");
gets (putanja);
if ((f=fopen(argv[l] ,r))==NULL) {
fprintf (stderr, "Greska pri otvaranju fajla!");
exit (EXIT_FAILURE);

}
while((fgets(ime_dir, 50, f) ) !=NULL) {
komanda[0]='\0';
strcat (komanda, "mkdir ");
strcat(komanda,putanja);
strcat (komanda, "\\");
strcat (komanda, ime_dir);
system(komanda);

}
return 0;

You might also like