You are on page 1of 195

, 2013.

, ,

, ,

(MASSVision)

Gaji,

250

8.

ISBN 978-86-7982-149-2
CIP
,
004.42 (075.8) (076)
004.432.2C (075.8) (076)
, , 1965 C :

1 /
, ,
. - 8. . - :

, 2013 ( :
). 189 . : . ; 25 cm
+ 1 (CD-ROM)
50. : . 189.
ISBN 978-86-7982-149-2
1. , , 1966 - [] 2. ,
, 1972 - []
) b)
C
COBISS.SR-ID 203698700


_____________________________________________

,

.
Dennis Ritchie 1972. ,
. .
o UNIX ,
.
.
,
. ANSI C,
1988.

:

, ,
.
.
.

,
(++, C#, Java).
,
, .

()
, .
(
, )
,
.

.
,
.
, ,
(
).

, , .
.
,
,
, .

.
,
.
:
1. ( ).
,
.
2. ( ).
3. ( )
, .
4. .
, 2013.


_____________________________________________
1.

2.

3.

23

4.

37

5.

53

6.

69

7.

87

8.

103

9
.

119

10.

135

155

181

183

189

1.


_____________________________________________
primer1_1
1:
2:
3:
4:
5:
6:
7:
8:
9:

/
primer1_1.c
/
/
Prikaz na ekranu jedne linije fiksnog teksta
/
#include <stdio.h>
main( )
{
printf(\nPozdrav\n\n);
}

primer1_1
.
.
1. 2. /
/. .
, .
, .
:

/linijski komentar/

/blokovski
komentar/
(
).
: //pogresno napisan komentar//
.
3. 5. .
.
, .
, .
4. je #include <stdio.h>,
stdio.h,
include, .
/ ( /).
6. main,
(
).
( )
main.
, ,
.
main (

), ,
.
( )
, {
7. , } 9. .
( printf() )
, 8. printf()
stdio.h. , ,
,
printf(). :
a ,
, ( ),
(
),

( ),
(\n)
(\t ), 2.
,

(\\ e \, \
, 2. ).
, printf() 8. :
1. (\n),
2. Pozdrav,
3. (\n\n), DOS
, (Press any key to continue),
( 1.1).

1.1 primer1_1

primer1_2
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:

/
primer1_2.c
/
/
Vise poziva funkcije printf(), prikaz na ekranu jedne linije teksta
/
#include <stdio.h>
main( )
{
printf("\nDobrodosli ");
printf("u jezik C\n\n");
}

primer1_2
,
printf() ( 8. 9.), je
.
printf() \n.
, 8. ,
, Dobrodosli ,
9., , u jezik C,
( 1.2).

1.2 primer1_2

primer1_3
1:
2:
3:
4:
5:
6:
7:
8:
9:

/
Primer1_3.c
/
/
Jedan poziv finkcije printf(), prikaz na ekranu vise linija teksta
/
#include <stdio.h>
main( )
{
printf("\nDobrodosli\n\n\tu jezik C\n\n");
}

primer1_3
,
, printf() (
8.). , .
Dobrodosli,
(
), u jezik C
( 1.3).

1.3 primer1_3

primer1_4
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:

/
Primer1_4.c
/
/
Prihvatanje imena od korisnika i prikaz na ekranu licnog pozdrava
/
#include <stdio.h>
#define MAX 30
main( )
{
char ime[MAX];
printf("\nVase ime?\n\n");
gets(ime);
printf("\nZdravo %s, dobrodosli u jezik C.\n\n", ime);
}

primer1_4

( ) .
, , ,
. ,
.
5. #define,
. #define MAX 30
MAX 30.
MAX,
,
(
).
9. ime MAX (30)
( char).
[ ].
, , .
11., printf(),
( 1.4 )).
gets() ( stdio.h) ,
12., ( ),
( NTER)
, ime.
,
.
14., printf(),
Zdravo, (%s)
ime, , %s ,
dobrodosli u jezik C. ( 1.4 )).
, printf():

, ,
(\ )
(% ),
( ,
,...),

,
, .

1.4 ) primer1_4 ( )

1.4 ) primer1_4 ( )


 ,
. ,
,
.


 (Warnings) - ,
.
,
.
 (Errors) - ,
.
( )
.
.

1.
_____________________________________________
1.
:
#include stdio.h
main( );
{
printf( \nResenja zadataka doneti na )
printf( laboratorijske vezbe\n );
}

2.
,
? .

3.

printf() :
Prva recenica.
Druga recenica.
Treca recenica.

1.
_____________________________________________
1.
, , ,
, 1.

2.
1.
. , ,
.

3.
:
a) #include <stdio.h> main() {printf(\nPozdrav);}
) #include<stdio.h>
main() {printf(\nPozdrav);}

4.
:
) printf()
,
) printf()
,
) .

2.


_____________________________________________
primer2_1
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:

/
primer2_1.c
/
/
Prikaz na ekranu velicina osnovnih tipova podataka u bajtovima
/
#include <stdio.h>
main( )
{ printf("\nchar\t\tzauzima\t%d B memorije", sizeof(char));
printf("\nunsigned char\tzauzima\t%d B memorije",sizeof(unsigned char));
printf("\nint\t\tzauzima\t%d B memorije", sizeof(int));
printf("\nunsigned int\tzauzima\t%d B memorije", sizeof(unsigned int));
printf("\nlong\t\tzauzima\t%d B memorije", sizeof(long));
printf("\nunsigned long\tzauzima\t%d B memorije",sizeof(unsigned long));
printf("\nfloat\t\tzauzima\t%d B memorije", sizeof(float));
printf("\ndouble\t\tzauzima\t%d B memorije.\n\n", sizeof(double));
}

primer2_1

(
: char, unsigned char, int, unsigned int, long,
unsigned long, float double).
7., printf(), :
: \n,
: char,
: \t\t,
, \t: zauzima,
: \t,
%d,
sizeof() char,
char,
: B memorije.
char : char
zauzima 1 B memorije
( 2.1).
printf(), 8. 14.
.
2.1 32 ( 16-
int (2 4) unsigned int (2 4).
: char
unsigned char, int unsigned int, long unsigned long.

10

unsigned
, unsigned
( ).
3. :
, .

2.1 primer2_1

primer2_2
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:

/
primer2_2.c
/
/
Prikaz na ekranu zadatg celog broja u raznim oblicima
/
#include <stdio.h>
main( )
{
int x;
printf("\nUnesite ceo broj:\t");
scanf("%d", &x);
printf("\nDecimalni oblik:\t%d",x);
printf("\nOktalni oblik:\t\t%o",x);
printf("\nHeksadecimalni oblik:\t%x (%X)\n\n",x,x);
}

primer2_2
,
.
, .
,
. ,
7 int., .
, .
( )
( ).
,
. ,

11

x int 4 (
).
, 9. ,
( 2.2 )).
10.
(%d)
, (&x).
12., 13. 14.
(x) (%d), (%)
, (%x) (%X)
( 2.2 )).

, 4. 5. .

2.2 ) primer2_2 ( )

2.2 ) primer2_2 ( )

primer2_3
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:

12

/
primer2_3.c
/
/
Prikaz na ekranu zadatog realnog broja u raznim oblicima
/
#include <stdio.h>
main( )
{
double x;
printf("\nUnesite jedan realan broj: ");
scanf("%lf", &x);
printf("\nOblik sa decimalnom tackom:\t%f",x);
printf("\nOblik sa eksponentom:\t\t%e",x);
printf("\nJednostavniji oblik:\t\t%g\n\n",x);
}

primer2_3

(
). x double
( 7.).
, 9. ( 2.3 )),
("%lf)
x (&x).
12., 13. 14.
(x) (%f), (%e)
(%g) ( 2.3 )).

2.3 ) primer2_3 ( )

2.3 ) primer2_3 ( )

primer2_4
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17

/
primer2_4
/
/
Razliciti nacini prikaza na ekranu zadatog broja
/
#include <stdio.h>
main( )
{
const int x = 999;
const double y = 1.2345;
printf("\nCeo broj:\n\n");
printf("%10d\n", x);
printf("%-10d\n", x);
printf("\nRealan broj:\n\n");
printf("%10f\n", y);
printf("%-10f\n", y);
printf("%10.2f\n", y);
printf("%.2f\n", y);
}

13

primer2_4
( )
const ( 5. 6.).
(
) (
.)
printf()
% ,
:
( char, int long),
( 3
3),
( float double),

(6 ).
printf() %
. .
9. 10. ( 2.4) 999:
9. (10)
, (%10d)
(
(%010d)),
10. (10)
(%-10d).
13., 14., 15. 16. ( 2.4)
1.2345 :
13. (10) ,
( ),
(6) (%10f),
14. (10) ,
( -),
(6) (%-10f),
15. (10) ,
( ),
(%10.2f),
16.
, (%.2f ).

2.4 primer2_4

14

primer2_5
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:

/
primer2_5.c
/
/
Zamena vrednosti dva zadata cela broja
/
#include <stdio.h>
main( )
{
int a, b, temp;
printf("\nUnesite dva cela broja: ");
scanf("%d%d", &a, &b);
printf("\nPre zamene:\ta=%d, b=%d", a, b);
temp = a;
a = b;
b = temp;

/temp - pomocna promenljiva/


/koja se koristi pri razmeni/
/vrednosti a i b/

printf("\nPosle zamene:\ta=%d, b=%d\n\n", a, b);


}

primer2_5
.

,
. 7. a b ,
(temp) .
, .
, 9. ( 2.5 )),
scanf() ,
(Space, Tab Enter)
a b (& &b).
.
, -,
( 10.) : scanf("%d;%d", &a, &b);
( 12.)
( 14. 16. ), ( 18.)
( 2.5 )) . :
temp a,
b, b
, temp.

2.5 ) primer2_5 ( )

15

2.5 ) primer2_5 ( )

primer2_6
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:

/
primer2_6.c
/
/
Izracunavanje obima i povrsine
/
/
kruga zadatog poluprecnika
/
#include <stdio.h>
#define PI 3.14159
main( )
{
int r, obim, povrs;
printf("\nUnesite vrednost poluprecnika (ceo broj: 0..10): ");
scanf("%d", &r);
obim = (int) (2 * r * PI);
povrs = (int) (r * r * PI);

/celobrojni deo vrednosti obima/


/celobrojni deo vrednosti povrsine/

printf("\nObim kruga je %d", obim);


printf("\nPovrsina kruga je %d\n\n", povrs);
}

primer2_6
,
PI..
6. #define
PI,
3.14159.
, ,

. ,
const.
9.
(r), (obim povrs).
, 11. 12. ( 2.6 ))
( 14.) ( 15.). 14.
(int),
(2 * r * PI) int .

16

obim, .
, 15.
,
, .
17. 18. ( 2.6 )).

2.6 ) primer2_6 ( )

2.6 ) primer2_6 ( )

primer2_7
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:

/
primer2_7.c
/
/
Izracunavanje Celsius-ovog ekvivalenta zadatom Fahrenheit-u
/
/
Celsius = (5/9) ( Fahrenheit-32) /
#include <stdio.h>
main( )
{
int temp;
double fahr, celsius;
printf("\nUnesite T u stepenima F (ceo broj: 0..300): ");
scanf("%d", &temp);
fahr = (double)temp;
/konverzija celobrojnog u realni tip/
celsius = (5.0 / 9.0) (fahr - 32.0);/da bi svi operandi bili istog tipa/
printf("\n%d F %.2f C\n\n", temp, celsius);
}

primer2_7
Celsiusov
Fahrenheitu.

: temp (
8.) :
Fahrenheitu (fahr) Celsiusu (celsius), 9.

17

,
11. 12. ( 2.7 )),
( double) oe
fahr ( 14.). 15.
Celsiusov

(elsius). ( 14.) je
, 15., (
).
(5.0, 9.0 32.0).
16. ( 2.7 b))
(temp) (%d)
Celsiusu (celsius), (%.2f).

2.7 ) primer2_7 ( )

2.7 ) primer2_7 ( )



. .
 ,
.

, , .


 / ,
temp, Temp TEMP .
 ( )
( 1. ).

, -1, .
 unsigned ,
, .

, .
 K #define
, .
18

2.
_____________________________________________
1.
,
, , ,
:
Decimalni oblik unetog broja je:
Oktalni oblik unetog broja je:
Heksadecimalni oblik unetog broja je:

2.
,
, , :
) ( 10
),
) ,
) .

3.
scanf()
: 1:23:456 ( ),
a, b c 1, 23 456, .

19

4.
:
#include <stdio.h>
main( )
{
int x, y, z;
scanf(%2d%3d%2d, &x, &y, &z);
printf(%d %d %d, x, y, z);
}
:

123

456

789?

5.
a = 555
printf(), (
10):
) /
) /555

20

555/
/

2.
_____________________________________________
1.
primer2_1.c,
.

2.
,
, :
) ,
10,
) ,
10, ,
) ,
10, .

3.
,
, :
) ,
) 4 10,
,
) 2 10,
.

4.

printf() : , ASCII
, .

5.

scanf() ,
( ).

21

22

3.
,

, ,


: if
if: if..lse else

23


_____________________________________________
primer3_1
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:

/
primer3_1.c
/
/
Primen unarnog aritmetickog operatora dekrement
/
#include <stdio.h>
main( )
{
int a = 3, b = 3;
printf("\n a
printf("\n %d
printf("\n %d
printf("\n %d

b \n");
%d", a--, --b);
%d", a--, --b);
%d \n\n", a--, --b);

/a se koristi i dekrementira/
/b se dekrementira i koristi/
/kod sva tri poziva funkcije printf()/

primer3_1
6. .
. (--)
1.
7. a b
( ).
. int a = b = 3;
.
10. 12.
( 3.1).
a.
, ( a-).
b.
, ( b).
,
1 ( (a++) (++b)).

3.1 primer3_1

24

primer3_2
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:

/
primer3_2.c
/
/
Izracunavanje brojeva sati, minuta i sekundi u zadatom broju sekundi
/
/
(primena aritmetickog operatora ostatak deljenja) /
#include <stdio.h>
#define SEKUNDI_U_MINUTI 60
#define SEKUNDI_U_SATU 3600
main( )
{
unsigned int sekunde, minute, sati, sekunde_ostatak, minute_ostatak;
printf("\nUnesite broj sekundi (ceo broj < 65000): ");
scanf("%d", &sekunde);
sati = sekunde / SEKUNDI_U_SATU;
minute = sekunde / SEKUNDI_U_MINUTI;
minute_ostatak = minute % SEKUNDI_U_MINUTI;
sekunde_ostatak = sekunde % SEKUNDI_U_MINUTI;
printf("\n%u sekundi je isto sto i %u sati,",sekunde, sati);
printf("%u minuta i %u sekundi\n\n",minute_ostatak, sekunde_ostatak);
}

primer3_2
.
, (/)
(%).

. :
7/4 , 1.
7.0/4, 7/4.0 7.0/4.0 , 1.750000,
.
: int a = 7, b = 4;
a/b , ,
(float)a/b, a/(float)b (float)a/(float)b
( o a).
7%4 7 4, 3.
,
( 6. 7.),
.
,
. ( 3.2 ))
(sekunde) :
(sati) 3600
( 15.),

25

(minute)
60 ( 16.),
(minute_ostatak)
60 ( 17.),
(sekunde_ostatak)
60 ( 18.).
( 3.2 )).

3.2 ) primer3_2 ( )

3.2 ) primer3_2 ( )

primer3_3
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:

/
primer3_3.c
/
/
Prikaz na ekranu rezultata izraza sa relacijskim i logickim operatorim
/
#include <stdio.h>
main( )
{
int x, a = 5, b = 6, c = 5, d = 1;
x = a<b || a<c && c<d;
printf("\nx = a<b || a<c && c<d");
/&& ima veci prioritet od ||/
printf("\nBez zagrada izraz ima vrednost\t%d\n\n",x);
x = (a<b || a<c) && c<d;
printf("\nx = (a<b || a<c) && c<d");
/zagrade menjaju prioritet/
printf("\nSa zagradama izraz ima vrednost\t%d\n\n",x);
}

primer3_3
6. .
, .
, a+b/2 (a+b)/2 .

26


(<)
(|| &&).
: == (), != (
), < (), <= ( ), > (), >= (
). ( a < b)
: 1 (true), 0
(false) .

. (&&) 1 (true)
, (||) 1 (true)
, (!) 1 (true)
.
.
( 10.),
( 11.), ( 3.3)
, ( 14. 15.).
, 7. (int x, a=5,
b=6, c = 5, d = 1;):
9. x
=
a<b ||
a<c &&
c<d
x
=
5<6 ||
5<5 &&
5<1
x
=
1
||
0
&&
0
x
=
1
||
0
x
=
1
13. x
x
x
x
x

=
=
=
=
=

(a<b ||
(5<6 ||
(1
||
1
0

a<c) &&
5<5) &&
&&
0)
&&

c<d
5<1
0
0

,

.

3.3 primer3_3

27

primer3_4
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:

/
primer3_4.c
/
/
Provera i izmena vrednosti odredenog bita u zadatom podatku
/
/
(maskiranje i promena vrednosti na nivou bita) /
#include <stdio.h>
main( )
{
unsigned short x, n;
printf("\nUnesite jedan pozitivan ceo broj u heksadecimalnom obliku");
printf("\n(Opseg broja: do 0xffff):\t");
scanf("%x",&x);
printf("\nUnesite redni broj bita koji se ispituje (od 1 do 16): ");
scanf("%d",&n);
if(x & (1 << (n-1))) /ako bit sa rednim brojem n ima vrednost 1/
printf("\n%d. bit zadatog podatka ima vrednost 1\n",n);
else
printf("\n%d. bit zadatog podatka ima vrednost 0\n",n);
x ^= (1 << (n-1));

/menja se vrednost bita sa rednim brojem n/

printf("\nVrednost %d. bita zadatog podatka je promenjena\n",n);


printf("\nNova vrednost zadatog podatka je: %#x\n\n",x);
}

primer3_4
.
( (~), (<<)
(>>)) ,
( (&),
(|) (^))
(
, ).

, if.
. if
( ) .
if , (
) ( ) , (
) . if else ,
( ) if .
( 3.4 ))
( 10, 11., 12.), ( 3.4 ))
( 14. 15.).
28

17. 22.
1.
n 1 ( 17.)
( 18.). n=2 (1 << (n-1))
: 00000000 00000010.
, (
: 0xaa) (&)
n- ( ):
00000000 10101010
(0xaa)
&
00000000 00000010
(0x02)
00000000 00000010
(0x02)
0, if 17.
.
, n 1
( 19.), ( 20.).
22.
n . n=2 (1 << (n-1))
: 00000000 00000010.
(^) n-
( ):
00000000 10101010
(0xaa)
^
00000000 00000010
(0x02)
00000000 10101000
(0xa8)
.
3.4 ) .

3.4 ) primer3_4 ( )

3.4 ) primer3_4 ( )

3.4 ) primer3_4 ( )
29

primer3_5
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:

/
primer3_5.c
/
/
Odredjivanje veceg od dva zadata cela broja (ili prvog od jednakih)
/
#include <stdio.h>
main( )
{
int a, b, max;
printf("\nUnesite dva cela broja: ");
scanf("%d%d", &a, &b);
max = a;
if(b>max)
max = b;

/pretpostavka: a ima vecu vrednost/


/suprotan slucaj od pretpostavljenog/

printf("\nVeci od dva zadata broja je: %d\n\n", max);


}

primer3_5
if
. ( 12.)
max.
, ( 13.),
max ( 14.).

3.5 ) 3.5 ), .

3.5 ) primer3_5 ( )

3.5 ) primer3_5 ( )

30

primer3_6
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:

/
primer3_6.c
/
/
Prikaz na ekranu poruke o relaciji
/
/
izmedju dva zadata cela broja, primenom naredbe if
/
#include <stdio.h>
main( )
{
int a, b;
printf("\nUnesite dva cela broja, a i b redom: ");
scanf("%d%d", &a, &b);
if(a == b)
printf("\na je jednako b\n\n");
else if(a > b)
printf("\na je vece od b\n\n");
else
printf("\na je manje od b\n\n");
}

primer3_6
,

:
(if 13.)
( 14.),
, (else
if 15.), ( 16.),
(else 17.),
, ( 18.).

3.6 ) 3.6 ), .

3.6 ) primer3_6 ( )

3.6 ) primer3_6 ( )

31

primer3_7
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:

/
primer3_7.c
/
/
Odredjivanje veceg od dva zadata cela broja (ili prikaz poruke
/
/
ako su jednaki), primenom uslovnog operatora
/
#include <stdio.h>
main( )
{
int a, b;
printf("\nUnesite dva cela broja, a i b redom: ");
scanf("%d%d", &a, &b);
if(a == b)
printf("\n\n a je jednako b \n");
else
printf("\n\n%d je veci broj\n\n",(a > b) ? a : b);
}

primer3_7
,
( ).
13.:

(if 13.)
( 14.),
a (else 15.)

( 16.) (a > b) ? a : b
a (a > b)
b (a > b) .
x = (a > b) ? a : b; :
if(a>b)
x = a;
else
x = b;

3.7 ) 3.7 ), .

3.7 ) primer3_7 ( )

32

3.7 ) primer3_7 ( )


,
.
 .
 (
).
 :
{ } .
 0
, =0 ,
.
 .
.

7., 8., 9. 10. .
 If else

if-else ?:


 = ==.
,
.

. (
: < =, > =, = = ! =
: <=, >=, == !=
)
(
: =<, => =!)
 (;) If
If .

33

3.
_____________________________________________
1.
: a = 1, b = 1, c = 2, d = 2.

.

a, b, c d
:
a = b++;

c = d;

d = a + b;

2.
:
a = 0x01ff, b = 0x02fe.
C printf():
printf(%x, a&b);

printf(%x, a|b);

3.
:
if(a>b)
c = 1;
if(a>b)
d = 2;
if(a<=b)
c = 3;
if(a<=b)
d = 4;

34

printf(%x, a^b);

4.
,
a, b c, d 1 ( 0)
:
) a, b c ,

) a, b c ,

) a, b c
100.

5.
if x
y:
y = -10,
y = x,
y = x - 10,

x < 0,
0 x < 10,
ao je x 10.

35

3.
_____________________________________________
1.
C Da/Ne
( D N) .
, .

2.
,
, ( ) 1
1., 2., 3. ( 20, 21 22).

3.
,
.

4.
x y,
, z :
z = (min(x,y) + 0.5) / (1 + max2(x,y))

5.
x y,
, z :
z = min(x,y),

y 0,

y < 0.
z = max2(x,y),

6.
x , y z 2,
x y z, ,
.

36

4.

C

: for, while do..while



,

37


_____________________________________________
primer4_1
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:

/
primer4_1.c
/
/
Prikaz na ekranu neparnih brojeva od 1 do 10 (for petlja)
/
#include <stdio.h>
main( )
{
int x;
for(x=1; x<=10; x+=2)
printf("\n%d ", x);
printf("\n\n");
}

primer4_1
for (for )
( 9. 10.). 9. for ,
:
1. : x 1,
2. : x
10,
3. : x 2.
10. for ,
x.
e, for . ,
x 1 ( for ),
x<=10 ( for ) :
( x),
, x 2 (
for ). 1 9
( 4.1). 11. for (
; 10).

4.1 primer4_1

38

primer4_2
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:

/
primer4_2.c
/
/
Prikaz na ekranu slova X u 3 reda i 10 kolona (ugnjezdena for petlja)
/
#include <stdio.h>
main( )
{
int i, j;
printf("\n");
for(i=0; i<3; i++)
{
for(j=0; j<10; j++)
printf("X");
printf("\n");
}
printf("\n");

/3 iteracije spolj. petlje za 3 reda/


/10 iteracija un. petlje u svakom redu/

primer4_2
for ( )
X, .
( i ). .
(i=0) ( 11.
15.) ( =0 <10) (
12. 13.) X .
(i=1 i=2)
( X
).
,
printf() ( 14.).

printf() ( 16.), X
( 4.2).

4.2 primer4_2

39

primer4_3
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:

/
primer4_3.c
/
/
Izracunavanje sume S=1+2+..+n,gde je n zadati ceo broj (for petlja)
/
#include <stdio.h>
main( )
{
int n, s, suma=0;
printf("\nUnesite ceo broj n (1<=n<=100): ");
scanf("%d", &n);
if(n<1 || n>100)
/vrednost n van dozvoljenog opsega/
printf("\nZadati broj je van dozvoljenog opsega\n");
else
/vrednost n u dozvoljenom opsegu/
{for(s=1;s<=n;s++)
suma += s;
/skraceni zapis od: suma=suma+s/
printf("\nSuma prvih %d pozitivnih celih brojeva je %d\n\n",n,suma);
}
}

primer4_3
n
(n ).
(suma=0) 7.
.
( 4.3 a)), 12.
( 1 100) ( 13.).
, else ( 15. 19. ). for , s=1
s<=n ( n ) s. : suma = 0 + 1 + 2 + Z+ n
( 4.3 )).

4.3 a) primer4_3 ( )

4.3 ) primer4_3 ( )

40

primer4_4
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:

/
primer4_4.c
/
/
Izracunavanje stepena realn osnove celobrojnim eksponentom
/
/
za zadate vrednosti osnove i eksponenta (for petlja)
/
#include <stdio.h>
main( )
{
int i, eksp;
float osnova, stepen = 1.0;
printf("\nUnesite za osnovu realan broj ");
scanf("%f", &osnova);
printf("\nUnesite za eksponent pozitivan ceo broj: ");
scanf("%d", &eksp);
if(eksp<=0)
printf("\nNije zadat pozitivan ceo broj za eksponent\n\n");
else
{
for(i=1;i<=eksp;i++)
stepen = osnova;

/stepen=stepenosnova/

printf("\nBroj %f na stepen %d je %f\n\n",osnova,eksp,stepen);


}
}

primer4_4
( 12. 14.):
( 12.) ao ,
( 4.4 a) 4.4 )).
stepen (
9.) 1.0 ( ).

( 16. 17.).
21. 22. for eksp ,
. (
) .
osnova=10.5, eksp=2, , for 2
10.52 : stepen = 1.0 10.5 10.5 ( 4.4 ))

4.4 a) primer4_4 ( )
41

4.4 ) primer4_4 ( )

4.4 ) primer4_4 ( )

primer4_5
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:

/
primer4_5.c
/
/
Izracunavanje srednje vrednosti zadatog niza realnih brojeva
/
/
koriscenje broja 0 kao STOP koda za kraj niza (while petlja)
/
#include <stdio.h>
#define STOP 0
main( )
{
int n=0;
float x, suma=0;
printf("\nUnesite niz realnih brojeva (0 za kraj):\n\n");
scanf("%f",&x);
while(x!=STOP)
{
suma += x;
n++;
scanf("%f", &x);
}

/ciklus ce biti prekinut kada se zada 0/

if(n==0)
printf("\nNije zadat niz realnih brojeva.\n\n");
else
printf("\nAritmeticka sredina zadatog niza je %f\n\n", suma/n);
}

primer4_5
,
, while (while ).
42

.
, while ( ).
, . for
.
( 10.)
(n=0, suma=0),
( 4.5 a)).
15. 19. while .
while ( 15.) (
16. 19.)
15. 0
while , 16.
19. suma
, n
. 0 while
.
( 21.), ,
while ( while
while )
( 22.), ,
(suma/n) 24. ( 4.5 )).
while
,
( )

4.5 a) primer4_5 ( )

4.5 ) primer4_5 ( )

43

primer4_6
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:

/
primer4_6.c
/
/
Odredjivanje brojeva karaktera i linija u ulaznom tekstu (while petlja)
/
#include <stdio.h>
main( )
{
int c, nc=0, nl=0;
while((c = getchar()) != EOF)
{
nc++;

/nc - broj karaktera i nl - broj linija/


/EOF - znaka za kraj unosa teksta/
/(detektovan Ctrl+Z sa tastature)/

if(c=='\n')
nl++;
}
printf("\nUnetih karaktera: %d\nLinija: %d\n\n", nc, nl);
}

primer4_6
,
while ,
, .
, ,
.
nc nl 7.
while , while EOF
(EndOfFile) stdio.h.
,
Ctrl Z, .
while ( 9. 14.)
getchar(). stdio.h.
, ASCII
( ).
(c), .
, 9. o
( : while((c = getchar()) != EOF).
, :
(nc) ,
(nl)
(if 12. 13.).
4.6 .

44

4.6 primer4_6

primer4_7
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:

/
primer4_7.c
/
/
Kopiranje ulaznog teksta na ekran, uz zamenu svakog niza
/
/
uzastopnih praznih znakova jednim praznim znakom (while petlja)
/
#include <stdio.h>
#define NIJE_PRAZNO
#define PRAZNO
#define HOR_TAB

'a'
''
'\t'

main( )
{
int c, predh_c = NIJE_PRAZNO;
while((c = getchar()) != EOF)
{
if(c == HOR_TAB)
c = PRAZNO;
if(c != PRAZNO || predh_c != PRAZNO)
putchar(c);
predh_c = c;
}
}

primer4_7

.
6., 7. 8. (
), NIJE_PRAZNO a
('a').
predh_c :
.
NIJE_PRAZNO. :
,
( 14. 15.),

45

,
( 17. 18.).
,
. putchar(c) ( stdio.h)
ASCII c (
),
predh_c
ASCII ,
, .
4.7 .

4.7 primer4_7

primer4_8
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:

/
primer4_8.c
/
/
Kopiranje ulaznog teksta na ekran, po jednu rec u liniji (while petlja)
/
#include <stdio.h>
#define U_RECI
#define VAN_RECI

1
0

main( )
{
int c, poz = VAN_RECI;
while((c=getchar())!=EOF)
{
if(c==' ' || c=='\n' || c=='\t') /ako je prihvacen neki beli znak/
{
if(poz==U_RECI)
{
putchar('\n');
poz = VAN_RECI;
}
}
else
/ako nije prihvacen beli znak/
{
poz = U_RECI;
putchar(c);
}
}
}

primer4_8
.
U_RECI VAN_RECI (e 5. 6.)

46

poz ( :
), , :
(' ', \n', '\t')
U_RECI,

VAN_RECI,
,
U_RECI ( ) .
4.8 .

4.8 primer4_8

primer4_9
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:

/
primer4_9.c
/
/
Prikaz na ekranu stepenova broja 2 (2, 4, 8, 16, `)
/
/
u zadatom opsegu od 0 do max (do..while)
/
#include <stdio.h>
#define MAX 100
main( )
{
int stepen = 2, max;
do
{

/ponavljanje poruke i prihvatanje broja/


printf("\nUnesite jedan ceo broj (2<n<100): ");
scanf("%d", &max);

}
while(max<=2 || max>=MAX);
do
{

/dok je max van trazenog opsega/


/stepen se izracunava u petlji/

printf("\n%d", stepen);
stepen = 2;

}
while (stepen <= max);

/skraceno od: stepen=stepen2/


/dok ima vrednost ne vecu od max/

printf("\n\n");
}

47

primer4_9

do..while ( do.. while). while,
( ).
( ) do while, do.. while
. , (
) . , .
2,
.
do.. while ( 11. 15.)
( 2 100).
: ( 4.9 a) )
max ( 12. 13.), ,
do.. while 15. ( 4.9 )).
, do.. while .
do.. while ( 17. 21.). ,
, stepen (
2) 2.
(
do..while 21.),
( 2).
, do.. while ,
2
( 4.9 )).

4.9 a) primer4_9 ( )

4.9 ) primer4_9 ( )

4.9 ) primer4_9 ( )

48

primer4_10
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:

/
primer4_10.c
/
/
Prikaz na ekranu brojeva zadatog opsega, deljivih brojem 3(do..while)
/
#include <stdio.h>
main( )
{
int x, a, b, brojac = 0;
do
{

/ponavljanje poruke i prihvatanje brojeva/


printf("\nUnesite granice opsega (cele brojeve, od 1 do 100): ");
scanf("%d%d", &a, &b);
}
/sve dok nisu zadovoljeni zahtevi/
while(a<1 || a>100 || b<=a || b>100);
printf("\nBrojevi u opsegu od %d do %d deljivi sa 3:\n", a, b);
for(x=a; x<=b; x++)
{
if(x%3==0)
{
printf("%d ", x);
brojac++;
}
if(brojac%10==0)
printf("\n");
}
}

primer4_10
do..while , 9.
13. , , ( 4.10 a))
a b.
1 100,
( do..while )
( 10. 11.).
a b, 1 100 ,
do..while .
for ( 17. 25.)
, a b, if ( 18.
21.), 3 (
3 0). a b,
,
( ).
10 ( 10
) 23. 24. ( 4.10 )).

49

4.10 a) primer4_10 ( )

4.10 ) primer4_10 ( )


.
 for
( ).
 for
(
).
 while
(
), do..while
( ,
).


 , ; for .
 ; for
.
 .

50

4.
_____________________________________________
1.

, a b, a<b (for
).

2.
(
.) (while ).

51

4.
_____________________________________________
1.
:
) 0 16 (for ),
) Z ASCII (for ).

2.
X Y
:
1:
XXXXX YYYYY XXXXX
2:
XXXXX YYYYY XXXXX
3:
XXXXX YYYYY XXXXX
X
Y (for ).

3.
(for ):
a)

4.

. , , 0.
(while ).

5.

:


B
\t

T
\n

N

52

5.


C

a : break
: continue
: switch
: goto

53


_____________________________________________
primer5_1
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:

/
primer5_1.c
/
/
Kopiranje sa tastature na ekran niza celih brojeva,
/
/
sve dok se ne unese 10 brojeva ili broj 0 kao STOP kod (break)
/
#include <stdio.h>
#define STOP 0
main( )
{
int i, x;
printf("\nUnesite cele brojeve (10 njih ili do stop koda 0):\n\n");
for(i=0; i<10; i++)
{
scanf("%d", &x);
if(x==STOP)
break;
printf("\n%d", x);
}

/za zadati broj 0/


/izlaz iz petlje/

printf("\n\n");
}

primer5_1

( 5.1 a)), 10, 0 (
6.)
if , 14. 15,
( for ). , 0
( 14.) break ( 15.)
( 16. for )
( 19.) .
0 ( 5.1 )).
break (for, while,
do..while) switch , ,
.

5.1 a) primer5_1 ( )

54

5.1 ) primer5_1 ( )

primer5_2
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:

/
primer5_2.c
/
/
Prikaz na ekranu brojeva od 1 do 30, deljivih brojem 3 (continue)
/
#include <stdio.h>
main( )
{
int x;
printf("\nBrojevi od 1 do 30 koji su deljivi brojem 3:\n");
for(x=1; x<=30; x++)
{
if(x%3 != 0)
continue;
printf("\n%d", x);
}

/za broj nedeljiv sa 3/


/izlaz iz iteracije petlje/

printf("\n\n");
}

primer5_2
12. 13.
, 1 30. if 12. x
3 ( if(x%3 != 0) ). continue,
, (
,
). ,
( 14.)
3, for for
30 ( 5.2).
continue
(for, while, do..while).

55

5.2 primer5_2

primer5_3
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:

56

/
primer 5_3.c
/
/
Ponavljanje prompta, dok uneti broj nije u zadatom opsegu /
/
i crtanje histograma vrednosti ako je u zadatom opsegu (go..to)
/
#include <stdio.h>
main( )
{
int i, n;
start: printf("\nUnesite ceo broj od 0 do 10: ");
scanf("%d", &n);
if (n < 0 || n > 10 )
goto start;
else if (n == 0)
goto loc0;
else
goto loc1;

/za broj n van opsega - skok na pocetak/


/za broj 0 - skok na loc0/
/za broj u opsegu - skok na loc1/

loc0: printf("\nIzabran je broj 0 za kraj\n\n");


goto end;
loc1: for(i=0; i<n; i++)
printf("");
goto start;
end:
}

primer5_3
goto .

( 10. je start:) ( 10.
11.) ( 5.3 a)) : a
( 13.) ,
start ( 10.) ( 5.3 )).
, 0, ,
loc0 ( 20.),
( 21. 27.) ,
loc1(for , 23.
24., ,
( 10.).
goto ,
.
. goto
,
.
5.3 ) 5.3 ) ,
, , 5.3 ) 0
.

5.3 a) primer5_3 ( )

5.3 ) primer5_3 ( )

5.3 ) primer5_3 ( )

5.3 ) primer5_3 ( )

57

5.3 ) primer5_3 ( )

primer5_4
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:

58

/
primer5_4.c
/
/
Izracunavanje srednje vrednosti s = (x1 + x2 +`+ xn)/n /
/
i standardne devijacije d = ((x12 + x22 +`+ xn2)/n s2)1/2 /
/
za zadati niz realnih brojeva x, duzine 1<=n<=10 (while(1) i break)
/
#include <stdio.h>
#include <math.h>
main( )
{
int i, n;
double x, s=0, d=0;
while(1)
{
printf("\nUnesite broj elemenata niza (1<=n<=10): ");
scanf("%d", &n);
if(n<1 || n>10)
/za broj n van zadatog opsega/
{
printf("\nZadati broj elemenata niza nije dozvoljen\n);
break;
/izlaz iz petlje/
}
s=d=0;
printf("Elementi niza realnih brojeva? ");
for(i=1; i<=n; i++)
{
scanf("%lf", &x);
s += x; d += xx;
}
s /= n;
d = sqrt(d/n - ss);
printf("\nSrednja vrednost: %f\n", s);
printf("\nStandardna devijacija: %f\n", d);
}
}

primer5_4
, (
11.), while(1) ( 13. 33.). while(1)
( 1),
(break 19. if , 17).
:
(n) ( 5.4 a)) ( 0 10),
( 5.4 )). ,
n ( 5.4 )).
( s,
),
( d, ).
( )

( s)
( 28.), (
d) ( 29.).
sqrt(), math.h ( 7.)
( ).

, , 0 10.
, , ,
.

5.4 a) primer5_4 ( )

5.4 ) primer5_4 ( )

5.4 ) primer5_4 ( )

59

primer5_5
1
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:

/
primer5_5.c
/
/
Prikaz bitova svake zadate celobrojne vrednosti (u opsegu 2 bajta)
/
/
broj 0 je stop kod za unos brojeva (naredbe while i break)
/
#include <stdio.h>
#define STOP
#define VEL_BAJTA
#define VEL_RECI

0
8
16

main( )
{
int broj, poz_bita;
while(1)
{
printf("\n\nUneti c broj (od 0 d 255) u decimalnom obliku: ");
scanf("%d", &broj);
if(broj==STOP)
break;

/za zadati broj 0/


/zlaz iz petlje/

printf("\nBinarni oblik zadatog broja: ");


for(poz_bita=1; poz_bita <= VEL_RECI; poz_bita++)
{
if((broj >> (VEL_RECI - poz_bita)) & 1)
printf("1");
else
printf("0");
if(poz_bita == VEL_BAJTA)
printf(" ");
/prikaz: po 8 bitva u grupi/
}
}
}

primer5_5
while(1) ( 13. 31. ),

( break 18., 17.).
( ),
:
0, .
for
.
VEL_BAJTA VEL_RECI, a
e e. VEL_RECI for ( 22.).
( broj)

60

VEL_RECI - poz_bita ( 15, 14,...,0 )


(16., 15., ..., 1.) ( )
(&)
1 ( 23.).
1 0
1 ( 23. 24.),
0 ( 25. 26.).
,
, ( 16. 1. ).
. 8
(VEL_BAJTA) ( 28. 29.).
, 5.5 a), 5.5 ), 5.5 ) 5.5 ),
,
.

5.5 a) primer5_5 ( )

5.5 ) primer5_5 ( )

5.5 ) primer5_5 ( )

5.5 ) primer5_5 ( )

61

primer5_6
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:

/
primer5_6.c
/
/
Odredjivanje u ulaznom tekstu broja praznih karaktera, kao i broja
/
/
znakova: tacka, zarez, dvotacka i tacka-zarez (naredbe switch i break)
/
#include <stdio.h>
main( )
{ int c, prazno=0, interp=0;
while((c=getchar())!=EOF)
switch(c)
{
case ' ':
prazno++;
break;
case '.':
case ',':
case ':':
case ';':
interp++;
break;
default:
break;
}
printf("\nBroj praznina: %d", prazno);
printf("\nBroj znakova tacka, zarez, dvotacka i tacka-zarez: %d\n", interp);
}

primer5_6
switch.
, ,
( ).
else else if if.
, switch ( 11.)
c, ASCII
( getchar() 10.).
( EOF),
.
getchar() stdio.h
, . ,
, ( ,
putchar(), stdio.h). ,
, ,
, (
Enter).

62

(
), ,

Enter. , conio.h,
.
:
a (case ' ':)

( 13.: prazno++) switch
( break 14.),
a ( ('.'),
(','), (':') - (';'))
(
19.: interp++) switch ( break
20.).
switch .
( 19. 20.)
() . 15. 20.
:
case '.':
interp++;
break;
case ',':
interp++;
break;
case ':':
interp++;
break;
case ';':
interp++;
break;
, switch (case)
. ,
default: , switch ( break
22.)
switch ,
( 5.6).

5.6 primer5_6

63

primer5_7
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:

64

/
primer5_7.c
/
/
Prikaz na ekranu poruke o strelici zadatoj preko tastature
/
#include <stdio.h>
#include <conio.h>
/definisanje kodova za stampanjei citanje znakova pojedinih strelica/
enum {
STAMPA_STREL_GORE = 24,STAMPA_STREL_DOLE,
STAMPA_STREL_DESNO,STAMPA_STREL_LEVO
};
#define CITA_STREL_GORE
#define CITA_STREL_DOLE
#define CITA_STREL_DESNO
#define CITA_STREL_LEVO

72
80
77
75

main( )
{
int c, kraj = 0;
while(1)
{
printf("\nBirati strelicu %c %c %c %c\n",
STAMPA_STREL_GORE,STAMPA_STREL_DOLE,
STAMPA_STREL_DESNO,STAMPA_STREL_LEVO);
c = getch(); /citanje 1. dela koda/
printf("\nPrvi bajt koda: %d", c);
c = getch(); /citanje 2. dela koda/
printf("\nDrugi bajt koda: %d", c);

/prikaz 1. dela koda/


/prikaz 2. dela koda/

switch(c)
{
case CITA_STREL_GORE:
printf("\n\nIzabrali ste strelicu gore.\n"); break;
case CITA_STREL_DOLE:
printf("\n\nIzabrali ste strelicu dole.\n"); break;
case CITA_STREL_LEVO:
printf("\n\nIzabrali ste strelicu levo.\n"); break;
case CITA_STREL_DESNO:
printf("\n\nIzabrali ste strelicu desno.\n"); break;
default:
printf("\n\nNiste izabrali strelicu.\n"); kraj =1; break;
}
if(kraj)
break;
}
}

primer5_7

/
.
conio.h.
getch() conio.h
, .
( 8. 9.)
.
, ,
enum. #define.
8. 9. :
#define STAMPA_STREL_GOR
24
#define STAMPA_STREL_DOL
25
#define STAMPA_STREL_DESNO
26
#define STAMPA_STREL_LEVO
27
( 8. 9.) (24)
,
, (25, 26 27).
,
0).
, ,
ASCII , 12. .

. , , , , PageUp, PageDown,
Home, End, Insert, Delete, .
(0xE0),
( printf()).
11. 14. (
0,
).
while(1) ( 20. 22.)
( 5.7 a)).
( 24. 26.) getch(),
conio.h ( 5.). ,
getchar(), , .
getchar() getch() ( )
( Enter
).
getch() ( 24. 26.), , ,
25. 27. .
c, switch . c,
( case ).
, ,
break switch.
, default ( switch).
5.7 ) 5.7 ) ,
, 5.7 ) .

65

5.7 a) primer5_7 ( )

5.7 ) primer5_7 ( )

5.7 ) primer5_7 ( )

5.7 ) primer5_7 ( )






,
, break continue.
default, switch .

. (
.)


 break switch

.
 break while(1)
, .

66

5.
___________________________________________
1.
switch if .
if(a == 0)
b++;
else if(a==1)
c++;
else if ((a == 2) || (a == 3) || (a == 4))
d++;

2.

, ( 2,
(d/n) (switch ).

67

5.
___________________________________________
1.
(
n, 1<=n<=10,
)
. 0
(break).

2.
( , \t,\v \n),
(switch).

3.

(+, -, , / %), ,
( )
(switch).

4.
ax2 + bx + c = 0
( ) (switch).
a 0 d = b2 4ac :

d > 0:
d = 0:

x1 =

b+ d
2a

x1 =

b
2a

x1 =

b
2a

x1 =

c
b

d < 0:

a = 0

x2 =

y1 =

d
2a

b d
2a

x 2 = x1

b 0:

a = 0 b = 0: .
68

y 2 = y1

6.

C

69


_____________________________________________
primer6_1
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:

/primer6_1.c/
/Stampanje na ekranu tabele sa rednim brojevima, indeksima,/
/vrednostima i histogramom vrednosti elemenata inicijalizovanog niza/
#include <stdio.h>
#define MAX 5
main( )
{
int i, j, niz[] = {15, 3, 9, 7, 11};
printf("\nRBr\tIndeks\tVrednost\tHistogram\n");
for(i=0; i<MAX; i++)
{
printf("\n%d\t%d\t%d\t\t",i+1,i,niz[i]);
for(j=0; j<niz[i]; j++)
printf("");
}
printf("\n\n");
}

primer6_1
.
(char, int,
float,...). (
) .
( 9.)
(niz). ,
(
).
11. , for
( 12. 17.) :
, , ( for ,
15. 16.).
( 1. ).
1. 0, MAX MAX -1
( 6.1).

.
(niz[i]). 0 ( )
MAX-1 ( ), MAX.
.

70

6.1 primer6_1

primer6_2
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:

/primer6_2.c/
/prikaz na ekranu neinicijalizovanog i inicijalizovanog/
/niza celih brojeva/
#include <stdio.h>
#define MAX 10
main( )
{
int i, opcija, niz[MAX];
printf("Neinicijalizovan sadrzaj deklarisanog niza:");
for(i=0; i<MAX; i++)
printf("\n%d ",niz[i]);
printf("\nDa li zelitie da inicijalizujete niz (D/N): ");
opcija = getchar();
if(opcija =='D' || opcija =='d')
{
printf("\nUnesite cele brojeve: \n");
for(i=0; i<MAX; i++)
{
printf("niz[%d] = ", i);
scanf("%d",&niz[i]);
}
printf("\nInicijalizovan sadrzaj niza:");
for(i=0; i<MAX; i++)
printf("\n%d ",niz[i]);
}
}

primer6_2
, MAX
( 10).
, ( 9.).

71

MAX ( 0 MAX-1) for ( 12. 13.)


, .
6.2 a)
() ,
.
( 15. 16.).
for ( 21. 24.)
( 6.2 )).
, ,
,
.
, ( 6.2 )).

6.2 a) primer6_2 ( )

6.2 ) primer6_2 ( )

6.2 ) primer6_2 ( )

72

primer6_3
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:

/primer6_3.c/
/Izracunavanje srednje vrednosti zadatog niza celih brojeva/
#include <stdio.h>
#define MAX 10
main( )
{
int i, n, niz[MAX], suma = 0;
do
{

printf("\nUnesite duzinu niza (n<=%d): ", MAX);


scanf("%d", &n);

}
while(n<=0 || n>MAX);
printf("\nUnesite vrednosti elemenata niza: ");
for(i=0; i<n; i++)
{
scanf("%d", &niz[i]);
suma += niz[i];
}
printf("\nSrednja vrednost zadatog niza je %f\n", (float)suma/n);
}

primer6_3
, 8., ,
(MAX) .
,
(n), do.. while ( 11. 12.)
, , 0 MAX ( 6.3 a) 6.3 )).
( 6.3 )),
for ( 17. 20.) ( i=0 i<n)
i
suma ( 19.), .
, ( 21.)
, ( 6.3 )).

6.3 a) primer6_3 ( )

6.3 ) primer6_3 ( )

73

6.3 ) primer6_3 ( )

6.3 ) primer6_3 ( )

primer6_4
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:

/primer6_4.c/
/Odredjivanje indeksa i vrednosti najveceg elementa/
/zadatog niza realnih brojeva, duzine n (n<=50)/
#include <stdio.h>
#define MAX 10
main( )
{
int i, imax = 0;
float niz[MAX];

/pretpostavka: 1. element niza je najveci/

printf("\nUnesite %d realnih brojeva: ", MAX);


for(i=0; i< MAX; i++)
scanf("%f", &niz[i]);
for(i=1; i< MAX; i++)
if(niz[i] > niz[imax])
imax = i;

/ako je niz[i] veci od prethodno/


/ usvojenog najveceg elementa/

printf("\nNajvecu vrednost ima %d. element niza , imax+1);


printf(i to je: %f\n, niz[imax]);
}

primer6_4

10. ( 6.4 )),
( 6.4 )) .

74

( 9.)
1. if ( 17.) ,
, .

6.4 a) primer6_4 ( )

6.4 b) primer6_4 ( )

primer6_5
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:

/primer6_5.c/
/Razvrstavanje slucajno generisanih celih brojeva (opseg od 0 do 10)/
/u dva niza: parnih u jedan, a neparnih u drugi niz/
#include <stdio.h>
#include <stdlib.h>
#define MAX 10
main( )
{
int i, j=0, k=0, x, a[MAX], b[MAX];
printf("\nSlucajno generisani niz brojeva:\n");
for(i=0; i<MAX; i++)
{
printf("%d ", x = rand( )/((double)RAND_MAX+1)*10);
if(x%2==0)
a[j++] = x;
/a[j++] = x; a[j] = x; j++;/
else
b[k++] = x;
/b[k++] = x; b[k] = x; k++;/
}
printf("\n\nNiz parnih brojeva:\n");
for(i=0; i<j; i++)
printf("%d ", a[i]);
printf("\n\nNiz neparnih brojeva:\n");
for(i=0; i<k; i++)
printf("%d ", b[i]);
printf("\n\n");
}

75

primer6_5
rand(),
stdlib.h. ,
0 RAND_MAX ( 32767
(0x7fff)). ( 0 10)
( 0 RAND_MAX) , 14:
x = rand( )/((double)RAND_MAX+1)10
:
ko je rand( ) broj 1, x
1/(double)3276810 = 0.000305, 0,
ko je rand( ) broj 1000, x
10000/(double)3276810 = 3.051758, 3,
ko je rand( ) broj 32767, x
30000/(double)3276810 =
9.155273, 9.
for ( 13. 19.) 10
:
, a (a[j]), j
0), ( j ).
16.,
a[j++] = x;
:
a[j] = x;
j++;
a[j] x,
j,
b (b[k]), k
0), ( k ). (
,
.)

a b ( a j, b k).
( 22. 23., 26. 27.)
( 6.5).

6.5 primer6_5

76

primer6_6
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:

/primer6_6.c/
/Formiranje niza c od dva zadata niza celih brojeva a i b/
/(svaki duzine 5) na sledeci nacin: a[0]+b[4],..a[4]+b[0]/
#include <stdio.h>
#define MAX 5
main( )
{
int i, a[MAX], b[MAX], c[MAX];
printf("\nUnesite prvih %d celih brojeva (elemente niza a): ", MAX);
for(i=0; i<MAX; i++)
scanf("%d", &a[i]);
printf("\nUnesite drugih %d celih brojeva (elemente niza b): ", MAX);
for(i=0; i<MAX; i++)
scanf("%d", &b[i]);
printf("\nVrednosti elemenata niza c: ");
for(i=0; i<MAX; i++)
{
c[i] = a[i] + b[MAX-1-i];
printf("%d ", c[i]);
}
printf("\n\n");
}

primer6_6
a b ( ) c (
), 9., .
( 12. 13.)
a, ( 16. 17.) b. a b
MAX, 5 ( 6.6 a) 6.6 )).
( 20. 23.), MAX
c. c a
b, c
a b, ... ( 6.6 )).

6.6 a) primer6_6 ( )

6.6 ) primer6_6 ( )
77

6.6 ) primer6_6 ( )

primer6_7
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:

/primer6_7.c/
/Ciklicno pomeranje niza slucajno generisanih celih brojeva/
/(opseg od 0 do 100), duzine 10, za jedno mesto u levo/
#include <stdio.h>
#include <stdlib.h>
#define MAX 10
main( )
{
int i, pom, niz[MAX];
printf("\nNiz slucajno generisanih brojeva:\n");
for(i=0; i<MAX; i++)
{
printf("%d ",niz[i] = rand()/((double)RAND_MAX + 1)100);
if(i%10 == 9)
/stampa najvise 10 elemenata u liniji/
printf("\n");
}
/ Ciklicno pomeranje /
pom = niz[0];
for(i=0; i<MAX-1; i++)
niz[i] = niz[i+1];
niz[MAX-1] = pom;
printf("\nCiklicno pomereni niz za jedno mesto ulevo:\n");
for(i=0; i<MAX; i++)
{
printf("%d ", niz[i]);
if(i%10 == 9)
printf("\n");
}
}

primer6_7
( MAX,
10), ,
rand(). 0
100 6.5 .
15. 16., 10 .
9, 19, 29, ... , .
78


( 20. 23.). pom
. for ( 21. 22.)
niz[i] = niz[i+1], i 0
MAX-1 ( ). ,
pom ( 6.7).

6.7 primer6_7

primer6_8
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:

/primer6_8.c/
/Nalazenje zadate kombinacije bitova u zadatom nizu elemenata/
#include <stdio.h>
#include <stdlib.h>
#define MAX
#define VEL_RECI
#define MASKA
#define OPSEG

10
16
0x7
0xff

main( )
{
int i, niz[MAX], broj, poz_bita, nadjen = 0;
printf("\nSlucajno generisani brojevi(opseg od 0 do %d):\n\n", OPSEG);
for(i=0; i<MAX; i++)
printf("%d ",niz[i] = rand()/((double)RAND_MAX + 1)OPSEG);
do
{

printf("\n\nUnesite kombinaciju od 3 bita (decimalni oblik): ");


scanf("%d",&broj);
}while(broj<0 || broj > MASKA);
for(i=0; i<MAX; i++)
for(poz_bita=1; poz_bita <= VEL_RECI; poz_bita++)
if(((niz[i] >> (poz_bita-1)) & MASKA) == broj)
{
nadjen = 1;
printf("\nZadata kombinacija je ");
printf("u %d. elementu, od %d. bita\n",i+1,poz_bita);
break;
}
if(!nadjen)
printf("\nZadata kombinacija nije nadjena.\n");

}
79

primer6_8
MAX,
10 ( 12.), ( )
( 14. 16.),
rand(). , 0 255 (0xff)
( 6.8 a)).

3 , 0 7, ( 18. 21.)
(for 23.)
16 ( 2 ) (for 24.)
if ( 25.)
.
niz[i], , (0x7,
)
( 25.).

, ,
( 6.8 )).

6.8 a) primer6_8 ( )

6.8 ) primer6_8 ( )

80

primer6_9
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:

/primer6_9.c/
/Prikaz na ekranu elemenata zadate matrice (dvodimenzionog niza)/
#include <stdio.h>
#define MAX1 2
#define MAX2 5
main( )
{
int i, j, niz[MAX1][MAX2] = {

10, 20, 30, 40, 50,


60, 70, 80, 90, 100

for(j=0; j<MAX2; j++)


printf("\t[%d]", j);
for(i=0; i<MAX1; i++)
{
printf("\n\nniz[%d] ", i);
for(j=0; j<MAX2; j++)
printf("\t%d", niz[i][j]);
}

};

/indeks kolone/
/indeks reda/

printf("\n\n");
}

primer6_9

, , ,
MAX1xMAX2 (2x5). MAX1 ,
MAX2 .

,
( 9. 10.).
for ( 11. 12.)
( (
)).
for ( 13. 17.)
, ( ),
(niz[i][j], i=0 i<MAX1 j=0 j<MAX2). O
for , 15. 16. ( 6.9).

6.9 primer6_9

81

primer6_10
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:

82

/primer6_10.c/
/Zamena mesta dvema kolonama zadate matrice/
#include <stdio.h>
#define MAX1 10
#define MAX2 10
main( )
{
int i, j, m, n, n1, n2, pom, niz[MAX1][MAX2];
do
{

printf("\nDimenzije matrice (max %dx%d): ", MAX1, MAX2);


scanf("%dx%d", &m, &n);
}while(m<1 || m>MAX1 || n<1 || n>MAX2);
for(i=0; i<m i++)
{
printf("\nUnesite %d elemenata %d. reda matrice: ", n, i+1);
for(j=0; j<n; j++)
scanf("%d", &niz[i][j]);
}
printf("\nZadata matrica:\n");
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
printf("%d ",niz[i][j]);
printf("\n");
}
do
{

printf("\nRedni brojevi kolona za zamenu: ");


scanf("%d%d", &n1, &n2);
}while(n1<1 || n1>n || n2<1 || n2>n);
for(i=0; i<m; i++)
{
pom = niz[i][n1-1]; niz[i][n1-1] = niz[i][n2-1]; niz[i][n2-1] = pom;
}
printf("\nMatrica sa zamenjenim kolonama:\n");
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
printf("%d ",niz[i][j]);
printf("\n");
}
}

primer6_10
, ,
( 9.),
.

. do.. while
( 11. 14.), ( 6.10 a)). m
1 X1, n 1
X2. m<1 m>MAX1 (m ) n<1
n>MAX2 (n ), ( 14.)
(m n) ,
for ( i j)
: &niz[i][j], i=0 i<m j=0 j<n ( 6.10 )). for
( 23. 27.)
( 6.10 )),
( 29. 32. )
, for ( 34. 36.)
( 6.10 )).
32.
. n1<1 n1>n
n2<1 n2>n, . ,
n1 n2, , , (pom).
( i=0 i<m)
n1 n2 ( n1-1 n2-1).

6.10 a) primer6_10 ( )

6.10 ) primer6_10 ( )

6.10 ) primer6_10 ( )
83

6.10 ) primer6_10 ( )





int, long.
.


 ,
0 1.
 MAX, MAX-1
(niz[MAX] niz ).

o .

84

6.
_____________________________________________
1.
20 , ,
0 100,
m (m
).

85

6.
_____________________________________________
1.
n
(n<=20):
) ,
)
.

2.
, n
(n<=20):
) ,
) a) .

3.

n (n<=20) , L (l) ili D (d),
m ( )
. 10 ,
, .

4.

( 50 )
:

95..100
10
65..74
7
85..94
9
55..64
6
75..84
8
0....54
5

5.
(
), n (n<=10) :
) 1,
) (1010...).

6.
:
) 4
, n<=10 ( ),
)
.

86

7.

C

stringova
stringova
String
stringova
stringova

87


_____________________________________________
primer7_1
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:

/primer7_1.c/
/Prikaz na ekranu poruka sa predefinisanim sadrzajem/
#include <stdio.h>
#define MAX 30
main( )
{
char ime[MAX+1];
const char vezba7[] = "Znakovni nizovi u programima na jeziku C";
puts("Unesite svoje ime i prezime:");
gets(ime);
printf("\nZdravo %s\n", ime);
printf("\nAnalizirate program vezbe 7.: \%s\\n\n", vezba7);
}

primer7_1

, ,
.
( , )
: 'A', '5', '!'.
,
, (char), .
: char slovo = 'A';
char cifra = '5'; char znak = !;
( , Visa elektrotehnicka skola u
Beogradu, , Vojvode Stepe 283, ,
011-471-365,
. ,
string. String
. string
n string
n+1 ( null ('\0') stringa).
string ( stringovima,
, , , , , ...).

88

string, ime
MAX+1 ( 8.), MAX MAX ,
null , stringa.
stringa
, 9. ( string vezba7
( 40 ),
string (40+1)sizeof(char) .
11. 12. puts()
gets() stdio.h, string (
7.1 a)) string , . puts()
string,
, gets() string,
.
puts()
( 11.), (
) ( printf()).
gets() string (ime) 12., MAX
.
string
printf(),
(Zdravo) string (ime) 14.,
string 16.
( 7.1 ). string %s.
, string ime ,
, string
vezba7 ,
, ,
, .

7.1 a) primer7_1 ( )

7.1 ) primer7_1 ( )

89

primer7_2
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:

/primer7_2.c/
/Prikaz na ekranu naziva vezbe sa zadatim rednim brojem/
#include <stdio.h>
#define BROJ_VEZBI
8
#define IME_VEZBE
80
main( )
{
int rbr;
const char vezbe[BROJ_VEZBI][IME_VEZBE+1] =
{"Osnovne komponente programa na jeziku C",
"Osnovni tipovi podataka u jeziku C",
"Operatori, izrazi i naredba selekcije u programima na jeziku C",
"Naredbe ciklusa u programima na jeziku C",
"Naredbe skokova i visestruke selekcije u programima na jeziku C",
"Numericki nizovi u programima na jeziku C",
"Znakovni nizovi u programima na jeziku C",
"Sortiranje i pretrazivanje nizova u programima na jeziku C"};
do
{
printf("Unesite redni broj vezbe (od 1. do %d.):", BROJ_VEZBI);
scanf("%d", &rbr);
}while(rbr<1 || rbr>BROJ_VEZBI);
printf("\nVezba broj %d. je:\n\n\%s\\n\n", rbr, vezbe[rbr-1]);
}

primer7_2
( 9.)
char. BROJ_VEZBI stringova,
string IME_VEZBE+1 (IME_VEZBE
null ). 10. 17.
stringova ( ).
( 23.)
( 7.2 a)) do..while ( 18.
21.). 7.2 ).

7.2 a) primer7_2 ( )

7.2 ) primer7_2 ( )

90

primer7_3
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:

/primer7_3.c/
/Formiranje izvestaja o brojevima zadatih pojedinih ocena/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MIN 0
#define MAX 10
#define BROJ_ZNAKOVA 20
main( )
{
int i, ocena, rezultati[MAX+1];
char bafer[BROJ_ZNAKOVA +1];
/Inicijalizacija/
for(i=MIN; i<=MAX;i++)
rezultati[i] = 0;
/Prikupljanje podataka/
printf("\nUnesite ocenu u opsegu od %d do %d", MIN, MAX);
printf("\nPotvrdite svaki podatak tasterom Enter");
printf("\nUnosenje se zavrsava izborom znaka koji nije cifra\n\n");
while(1)
{
/Prihvatanje ulaznog podatka/
printf("Ocena: ");
gets(bafer);
/Provera da li je komanda za kraj/
/*(znak koji nije cifra)*/
if(!(isdigit(bafer[0])))
{
putchar('\n');
break;
}
/Konverzija ulaznog znakovnog niza u ceo broj/
ocena = atoi(bafer);
/Provera da li je podatak u dozvoljenom opsegu/
if(ocena >= MIN && ocena <=MAX)
rezultati[ocena]++;
else
{
printf("GRESKA: podatak je van dozvoljenog opsega\n");
continue;
}
}
/Izvestaj o rezultatima/
printf("Rezultati:\n\nOcena\tBroj pojavljivanja\n");
for(i=MIN;i<=MAX;i++)
printf("%d\t%d\n", i, rezultati[i]);
}

91

primer7_3
( 10.)
rezultati,
( 0 10):
0, 1,....
11. string bafer BROJ_ZNAKOVA +1.
for ( 14. 15.)
rezultati.
( 18., 19. 20.) while(1) :

gets()
string bafer ( 25.),

string (!(isdigit(bafer[0]) isdigit()


ctype.h)
, break; ( 31.) ,

, atoi(),
stdlib.h, string bafer
ocen.
( 37.),
rezultati,
( 38.). ,
while(1) ( ).
7.3 a) , 7.3 ),
while(1) ,
, ( ).

7.3 a) primer7_3 ( )

7.3 ) primer7_3 ( )

92

primer7_4
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:

/primer7_4.c/
/Kalkulator sa 4 osnovne aritmeticke operacije/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_BAF 20
/maksimalna duzina ulaznog podatka je 20/
main( )
{
int znak, nepoznat = 0;
double broj1, broj2;
/operandi su realni brojevi/
char bafer[MAX_BAF+1];
while(1)
{
/Prihvatanje brojeva i operatora/
printf("\nPrvi broj: "); gets(bafer);
if(!isdigit(bafer[0]) && bafer[0]!='-')
{
putchar('\n');
break;
}
broj1 = atof(bafer);
printf("\nDrugi broj: "); gets(bafer);
if(!isdigit(bafer[0]) && bafer[0]!='-')
{
putchar('\n');
break;
}
broj2 = atof(bafer);
printf("\nOperator: ");
znak = getchar(); getchar();

/znak za operator i novi red/

/Izracunavanje i prikaz rezultata/


switch(znak)
{case '+':
printf("\nRezultat: %f\n", broj1+broj2);
break;
case '-':
printf("\nRezultat: %f\n\n", broj1-broj2);
break;
case '*':
printf("\nRezultat: %f\n", broj1*broj2);
break;
case '/':
if(broj2!=0)
printf("\nRezultat: %f\n", broj1/broj2);
else
printf("\nGRESKA:deljenje nulom\n");
break;
default:
printf("\nNepoznat operator\n"); nepoznat = 1;
break;
}
if(nepoznat)
break;
}
}

93

primer7_4
,
.
(
( , , )
. while(1) ( 12.).
14. , string bafer
string ( )
- ( ) while(1).
atof().
20.
.
27.
. , getchar()
znak.
getchar() Enter,
(
).
(switch(znak) 30.)

( 7.4 a)).
(default : 42.) nepoznat
while(1) .

( 7.4 )).

7.4 a)
primer7_4 ( )

94

7.4 )
primer7_4 ( )

primer7_5
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:

/primer7_5.c/
/Osnovne operacije nad stringovima/
#include <stdio.h>
#include <string.h>
#define MAX 80
main( )
{
char string1[MAX+1], string2[MAX/2+1];
int l1,l2, x;
do
{

printf("\nPrvi znakovni niz(duzine n<=%d):\n",MAX/2);


gets(string1);
l1 = strlen(string1);
}while(l1>MAX/2);
do
{

printf("\nDrugi znakovni niz(duzine n<=%d):\n",MAX/2);


gets(string2);
l2 = strlen(string2);
}while(l2>MAX/2);
/Poredjenje duzina stringova/
if (l1 == l2)
puts("\nStringovi su iste duzine.");
else if (l1>l2)
puts("\nPrvi string je duzi.");
else
puts("\nDrugi string je duzi.");
/Poredjenje sadrzaja stringova/
x = strcmp(string1,string2);
if (x==0)
puts("Sadrzaji stringova su isti.");
else if (x>0)
puts("Prvi string je \"veci\".");
else
puts("Drugi string je \"veci\".");
/Spajanje sadrzaja stringova/
strcat(string1, string2);
printf("\nRezultujuci string: %s",string1);
/Kopiranje sadrzaja jednog stringa u drugi/
strcpy(string1,"Nova recenica.");
printf("\nNovi sadrzaj rezultujuceg stringa: %s\n\n",string1);
}

95

primer7_5
stringovima.
8. stringovi. String1 MAX ,
string2 MAX/2 .
do..while ( 11. 15.) ,
string (MAX/2), do..while (
17. 21.), string (MAX/2) 7.5 a) 7.5 )
24. 29. stringova
( l1 l2,
stringova, strlen() string.h)
.
32. 38. stringa,
strcmp() string.h.
0, stringova , 0, string
( ASCII Astring Bstring),
0, string ( ASCII stringC,
stringB). , ASCII ,
65, 66, 98,... ( 11. ). strcmp()
(ASCII ) stringova.
strcat(string1, string2) string2
string1 stringa (string1)
( 7.5 )).
strcpy(string1, Novi string) strcpy(string1,
string2), Novi string

string2
stringa string1 ( ).

7.5 a) primer7_5 ( )

7.5 ) primer7_5 ( )

7.5 ) primer7_5 ( )
96

primer7_6
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:

/primer7_6.c/
/Odredjivanje najduzeg i najkraceg reda od 20 zadatih redova teksta/
/STOP kod pri zadavanju redova teksta moze biti prazan red/
#include <stdio.h>
#include <string.h>
#define BROJ 20
#define DUZINA 80
main()
{
char stringovi[BROJ][DUZINA+1];
char string_max[DUZINA+1], string_min[DUZINA+1];
int i,imax,imin,l, lmin,lmax;
printf("\nUnesite 1. red teksta:\n");
gets(stringovi[0]);
imax = imin = 0;
lmax = lmin = strlen(stringovi[0]);
strcpy(string_max, stringovi[0]);
strcpy(string_min, stringovi[0]);
/Prihvatanje niza stringova/
for(i=1; i<BROJ; i++)
{
printf("\nUnesite %d. red teksta:\n",i+1);
gets(stringovi[i]);
if((l = strlen(stringovi[i])) == 0)
break;
/Trazenje najduzeg i najkraceg stringa u nizu/
if(l > lmax)
{
imax = i;
lmax = l;
strcpy(string_max, stringovi[i]);
}
if(l < lmin)
{
imin = i;
lmin = l;
strcpy(string_min, stringovi[i]);
}
}
printf("\nNajduzi od zadatih redova (%d karaktera)", lmax);
printf("je red broj %d. :\n%s\n", imax+1, string_max);
printf("\nNajkraci od zadatih redova (%d karaktera)", lmin);
printf("je red broj %d. :\n%s\n\n", imin+1, string_min);
}

97

primer7_6
stringova (stringovi)
( ),
stringove, string_max string_min,
stringova, .
( 15. 16.),

, stringa stringa
0 ( 17.), stringa
stringa stringa ( 18.)
stringa stringa
stringa ( 19. 20.).
, for ( 23. 41.) :
string (stringovi[i]),
string, for ( 27. ,28.).
stringa (stringovi[i])
stringa (lmax),
string : imax, lmax,
string_max ( 31. 35.),
stringa (stringovi[i])
stringa (lmin),
string : imin, lmin,
string_min ( 36. 40.).
7.6 a), 7.6 ), 7.6 ) 7.6 )
, (
, , ).
7.6 ) ..

7.6 a) primer7_6 ( )

7.6 ) primer7_6 ( )

7.6 ) primer7_6 ( )

98

7.6 ) primer7_6 ( )

7.6 ) primer7_6 ( )





string
( null ).
string,
null ( string
null ).


 , stringova
, string . stringove:
char string1[20], string2[20];

string1 = string2
if(string1==string2)
if(string1<string2)

strcpy(string1, string2)
if(strcmp(string1, string2)==0)
if(strcmp(string1, string2)<0)

99

7.
_____________________________________________
1.

,
5 .
stringova ( ).

100

7.
_____________________________________________
1.
:
)
10, ,
) , ),
Kraj.

2.
C :
)
(_),
) , ), .

3.
10
( )
:
) (
),
) .

4.

) (
) :
1. Unos
2. Izmene
3. Prikaz
4. Izlaz
4,
) 1. ,
, ,
) 2.
,
) 3. .

101

102

8.



stringova

103


_____________________________________________
primer8_1
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:

104

/primer8_1.c/
/Sortiranje svakog zadatog niza celih brojeva/
/u neopadajuci poredak, METOD IZBORA/
#include <stdio.h>
#define MAX 10
main()
{
int i, j, n, pom, niz[MAX];
while(1)
{
/Zadavanje duzine niza/
printf("\n\nUnesite broj elemenata niza n (n<=%d): ",MAX);
scanf("%d", &n);
if(n<1 || n>MAX)
break;
/Zadavanje elemenata niza/
printf("Unesite celobrojne vrednosti elemenata niza: ");
for(i=0; i<n; i++)
scanf("%d", &niz[i]);
/Prikaz na ekranu originalnog niza/
printf("\nOriginalni niz:\t");
for(i=0; i<n; i++)
printf("%d ",niz[i]);
/Sortiranje niza u neopadajuci poredak/
for(i=0; i<n-1; i++)
for(j=i+1; j<n; j++)
if(niz[i] > niz[j])
{
pom = niz[i];
niz[i] = niz[j];
niz[j] = pom;
}
/Prikaz na ekranu sortiranog niza/
printf("\nSortirani niz:\t");
for(i=0; i<n; i++)
printf("%d ",niz[i]);
}
}

primer8_1
,
.

.
,
( 12. 22.), .
: niz[0] niz[1] niz[2] Z niz[MAX-1],
.
: niz[0] < niz[1] < niz[2] < Z< niz[MAX-1].
: niz[0] niz[1] niz[2] Z niz[MAX-1],
,
: niz[0] > niz[1] > niz[2] > Z> niz[MAX-1].
.
, (
) .
, ,
( 32.) ( 33. 36.).
.
30. 36. :
( 30.)
, (i=0) (i=n-2) ,
( 31.)
, .

(i=0):
j=i+1=1, niz[0] > niz[1], ,
j=i+2=2, niz[0] > niz[2], ,
:
:
j=n-1,
niz[0] > niz[n-1], .

.

(i=1):
j=i+1=2, niz[1] > niz[2], ,
j=i+2=3, niz[1] > niz[3], ,
:
:
j=n-1,
niz[1] > niz[n-1], .
,
,
.

(i= n-2):
j=i+1= n-1, niz[n-2] > niz[n-1], ,

105

,

.
( ) n :
i=0, (n-1) ,
i=1, (n-2) ,
:
i= n-3, ,
i= n-2, ,
:
S = 1 + 2 +...+ (n-2) + (n-1), a (1+(n-1))(n-1)/2 = n(n-1)/2.
( 4 4(4-1)/2 = 6).
, 0,
, n n(n-1)/2 (
6).

.
32. , if(niz[i] > niz[j]) if(niz[i] < niz[j]).
8.1 a) 8.1 ) ,
, 8.1 )
. 8.1 )
,
, 0 10.

8.1 a) primer8_1 ( )

8.1 ) primer8_1 ( )

8.1 ) primer8_1 ( )

106

8.1 ) primer8_1 ( )

primer8_2
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:

/primer8_2.c/
/Sortiranje svakog zadatog niza celih brojeva/
/u neopadajuci poredak, METOD UMETANJA/
#include <stdio.h>
#include <stdlib.h>
#define MAX 10
main()
{
int i, j, pom, niz[MAX];
/Prikaz na ekranu originalnog niza/
printf("\nOriginalni niz:\t");
for(i=0; i<MAX; i++)
printf("%d ", niz[i]= rand( )/((double)RAND_MAX+1)10);
/Sortiranje niza u neopadajuci poredak/
for(i=1; i<MAX; i++)
{
pom = niz[i];
for(j=i-1; j>=0; j--)
if(niz[j] > pom)
niz[j+1] = niz[j];
else
break;
niz[j+1] = pom;
}
/Prikaz na ekranu sortiranog niza/
printf("\nSortirani niz:\t");
for(i=0; i<MAX; i++)
printf("%d ",niz[i]);
printf("\n\n");
}

107

primer8_2

, ,
.
, 0 10 (
14. 15.) 18. 28. :
( 18.)
, (i=1) (i=n-1)

(pom = niz[i]).
( 21.)
,
.

(i=1):
pom = niz[1]
j=i-1=0, niz[0] > pom, :
niz[1] = niz[0],
: niz[0] = pom

.

(i=2):
pom = niz[2]
j=i-1=1, niz[1] > pom, :
niz[2] = niz[1].
j=i-2=0, niz[0] > pom, :
niz[1] = niz[0],
: niz[0] = pom.

.
(i= MAX-1):
j=i-1== MAX-2, niz[MAX-2] > pom, :
niz[MAX-1] = niz[MAX-2].
:
j=i-(MAX-1)=0, niz[0] > pom, :
niz[1] = niz[0],
: niz[0] = pom.
,
.
( ) n :

, n(n-1)/2 ( 4 a: 4(4-1)/2 = 6).
:
i=1, ,
i=2, ,
:
i= MAX-1, ,
n-1 ( 4 : 4-1=3).

108

, 0,
, n, n(n-1)/2.
, je
22. , if if(niz[j] > pom if(niz[j] < pom).
8.2 .

8.2 primer8_2

primer8_3
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:

/primer8_3.c/
/Prikaz na ekranu vrednosti elemenata zadatog niza, bez ponavljanja/
#include <stdio.h>
#define MAX 10
main()
{
int i, j, nadjeni_isti;
float niz[MAX];
/Zadavanje niza/
printf("\n\nUnesite %d realnih brojeva:\n\n",MAX);
for(i=0; i<MAX; i++)
scanf("%f", &niz[i]);
/Prikaz elemenata niza bez ponavljanja/
printf("\nElementi zadatog niza, bez ponavljanja:\n\n");
for(i=0; i<MAX-1; i++)
{
nadjeni_isti=0;
for(j=i+1; j<MAX; j++)
if(niz[i]==niz[j])
{
nadjeni_isti=1;
break;
}
if(!nadjeni_isti)
printf("%f ", niz[i]);
}
printf("%f\n\n", niz[MAX-1]);
}

109

primer8_3
(
) , .
8. nadjeni_isti,
19. 0, .
12. 14. ( 8.3 a))
( ):
( 18.)
( 19.)

:

(i=0)
, .

(i=1)
.

(i=n-1)
.
, ,
niz[i] , nadjeni_isti
1
( break 24.)
, ,
nadjeni_isti 0 niz[i]
.
,
,
.
8.3 ) .

8.3 a) primer8_3 ( )

8.3 ) primer8_3 ( )

110

primer8_4
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:

/primer8_4.c/
/Pretrazivanje zadatog niza celih brojeva,/
/METODOM LINEARNOG PRETRAZIVANJA/
#include <stdio.h>
#define MAX 10
main()
{
int i, n, niz[MAX], broj, nadjen;
while(1)
{
/Zadavanje duzine niza/
printf("\n\nUnesite broj elemenata niza n (n<=%d): ",MAX);
scanf("%d", &n);
if(n<1 || n>MAX)
break;
/Zadavanje elemenata niza/
printf("Unesite celobrojne vrednosti elemenata niza: ");
for(i=0; i<n; i++)
scanf("%d", &niz[i]);
/Zadavanje trazene vrednosti/
printf("Unesite trazenu celobrojnu vrednost: ");
scanf("%d", &broj);
nadjen = 0;
/Pretrazivanje niza/
for(i=0; i<n; i++)
if(niz[i]==broj)
{
nadjen = 1;
printf("\nVrednost %d ima %d. element niza.",broj,i+1);
}
if(!nadjen)
printf("\nVrednost %d nije nadjena u nizu.",broj);
}
}

primer8_4
, , .

: , .

111

.
( ) primer8_1.
( 8.4 a) 8.4 )),
( broj) 26. 27. ( 8.4 ))
nadjen 0 ( 28.),
( 31. 35.)
( 8.4 ))
nadjen 1.
0 ( 8.4 )).

, (
) .

8.4 a) primer8_4 ( )

8.4 ) primer8_4 ( )

8.4 ) primer8_4 ( )

8.4 ) primer8_4 ( )

8.4 ) primer8_4 ( )

112

primer8_5
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:

/primer8_5.c/
/Pretrazivanje zadatog niza celih brojeva,/
/METODOM BINARNOG PRETRAZIVANJA/
#include <stdio.h>
#define MAX 10
main()
{
int i, niz[MAX], broj, nadjen=0;
int i_min=0, i_max=MAX-1, i_srednji;
/Formiranje niza/
for(i=0; i<MAX; i++)
niz[i] = 2i;
/Prikaz na ekranu originalnog niza/
printf("\nOriginalni niz:\t");
for(i=0; i<MAX; i++)
printf("%d ",niz[i]);
/Zadavanje trazene vrednosti/
printf("\n\nUnesite trazenu celobrojnu vrednost: ");
scanf("%d", &broj);
/Pretrazivanje niza/
while(i_min <= i_max)
{
i_srednji = (i_min + i_max)/2;
if(broj == niz[i_srednji])
{
nadjen = 1;
printf("\nVrednost %d ima ",broj);
printf("\n%d. element niza.\n\n",i_srednji+1);
break;
}
else if(broj < niz[i_srednji])
i_max = i_srednji - 1;
else
i_min = i_srednji +1;
}
if(!nadjen)
printf("\nVrednost %d nije nadjena u nizu.\n\n",broj);
}

113

primer8_5

,
.

i_min, i_max i_srednji. i_min
( 0), i_max
( MAX-1).
13. 14. (niz[i] = 2i, i=0 i<MAX),
, 0 2 (MAX-1).
( broj)
22. 23., , :
while , i_min <= i_max, i_srednji
i_min i_max ( 27.).
i_srednji
(
29. 34. ).
8.5 a) , 8.5 ).

i_srednji ,

i_srednji-1 (i_max i_srednji-1).
A
i_srednji ,
i_srednji+1 (i_min
i_srednji+1).
(
) .
( 4).
: 0 2 4 6 8 10 12 14 16 18,
i_srednji = (0 + 9)/2 = 4 ( ),
broj < niz[i_srednji], 4<niz[4],
i_max=i_srednji-1=3.
: 0 2 4 6,
i_srednji = (0 + 3)/2 = 1 ( ),
broj > niz[i_srednji], 4>niz[1],
i_min=i_srednji+1=2.
: 4 6,
i_srednji = (2 + 3)/2 = 2 ( ),
broj = niz[i_srednji], 4=niz[2],
4 2.

8.5 a) primer8_5 ( )

114

8.5 ) primer8_5 ( )

primer8_6
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:

/primer8_6.c/
/Sortiranje zadatog niza imena po abecednom redu./
/Za kraj izvrsavanja programa treba uneti dve kose crte/
#include <stdio.h>
#include <string.h>
#define BROJ_IMENA 100
#define DUZINA_IMENA 20
main( )
{
char

spisak[BROJ_IMENA][DUZINA_IMENA+1],
pom_ime[DUZINA_IMENA+1];
int i, j, n = 0;
/Zadavanje niza imena/
printf("\nOriginalni niz imena:");
printf("\n(Za kraj uneti dve kose crte)\n\n");
do
gets(spisak[n]);
while(strcmp(spisak[n++],"//") != 0);
n--;
/Sortiranje po abecednom redu/
printf("\nNiz imena, sortiran po abecednom redu:\n");
for(i=0; i<n-1; i++)
for(j=i+1; j<n; j++)
if(strcmp(spisak[i], spisak[j]) > 0)
{
strcpy(pom_ime, spisak[i]);
strcpy(spisak[i], spisak[j]);
strcpy(spisak[j], pom_ime);
}
/Prikaz sortiranog niza imena/
for(i=0; i<n; i++)
puts(spisak[i]);
printf("\n");

115

primer8_6

.
( 16. 22.)
, .
strcmp(),
strcpy(). string.h.
:
spisak[0] spisak[1] spisak[1] spisak[BROJ_IMENA-1]
8.6 a) , 8.6 )
,
( ).

8.6 a) primer8_6 ( )

8.6 ) primer8_6 ( )



.



, .

116

8.
_____________________________________________
1.
,
n (n<=20) .

117

8.
_____________________________________________
1.
n (n<=20),
, :
) , ,
) , .

2.

, n (n<=20), , ,
, n+1.

3.
,
n (n<=20),
, .

4.
n
(n<=20), , (
: , ,...).

5.
string
.

118

9.

119


_____________________________________________
primer9_1
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:

/primer9_1.c/
/Prikaz na ekranu sadrzaja i adrese celobrojne promenljive/
/na dva nacina: direktno i indirektno (pomocu pokazivaca)/
# include <stdio.h>
main( )
{
int x = 1;
int ptr;
ptr = &x;

/deklaracija pokazivaca/
/inicijalizacija na adresu promenljive x/

printf("\nDirektan pristup: x = %d", x);


printf("\nIndirektan pristup: x = %d", ptr);
printf("\nAdresa promenljive prikazana na 1. nacin: %d", &x);
printf("\nAdresa promenljive prikazana na 2. nacin: %d\n\n", ptr);
}

primer9_1
(pointer) (
, ,
, ...) .

.
.
(
), ( ).
, ,
(
). ,
(
).

int ptr
9. (int ptr;). ()
, .
,
int. char
: char ptr;
double: double ptrZ .

120

: void ptr; (void


).
,

.
10. ptr .
ptr x (ptr = &x).
(&) scanf(%d, &broj)
,
broj;
ptr:
- x
: (x) (ptr),
- x
: (&x) (ptr).
9.1 12. 13.
. x,
ptr, .
14. 15. ( 9.1).
x,
ptr, .

9.1 primer9_1

primer9_2
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:

/primer9_2.c/
/Prikaz na ekranu adresa elemenata nizova razlicitih tipova/
#include <stdio.h>
main( )
{
int i;
char cniz[10];
int iniz[10];
double dniz[10];
printf("\t\tchar\tint\tdouble\n\n");
for(i=0; i<10; i++)
printf("Element %d.\t%d\t%d\t%d\n",i+1,&cniz[i],&iniz[i],&dniz[i]);
}

121

primer9_2

, .
8. 10. : ,
int double (
10). 12.
( ), for ( 14.
15.) :
. 9.2
:
- char :
1,
- int :
4,
- double: 8.
,
: (
) .

9.2 primer9_2

primer9_3
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:

122

/primer9_3.c/
/Prikaz na ekranu vrednosti elemenata/
/jednodimenzionalnog niza celih brojeva pomocu pokazivaca na niz/
#include <stdio.h>
main( )
{
int niz[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int ptr, i;
ptr = niz;
/pokazivac sadrzi adresu prvog elementa niza/
for(i=0; i<10; i++)
printf("%d\n",ptr++);
}

primer9_3

( 8.), ptr
int ( 9.).
: ( )
( ).
10. (ptr = niz;) ptr
( ).
( )
.
1,
. int ptr;
, ptr++;
: 4 ( int),
.
.
.
(
.)
for 12. 13. :
for(i=0; i<10; i++)
{
printf("%d\n",ptr);
ptr++;
}
,
.

( 9.3).

9.3 primer9_3

123

primer9_4
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:

/primer9_4.c/
/Prikaz na ekranu sadrzaja znakovne promenljive/
/na dva nacina: direktno i indirektno (pomocu pokazivaca)/
#include <stdio.h>
main( )
{
char c;
char ptr;
ptr = &c;

/ptr sadrzi adresu promenljive c/

c = 'A';
printf("\nDirektna dodela vrednosti:\tc = %c", c);
ptr = 'a';
printf("\nIndirektna dodela vrednosti:\tc = %c", c);

/Prikaz vrednosti promenljive c indirektno, pomocu ptr/


printf("\nPosredan pristup:\t\tptr = %c\n\n", ptr);
}

primer9_4

char ( 9.) o c
( 10.).
12. 13. (ASCII A)
c,
, .
15. 16. (ASCII a)
c, ,
, .
19. c
, . 9.4 .

9.4 primer9_4

124

primer9_5
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:

/primer9_5.c/
/Prikaz na ekranu sadrzaja znakovnog niza/
/na dva nacina: direktno i indirektno (pomocu pokazivaca)/
#include <stdio.h>
main( )
{
int i;
char ptr;
char string[] = "Jedan znakovni niz.\n";
/Primena indeksiranja za prikaz znakovnog niza/
printf("\nPrikaz znakovnog niza pomocu indeksiranja:\t");
for(i=0; string[i]!='\0'; i++)
putchar(string[i]);
/Primena pokazivaca na znak za prikaz znakovnog niza/
printf("\nPrikaz znakovnog niza pomocu pokazivaca na niz:\t");
for(ptr = string; ptr != '\0'; ptr++)
putchar(ptr);
putchar('\n');
}

primer9_5

char ( 9.)
char ( 10.).
for 14. 15.
('\0'- )
( putchar()). for
(string[i], i
).
for 19. 20.
('\0'- )
( putchar()).
.
for
(ptr = string). , ptr!='\0',
(putchar(ptr);)
(ptr++).
( 9.5)
.

125

9.5 primer9_5

primer9_6
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:

/primer9_6.c/
/Prikaz na ekranu sadrzaja niza karaktera/
/u direktnom i inverznom poretku/
#include <stdio.h>
main( )
{
char string[] = "abcdefg", ptr;
ptr = string;
/ptr sadrzi adresu prvog znaka u nizu/
printf("\nZadati znakovni niz u direktnom poretku:\t");
while(ptr)
putchar(ptr++);
/putchar(ptr++);{putchar(ptr);ptr++;}/
printf("\n\nZadati znakovni niz u inverznom poretku:\t");
while(--ptr >= string)
putchar(ptr);
printf("\n\n");
}

primer9_6

, ptr char (

) ( 8.). ptr
( ) ( 9.).
while 12. 13. ptr.
0 ('\0') while
ptr ptr
.
( 9.6).
while 16. 17. (
(\0') )
ptr.
(string) while ( 12.)
126

ptr.
( ) ( 9.6).

9.6 primer9_6

primer9_7
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:

/primer9_7.c/
/Prikaz na ekranu odredjenog znaka u jednom redu teksta/
/na dva nacina: pomocu indeksa i pomocu pokazivaca/
#include <stdio.h>
#include <string.h>
#define MAX 80

/broj korisnih karaktera u stringu/

main( )
{
int rbr, l;
char tekst[MAX+1], ptr;
ptr = tekst;

/ptr sadrzi adresu prvog znaka u nizu/

printf("\nUnesite jedan red teksta:\n\n");


gets(tekst);
do
{

printf("\nUnesite redni broj znaka u redu teksta: ");


scanf("%d", &rbr);
}while(rbr<1 || rbr>(l=strlen(tekst)));
/Prikaz odredjenog znaka u tekstu pomocu indeksa/
printf("\nPrikaz trazenog znaka pomocu indeksa:\t\t");
putchar(tekst[rbr-1]);
/Prikaz odredjenog znaka u tekstu pomocu pokazivaca/
printf("\nPrikaz trazenog znaka pomocu pokazivaca:\t");
putchar((ptr + rbr-1));
putchar('\n');
}

127

primer9_7

tekst, ptr ( 11. 12.).
( 9.7 ))
, ( 14. 15.). ,
do..while
( 9.7 ))
( 17. 20.).
24. ( )
.
28. ( )

. , (rbr-1)
(ptr) ,
(rbr-1). n ptr :

1.
2.
niz[0]
niz[1]
:
niz[i]
:
niz[n-1]

niz
(niz+1)
:
(niz+i)
:
(niz+n-1)

ptr
(ptr+1)
:
(ptr+i)
:
(ptr+n-1)


, .
,

, .
( 9.7)).

9.7 ) primer9_7 ( )

9.7 ) primer9_7 ( )

9.7 ) primer9_7 ( )
128

primer9_8
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:

/primer9_8.c/
/Pomeranje pozitivnih elemenata zadatog niza celih brojeva/
/na pocetak niza i popunjavanje ostatka niza nulama/
#include <stdio.h>
#define MAX 10

/dozvoljena duzina niza/

main()
{
int i, n1, n2, niz[MAX];
int ptr1, ptr2;
ptr1 = ptr2 = niz;
do
{

printf("\nBroj elemenata niza, n<=%d? ", MAX);


scanf("%d", &n1);
}while(n1<1 || n1>MAX);
printf("\nZadati niz:\n\n");
for(i=0; i<n1; i++)
scanf("%d", niz+i);
/Sazimanje niza/
for(i=0; i<n1; i++)
{
if(ptr1 > 0)
{
ptr2 = ptr1;
ptr2++;
}
ptr1++;
}
n2 = ptr2 - niz;
/Popunjavanje ostatka niza nulama/
if(n2<n1)
for(i=n2; i<n1; i++)
(niz+i) = 0;
printf("\nIsti niz posle sazimanja:\n\n");
for(i=0; i<n1; i++)
printf("%d ", (niz+i));
printf("\n\n");
}

129

primer9_8

: ,
.
( 9.)
ptr1 ptr2 ( 10.),
, .
11.
(ptr1 ptr2) ( ).
n1 ( 9.8 ))
( 9.8 )) ( 13. 20.).
for , 23.,
. , (
ptr1) 0, if 24.
25. 26.: ptr2
ptr1 ptr2
. ptr1
( 28.).
: ptr1
, ptr2
, .
,

ptr2. for n2
, ptr2 niz
( 31.).
( )
, for 35. 36.
.
for 39. 40. ,
( 9.8 ).

9.8 ) primer9_8 ( )

9.8 ) primer9_8 ( )

130

9.8 ) primer9_8 ( )


 .
int
int,
int...
 ( )
( ).


 (
).
 ( int)
( float).

(
).
 ,
1, .

131

9.
_____________________________________________
1.

:
#include <stdio.h>
main( )
{
char c, ptr_c;

ptr_c = X;
putchar(ptr_c);

2.
e :
int i, x = 10, y = 20, z[ ] = {10, 20, 30, 40};
int ptr;
ptr = &x;
:
y = ptr; ptr = 0; ptr = z; ptr = 1; (ptr+1) = 2; (ptr+2) = 3; (ptr+3) = 4;
:
printf(%d %d\n, x, y);
for(i=0; i<4; i++)
printf(%d ,(z+i));

3.

n (n10) ( : ,
). .

132

9.
_____________________________________________
.

1.
n (n80)
k :
) k ,
) k ,
) k.

2.
n (n80)
:
) ( :
, ...),
) ( :
, ...).

3.

n (n10),
. ,
.

4.
n
(n80) ,
: , \t, \v,
, \0.

133

134

10.

135


_____________________________________________
primer10_1
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:

/primer10_1.c/
/Odredjivanje veceg od dva broja pomocu odgovarajuce funkcije/
#include <stdio.h>
int max(int x, int y);

/deklaracija funkcije/

main( )
{
int a, b, c;
printf("\nZadati dva cela broja: ");
scanf("%d%d", &a, &b);
c = max(a, b);
/poziv funkcije/
if(c == 0)
printf("\nZadati brojevi su isti!!!\n");
else
printf("\nVeci od dva zadata broja je broj %d\n\n", c);
return 0;
}
/Definicija funkcije koja odredjuje veci od dva broja/
int max(int x, int y)
{
if(x == y)
return 0;
else
return ((x>y)?x:y);
}

primer10_1

main(). ,
a, (printf(),
scanf(), getchar(), putchar(), gets(), puts()Z).
, ,

. , ,
, .
,
.
,
, ANSII C
: (), .
136


. 6. :
max,
(
x y, int),
( int)
.
( 6.)

. (
) , (
).
( ) . ,
,
(
, ,
). , void
() .

( 10.1 )), max 14.
max
a b ( ) c.
max 14. ,
( 23. 28.).
.
23. () max. ,
,
(;),
( 24. 28.). , (
), , ,
. 24. max
,
return; 0 ( 25.)
. ( 26.) return;
( (x>y)?x:y).
, ,

. ( ,
int return 0;.)
void
return (
return ,
return. ).
max (x y)
(a b).
. max
, (
,
). .
, , .

137

max, return,
(0 )
c ( 14.). ( 15. 18.)
c ( 10.1 )).
20. (return 0;)
( )
. ,

.
.

return 0;.
,
,
.

10.1 ) primer10_1 ( )

10.1 ) primer10_1 ( )

primer10_2
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:

138

/primer10_2.c/
/Odredjivanje najveceg od cetiri broja pomocu odgovarajucih funkcija/
/ (ako ima jednakih brojeva, vazi redosled zadavanja) /
#include <stdio.h>
int max(int x, int y);
int max4(int x, int y, int z, int w);
main( )
{
int a, b, c, d;
printf("\nZadati cetiri cela broja: ");
scanf("%d%d%d%d", &a, &b, &c, &d);
printf("\nNajveci od cetiri zadata broja je %d\n\n", max4(a,b,c,d));
return 0;
}

20:
21:
22:
23:
24:
25:
26:
27:

/Funkcija koja odredjuje veci od dva broja/


int max(int x, int y)
{
return ((x>=y)?x:y);
}
/Funkcija koja odredjuje najveci od cetiri broja/
int max4 (int x, int y, int z, int w)
{
return (max(max(x,y), max(z,w)));
}

primer10_2

.

7. 8.
7. max()
int int.
21. 23. max().
( 22.)
(
).
8. max4(),
int int.
25. 27. max4().
( 26.)
max() : max()
(x,y), max()
(z,w).
( 10.2 ))
( 14.)
printf() ( 10.2 )) max4()
(a, b, c d).

10.2 ) primer10_2 ( )

10.2 ) primer10_2 ( )

139

primer10_3
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:

/primer10_3.c/
/ Odredjivanje faktorijela n! = n(n-1) (n-2) `321 /
/ zadatog prirodnog broja n, pomocu iterativne funkcije /
#include <stdio.h>
#define OPSEG 12

/dozvoljeni opseg za broj/


/da faktorijel broja bude u opsegu long/

long ifakt(int x);


main()
{
int broj;
do
{

printf("\nUnesite ceo broj u opsegu od 1 do %d: ", OPSEG);


scanf("%d", &broj);
}while(broj<1 || broj>OPSEG);
printf("\nFaktorijel broja %d je %ld\n\n", broj, ifakt(broj));
return 0;
}
/Funkcija koja primenom iteracije odredjuje faktorijel broja/
long ifakt(int x)
{
long rezultat = 1;
while(x>1)
{
rezultat =x;
x--;
}
return rezultat;
}

primer10_3
(n!=n(n-1)(n-2)Z321)
(n) ( while ).
8. ifakt(),
int long.
23. 32. ifakt(). ,
:
- rezultat
1 ( 24.),
- while 26. 29.
x ( ) 1 :
rezultat

140

x
x ( x, (x-1), (x-2),, 2),
- 31., rezultat.

( 10.3 )) .
1 12 ( long) (
18.)
ifakt() ( 10.3 )). 5
ifakt() (5)
: rezultat = 15432.

10.3 ) primer10_3 ( )

10.3 ) primer10_3 ( )

primer10_4
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:

/primer10_4.c/
/Izracunavanje faktorijela zadatog broja pomocu rekurzivne funkcije/
#include <stdio.h>
#define OPSEG 12

/dozvoljeni opseg za broj/


/da faktorijel broja bude u opsegu long/

long rfakt(int x);


main()
{
int broj;
do
{

printf("\nUnesite ceo broj u opsegu od 1 do %d: ", OPSEG);


scanf("%d", &broj);
}while(broj<1 || broj>OPSEG);
printf("\nFaktorijel broja %d je %ld\n\n", broj, rfakt(broj));
return 0;
}
/Funkcija koja primenom rekurzije odredjuje faktorijel broja/
long rfakt(int x)
{
return ((x>1)? (xrfakt(x-1)) : 1);
}
141

primer10_4
(n!=n(n-1)(n-2)Z321)
(n), .
,
(
).
7. rfakt(),
int long.
22. 24. rfakt().
:
- 1

,
- 1, 1.

( 10.4 )) ( 1
12), long.
17.
rfakt() ( 5):
- a printf() rfakt(5),
- rfakt(5) rfakt(4) : 5 rfakt(4),
- rfakt(4) rfakt(3) : 4 rfakt(3),
- rfakt(3) rfakt(2) : 3 rfakt(2),
- rfakt(2) rfakt(1) : 2 rfakt(1),
- rfakt(1) : 1.
( 10.4 ))
(54321).

(
,
).

10.4 ) primer10_4 ( )

10.4 ) primer10_4 ( )

142

primer10_5
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:

/primer10_5.c*/
/Izracunavanje vrednosti izraza a!/(b!(a-b)!)/
/pomocu funkcije koja odredjuje faktorijel broja/
#include <stdio.h>
#define OPSEG 12

/dozvoljeni opseg za broj/


/da faktorijel broja bude u opsegu long/

long rfakt(int x);


main()
{
int a, b;
do
{ printf("\nUnesite dva cela broja,u opsegu od 1 do %d,", OPSEG);
printf("\nprvi broj treba da bude veci od drugog:\t");
scanf("%d%d", &a, &b);
}while(a<1 || a>OPSEG || b<1 || a<=b);
printf("\nVrednost izraza %d!/(%d!(%d-%d)!) je ",a,b,a,b);
printf("%ld\n\n", rfakt(a)/(rfakt(b)*rfakt(a-b)));
return 0;
}
/Funkcija koja primenom rekurzije odredjuje faktorijel broja/
long rfakt(int x)
{
return ((x>1)? (xrfakt(x-1)) : 1);
}

primer10_5
: a!/(b!(a-b)!)
a b ( 10.5 )).
( 8.
25. 27.) .
( 10.5
)) :
( rfakt()), b ( rfakt(b)) a
b ( rfakt(a-b)),
( 20.).

10.5 ) primer10_5 ( )

143

10.5 ) primer10_5 ( )

primer10_6
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
144

/primer10_6.c/
/Postavljanje vrednosti bita na zadatoj poziciji/
/u zadatom broju, pomocu odgovarajucih funkcija/
#include <stdio.h>
#define JEDAN_BAJT
#define BAJTOVA
#define MASKA

8
/broj bitova u bajtu/
2
/opseg od dva bajta/
0xffff /svi bitovi maske imaju vrednost 1/

unsigned bit_set(unsigned x, unsigned y);


unsigned bit_reset(unsigned x, unsigned y);
main()
{
unsigned broj, poz, set;
while(1)
{ printf("\nUnesite pozitivan ceo broj (opseg %d bajta),", BAJTOVA);
printf("\nu heksadecimalnom formatu:\t\t");
scanf("%x", &broj);
if(broj>MASKA)
break;
do
{
printf("\nUnesite poziciju bita,");
printf("\nredni broj od bita najmanje tezine:\t");
scanf("%u", &poz);
}while(poz>JEDAN_BAJTBAJTOVA);
do
{
printf("\nUnesite vrednost bita (1 ili 0):\t");
scanf("%u", &set);
}while(set<0 || set>1);
if(set)
printf("\nRezultujuci broj:\t\t\t%#x\n", bit_set(broj, poz));
else
printf("\nRezultujuci broj:\t\t\t%#x\n", bit_reset(broj, poz));
}
return 0;
}

40:
41:
42:
43:
44:
45:
46:
47:

/Funkcija koja dodeljuje vrednost 1 bitu na zadatoj poziciji u broju/


unsigned bit_set(unsigned x, unsigned y)
{
return (x | (1 << (y-1)));
}
/Funkcija koja dodeljuje vrednost 0 bitu na zadatoj poziciji u broju/
unsigned bit_reset(unsigned x, unsigned y)
{
return (x & (MASKA ^ (1 << (y-1))));
}

primer10_6
e e
1 (set) 0 (reset) .
10. 11. bit_set()
bit_reset(), int
unsigned.
41. 43. bit_set().
: x | (1 <<
(y-1)). (x) 1,
(y) ( ).
(|).
45. 47. bit_ reset ().
:
x & (MASKA ^ (1 << (y-1))). , (x)
0, (y) (
). (^)
(0xfff).
( 17.)
, (1 set 0 reset).
, ( 34.
36.) : broj (
) poz( ), .
, 0x4444 5,
x | (1 << (y-1)) 10.6 a):

01000100 01000100
00000000 00010000
01000100 01010100

(0x4444)
(1 << (5-1))
(0x4454)

, 0x4444 3,
x & (MASKA ^ (1 << (y-1))) 10.6 ):

&

01000100 01000100
11111111 11111011
01000100 01000000

(0x4444)
(0xffff ^ (1 << (3-1))
(0x4440)

145

10.6 )
primer10_6 ( )

146

10.6 )
Primer10_6 ( )

primer10_7
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:

/primer10_7.c/
/Pomeranje bitova u zadatom broju, za zadati broj mesta,/
/u zadatom smeru i pomocu odgovarajucih funkcija/
#include <stdio.h>
#include <ctype.h>
#define JEDAN_BAJT
#define BAJTOVA
#define OPSEG

8
/broj bitova u bajtu/
2
/opseg od dva bajta/
0xffff /svi bitovi maske imaju vrednost 1/

unsigned pomeren(unsigned x, unsigned y, unsigned z);


main()
{ unsigned int broj, pomeraj, smer;
while(1)
{ do
{ printf("\nUnesite pozitivan ceo broj (opseg %d bajta),", BAJTOVA);
printf("\nu heksadecimalnom formatu (0 za kraj):\t");
scanf("%x", &broj);
}while(broj>OPSEG);
if(broj==0)
break;
do
{ printf("\nUnesite broj mesta za pomeranje:\t");
scanf("%u", &pomeraj);
getchar();
}while(pomeraj>=JEDAN_BAJTBAJTOVA);
do
{ printf("\nZadati smer slovom: D(d) ili L(l):\t");
smer = toupper(getchar());
getchar();
}while(smer != 'D' && smer != 'L');
printf("\nRezultujuci broj:\t\t\t%#x\n", pomeren(broj, pomeraj, smer));
}
return 0;
}
/Funkcija koja bitove zadatog broja pomera/
/za zadati broj mesta u zadatom smeru/
unsigned pomeren(unsigned x, unsigned y, unsigned z)
{
return ((z=='D')?(x>>=y):(x<<=y));
}

147

primer10_7

.
11. pomeren(),
int int.
42. 44. .
, (z),
('D') (x)
(y).
( 43.). (x)
.

(broj), (pomeraj)
(smer) ( 10.7 ), 10.7 ) 10.7 )). ( 36.)
pomeren(), (broj,
pomeraj smer).
(%#x).
0x, 3 (D),
10.7 ):
10101010 10101010
(0x)
00010101 01010101
(0xaaaa >> 3:  0x1555 )
while(1)
( 16. 37.) 0 ( 23. 24.)

10.7 ) primer10_7 ( )

10.7 ) primer10_7 ( )

10.7 ) primer10_7 ( )

10.7 ) primer10_7 ( )

148

primer10_8
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:

/primer10_8.c/
/Crtanje na ekranu okvira zadatih dimenzija./
#include <stdio.h>
#define HLIN
#define VLIN
#define UGAO
#define PRAZNO
#define MAX1
#define MAX2

'-'
'|'
'+'
''
50
20

/znak horizontalna crta okvira/


/znak vertikalna crta okvira/
/znak za ugao okvira/
/prazan znak/
/dozvoljena duzina okvira/
/dozvoljena sirina okvira/

void hokvir(int l);


void vokvir(int l);
void znakovi(int n, char c);
main()
{
int i, duzina, sirina;
do
{

printf("\nUnesite duzinu okvira (od 1 do %d): ",MAX1);


scanf("%d", &duzina);
}while(duzina<1 || duzina>MAX1);
do
{

printf("\nUnesite sirinu okvira (od 1 do %d): ",MAX2);


scanf("%d", &sirina);
}while(sirina<1 || sirina>MAX2);
/Stampanje gornjeg dela okvira/
hokvir(duzina);
/Stampanje srednjeg dela okvira/
for(i=0; i<sirina; i++)
vokvir(duzina);
/Stampanje donjeg dela okvira/
hokvir(duzina);
return 0;
}
/Funkcija koja crta horizontalni deo okvira/
void hokvir(int l)
{
putchar(UGAO);
znakovi(l, HLIN);
putchar(UGAO);
putchar('\n');
}

149

48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:

/Funkcija koja crta jedan red vertikalnog dela okvira/


void vokvir(int l)
{
putchar(VLIN);
znakovi(l, PRAZNO);
putchar(VLIN);
putchar('\n');
}
/Funkcija koja prikazuje zadati znak zadati broj puta/
void znakovi(int n, char c)
{
while(n>0)
{
n--;
putchar(c);
}
}

primer10_8

. (
.
12., 13. 14. hokvir(),
vokvir() znakovi() :
hokvir() int ( )
(
),
vokvir() int (
) (
),
znakovi() int ( )
char (ASCII ).
42. 47. hokvir().
'+'
( 7. ), znakovi()
( 44.),
( 45.) ( 46.).
49. 54. vokvir().
:
( 50.), znakovi()

( 51.),
( 52.) ( 53.).
56. 61. znakovi(),
n (
ASCII ).
( 19. 22.)
( 24. 27.) ( 10.8 ) 10.8 )), :
hokvir(),
( 30.),

150

vokvir() ( 33. 34.)


,
hokvir(),
( 37.).
10.8 ).

10.8 ) primer10_8 ( )

10.8 ) primer10_8 ( )

10.8 ) primer10_8 ( )


 .
.
 (),
(
) .

() -.



,
.

.

(int x, int) (int x, y).
 .
return, .

151

10.
1.
:
) f1, k int float,
) f2, k float .

2.
:
void duplo_vece(int x);
}
{
return (2x);

3.
:
#include <stdio.h>
void stampa_poruku(void);
main()
{
stampa_poruku(\nU ovom kodu postoje sintaksne greske); }
void stampa_poruku(void);
{
printf(\nU ovom kodu postoje sintaksne greske);
return 0;
}

4.

a b k
0, b 0 ( a, b k
).

152

10.
1.

, min(x,y) max(x,y).

2.

:
( : ,
...).

3.
n (n80)

,
, ...,
, (L D).

4.
:
1
1
1
+
...
2!! 3!! 4!!
:

S =1+

n * (n 2) * ... * 3 *1, _ _ n
dupli _ fakt (n) = n!!=
n * (n 2) * ... * 4 * 2, _ _ n
,
.

5.
:
F(k,x) = f(f(Zf(x)Z)).
f k : f(x) = 2x x2. x k
.

153

154

155

1.
C
(1)
+

(1)

(x ) =
0

et
dt
1 + xt

( 2)

f ( x ) = 1 1! x + 2! x 2 3! x 3 + ... = ( 1) n ! x n
n

n =0

n. (2) x
x=0

(x

> xn+1 , xn = ( 1) n ! x n
n

, .
x (0<x<1).

1.
/Program za odredjivanje priblizne vrednosti zadatog integrala/
#include <stdio.h>
main()
{
double x,s=1,znak=-1,preth;
int i;
do
{

printf("Unesite vrednost za x (0<x<1)\n");


scanf("%lf",&x);
}while(x<0||x>1);
s+=znak*x;
preth=x;
i=2;
while(1)
{
znak*=-1;
if(preth<preth*x*i) break;
preth*=x;
s+=znak*preth;
i++;
}
s+=znak*preth*i/2;
printf("\ns=%lf\n\nRezultat je dobijen sumiranjem prvih %d clanova.\n",s,i);
}
156

2.
,
(p1, p2, p3 p4), , disk parity (dp)
:
dp = p1 p2 p3 p4
XOR ( )
)
,
,
)
p3,
,
p3 dp
p1, p2 p4 (p3 = dp p1 p2 p4),
)
disk parity (dp)
dp p3 (dp = dp p3).

2.
/Program za izracunavanje vrednosti disk parity na osnovu zadatih
odgovarajucih podataka/
#include <stdio.h>
main()
{
unsigned short int p1,p2,p3,p4,dp,preth,i;
printf("Unesite cetiri prirodna broja\n");
scanf("%u%u%u%u",&p1,&p2,&p3,&p4);
printf("p1= %d u binarnom zapisu ",p1);
for(i=0;i<16;i++)
printf("%d",(p1>>(15-i))&1);
printf("\n");
printf("p2= %d u binarnom zapisu ",p2);
for(i=0;i<16;i++)
printf("%d",(p2>>(15-i))&1);
printf("\n");
printf("p3= %d u binarnom zapisu ",p3);
for(i=0;i<16;i++)
printf("%d",(p3>>(15-i))&1);
printf("\n");
printf("p4= %d u binarnom zapisu ",p4);
for(i=0;i<16;i++)
printf("%d",(p4>>(15-i))&1);
printf("\n");

157

/*izracunavanje vrednosti disk parity*/


dp=p1^p2^p3^p4;
printf("disk parity= %d u binarnom zapisu ",dp);
for(i=0;i<16;i++)
printf("%d",(dp>>(15-i))&1);
printf("\n\n");
printf("Unesite novu vrednost za p3: ");
scanf("%u",&p3);
printf("Nova vrednost promenljive p3 je %u.\n",p3);
/*rekonstrukcija izgubljene vrednosti iz ostalih vrednosti i dp*/
preth=dp^p1^p2^p4;
printf("\nStara vrednost promenljive p3");
printf("\nrekonstruisana iz disk parity i p1,p2 i p4 je %u.\n",preth);
/*izracunavanje i prikaz nove vrednosti dp*/
printf("\nNova vrednost disk parity ");
printf("posle promene vrednosti p3 je %d\n",dp=dp^p3);
}

158

3.
C
x ( ) ,
y n x,
p, . :
x=0000 1001 1101 1111, p=3,
y=0000 1001 0010 0111.

n=5

3.
/Program za invertovanje odredjenih bitova u zadatom podatku/
#include <stdio.h>
main()
{
unsigned short x,y,i,p,n,pom;
printf("Unesite vrednost promenljive x:");
scanf("%u",&x);
printf("x= %d u binarnom zapisu x=",x);
for(i=0;i<16;i++){
if(i%4==0) printf(" ");
printf("%d",(x>>(15-i))&1);
}
printf("\n");
do
{

printf("Pozicija i broj bitova za invertovanje (0<p<16 i n+p<16)");


scanf("%u%u",&p,&n);
}while(p<0||p>15||p+n>15);
pom=0xfff;
pom>>=p;
pom<<=p;
pom<<=(16-p-n);
pom>>=(16-p-n);
y=(x^pom);
printf("y= %d u binarnom zapisu y=",y);
for(i=0;i<16;i++){
if(i%4==0) printf(" ");
printf("%d",(y>>(15-i))&1);
}
printf("\n\n");
}

159

4.

, Lagranzovog .
,
. ,
.
:
n

(x x
n

L =
n

i =1

j =1
j i

j =1
j i

(Lagranov )

(x

xj)

4.
/Program za izracunavanje vrednosti funkcije u nekoj tacki iz zadatog
intervala, pomocu Lagranzovog polinoma/
#include<stdio.h>
#define MAX 20
main()
{
float cvor[MAX],vrednost[MAX],tacka,s,p;
int n,imin=0,imax=0,i,j;
/*unosi se broj tacaka*/
while(1)
{
printf("\nKoliko ima tacaka (najvise %i)? ",MAX);
scanf("%i",&n);
if(n>0 && n<=MAX) break;
printf("\nVan opsega");
}
/*unos tacaka i vrednosti funkcije u tim tackama*/
printf("\nZadati tacke i vrednosti funkcije u datim tackama\n");
for(i=0;i<n;i++)
{
printf("\n%i. tacka i vrednost funkcije u datoj tacki:\n ",i+1);
scanf("%f%f",&cvor[i],&vrednost[i]);
for(j=0;j<i;j++)
if(cvor[i]==cvor[j])
{
printf("\nTacka vec postoji\n");i--;break;}
/*trazenje gornje i donje granice intervala*/
if(cvor[i]>cvor[imax]) imax=i;
if(cvor[i]<cvor[imin]) imin=i;
}

160

while(1)
{
printf("\nUneti tacku iz intervala (%.2f,%.2f)", cvor[imin],cvor[imax]);
printf(" u kojoj se izracunava vrednost funkcije ");
scanf("%f",&tacka);
if(tacka<cvor[imin] || tacka>cvor[imax])
{
printf("\nTacka se nalazi van zadatog intervala\n");break;
}
s=0.0;
for(i=0;i<n;i++)
{
p=1.0;
for(j=0;j<n;j++)
if(i!=j) p*=(tacka-cvor[j])/(cvor[i]-cvor[j]);
s+=p*vrednost[i];
}
printf("\nTrazena vrednost je %f\n",s);
}
}

161

5.
:
16- 16
: 1 , 0
.
, :
) ,
) ,
) ,
) .

5.
/Program za kontrolu osvetljenosti pomocu bitova odgovarajuceg registra/
#include <stdio.h>
main()
{
unsigned short int registar,i, m;
printf("Pocetni (slucajan) sadrzaj registra:\t");
for(i=0;i<16;i++)
{
if(i%4==0)
printf(" ");
printf("%d",(registar>>(15-i))&1);
}
/*Svetle sve sijalice*/
printf("\nSvetle sve sijalice:\t\t\t");
registar=registar|(~registar);
for(i=0;i<16;i++)
{
if(i%4==0)
printf(" ");
printf("%d",(registar>>(15-i))&1);
}
/*Svetli svaka druga sijalica*/
for(i=0;i<4;i++)
{
registar<<=4;
registar|=10;
}
printf("\nSvetli svaka druga sijalica:\t\t");
for(i=0;i<16;i++)
{
if(i%4==0)
printf(" ");
printf("%d",(registar>>(15-i))&1);
}

162

/*Svetli grupa od tri sijalice pocevsi od m-te*/


do
{
printf("\n\nUnesite m: ");
scanf("%d", &m);
}while(m>16 || m<0);
registar&=(7<<(m-1));
registar|=(7<<(m-1));
printf("\nSvetle tri sijalice pocevsi od %d.:\t",m);
for(i=0;i<16;i++)
{
if(i%4==0)
printf(" ");
printf("%d",(registar>>(15-i))&1);
}
/*Ne svetli ni jedna sijalica*/
registar^=registar;
printf("\nNe svetli ni jedna sijalica:\t\t");
for(i=0;i<16;i++){
if(i%4==0)
printf(" ");
printf("%d",(registar>>(15-i))&1);
}
printf("\n\n");
}

163

6.


.
:
+)
-)
*)
')
x)
i)

6.
/Program za realizaciju dozvoljenih operacija nad zadatim polinomima/
#include<stdio.h>
#include<ctype.h>
#define MAX 20
main()
{
float prvi[MAX+1],drugi[MAX+1],rezultat[2*MAX+1],s,x;
int n,m,i,j,znak,p,izvod;
char opcija;
while(1)
{
printf("\n\nOvo je program za rad sa polinomima\n");
printf("\n+) Sabiranje polinoma");
printf("\n-) Oduzimanje polinoma");
printf("\n*) Mnozenje polinoma");
printf("\n') Izvod polinoma");
printf("\nx) Vrednost polinoma u tacki");
printf("\ni) Izlaz");
printf("\n\nIzaberite opciju ");
opcija=tolower(getchar());
if(opcija=='i') break;
if(
opcija !='+' && opcija !='-' &&
opcija !='*' && opcija !='\'' && opcija !='x')
{
printf("\nNepoznata opcija\n");getchar();continue;

for(i=0;i<=MAX;i++)
prvi[i]=drugi[i]=rezultat[i]=rezultat[MAX+i]=0;
/*stepen prvog polinoma*/
do
{
printf("\nUnesite stepen prvog polinoma (<=%i)",MAX);
scanf("%i",&n);
}while (n<0 || n>20);

164

/*koeficijenti prvog polinoma*/


printf("\nUnesite koeficijente prvog polinoma\n");
for(i=n;i>=0;i--)
{
printf("koeficijent uz %i. stepen: ",i);
scanf("%f",&prvi[i]);
if(prvi[n]==0)
{
printf("\nVodeci koeficijent ne sme da bude 0\n");i++;}
}
if(opcija=='+' || opcija=='-' || opcija=='*')
{
//stepen drugog polinoma
do
{
printf("\nUnesite stepen drugog polinoma (<=%i)",MAX);
scanf("%i",&m);
}
while (m<0 || m>MAX);
/*koeficijenti drugog polinoma*/
printf("\nUnesite koeficijente drugog polinoma\n");
for(i=m;i>=0;i--)
{
printf("koeficijent uz %i. stepen: ",i);
scanf("%f",&drugi[i]);
if(drugi[m]==0)
{
printf("\nVodeci koeficijent ne sme da bude 0\n");
i++;}
}
}
switch(opcija)
{case '+': case '-':
if(opcija=='+') znak=1; else znak=-1;
p=(m>n?m:n);
//racunanje zbira-razlike
for(i=0;i<=p;i++)
rezultat[i]=prvi[i]+znak*drugi[i];
break;
case '*':
for(i=0;i<=n;i++)
for(j=0;j<=m;j++)
rezultat[i+j]+=prvi[i]*drugi[j];
p=m+n;
break;
case '\'':
p=n;
printf("\nKoji izvod po redu: ");
scanf("%i",&izvod);
if(izvod>n) {p=0;rezultat[p]=0;
break;
}

165

for(i=p;i>=0;i--)
rezultat[i]=prvi[i];
for(j=1;j<=izvod;j++)
{
p--;
for(i=0;i<=p;i++)
rezultat[i]=rezultat[i+1]*(i+1);
}
break;
case 'x':
printf("\nUnesite tacku u kojoj se racuna vrednost polinoma ");
scanf("%f",&x);
s=prvi[n];
for(i=n-1;i>=0;i--)
s=s*x+prvi[i];
rezultat[0]=s;
p=0;
break;
default:
break;
}
/*stampanje rezultata*/
printf("\nRezultat je:\n");
for(i=p;i>0;i--)
printf("(%.2f)*x^%i+",rezultat[i],i);
printf("(%.2f)",rezultat[0]);
fflush(stdin);
}
}

166

7.
(
: , , , , , )
( )
.

7.
/Program za sortiranje zadatih vremena/
/*Program pakuje vreme u 32 bita na sledeci nacin, od bita najvece tezine redom:*/
/*godina: 6 bitova (uzimaju se u obzir posledenje 2 cifre u godini)*/
/*mesec (<=12): 4 bita*/
/*dan (<=31): 5 bitova*/
/*sat (<24): 5 bitova*/
/*minute (<60): 6 bitova*/
/*sekunde(<60): 6 bitova*/
#include<stdio.h>
#include<ctype.h>
#define MAX 100
main()
{
unsigned int vremena[MAX]={0},pom,ispravno,n,i,j;
unsigned int godina,mesec,dan,sat,minut,sekunda, prestupna;
int z;
char opcija;
do
{

printf("\nKoliko vremena unosite ? ");


scanf("%u",&n);
}while(n<=0 || n>MAX );
for(i=0;i<n;i++)
{
/*zadaje se godina*/
do
{
printf("\nUnesite godinu (2000<=god<=2010) ");
scanf("%u",&godina);
}while (godina<2000 || godina>2010);
/*zadaje se mesec*/
do
{
printf("Unesite mesec ");
scanf("%u",&mesec);
}while (mesec<1 || mesec >12);
/*zadaje se dan*/
do
{
prestupna=0; ispravno=1;

167

printf("Unesite dan ");


scanf("%u",&dan);
if(dan<=0) continue;
switch(mesec)
{
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
if (dan>31) ispravno =0;
break;
case 4:case 6:case 9:case 11: if (dan>30) ispravno =0;
break;
case 2:
if(godina%400==0)
prestupna =1;
else if(godina%100!=0 && godina%4==0)
prestupna=1;
if(dan>28+prestupna)
ispravno=(unsigned)0;
break;
}
}while(!ispravno);
/*zadaje se sat*/
do
{
printf("Unesite sat (0-23) ");
scanf("%u",&sat);
}while (sat<0 || sat >23);
/*unosi se minut*/
do
{
printf("Unesite minute (0-59) ");
scanf("%u",&minut);
}while (minut<0|| minut>59);
/*unose se sekunde*/
do
{
printf("Unesite sekunde (0-59) ");
scanf("%u",&sekunda);
}while (sekunda<0 || sekunda>59);
/*pakovanje vremena*/
godina-=2000;
vremena[i]= (godina<<26)+(mesec<<22)+
(dan<<17)+(sat<<12)+(minut<<6)+sekunda;
}
getchar();
printf("\nSredjivanje: opadajuci ili rastuci poredak (o/r): ");
opcija=tolower(getchar());

168

/*rastuci ili opadajuci poredak*/


do
{
if(opcija=='o') z=-1;
else if (opcija=='r') z=1;
else printf("\nNepoznata opcija\n");
}while (opcija!='o' && opcija!='r');

/*sredjivanje vremena*/
for(i=1;i<n;i++)
for(j=0;j<i;j++)
if (z*vremena[i]<z*vremena[j])
{
pom=vremena[i],vremena[i]=vremena[j],vremena[j]=pom;}
/*vracanje vremena i stampanje*/
putchar('\n');
for(i=0;i<n;i++)
{
printf("%2u.",(vremena[i]<<10)>>27);
printf("%2u.",(vremena[i]<<6)>>28);
printf("%4u. ",(vremena[i]>>26)+2000);
printf("%2u:",(vremena[i]<<15)>>27);
printf("%2u:",(vremena[i]<<20)>>26);
printf("%2u\n",(vremena[i]<<26)>>26);
}
putchar('\n');
}

169

8.

e (
) .

8.
/Program za proveru pravilno napisanih svih vrsta zagrada u zadatom tekstu/
#include<stdio.h>
#include<string.h>
#define VO '{'
#define VZ '}'
#define SO '['
#define SZ ']'
#define MO '('
#define MZ ')'
#define MAX 100000
main()
{
char tekst [MAX],tekst_c[MAX],znak;
int i=0,polazak=-1,duzina,pravilno=1,vo,vz,so,sz,mo,mz;
int levo=-1,desno=-1;
vo=vz=so=sz=mo=mz=0;
printf("\nUnesite tekst, za kraj Ctrl+z\n");
while((znak=getchar())!=EOF)
tekst[i++]=znak;
tekst[i]='\0';
duzina=i;
/*pravi se kopija, jer se ispravno napisan par zagrada
zamenjuje prazninom i bio bi izgubljen originalan sadrzaj*/
strcpy(tekst_c,tekst);
i=0;
/*prvo se proverava da li je isti broj otvorenih i zatvorenih zagrada
istog tipa i odredjuje se pozicija prve zatvorene zagrade*/
while(i<duzina)
{
switch(tekst_c[i])
{

170

case VO:
case SO:
case MO:
case VZ:

vo++;break;
so++;break;
mo++;break;
if(desno==-1)
desno=i;
vz++;
break;

case SZ:

case MZ:

default:

if(desno==-1)
desno=i;
sz++;
break;
if(desno==-1)
desno=i;
mz++;
break;
break;

}
i++;
}
if(vo!=vz || so!=sz || mo!=mz)
pravilno=0;
else
/*ako je jednak broj otvorenih i zatvorenih zagrada
proverava se da li su odgovarajuce*/
{
levo=desno-1;
while(pravilno && levo>=0 && desno<duzina)
{
/*ako se nadje otvorena zagrada, proverava se da li
odgovara zatvorenoj*/
if(tekst_c[levo]==VO || tekst_c[levo]==SO || tekst_c[levo]==MO)
if(tekst_c[levo]==tekst_c[desno]-2 ||
tekst_c[levo]==tekst_c[desno]-1)
{
tekst_c[levo]=tekst_c[desno]=' ';
/*ako jeste brisanje zagrada*/
while(tekst_c[desno]!=VZ && tekst_c[desno]!=SZ
&& tekst_c[desno]!=MZ && desno<duzina)
desno++ ;
levo=desno-1;
}
else
else levo--;

pravilno=0; /*ako nije odgovarajuca zatvorena*/


/*pomeraj u levo da se nadje otvorena zagrada*/

}
}
if(pravilno)
printf("\nSve zagrade su pravilno napisane\n");
else
printf("\nSve zagrade nisu pravilno napisane\n");
}

171

9.

. ,
1 4.
, 10.
,
.

9.
/Program za formatiranje zadatog teksta po kolonama/
#include<stdio.h>
#include<string.h>
#define PRAZNO 3
/*razmak izmedju kolona*/
#define EKRAN 80
/*sirina ekranskog reda*/
#define MAXKOL 4
/*maksimalan broj kolona*/
#define REDOVI 10
/*broj redova po strani*/
#define TEKST 100000
/*maksimalan broj znakova u tekstu*/
main()
{
char znak, prethodni;
char tekst[TEKST], red[TEKST/10][EKRAN+1], prazno[PRAZNO+1];
int i=0,kolona,sirina,duzina_teksta,n=0,pocetak_reda,kraj_reda,p,j;
int blok,pocetak_bloka,kraj_bloka, poslednja, maxn=0;
for(i=0;i<PRAZNO;i++)
prazno[i]=' ';
prazno[i]='\0';
printf("\nUnesite tekst, za kraj Ctrl+z\n");
p=0;
while((znak=getchar())!=EOF)
tekst[p++]=znak;
tekst[p]='\0';
duzina_teksta=p;
do
{

printf("\nKoliko kolona (1<=n<=%i) ",MAXKOL);


scanf("%i",&kolona);
}while (kolona<1 || kolona>=MAXKOL);
sirina=(EKRAN-(kolona-1)*PRAZNO)/kolona; /*sirina: karaktera po koloni*/
p=0;
/*preciscavanje teksta: uklanjaju se znak za tabulator, znak za prelaz u novi
red i svaka visestruka praznina zamenjuje se jednom a na kraj se dodaje
jedna praznina*/
prethodni=' ';
172

for(i=0;i<duzina_teksta;i++)
{
if(tekst[i]=='\n' || tekst[i]=='\t')
{
tekst[i--]=' ';
continue;
}
if(!(tekst[i]==' ' && prethodni==' '))
tekst[p++]=tekst[i];
prethodni=tekst[i];
}
tekst[p++]=' ';tekst[p]='\0';
/*provera da li je duzina reci veca od sirine kolone*/
for(i=0;i<p;i++)
if (tekst[i]!=' ')
n++;
else
{
if (n>maxn)
maxn=n;
n=0;
}
/*ako je duzina najduze reci veca od sirine kolone */
/*smanjuje se broj kolona na najveci moguci broj*/
if(maxn>sirina)
{
printf("\nPostoji rec cija je duzina veca od sirine kolone\n");
while(maxn>sirina)
{
kolona--;
sirina=(EKRAN-(kolona-1)*PRAZNO)/kolona;
}
printf("\nNajveci moguci broj kolona je: %i\n\n", kolona);
}
/*odvajaju se redovi velicine jedne kolone*/
poslednja=0;n=0;
pocetak_reda=0;
while(1)
{
kraj_reda=pocetak_reda+sirina-1;
if(kraj_reda>=duzina_teksta)
{
kraj_reda=duzina_teksta-1;
poslednja=1;
}
/*ako je registrovan kraj teksta, poslednji red nece imati punu duzinu
praznina se dodaje na kraj ako se kraj reda poklopi sa krajem stringa
da se tekst ne bi prekidao u pola reci*/
while(tekst[kraj_reda]!=' ')
kraj_reda--;
p=0;
for(i=pocetak_reda;i<kraj_reda;i++)
red[n][p++]=tekst[i];

173

red[n][p]='\0';
if(poslednja)
break;
pocetak_reda=kraj_reda+1;n++;
}
n++;
/*sada se svaki red dopunjuje do pune sirine kolone*/
for(i=0;i<n;i++)
{
for(j=strlen(red[i]);j<sirina;j++)
red[i][j]=' ';
red[i][j]='\0';
}
blok=REDOVI*kolona; /*blok je broj stringova po jednoj strani*/
/*stampanje formatiranog teksta na ekranu*/
getchar();
pocetak_bloka=0;
poslednja=0;
while(1)
{
printf("\n\n");
kraj_bloka=pocetak_bloka+blok-1;
if(kraj_bloka>=n)
poslednja=1;
for(i=0;i<REDOVI;i++)
for(j=0;j<kolona;j++)
{
p=j*REDOVI+i+pocetak_bloka;
if(j==0 && p>=n)
break;
else if(p>=n)
{
if(j==kolona-1)
printf("\n");
continue;
}
printf("%s",red[p]);
if(j!=kolona-1)
printf("%s",prazno);
else if(kolona!=1)
printf("\n");
}
if((j==0 && p>=n) || poslednja)
break;
printf("\nPritisni bilo koji taster za nastavak ");
pocetak_bloka=kraj_bloka+1;
getchar();
}
printf("\n\n");
}

174

10.
1 15,
44 :
, , ,
,
.
,
, .

10.
/Program za uredjivanje slucajno rasporedjenih brojeva u kvadratu 4x4/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX 16
#define GRANICA 4
main()
{
int i,j,broj,p,imax,jmax,slozeno,identicno;
int mat[GRANICA+2][GRANICA+2],pom[MAX];
time_t timer;
printf("\nKoristeci prazno mesto, svaki broj postaviti na svoje mesto.");
printf("\nMoguce je samo horizontalno i vertikalno pomeranje broja.\n");
/*pokretanje generatora slucajnih brojeva pomocu tekuceg vremena*/
srand(time(&timer));
/*formiranje matrice 4x4*/
for(i=0;i<MAX;i++)
{
broj=rand();
if( broj>MAX || broj==0 )
{
i--;continue;
for(j=0;j<i;j++)
if(broj==pom[j])
{
i--;break;
}
if(j==i)
pom[i]=broj;
else
i--;
}
p=0;

for(i=1;i<GRANICA+1;i++)
for(j=1;j<GRANICA+1;j++)
mat[i][j]=pom[p++];

175

/*prosirenje matrice nulama sa strane*/


for(i=0;i<6;i++)
mat[0][i]=mat[i][0]=mat[GRANICA+1][i]=mat[i][GRANICA+1]=0;
slozeno=0;
while(1)
{
/*stampanje matrice*/
putchar('\n');
for(i=1;i<GRANICA+1;i++)
{
for(j=1;j<GRANICA+1;j++)
{
if (mat[i][j]==MAX)
{
imax=i,jmax=j; printf("
else
printf("%4d", mat[i][j]);
}
printf("\n");}

"); }

/*provera da li je matrica slozena*/


identicno =1;
for(i=1;i<GRANICA+1;i++)
{
for(j=1;j<GRANICA+1;j++)
if(mat[i][j]!=(i-1)*GRANICA+j)
{
identicno=0;break; }
if(!identicno)
break;
}
if (identicno)
slozeno=1;
if (slozeno)
break;
printf("\nkoji broj se pomera ");
scanf("%i",&broj);
if(broj<1 || broj>MAX-1)
broj=MAX;
/*trazenje tog broja u okolini MAX */
if (mat[imax][jmax-1]==broj)
mat[imax][jmax-1]=MAX,mat[imax][jmax]=broj;
else if(mat[imax][jmax+1]==broj)
mat[imax][jmax+1]=MAX,mat[imax][jmax]=broj;
else if (mat[imax-1][jmax]==broj)
mat[imax-1][jmax]=MAX,mat[imax][jmax]=broj;
else if(mat[imax+1][jmax]==broj)
mat[imax+1][jmax]=MAX,mat[imax][jmax]=broj;
}
printf("\nBRAVO\n");
}

176

11.
.
n (n<=50) . ,
. , k-
. , k
. k
( , ).
,
.

11.
/Program za igru Vitezovi okruglog stola/
#include<stdio.h>
#include<string.h>
#define MAX 50
/*dozvoljen broj vitezova*/
#define MAXS 30
/*najveci broj znakova u imenu*/
main()
{
int n,i,indeks,k,rbr,izbacujemo,j;
char vitez[MAX][MAXS+1],pv[MAXS+1];
/*unos broja vitezova*/
do
{
printf("\nKoliko ima vitezova ");
scanf("%d",&n);
}while (n<0 || n>MAX);
/*Unos imena vitezova i provera da li ima istih*/
getchar();
printf("\nUnesite imena vitezova:\n");
for(i=0;i<n;i++)
{
gets(vitez[i]);
for(j=0;j<i;j++)
if(strcmp(vitez[i],vitez[j])==0)
{
printf("\nIme je vec uneto\n");
i--;
break;
}
}
/*Pronalazenje imena viteza koji je proglasen pocetnim*/
rbr=-1;
while(1)
{
printf("\nUnesite ime viteza od koga se krece\n");
gets(pv);

177

for(i=0;i<n;i++)
if(strcmp(vitez[i],pv)==0)
{
rbr=i;
break;
}
if(rbr<0)
printf("\nTaj vitez ne postoji\n");
else
break;
}
/*Ako je k negativno smer je u levo a ako je pozitivno smer je u desno*/
while(1)
{
printf("\nKoji po redu vitez odlazi? \n");
printf("(minus je za smer u levo, plus za smer u desno) ");
scanf("%i",&k);
if(k!=0)
break;
printf("\nBroj mora biti razlicit od nule.\n");
}
/*Ako je k<0 invertujemo niz*/
if(k<0)
{
for(i=0;i<n/2;i++)
{
strcpy(pv,vitez[i]);
strcpy(vitez[i],vitez[n-1-i]);
strcpy(vitez[n-1-i],pv);
}
indeks=n-1-rbr;
k=-k;
}
else
indeks=rbr;
/*Uklanjanje vitezova*/
printf("\nVitezovi odlaze sledecim redom:\n");
while(n!=1)
{
izbacujemo =(indeks+k-1)%n;
printf("%s\n",vitez[izbacujemo]);
for(i=izbacujemo;i<n-1;i++)
strcpy(vitez[i],vitez[i+1]);
n--;
indeks=izbacujemo;
}
printf("\n\nPoslednji ostaje: %s\n\n",vitez[0]);
}

178

12.
Master Mind.
4 , 1 6 .
10 ,
.

. 10.

12.
/Program za igru Master Mind/
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include <time.h>
#define POKUSAJ 10
#define MAX 4
#define BROJ 6
main()
{
int i,j,na_mestu,van_mesta, broj_pokusaja,u_opsegu;
int zadata[MAX],czadata[MAX],pogadjam[MAX];
char c;
time_t timer;
/*pokretanje generatora slucajnih brojeva pomocu tekuceg vremena*/
srand(time(&timer));
printf("\nOvo je igra pogadjanja zadate kombinacije od 4 broja");
printf("\nU igri su brojevi od 1 do %i i mogu se ponavljati\n",BROJ);
do
{

/*pravi se slucajna kombinacija*/


for(i=0;i<MAX;i++)
{
zadata[i]=rand();
if(zadata[i]<1 || zadata[i]>BROJ)
i--;
}
/*pocinje pogadjanje*/
printf("\n\t\t\t\t\tBroj pogodaka\n");
printf("\n\t\t\t\tna mestu\tnije na mestu");
broj_pokusaja=0;
while(broj_pokusaja<POKUSAJ)
{
broj_pokusaja++;
/*unosi se kombinacija igraca*/
u_opsegu=0;
printf("\nVas %i pokusaj: ",broj_pokusaja);
179

for(i=0;i<MAX;i++)
{
scanf("%i",&pogadjam[i]);
if(pogadjam[i]<=0 || pogadjam[i]>BROJ)
u_opsegu=1;
}
na_mestu=0; van_mesta=0;
/*pravi se kopija zadate kombinacije */
for(i=0;i<MAX;i++)
czadata[i]=zadata[i];
/*trazenje broja koji je na svom mestu*/
for(i=0;i<MAX;i++)
if(zadata[i]==pogadjam[i])
{
na_mestu++;
pogadjam[i]=0;czadata[i]=0;
}
if(na_mestu==MAX)
{
printf("\nBravo, pogodili ste zadatu kombinaciju ");
printf("iz %i. puta\n\n",broj_pokusaja);
break;
}
/*trazenje broja koji je van svog mesta*/
for(i=0;i<MAX;i++)
for(j=0;j<MAX;j++)
if(czadata[i]!=0)
if(czadata[i]==pogadjam[j])
{
pogadjam[j]=czadata[i]=0;
van_mesta++;
}
printf("%37i%18i\n",na_mestu,van_mesta);
if(u_opsegu)
printf("\nNAPOMENA: Birati brojeve od 1 do %i\n",BROJ);
}
if(na_mestu!=MAX)
{
printf("\nZao mi je niste uspeli da pogodite kombinaciju ");
for(i=0;i<MAX;i++)
printf("%d ",zadata[i]);printf("\n");
}
getchar();
puts("Da li zelite jos da igrate (d/n) ?");
c=getch();
} while (tolower(c)=='d');
}

180


_____________________________________________

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

______________________________

______________________________

______________________________
181

182


_____________________________________________
1.
auto
break
case
char
const
continue
default
do

double
else
enum
extern
float
for
goto
if

int
long
register
return
short
signed
sizeof
static

struct
switch
typedef
union
unsigned
void
volatile
while

2.

\n
\t
\v
\b
\r
\f
\a
\\
\'
\''

(NewLine NL)
(HorizontalTabulation HT)
(VerticalTabulation VT)
(BackSpace BS)
(CarriageReturn CR)
(FormFeed FF)
/ (Alarm/Bell BELL)
(BackSlash)

3.

Character
Short integer
Integer

char
short
int

()
1
2
2/4

Long integer

long

Unsigned character
Unsigned short integer
Unsigned integer
Unsigned long integer
Single-precision
Floating_point
Double-precision
Floating-point

unsigned char
unsigned short
unsigned
unsigned long

1
2
2/4
4

float

double

-128 do 127
-32768 do 32767(1)
(1)/(2)
-2,147,483,648
2,147,438,647(2)
0 do 255
0 do 65535 (3)
(3)/(4)
0 4,294,967,295 (4)
1.2E-38 3.4E38
(=7 )
2.2E-308 1.8E308
(=16 )

183

4.

%c
%d
%u
%o
%x (X)
%f
%e
%g


char
int ( )
unsigned int ( )
int/unsigned int ( )
int/unsigned int ( )
float, double ( )
float, double ( )
float, double ( )

5.

%c
%d
%u
%o
%x (X)
%i
%f
%e
%g
%lf
%le
%lg


char
int ( )
unsigned int ( )
int/unsigned int ( )
int/unsigned int ( )
int ( )
float ( )
float ( )
float ( )
double ( )
double ( )
double ( )

6.

15
2
[ ] ( ) . ->
14
1
! ~ ++ -- + - * & () sizeof
13
2
* / %
12
2
+ 11
2
<< >>
10
2
< <= > >=
9
2
== !=
8
2
&
7
2
^
6
2
|
5
2
&&
4
2
||
3
3
?:
2
2
= += -= *= /= %= &= ^= |= <<= >>=
1
2
,

184

7.

ctype.h

ctype.h
int 0 (true), c
( c int ASCII ).
isalnum(c)

0 c
ASCII .

isalpha(c)

0 c
ASCII .

isdigit(c)

0 c
ASCII .

islower(c)

0 c
ASCII .

isupper(c)

0 c
ASCII .

tolower(c)

c ASCII ,
ASCII .

toupper(c)

c ASCII ,
ASCII .

8.

math.h

math.h
x y double double.
cos( x)

cos x

fabs( x)

|x|

log( x)

loge x, x>0.

log10(x)

log10 x, x>0.

pow( x, y)

xy

sin( x)

sin x.

sqrt( x)

tan( x)

tg x.

185

9.

stdlib.h

stdlib.h.
atof(s)

a double,
s.

atoi(s)

a int,
s.

atoll(s)

a long,
s.

rand()

a - int,
0 RAND_MAX (32767).

10. string.h
string.h, s, s1 s2
, n int.
strcat(s1, s2)

s2
s1 s1.

strcmp(s1, s2)

s1 s2
int:
<0, s1 ASCII s2,
=0, s1 ASCII s2,
>0, s1 ASCII s2.

strcpy(s1, s2)

s2 s1
( \0) s1.

strlen(s)

s ( \0).

strncat(s1, s2, n)

n s2
s1
s1.

strncmp(s1, s2, n)

n s1
s2 int:
<0, n s1 ASCII
n s2,
=0, n s1 ASCII
n s2,
>0, n s1 ASCII
n s2.

strncpy(s1, s2, n)

186

n s2
s1 ( \0)
s1.

11. ASCII

187

188


_____________________________________________

[1]

, ,
, 2004.

[2]

,
e , 1997.

[3]

, , , 1996.

[4]

Brian W. Kernighan, Dennis M. Ritchie, The C Programming Language - ANSI


C, Prentice Hall Software Series, 1988.

[5]

Augie Hansen,
, , 1991.

[6]

Peter Aitken, Bradley Jones,Teach Yourself C in 21 Days,CD edition,1998.

[7]

Chris H. Pappas, William H. Murray, C/C++ ,


, 1996.

189

You might also like