Professional Documents
Culture Documents
Programiranje C
Programiranje C
, 2013.
, ,
(MASSVision)
MST Gaji,
100
ISBN 978-86-7982-161-4
CIP -
,
004.42(075.8)(076)
004.432.2C(075.8)(076)
004.432.2C++(075.8)(076)
, , 1965 "C"
"C++" :
/
, , . - 5.
. - :
, 2013 ( : MST Gaji). - 259
. : . ; 24
100. - : . 259.
ISBN 978-86-7982-161-4
1. , , 1966- [] 2. ,
, 1972- []
a) - b)
"C" - c)
"C++" -
COBISS.SR-ID 201028876
_____________________________________________
C
C++
a
++.
++
,
.
++ ,
, Unix, Linux
Windows
,
.
. ,
, .
-
++, -
++.
.
( )
/ /
.
,
. , ,
.
.
( ) ++.
++.
++ .
/ , ,
, ++ .
++
, ,
- .
- ++,
-
.
.
,
, ++.
:
1. ( ).
,
;
2. ( );
3. . DOS (
DOS )
;
4. .
, 2013.
_____________________________________________
1.
2.
15
3.
35
4.
57
5.
77
6.
101
7.
/ ++
127
8.
, ,
++
143
9.
++
161
10.
++
185
201
249
251
259
1.
/
C
_____________________________________________
primer1_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:
/
primer1_1.c
/
/
Brisanje zaostalih karaktera sa standardnog ulaza
/
/
(citanje manje od predvidjenog broja podataka pomocu f-je scanf())
/
#include <stdio.h>
#define MAX1
5
#define MAX2
80
main()
{
int i, niz[MAX1];
char tekst[MAX2+1], bafer[MAX2+1];
/Citanje manje od predvidjenog broja podataka/
printf("\nUnesite %d celih brojeva: ", MAX12);
for(i=0; i<MAX1; i++)
scanf("%d", &niz[i]);
printf("Procitano samo %d brojeva: ", MAX1);
for(i=0; i<MAX1; i++)
printf("%d ", niz[i]);
/Nema brisanja zaostalih karaktera, greska pri daljem citanju/
printf("\n\nUnesite red teksta: ");
gets(tekst);
printf("\nProcitani red teksta: %s\n", tekst);
/Citanje manje od predvidjenog broja podataka/
printf("\nUnesite %d celih brojeva: ", MAX12);
for(i=0; i<MAX1; i++)
scanf("%d", &niz[i]);
/Brisanje zaostalih karaktera na 1. nacin/
gets(bafer);
printf("Procitano samo %d brojeva: ", MAX1);
for(i=0; i<MAX1; i++)
printf("%d ", niz[i]);
/Nema greske pri daljem citanju/
printf("\n\nUnesite red teksta: ");
gets(tekst);
printf("Procitani red teksta: %s\n", tekst);
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
primer1_1
/, ,
/ (input/output streams).
/ (stdin/stdout),
, / stdio.h.
scanf()
(
). getchar() gets()
, . scanf()
,
.
scanf() getchar(),
,
scanf() getchar()
.
getchar(). getchar()
, .
scanf() gets()
, scanf()
, .
,
.
scanf()
.
,
scanf()
( fflush() gets()).
. ( 14. 25.)
,
.
10 ( 1.1 )), scanf() for
( 15. 16.) 5 .
.
5 ( 1.1 )).
( 28. 42.)
gets(). 10 (
1.1 )), scanf() for ( 29. 30.) 5
. gets()
(bafer).
( 1.1 )).
( 41.) ( 1.1 )).
( 45. 59.)
,
fflush(), stdio.h.
10 ( 1.1 )), scanf() for ( 46.
47.) 5 . fflush()
(stdin)
.
( 1.1 )).
( 58.) ( 1.1 )).
1.1 ) primer1_1 ( )
1.1 ) primer1_1 ( )
1.1 ) primer1_1 ( )
1.1 ) primer1_1 ( )
1.1 ) primer1_1 ( )
1.1 ) primer1_1 ( )
primer1_2
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
/
primer1_2.c
/
/
Prikaz na ekranu reci, zadatih u komandnoj liniji
/
#include <stdio.h>
#include <stdlib.h>
main(int argc, char argv[])
{
int i;
if(argc < 2)
{
fprintf(stderr, "Za pokretanje programa potrebno je uneti\n");
fprintf(stderr, "reci u komandnoj liniji, posle imena programa\n");
exit(1);
}
for(i=0; i<argc; i++)
printf("\nString na koji pokazuje argv[%d] je %s", i, argv[i]);
printf("\n");
return 0;
}
primer1_2
:
, ,
... .
:
.
.
, .
(
, ),
.
. argc
,
( ). (char argv[])
.
argv[0] ,
argv[1] ... .
.
( 1.2 )). if
10. argc 2.
.
, ,
fprintf() ( 11. 12.).
stdio.h : stdin, stdout
stderr.
(
,
).
, ,
(stderr) . fprintf()
(stderr),
, .
( 13.),
,
exit() stdlib.h.
, for ( 16. 17.)
(
). %s printf()
: argv[0],
argv[1],.., argv[argc-1]. 1.2 )
argv[0] (primer3) argv[1],
argv[2] argv[3]: (prvi, drugi treci).
1.2 a) primer1_2 ( )
1.2 ) primer1_2 ( )
primer1_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:
/
primer1_3.c
/
/
Prikaz na ekranu vrednosti celog broja, zadatog u komandnoj liniji,
/
/
u oktalnom, heksadecimalnom i binarnom obliku
/
#include <stdio.h>
#include <stdlib.h>
#define MAX 50
primer1_3
:
,
.
( 12. 17.).
, atoi(),
( argv[1])
broj ( 19.).
(%o %x),
: broj 0
bin[i] broj
2, broj 2
bin ( 24. 28.).
bin, .
(
1.3 )), .
( 1.3 )), 25 n=0, while :
broj = 25 =>
broj != 0
=>
bin[0] = 25%2 = 1, broj = 25/2 = 12, n = 1,
broj = 12 =>
broj != 0
=>
bin[1] = 12%2 = 0, broj = 12/2 = 6, n = 2,
broj = 6
=>
broj != 0
=>
bin[2] = 6%2 = 0, broj = 6/2 = 3, n = 3,
broj = 3
=>
broj != 0
=>
bin[3] = 3%2 = 1, broj = 3/2 = 1, n = 4,
broj = 1
=>
broj != 0
=>
bin[4] = 1%2 = 1, broj = 1/2 = 0, n = 5,
broj = 0.
:
bin[4] bin[3] bin[2] bin[1] bin[0]
1
1
0
0
1
1.3 a) primer1_3 ( )
1.3 ) primer1_3 ( )
primer1_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:
/
primer1_4.c
/
/
Izracunavanje sume brojeva, zadatih redom u komandnoj liniji, posle
/
/
imena programa i opcije: i (za cele brojeve) ili f (za realne brojeve)
/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef enum
{NEMA_ARGUMENATA,NEMA_ZNAKA,NEMA_OPCIJE}
Greska;
char poruke_o_greskama[] = {
"Za pokretanje programa potrebno je uneti\n"
"vise reci u komandnoj liniji, posle imena programa!\n",
"Za pokretanje programa potrebno je uneti\n"
"znak - i opciju u komandnoj liniji, posle imena programa!\n",
"Nije uneta dozvoljena opcija\n"
"u komandnoj liniji, posle imena programa!\n"
};
48:
49:
50:
51:
52:
53:
54:
55:
56:
break;
}
return 0;
}
/
Funkcija koja prikazuje na ekranu poruke o greskama
/
void greska(Greska status)
{
fprintf(stderr, poruke_o_greskama[status]);
exit(1);
}
primer1_4
:
,
i f (
),
int float,
(i f).
,
(e 29. 30.).
if ( 32.) ,
(argv[1]), .
( 33.). , .
,
((argv[1] + 1)), switch
( 35. 49.):
i, s1
, :
atoi(argv[2]), atoi(argv[3]), .., atoi(argv[argc-1]),
f, s2
, :
atof(argv[2]), atof(argv[3]), .., atof(argv[argc-1]).
( 47.).
(
1.4 )), , -i -f ,
, ( 1.4 )).
1.4 ) primer1_4 ( )
10
1.4 ) primer1_4 ( )
scanf()
.
scanf()
, scanf()
( fflush() gets()).
scanf() ,
getchar() o
scanf()
getchar() .
scanf() ,
gets() ,
scanf() .
,
.
,
.
11
1.
_____________________________________________
1.
,
( ),
.
12
1.
_____________________________________________
.
1.
) (
, 10 ) ,
)
.
2.
:
) , ,
cpy cat,
n (n5) ,
) (-)
,
) cpy, ,
cat
.
3.
:
.
4.
.
13
14
2.
15
_____________________________________________
primer2_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:
16
/
primer2_1.c
/
/
Stampanje na ekranu zadatog reda teksta u okviru zadatih dimenzija
/
#include <stdio.h>
#include <string.h>
#define HLIN
#define VLIN
#define UGAO
#define PRAZNO
#define MAX
#define RAZMAK
'-'
'|'
'+'
''
70
3
main()
{
int duzina;
char tekst[MAX+1];
printf("\nUnesite red teksta:\n"); gets(tekst);
duzina = strlen(tekst) +2RAZMAK;
hokvir(duzina);
pise_tekst(tekst);
hokvir(duzina);
return 0;
}
/
Funkcija koja prikazuje na ekranu horizontalni deo okvira
/
void hokvir(int l)
{
putchar(UGAO);
znakovi(l, HLIN);
putchar(UGAO);
putchar('\n');
}
/
Funkcija koja prikazuje bocne delove okvira, /
/
kao i zadati tekst izmedju bocnih delova okvira
/
void pise_tekst(char bafer[])
{
putchar(VLIN);
znakovi(RAZMAK, PRAZNO);
printf("%s", bafer);
znakovi(RAZMAK, PRAZNO);
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
putchar(VLIN);
putchar('\n');
}
/
Funkcija koja prikazuje zadati znak zadati broj puta
/
void znakovi(int n, char c)
{
while(n > 0)
{
n--;
putchar(c);
}
}
primer2_1
. (
, )
.
hokvir() znakovi()
.
14. pise_tekst()
(
).
char ( char).
( ).
pise_tekst() :
1. pise_tekst(char bafer) -
char (
char),
2. pise_tekst(char bafer[]) -
char.
39. 46. pise_tekst(), :
( 40.),
znakovi()
( 41.),
( 42.) bafer (
bafer, ),
znakovi()
( 43.),
( 44.) ( 45.).
( 2.1 ))
tekst ( 21.),
(
22.). :
hokvir(),
( 24.),
17
pise_tekst()
. ,
25.,
tekst.
hokvir(),
, ( 26.).
2.1 ).
2.1 ) primer2_1 ( )
2.1 ) primer2_1 ( )
primer2_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:
18
/
primer2_2.c
/
/
Ciklicko pomeranje zadatog niza,za zadati pomeraj,u zadatom smeru
/
#include <stdio.h>
#define MAX 10
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
if(smer=='L' || smer=='l')
for(i=0; i<m; i++)
levo_za_1(niz,n);
else if(smer=='D' || smer=='d')
for(i=0; i<m; i++)
desno_za_1(niz,n);
else
{
printf("\nNepoznata oznaka smera!\n");
greska = 1;
}
if(!greska)
stampa_niz(niz, n);
return 0;
}
/
Funkcija koja cita sa tastature elemente niza
/
void cita_niz(int x[], int n)
{
int i;
printf("\nZadati celobrojni niz: ");
for(i=0; i<n; i++)
scanf("%d", &x[i]);
}
/
Funkcija koja prikazuje na ekranu elemente niza
/
void stampa_niz(int x[], int n)
{
int i;
printf("\nNovi niz: ");
for(i=0; i<n; i++)
printf("%d ", x[i]);
printf("\n\n");
}
/
Funkcija koja pomera elemente niza za jedno mesto ulevo
/
void levo_za_1(int x[], int n)
{
int i, pom = x[0];
for(i=0; i<n-1; i++)
x[i] = x[i+1];
x[n-1] = pom;
}
/
Funkcija koja pomera elemente niza za jedno mesto udesno
/
void desno_za_1(int x[], int n)
{
int i, pom = x[n-1];
for(i=n-1; i>0; i--)
x[i] = x[i-1];
x[0] = pom;
}
19
primer2_2
. ,
. :
, ,
.
7. 10.
.
, int (int x[])
int (int n) . :
cita_niz()
,
stampa_niz() ,
levo_za_1() ,
desno_za_1()
.
int ( ).
(
),
(
,
).
, ,
.
44. 50. cita_niz().
, , (int x[])
() :
(&x[i],i=0,..,n-1). :
(int x),
() :
,
(x+i,i=0,..,n-1).
,
.
52. 59. stampa_niz(),
(x[i],i=0,..,n-1).
61. 67. levo_za_1() .
( ),
( ),
.
69. 75. desno_za_1(),
( ),
.
( 2.2 )), cita_niz() ( 2.2 )),
( 2.2 )) ( 2.2 )).
20
, : levo_za_1()
desno_za_1(). .
2.2 ).
2.2 ) primer2_2 ( )
2.2 ) primer2_2 ( )
2.2 ) primer2_2 ( )
2.2 ) primer2_2 ( )
2.2 ) primer2_2 ( )
primer2_3
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
/
primer2_3.c
/
/
Sortiranje svake od zadatih n m-torki celih brojeva (n<=10,m=10)
/
/
u neopadajuci poredak (sortiranje vrsta matrice dimenzija nxm)
/
#include <stdio.h>
#define MAX 10
21
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:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
22
do
{
printf("\nBroj nizova? "); scanf("%d", &n);
}while(n<1 || n>MAX);
citanje(niz, n);
for(i=0; i<n; i++)
sortiranje(niz[i],MAX);
prikaz(niz, n);
return 0;
}
/
Funkcija koja cita sa tastature elemente dvodimenzionalnog niza
/
void citanje(int x[][MAX], int n)
{
int i, j;
for(i=0; i<n; i++)
{
printf("\nElementi %d. celobrojnog niza: ", i+1);
for(j=0; j<MAX; j++)
scanf("%d", &x[i][j]);
}
}
/
Funkcija koja prikazuje na ekranu elemente dvodimenzionalnog niza
/
void prikaz(int x[][MAX], int n)
{
int i, j;
printf("\nRezultat sortiranja:\n");
for(i=0; i<n; i++)
{
printf("\n");
for(j=0; j<MAX; j++)
printf("%d ", x[i][j]);
}
printf("\n\n");
}
/
Funkcija koja dovodi u neopadajuci poredak jednodimenzionalni niz
/
void sortiranje(int x[], int n)
{
int i, j;
for(i=0; i<n-1; i++)
for(j=i+1; j<n; j++)
if(x[i]>x[j])
zamena(&x[i], &x[j]);
}
/
Funkcija koja zamenjuje vrednosti dvema promenljivama
/
void zamena(int x, int y)
{
int pom;
pom = x; x = y; y = pom;
}
primer2_3
. n<=10 (
MAX=10) .
:
,
,
.
8. 9. citanje() prikaz().
, .
:
,
(int x[][MAX]),
(int n).
citanje() ,
prikaz() .
.
10. sortiranje(),
: (int x[]) (int n).
.
( ). 11.
zamena().
,
(int x,int y).
30. 38. citanje().
, ,
(int x[][MAX]) ()
:
, (&x[i][j],i=0,..,n-1, j=0,..,MAX-1).
40. 50. prikaz(),
(x[i][j],i=0,..,n-1,
j=0,..,MAX-1) .
52. 59. sortiranje(),
.
,
zamena() :
(&x[i], &x[j]).
61. 64. zamena(),
( ) (pom)
(pom = x; x = y; y = pom) ( 63.).
n ( 2.3
)), citanje(). ,
( 2.3 ) 2.3 )). ,
for ( 22. 23.), n sortiranje(),
23
, zamena(). prikaz(),
, , 2.3 ).
2.3 ) primer2_3 ( )
2.3 ) primer2_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:
18:
19:
20:
21:
24
/
primer2_4.c
/
/
Odredjivanje duzine znakovnog niza i kopiranje
/
/
jednog u drugi znakovni niz (standardne funkcije strlen() i strcpy())
/
#include <stdio.h>
int duzina_stringa(char s);
char kopira_string(char s1, char s2);
main()
{
char bafer[] = "BAFER BAFER BAFER BAFER";
char poruka[] = "Zadati znakovni niz";
printf("\nTESTIRANJE FUNKCIJE: duzina_stringa()\n");
printf("\nSadrzaj znakovnog niza je: %s\n", poruka);
printf("\nBroj znakova je: %d\n", duzina_stringa(poruka));
printf("\n\nTESTIRANJE FUNKCIJE: kopira_string()\n");
printf("\nBafer pre kopiranja: %s\n", bafer);
printf("\nBafer posle kopiranja: %s\n\n", kopira_string(bafer, poruka));
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:
48:
return 0;
}
/
Funkcija koja odredjuje duzinu zadatog znakovnog niza
/
int duzina_stringa(char s)
{
char ptr;
ptr = s;
while(ptr != '\0')
ptr++;
return (ptr - s);
}
/
Funkcija koja kopira jedan u drugi znakovni niz
/
char kopira_string(char s1, char s2)
{
char ptr1, ptr2;
ptr1 = s1;
ptr2 = s2;
while(ptr2 != '\0')
{
ptr1 = ptr2;
ptr1++;
ptr2++;
}
ptr1 = '\0';
return s1;
}
primer2_4
.
7. duzina_stringa(),
s (char
s), ( int).
8. kopira_string(),
s1 s2,
(char s1, char s2)
( char kopira_string).
:
strlen() strcpy()
string .
: ( ).
25. 33.
duzina_stringa().
ptr
char ( 26.). 28.
(
25
2.4 primer2_4
primer2_5
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
26
/
primer2_5.c
/
/
Prikaz na ekranu zadatog niza, u originalnom i inverznom poretku
/
#include <stdio.h>
#define MAX 10
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:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
main()
{
int n, opcija, niz[MAX];
do
{
}
/
Funkcija koja prikazuje na ekranu originalni niz
/
void originalni(int x[], int n)
{
int i;
printf("\nZadati niz: ");
for(i=0; i<n; i++)
printf("%d ", x[i]);
printf("\n\n");
}
/
Funkcija koja prikazuje na ekranu inverzni niz
/
void inverzni(int x[], int n)
{
int i;
27
61:
62:
63:
64:
65:
primer2_5
( ),
.
.
( , ... .
7. 8. cita_niz()
stampa_niz().
,
.
, (
). .
9. 10. originalni()
inverzni(). : a ,
.
cita_niz() (
34. 39. ).
stampa_niz() ( 41. 49.)
( 42.)
( int int)
(void (ptr)(int x[], int n)).
(broj) stampa_niz(),
(originalni() inverzni()), ptr
(ptr(x, n)).
originalni() ( 51. 57.)
inverzni() ( 59. 65.) :
( )
( ).
( 2.5
)), ( 15. 18.)
cita_niz() ( 2.5 )). do..while (
22. 27.) 1. 2. ( 2.5 )),
stampa_niz() .
originalni() inverzni().
2.5 )
.
2.5 ) primer2_5 ( )
28
2.5 ) primer2_5 ( )
2.5 ) primer2_5 ( )
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:
20:
21:
22:
23:
/
primer2_6.c
/
/
Prikaz na ekranu vrednosti globalnih i lokalnih promenljivih
/
/
u raznim tackama programa
/
#include <stdio.h>
void stampa(void);
int x = 10, y = 20;
main( )
{
printf("\nPre poziva funkcije: x = %d, y = %d\n", x, y);
stampa( );
printf("\nPosle poziva funkcije: x = %d, y = %d\n\n", x, y);
return 0;
}
/
Funkcija koja prikazuje na ekranu sadrzaje lokalnih promenljivih x i y
/
/
ako postoje deklaracije i inicijalizacije globalnih promenljivih x i y
/
void stampa(void)
{
int x = 100, y = 200;
printf("\nUnutar funkcije: x = %d, y = %d\n", x, y);
}
29
primer2_6
( ) .
.
.
( )
.
.
( 9.)
x y. 12.
( stampa()).
13. stampa().
( 20. 23.)
x y .
,
. a
2.6:
stampa(),
,
stampa(),
,
stampa( ),
,
.
2.6 primer2_6
primer2_7
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
30
/
primer2_7.c
/
/
Prikaz na ekranu vrednosti staticke i automatske
/
/
promenljive u raznim iteracijama jedne petlje
/
#include <stdio.h>
void stampa(void);
main( )
{
int i;
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
printf("\n");
for(i = 0; i < 5; i++)
{
printf("Iteracija %2d. ", i+1);
stampa( );
}
printf("\n");
return 0;
}
/
Funkcija koja stampa i inkrementira vrednosti /
/
staticke promenljive x i automatske promenljive y
/
void stampa(void)
{
static int x = 0;
int y = 0;
printf("x = %d, y = %d\n", x++, y++);
}
primer2_7
,
, ( ).
static .
stampa() ( 23. 28.)
: (x) (y).
, stampa().
stampa().
, ( 2.7).
2.7 primer2_7
.
, .
.
.
31
2.
1.
?
#include <stdio.h>
void f(int x, int y, int z);
main()
{
int a = 0, b = 0, c = 0;
f(&a, &b, &c);
printf(\n%d %d %d, a, b, c);
}
void f(int x, int y, int z)
x = 2; y = 4; z = 6;
}
{
2.
n (n10) , ,
.
32
2.
, ,
.
1.
n (n10) ,
, ,
.
2.
n (n10) ,
, / ,
.
3.
(
)
.
4.
n (n10) , m (m10)
, ,
:
) ,
) .
5.
nxn (n10)
, :
) ,
) .
33
34
3.
C
35
_____________________________________________
primer3_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:
36
/
primer3_1.c
/
/
Dinamicka dodela/oslobadjanje memorije za string od 100 karaktera
/
/
za niz od 100 celih brojeva ili za niz od 100 realnih brojeva (opciono)
/
#include <stdio.h>
#include <stdlib.h>
#define MAX
#define GRESKA_STRING
#define GRESKA_CELI
#define GRESKA_REALNI
#define GRESKA_TIP
100
0
1
2
3
char poruke_o_greskama[] =
{
"\nNije uspela dodela memorije za string!\n",
"\nNije uspela dodela memorije za celobrojni niz!\n",
"\nNije uspela dodela memorije za realni niz!\n",
"\nNedozvoljena oznaka tipa!\n"
};
void greska(int status);
main()
{
char
int
float
string;
celi, tip;
realni;
43:
44
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
case 'f':
/dodela memorije za realni niz/
if((realni = malloc(MAX sizeof(float))) == NULL)
greska(GRESKA_REALNI);
puts("\nDodeljena je memorija za realni niz\n");
free(realni);
break;
default:
greska(GRESKA_TIP);
}
return 0;
}
/
Funkcija koja prikazuje na ekranu poruke o greskama
/
void greska(int status)
{
puts(poruke_o_greskama[status]);
exit(1);
}
primer3_1
e.
: ,
... .
, .
: ,
.
. .
,
.
,
. , ,
, .
.
greska()
.
, (
7. 11.)
( 13. 17.) ,
(char poruke_o_greskama[]).
( ),
char char.
, (
14. 17.), ,
poruke_o_greskama[].
poruke_o_greskama[0] "\nNije uspela dodela memorije
za string!\n"... .
37
(
,
,
).
55. 58. greska().
56.
poruke_o_greskama, status (
) (puts(poruke_o_greskama[status]);).
exit() ( 57.) stdlib.h.
1, .
( 22. 24.)
(char, int float)
(string, celi realni). ,
( 26. 27), switch ( 29. 51.)
.
malloc() stdlib.h free()
. (string),
.
malloc(),
( 32.).
(
, sizeof()).
malloc()
void, (
string). if ( 32.
33.), malloc().
NULL (
) (
greska()) (\nNije uspela dodela memorije za
string!\n"). greska() GRESKA_STRING (0),
poruke_o_greskama[0].
(MAXsizeof(char))
( 34.). 35. free()
.
malloc()
sizeof(char) ( 1). ( 38.
41. 44. 47.). 3.1 ) 3.1 )
float.
3.1 ) primer3_1 ( )
3.1 ) primer3_1 ( )
38
primer3_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:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
/
primer3_2.c
/
/
Sazimanje zadatog niza celih brojeva na niz pozitivnih brojeva
/
/
Verzija1:dinamicka dodela/oslobadjanje memorije za niz iz glavne f-je
/
#include <stdio.h>
#include <stdlib.h>
#define MAX
#define GRESKA_DODELA
#define GRESKA_PROMENA
100
0
1
char poruke_o_greskama[] =
{
"\nNije uspela dinamicka dodela memorije za niz!\n",
"\nNije uspela promena dinamicki dodeljene memorije za niz!\n"
};
39
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
primer3_2
( ).
15. 18. :
cita_niz(), sazima_niz(), stampa_niz() greska().
greska()
.
int sazima_niz()
cita_niz() stampa_niz() .
. cita_niz()
( 44. 50.).
stampa_niz() ,
( 66. 73.).
40
3.2 a) primer3_2 ( )
41
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:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
42
/
primer3_3.c
/
/
Sazimanje zadatog niza celih brojeva na niz pozitivnih brojeva
/
/
Verzija2: dinamicka dodela/oslobadjanje memorije za niz iz raznih f-ja
/
#include <stdio.h>
#include <stdlib.h>
#define MAX
#define GRESKA_DODELA
#define GRESKA_PROMENA
100
0
1
char poruke_o_greskama[] =
{
"\nNije uspela dinamicka dodela memorije za niz!\n",
"\nNije uspela promena dinamicki dodeljene memorije za niz!\n"
void cita_niz(int ptr_ptr_niz, int n);
int sazima_niz(int ptr_ptr_niz, int n);
void stampa_niz(int ptr_niz, int n);
void greska(int status);
main()
{
int n1, n2, niz;
do
{
};
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
/
Funkcija koja cita niz sa tastature
/
void cita_niz(int ptr_ptr_niz, int n)
{
int i;
if((ptr_ptr_niz = malloc(n sizeof(int))) == NULL)
greska(GRESKA_DODELA);
printf("\nElementi niza:\t");
for(i=0; i<n; i++)
scanf("%d", ptr_ptr_niz+i);
}
/
Funkcija koja sazima zadati niz na niz pozitivnih brojeva
/
int sazima_niz(int ptr_ptr_niz, int n)
{
int i, n2, ptr1, ptr2;
ptr1 = ptr2 = ptr_ptr_niz;
for(i=0; i<n; i++)
{
if(ptr1 > 0)
{
ptr2 = ptr1;
ptr1++; ptr2++;
else
ptr1++;
}
n2 = ptr2 - ptr_ptr_niz;
if(n2<n)
if((ptr_ptr_niz = realloc(ptr_ptr_niz,n2 sizeof(int))) == NULL)
greska(GRESKA_PROMENA);
return n2;
}
/
Funkcija koja prikazuje na ekranu rezultujuci niz
/
void stampa_niz(int ptr_niz, int n)
{
int i;
printf("\nNovi niz:\t");
for(i=0; i<n; i++)
printf("%d ", (ptr_niz+i));
printf("\n\n");
free(ptr_niz);
}
/
Funkcija koja prikazuje na ekranu poruke o greskama
/
void greska(int status)
{
puts(poruke_o_greskama[status]);
exit(1);
}
43
primer3_3
, :
, ,
.
.
(
), .
. :
- ptr int
int ptr;
( ptr
int).
int ptr_ptr; - ptr_ptr
int ( ptr_ptr
int).
, int.
.
15. 18.
: cita_niz(), sazima_niz(), stampa_niz() greska().
a
, e
,
.
.
:
( ).
cita_niz() 35. 44.
,
, ( 3.3 )).
,
( ) . 38.
malloc() , n
ptr_ptr_niz ( ).
( ) ptr_ptr_niz. ptr_ptr_niz
: scanf("%d",ptr_ptr_niz+i) ( 43.). cita_niz()
( 3.3 )).
sazima_niz() ( 46. 64.)
realloc()
( ). .
stampa_niz() ( 66. 75.)
e , ( 71.)
( 3.3)) (free()).
44
3.3 a) primer3_3 ( )
3.3 ) primer3_3 ( )
3.3 ) primer3_3 ( )
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:
27:
28:
/
primer3_4.c
/
/
Spajanje do 10 redom zadatih nepraznih stringova
/
/
(dinamicka dodela/oslobadjanje memorije za stringove) /
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BROJ
#define MAX
#define DODELA_S1
#define DODELA_S2
#define PROMENA_S1
10
80
0
1
2
char poruke_o_greskama[] =
{
"\nNije uspela dinamicka dodela memorije za prvi zadati string!\n",
"\nNije uspela dinamicka dodela memorije za sledeci string!\n",
"\nNije uspelo prosirenje dinamicki dodeljene memorije!\n"
};
void greska(int status);
main()
{
int i, l;
char string1, string2;
if((string1 = malloc(MAX+1)) == NULL)
greska(DODELA_S1);
if((string2 = malloc(MAX+1)) == NULL)
45
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
greska(DODELA_S2);
puts("Prvi string:");
gets(string1);
l = strlen(string1);
if((string1 = realloc(string1, l+1)) == NULL)
greska(PROMENA_S1);
for(i=0; i<BROJ; i++)
{
puts("\nSledeci string:");
gets(string2);
if(strlen(string2)==0)
break;
l += strlen(string2);
if((string1 = realloc(string1,l+1)) == NULL)
greska(PROMENA_S1);
strcat(string1, string2);
}
puts(string1);
free(string1);
free(string2);
return 0;
}
/
Funkcija koja prikazuje na ekranu poruke o greskama
/
void greska(int status)
{
puts(poruke_o_greskama[status]);
exit(1);
}
primer3_4
, 10
, ,
,
, .
.
( ).
( 23.)
: char string1 char string2 (
string1 string2, ).
( 25. 29.)
string1 string2 (
46
malloc() ).
(
3.4 a)), string1, (
33.) realloc() ( 35.) string1 (
realloc())
( realloc()).
( 38. 51.)
: (
3.4 ) 3.4 )), string2 ( 40.),
( 42.), string1
( 45. 48.) string2 string1 ( 50.).
( 52.) (
3.4 )) ( 54. 55.).
3.4 a) primer3_4 ( )
3.4 ) primer3_4 ( )
3.4 ) primer3_4 ( )
3.4 ) primer3_4 ( )
3.4 ) primer3_4 ( )
47
primer3_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:
48
/
primer3_5.c
/
/
Prikaz na ekranu onih nizova od zadatih m<=10 nizova (svaki
/
/
duzine n<=10) ciji su svi elementi razliciti od nule (dinamicka
/
/
dodela/oslobadjanje memorije za niz nizova celih brojeva)
/
#include <stdio.h>
#include <stdlib.h>
#define MAX 10 /dozvoljeni broj imena/
void cita_niz(int niz[], int n);
void stampa_niz(int niz[], int n);
void greska(void);
main()
{
int niz[MAX], i, m, n;
do
{
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
}
/
Funkcija koja prikazuje na ekranu jednodimenzionalni niz
/
void stampa_niz(int niz[], int n)
{
int i, ima_nulu = 0;
for(i=0; i<n; i++)
if(niz[i]==0)
ima_nulu = 1;
printf("\n");
if(!ima_nulu)
for(i=0; i<n; i++)
printf("%d ", niz[i]);
}
/
Funkcija koja prikazuje na ekranu poruke o greskama
/
void greska(void)
{
printf("\nNema dovoljno memorije za nizove.\n");
exit(1);
}
primer3_5
0.
: cita_niz(),
, stampa_niz(),
greska().
( 44. 48.) int
scanf()
. ( 50. 60.)
0,
ima_nulu 1 ( 55.)
( 58. 59.).
15. , MAX (10)
int (int niz[MAX]).
m<=10 ( 3.5 ))
n<=10 ( 3.5 )), for , m
( 24. 27.), malloc(),
n int
( ) niz[i]. , m :
niz[0] : niz[0] [0], niz[0] [1],..., niz[0] [n-1],
...
niz[m-1] : niz[m-1] [0], niz[m-1] [1],..., niz[m-1] [n-1].
, for , m
( 29. 32.), cita_niz()
(niz[i]) (n).
( 3.5 ), 3.5 ) 3.5 )) .
for , m ( 35.
36.), stampa_niz(), , ,
(niz[i]) (n)) ( 3.5 )).
49
, for , m ( 39. 40.).
3.5 a) primer3_5 ( )
3.5 ) primer3_5 ( )
3.5 ) primer3_5 ( )
3.5 ) primer3_5 ( )
3.5 ) primer3_5 ( )
3.5 ) primer3_5 ( )
50
primer3_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:
/
primer3_6.c
/
/
Sortiranje zadatog niza od n<=10 imena (duzina imena m<=30) po
/
/
abecednom redu. Za kraj unosa treba zadati prazan red (dinamicka
/
/
dodela/oslobadjanje prostora u memorji za niz znakovnih nizova)
/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BROJ
#define MAX
#define GRESKA_DODELE
#define GRESKA_PROMENE
10
30
0
1
char poruke_o_greskama[] =
{
"\nNije uspela dinamicka dodela memorije za niz!\n",
"\nNije uspela promena dinamicki dodeljene memorije za niz!\n"
};
51
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
52
primer3_6
,
.
.
cita_imena() ( 42. 61.)
: .
,
: char imena char imena[].
. for ( 47. 59.)
( : imena[i], i=0,...,BROJ-1),
( 50.), ,
, ( 57. 58.).
.
( 52.)
( 53. 55.).
sortira_imena() ( 63. 77.) :
,
.
stampa_imena() ( 79. 87.) :
. for ( 82.
83.) (
: imena[0],..., imena[n-1])
( 85. 86.).
malloc() ( 26.)
(imena) char
:
BROJsizeof(char ).
cita_imena() ( 3.6 )),
( 29.).
( imena) :
nsizeof(char ) ( 31. 32.). sortira_imena()
stampa_imena() ( imena
( 34. 35.), (
37.). , , 3.6 ).
3.6 ) primer3_6 ( )
3.6 ) primer3_6 ( )
53
( ).
(
).
sizeof() ( ).
, .
. ,
, .
54
3.
_____________________________________________
1.
n (n100) ,
, m ( m
). ,
.
55
3.
_____________________________________________
,
.
1.
n (n100) ,
, :
0 10,
2.
n (n100) ,
, :
.
3.
n (n200),
, :
(: ).
4.
( ),
( n (n10)),
: .
5.
,
( n (n10)), :
.
56
4.
57
_____________________________________________
primer4_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:
/
primer4_1.c
/
/
Formiranje strukture podataka, zadatih preko tastature: /
/
ime, broj indeksa i godina upisa (primena operatora tacka(.))
/
#include <stdio.h>
#define MAX 30
struct student{
char ime[MAX+1];
int br_indeksa, god_upisa;
};
main()
{
struct student student1;
primer4_1
.
.
e a
o.
. ( 8. 11.)
struct (student).
(
: ime ( MAX ), br_indeksa
god_upisa ( int). -
58
. , ,
e ( 10.).
- ( 11.).
(
).
(
) .
. student1 ( 14.).
( 4.1 ), 4.1 )
4.1 )) student1 (ime, br_indeksa
god_upisa).
(.). ,
(student1.ime, student1.br_indeksa student1.god_upisa).
17., 20. 23.
student1.
printf() ( 25. 26.)
student1 (
4.1 ).
4.1 a) primer4_1 ( )
4.1 ) primer4_1 ( )
4.1 ) primer4_1 ( )
4.1 ) primer4_1 ( )
59
primer4_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:
/
primer4_2.c
/
/
Formiranje strukture od podataka zadatih preko tastature:
/
/
ime ulice, broj ulaza i broj telefona (primena operatora ->)
/
#include <stdio.h>
#define MAX1
30
#define MAX2
15
struct adresa{
char ulica[MAX1+1], telefon[MAX2+1];
int br_ulaza;
};
main()
{
struct adresa adresa1;
struct adresa ptr_a;
ptr_a = &adresa1;
primer4_2
adresa ( 9.
12.), : (ulic telefon)
int (br_ulaza).
adresa1 adresa ( 15.),
ptr_a adresa ( 16.)
adresa1 ( 18.).
(
)
.
. ( 4.2 ), 4.2 )
4.2 ))
60
4.2 a) primer4_2 ( )
4.2 ) primer4_2 ( )
4.2 ) primer4_2 ( )
4.2 ) primer4_2 ( )
primer4_3
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
/
primer4_3.c
/
/
Izracunavanje povrsine pravougaonika
/
/
zadatih koordinata (kompleksna struktur)
/
#include <stdio.h>
struct koordinate{
int x, y;
};
struct pravougaonik{
/Definicija 2. tipa strukture/
struct koordinate dole_levo, gore_desno;
};
61
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27
28:
29:
30:
main( )
{
int duzina, sirina;
struct pravougaonik p1;
primer4_3
,
: , ,
... .
( 7.
13.): koordinate ( int: x, y) pravougaonik
( koordinate: dole_levo gore_desno).
p1 pravougaonik.
( 4.3 ) 4.3 ))
p1:
p1.dole_levo.x
- dole_levo, p1,
p1.dole_levo.y
- dole_levo, p1,
p1.gore_desno.x
- gore_desno, p1,
p1.gore_desno.y
- gore_desno, p1,
( 25. 27.). 3.3 )
.
,
.
4.3 a) primer4_3 ( )
4.3 ) primer4_3 ( )
62
4.3 ) primer4_3 ( )
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:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
/
primer4_4.c
/
/
Formiranje strukture i prikaz na ekranu iz posebne funkcije
/
/
podataka iz strukture (ime,smer,broj indeksa i godina upisa studenta
/
#include <stdio.h>
#define MAX 30
struct student{
char ime[MAX+1], smer[MAX+1];
int br_indeksa, god_upisa;
};
void stampa(struct student x);
main()
{
struct student student1;
printf("\nIme i prezime studenta: ");
gets(student1.ime);
printf("\nSmer na kome je student: ");
gets(student1.smer);
printf("\nBroj indeksa i godina upisa (u obliku xx/xxxx): ");
scanf("%d/%d", &student1.br_indeksa, &student1.god_upisa);
stampa(student1);
return 0;
}
/
Funkcija koja prikazuje na ekranu vrednosti clanova strukture
/
void stampa(struct student x)
{
printf("\nStudent:\t%s\nSmer:\t\t%s", x.ime, x.smer);
printf("\nBroj indeksa:\t%d", x.br_indeksa);
printf("\nGodina upisa:\t%d\n\n", x.god_upisa);
}
63
primer4_4
.
, ,
.
, , ( 8.
11.) student ( : ime smer
int: br_indeksa god_upisa)
stampa() ( 13.).
student ( x
) .
(
)
. .
stampa() ( 32. 36.)
.
, (x)
( 33. 35.).
, .
student, student1 ( 16.).
( 4.4 ), 4.4 ) 4.4 )),
student1 stampa()
,
( 27.).
4.4 ).
4.4 a) primer4_4 ( )
4.4 ) primer4_4 ( )
4.4 ) primer4_4 ( )
64
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:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
/
primer4_5.c
/
/
Formiranje strukture zadatih podataka (o studentima i njihovim
/
/
ocenama) i prikaz na ekranu spiska studenata koji su polozili ispit
/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BROJ
#define MAX
#define GRESKA_DODELE
#define GRESKA_PROMENE
100
30
0
1
char poruke_o_greskama[] =
{
"\nNije uspela dinamicka dodela memorije za niz!\n",
"\nNije uspela promena dinamicki dodeljene memorije za niz!\n"};
struct student{
char ime[MAX+1], smer[MAX+1];
int br_indeksa, god_upisa, ocena;
};
void cita_spisak(struct student niz[], int n);
int sazima_spisak(struct student niz[], int n);
void stampa_spisak(struct student niz[], int n);
void greska(int status);
main( )
{
int n,n2;
struct student spisak;
do
{
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
66
printf("Ocena: ");
scanf("%d", &niz[i].ocena);
}while(niz[i].ocena<5 || niz[i].ocena>10);
}
}
/
Funkcija koja sazima zadati spisak (niz struktura) /
/
na spisak studenata koji su polozili ispit
/
int sazima_spisak(struct student niz[], int n)
{
struct student ptr1, ptr2;
for(ptr1=ptr2=niz; ptr1<niz+n; ptr1++)
if((ptr1).ocena != 5)
ptr2++ = ptr1;
return (ptr2 - niz);
}
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
/
Funkcija koja prikazuje na ekranu rezultujuci spisak
/
void stampa_spisak(struct student niz[], int n)
{
int i;
puts("\nSpisak studenata koji su polozili ispit:");
for (i = 0; i <n; i++)
{
printf("\n%s %s ", niz[i].ime, niz[i].smer);
printf("%d %d ", niz[i].br_indeksa, niz[i].god_upisa);
printf("%d", niz[i].ocena);
}
printf("\n\n");
}
/
Funkcija koja prikazuje na ekranu poruke o greskama
/
void greska(int status)
{
puts(poruke_o_greskama[status]);
exit(1);
}
primer4_5
( )
.
.
.
student :
ime smer, int: br_indeksa, god_upisa
ocen ( 18. 21.).
( 23. 26.).
cita_spisak()
student ( [] )
n .
. ( 53. 72.)
for n : , ,
, 5 10
:
:
niz[0].ime,
niz[0].smer,
niz[0].br_indeksa,
niz[0].god_upisa,
niz[0].ocena,
...
:
niz[n-1].ime,
niz[n-1].smer,
niz[n-1].br_indeksa,
niz[n-1].god_upisa,
niz[n-1].ocena.
67
sazima_spisak()
student n . (
75. 83.) (
),
,
ocena 5 ( ).
.
: for ( 78.
80.) .
student (ptr1 ptr2)
(niz). ptr1
(niz+n), ocen ptr1
5, (
ptr1 ptr2
ptr2 ). ptr1
.
: (ptr2 niz).
stampa_spisak(), ,
student n
for ( 90. 94.)
. .
greska()
,
.
.
( : struct student
spisak[MAX]; MAX),
( 30.) student,
student (struct student spisak;).
( 4.5 a)) n
( )
n student
spisak ( 37. 38.).
cita_spisak() sazima_spisak().
: spisak
n ( 40. 41.).
( )
n2.
( 43. 44.) realloc()
spisak
(n2 sizeof(struct student)).
stampa_spisak() : spisak
n2, (
46. 48.).
( 4.5 ), 4.5 ), 4.5
) 4.5 )) 4.5 ).
68
4.5 a) primer4_5 ( )
4.5 ) primer4_5 ( )
4.5 ) primer4_5 ( )
4.5 ) primer4_5 ( )
4.5 ) primer4_5 ( )
4.5 ) primer4_5 ( )
69
primer4_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:
70
/
primer4_6.c
/
/
Kreiranje/pretrazivanje spiska zadatih adresa pomocu povezanih listi
/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 30
struct adresa{
char prezime[MAX+1], ulica[MAX+1];
int br_ulaza, br_stana;
struct adresa sledeca;
};
void cita_adresu(struct adresa ptr_adresa);
void nalazi_adrese(struct adresa ptr_adresa);
void stampa_adresu(struct adresa ptr_adresa);
main()
{
char nastavak = 'D';
struct adresa prva, tekuca;
prva = malloc(sizeof(struct adresa));
tekuca = prva;
do
{
if(tekuca == NULL)
{
fprintf(stderr, "Nije uspela dodela memorije!");
exit(1);
}
tekuca->sledeca = NULL;
cita_adresu(tekuca);
printf("\nIzabrati D za nastavak: ");
nastavak = getchar(); nastavak = getchar();
if(nastavak == 'D')
{
tekuca->sledeca = malloc(sizeof(struct adresa));
tekuca = tekuca->sledeca;
}
}while(nastavak == 'D');
nalazi_adrese(prva);
free(prva);
return 0;
}
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
primer4_6
,
( ) .
.
.
,
: , ,
, ... .
, (
), .
4. 6. ,
7. . 9. 13.
adresa (prezime, ulica, br_ulaza, br_stana
sledeca ), 15. 17.
: cita_adresu(), nalazi_adrese() stampa_adresu() (
adresa).
( 21.)
adresa ( prva
, tekuca ).
.
71
( 23. 24.). ,
. ,
NULL ( ) ( 26. 31.).
cita_adresu()
(
). ( 38.)
( 39. 40.). ,
nalazi_adrese() ( 44.)
.
cita_adresu() (ptr_adresa)
adresa.
: ptr_adresa->prezime,
ptr_adresa->ulica,
ptr_adresa->br_ulaza,
ptr_adresa->br_stana;
nalazi_adrese() (ptr_adresa).
(
ptr_adresa ptr_adresa->sledeca
), stampa_adresu() ( 62. 64.).
stampa_adresu()
(ptr_adresa) .
4.6 ) 4.6 ) .
4.6 a) primer4_6 ( )
4.6 ) primer4_6 ( )
4.6 ) primer4_6 ( )
4.6 ) primer4_6 ( )
72
4.6 ) primer4_6 ( )
4.6 ) primer4_6 ( )
4.6 ) primer4_6 ( )
4.6 ) primer4_6 ( )
.
typedef ,
.
,
e , .
, ,
( ).
, ,
, .
malloc(),
free().
73
4.
___________________________________________
1.
pravougaonik
( tacka)
x y - ( )
.
74
4.
___________________________________________
,
.
.
1.
: redni_broj_smera
: ime_smera broj_studenata. n
n (n10).
.
2.
:
ime_studenta, ime_smera, br_indeksa god_upis.
n (n100),
,
( ).
3.
:
(ime_stanara) n (n100) , ( :
naziv_ulice, broj_ulaza)
( ).
, .
4.
,
:
a)
: ime, adresa, poz_broj_mreze, broj_mob,
) ime adresa
, br_mob_telefon brojem poz_broj_mreze.
75
76
5.
C
77
_____________________________________________
primer5_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:
78
/
primer5_1.c
/
/
Upis zadatog niza brojeva u tekstualnu datoteku
/
/
i citanje sadrzaja datoteke iz iste funkcije
/
#include <stdio.h>
#include <stdlib.h>
#define MAX1
10
#define MAX2
20
};
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
/Zatvaranje datoteke/
}
/
Funkcija koja prikazuje na ekranu poruke o greskama
/
void greska(Greska status)
{
fprintf(stderr, poruke_o_greskama[status]);
exit(1);
}
primer5_1
/
(stdin, stdout, stderr)
/ .
, ,
.
/ (
: ).
fopen()
stdio.h .
FILE ( stdio.h)
. fopen()
FIL.
, .
, .
( 19.) :
fptr FILE (FILE fptr;), (int niz;)
(char ime_dat[MAX2+1]).
( 24. 35.)
( 5.1 )), ,
( 5.1 )) (
5.1 )). ( 38. 39.), 41.
79
fopen()
().
(ime_dat),
("w+").
fopen() fptr
FILE (niz.txt)
. NULL
greska() (
42.). ( 45.).
fprintf().
printf() ,
fptr ( 47.). fprintf()
(fptr) (stdout).
48. fprintf()
: , ,
. 1, 2 3, , :
niz[0] = 1
niz[1] = 2
niz[2] = 3
, ,
rewind(fptr). rewind() ,
fptr, ( 50.)
fptr ( 55.)
( 56.).
( temp) . ( :
temp niz[0], =,
niz[1], =).
fprintf() (
printf()) .
/
fptr fclose(fptr) ( 60.).
5.1 ) , 5.1 )
niz.txt ( ).
5.1 a) primer5_1 ( )
5.1 ) primer5_1 ( )
5.1 ) primer5_1 ( )
80
5.1 ) primer5_1 ( )
5.1 ) primer5_1 ( )
primer5_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:
/
primer5_2.c
/
/
Upis zadatog znakovnog niza u tekstualnu datoteku, /
/
prikaz na ekranu pojedinih delova ove datoteke, kao i
/
/
vrednosti indikatora pozicije posle svakog citanja sadrzaja
/
#include <stdio.h>
#include <stdlib.h>
#define MAX 5
81
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
fputs(poruka, fptr);
fclose(fptr);
/Otvaranje iste datoteke za citanje/
if ((fptr = fopen("primer.txt", "r")) == NULL)
greska(GRESKA2_DAT);
printf("\nPo otvaranju datoteke detektuje se pozicija: %ld", ftell(fptr));
/Citanje prvih 5 karaktera iz datoteke/
fgets(bafer, MAX+1, fptr);
printf("\n\nProcitan sadrzaj: %s, ", bafer);
printf("detektovana pozicija u datoteci: %ld", ftell(fptr));
/Citanje sledecih 5 karaktera iz datoteke/
fgets(bafer, MAX+1, fptr);
printf("\n\nProcitan sadrzaj: %s, ", bafer);
printf("detektovana pozicija u datoteci: %ld", ftell(fptr));
/Povratak na pocetak datoteke/
rewind(fptr);
printf("\n\nNakon povratka na pocetak, ");
printf("detektovana pozicija u datoteci: %ld", ftell(fptr));
/Citanje prvih 5 karaktera iz datoteke i zatvaranje datoteke/
fgets(bafer, MAX+1, fptr);
printf("\n\nProcitan sadrzaj od pocetka datoteke: %s\n\n", bafer);
fclose(fptr);
return 0;
}
/
Funkcija koja prikazuje na ekranu poruke o greskama
/
void greska(Greska status)
{
fprintf(stderr, poruke_o_greskama[status]);
exit(1);
}
primer5_2
, .
ftell(),
, fptr.
.
( 19., 20. 21)
: fptr FILE,
bafer poruka.
( z).
( 24. 28.):
("primer.txt") ("w") ( 24.),
82
( z) .
fputs()
( fptr )
puts() ( 27.),
fptr
fclose(fptr) ( 28.).
( 31. 54.):
("primer.txt") ("r") ( 31.),
ftell() ( 34.) 0 (0 ),
fgets()
( fptr
MAX) gets()
bafer ( 37)
( 38.),
ftell() ( 39.) 5 (5 ),
fgets() bafer ( 42.),
( 43.),
ftell() ( 44.) 10 (10 ),
rewind() ( 47.),
ftell() ( 48. 49.) 0 (0 ,
),
, ,
fgets() bafer ( 52.),
( 53.),
( 54.).
5.2 ),
5.2 ).
5.2 a) primer5_2 ( )
5.2 ) primer5_2 ( )
83
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:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
84
/
primer5_3.c
/
/
Kopiranje sadrzaja jedne tekstualne datoteke u drugu, /
/
izmena imena datoteke i brisanje datoteke
/
#include <stdio.h>
#include <stdlib.h>
#define MAX 20
typedef enum{
GRESKA_KOPIRANJA, GRESKA_IMENA, GRESKA_BRISANJA}Greska;
char poruke_o_greskama[] = {
"\nGreska pri kopiranju datoteke!\n",
"\nGreska pri promeni imena datoteke!\n",
"\nGreska pri brisanju datoteke!\n"
};
int kopira_dat(char ime1, char ime2);
void greska(Greska status);
main()
{
char dat1[MAX+1], dat2[MAX+1];
/Kopiranje sadrzaja iz jedne u drugu datoteku/
printf("\nIme originalne datoteke: ");
gets(dat1);
printf("Ime datoteke kopije: ");
gets(dat2);
if(kopira_dat(dat1, dat2) == 0)
printf("Uspesno izvrseno kopiranje datoteke.\n");
else
greska(GRESKA_KOPIRANJA);
/Izmena imena datoteke/
printf("\nUnesite staro ime datoteke: ");
gets(dat1);
printf("Unesite novo ime datoteke: ");
gets(dat2);
if (rename(dat1, dat2) == 0)
printf("Ime datoteke %s je promenjeno u ime %s.\n", dat1, dat2);
else
greska(GRESKA_IMENA);
/Brisanje datoteke/
printf("\nUnesite ime datoteke koju treba izbrisati: ");
gets(dat1);
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
if (remove(dat1) == 0)
printf("Datoteka %s je izbrisana.\n\n", dat1);
else
greska(GRESKA_BRISANJA);
return 0;
}
/
Funkcija koja kopira sadrzaj jedne tekst datoteke u drugu
/
int kopira_dat( char ime1, char ime2)
{
FILE fptr1, fptr2;
int c;
if ( (fptr1 = fopen(ime1, "r") ) == NULL )
return -1;
if ( (fptr2 = fopen(ime2, "w") ) == NULL )
return -1;
while ((c=fgetc(fptr1)) !=EOF )
fputc(c, fptr2);
fclose(fptr2);
fclose(fptr1);
return 0;
}
/
Funkcija koja prikazuje na ekranu poruke o greskama
/
void greska(Greska status)
{
fprintf(stderr, poruke_o_greskama[status]);
exit(1);
}
primer5_3
: ,
. .
17. kopira_dat().
:
. .
57. 73. kopira_dat().
( 58.) FILE
( ).
, (r) (w) ( 61.
64.). -1.
,
fgetc(). , (EOF),
fputc() ( 66. 67.).
85
(getchar() putchar()) fptr1
. ( 69. 70.)
0 ( ).
( 21.)
dat1 dat2 .
( 5.3 ) 5.3 ))
dat1 dat2. kopira_dat()
( 5.3 )).
, ,
.
rename() ( 40.).
,
(
).
0, ( 5.3 )).
remove() ( 49.).
( ,
). 0,
( 5.3 )).
5.3 a) primer5_3 ( )
5.3 ) primer5_3 ( )
5.3 ) primer5_3 ( )
5.3 ) primer5_3 ( )
5.3 ) primer5_3 ( )
86
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:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
/
primer5_4.c
/
/
Upis zadatog niza brojeva u binarnu datoteku
/
/
i citanje sadrzaja iste datoteke
/
#include <stdio.h>
#include <stdlib.h>
#define MAX 5
typedef enum{GRESKA1_DAT,GRESKA2_DAT}Greska;
char poruke_o_greskama[] = {
"\nGreska pri otvaranju datoteke za upis!\n",
"\nGreska pri otvaranju datoteke za citanje!\n" };
void greska(Greska status);
main()
{
FILE fptr;
int i, niz1[MAX], niz2[MAX];
/Inicijalizacija niza1/
for (i=0; i<MAX; i++)
niz1[i] = 2i;
/Otvaranje binarne datoteke za upis/
if((fptr = fopen("primer.bin", "wb")) == NULL)
greska(GRESKA1_DAT);
/Upis vrednosti niza1 u datoteku i zatvaranje datoteke/
fwrite(niz1, sizeof(int), MAX, fptr);
fclose(fptr);
/Otvaranje iste datoteke za citanje/
if ( (fptr = fopen("primer.bin", "rb")) == NULL)
greska(GRESKA2_DAT);
/Citanje podataka iz datoteke u niz2 i zatvaranje datoteke/
fread(niz2, sizeof(int), MAX, fptr);
fclose(fptr);
/Prikaz vrednosti elemenata upisanog i procitanog niza/
printf("\nUpis\tCitanje\n\n");
for (i=0; i<MAX; i++)
printf("%d\t%d\n", niz1[i], niz2[i]);
printf("\n");
return 0;
87
48:
49:
50:
51:
52:
53:
}
/
Funkcija koja prikazuje na ekranu poruke o greskama
/
void greska(Greska status)
{
fprintf(stderr, poruke_o_greskama[status]);
exit(1);
}
primer5_4
( )
.
18. fptr FILE (
).
( 19.)
( 22. 23.).
( 26.)
fopen().
( ,
), je ("wb").
fwrite() ( 30.).
( )
. ,
, fwrite().
, MAX niz1 sizeof(int)
fptr.
, ,
fclose() ( 31.), ,
fopen() ( 34.).
fread() ( 38.).
.
,
fread(). , MAX
sizeof(int), fptr niz2
.
, ,
fclose() ( 39.).
43. 44. :
(niz1) ,
(niz2) ( 5.4).
5.4 primer5_4
88
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:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
/
primer5_5.c
/
/
Citanje sadrzaj odredjenog dela binarne datoteke
/
/
u koju je prethodno upisan zadati niz
/
#include <stdio.h>
#include <stdlib.h>
#define MAX 5
89
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
greska(GRESKA_POZ);
/Citanje odredjenog elementa niza iz datoteke/
fread(&broj, sizeof(int), 1, fptr);
printf("\n%d. element ima vrednost %d.\n\n", rbroj, broj);
fclose(fptr);
return 0;
}
/
Funkcija koja prikazuje na ekranu poruke o greskama
/
void greska(Greska status)
{
fprintf(stderr, poruke_o_greskama[status]);
exit(1);
}
primer5_5
.
19. fptr FILE,
20. . ( 22. 23.).
:
("primer.bin") (wb)
(e 26. 27.),
( 30),
( 31.),
( 33. 35.)
( 7.5 )).
:
("primer.bin") (rb)
(e 38. 39.),
( 41. 44.),
fseek()
( 47.)
( 48.),
(
51.) ( 52.),
( 54.).
fseek(), ftell() rewind(),
.
: rewind(),
ftell(),
90
(
fseek()).
fseek()
.
: SEEK_SET (
), SEEK_CUR ( )
SEEK_END ( ).
( 47.) fseek()
fptr,
(SEEK_SET)
((rbroj-1)sizeof(int)).
5.5 ) 5.5 ).
5.5 a) primer5_5 ( )
5.5 ) primer5_5 ( )
primer5_6
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
/
primer5_6.c
/
/
Formiranje i azuriranje sadrzaja binarne datoteke koja cuva zapise
/
/
fiksne duzine: ime, prezime, smer, reg. broj i broj polozenih ispita
/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 20
91
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:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
92
FILE fptr;
typedef struct student{
char ime[MAX+1], prezime[MAX+1], smer[MAX+1], reg_broj[MAX+1];
int br_pol_ispita;
}Student;
Student s1;
int broj_struktura = 0;
void unos(void);
void izmene(void);
void prikaz(void);
void greska(Greska status);
main()
{
int opcija, izlaz = 0;
unos();
do
{
}
}while(!izlaz);
return 0;
}
/
Funkcija koja upisuje sadrzaj u binarnu datoteku
/
void unos(void)
{
/Otvaranje datoteke/
if((fptr = fopen("student.bin", "wb")) == NULL)
greska(GRESKA1_DAT);
/Prihvatanje vrednosti clanova strukture i upis u datoteku/
printf("\nUneti za svakog studenta u posebnom redu ");
printf("(do reci Kraj u posebnom redu):\nime i prezime, ");
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
scanf("%d", &rbroj);
scanf("%d", &promena);
}
while(rbroj < 1 || rbroj > broj_struktura);
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
139:
140:
141:
fclose(fptr);
}
/
Funkcija koja prikazuje sadrzaj binarne datoteke
/
void prikaz(void)
{
int i;
/Otvaranje datoteke/
if((fptr = fopen("student.bin", "rb")) == NULL)
greska(GRESKA2_DAT);
/Prikaz na ekranu sadrzaja datoteke/
for(i=0; i<broj_struktura;i++)
{ fread(&s1, sizeof(Student), 1, fptr);
printf("\n%d. %s %s %s ", i+1, s1.ime, s1.prezime, s1.smer);
printf("%s %d ispita", s1.reg_broj, s1.br_pol_ispita);
}
/Zatvaranje datoteke/
fclose(fptr);
}
/
Funkcija koja prikazuje na ekranu poruke o greskama
/
void greska(Greska status)
{
fprintf(stderr, poruke_o_greskama[status]);
exit(1);
}
primer5_6
.
, , .
Student
: ime, prezime, smer, reg_broj,
: br_pol_ispita. s1
( 19. 23.).
broj_struktura
0 ( 25.).
.
27. 29. : unos(),
izmene() prikaz().
.
unos() ( 58.):
("student.bin") ("wb"),
fptr
( 60. 61.),
( 64.),
while(1) ( 68.)
s1 (s1.ime,
94
95
5.6 a) primer5_6 ( )
5.6 ) primer5_6 ( )
5.6 ) primer5_6 ( )
5.6 ) primer5_6 ( )
5.6 ) primer5_6 ( )
5.6 ) primer5_6 ( )
96
5.6 ) primer5_6 ( )
5.6 ) primer5_6 ( )
5.6 ) primer5_6 ( )
(
).
. (
, ,
).
/
(fopen()). ,
( ),
. ,
. NULL
.
/
.
97
5.
_____________________________________________
1.
:
. .
98
5.
_____________________________________________
.
1.
.
2.
C
:
.
3.
:
(:).
4.
) ( ) m (m10) ,
n (n10), m ,
)
0,
,
) .
5.
) ( ) : ime, prezime, br_indeksa,
god_upisa, ocena, n (n10) n
,
)
,
) :
br_indeksa god_upisa.
99
100
6.
101
___________________________________________________________________
primer6_1
, greska
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
/
direkt.h
/
/
Datoteka_zaglavlje sa direktivama
/
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
/
global.h
/
/
Datoteka_zaglavlje sa definicijama
/
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
/
extern.h
/
/
Datoteka_zaglavlje sa eksternim definicijama
/
102
#endif
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:
/
glavni.c
/
/
Glavni modul: kopiranje sadrzaja jedne tekst datoteke u drugu
/
/
bez reci greska (imena datoteka prihvataju se iz komandne linije)
/
1:
2:
3:
4:
5:
6:
7:
8:
9:
/
greska.c
/
/
Modul sa funkcijom koja prikazuje na ekranu poruke o greskama
/
#include "global.h"
main(int argc, char argv[])
{
char rec[MAX+1];
FILE fptr1, fptr2;
if(argc < 3)
greska(NEMA_ARG);
if((fptr1 = fopen(argv[1], "r")) == NULL)
greska(GRESKA1_DAT);
if((fptr2 = fopen(argv[2], "w")) == NULL)
greska(GRESKA2_DAT);
while(1)
{
fscanf(fptr1, "%s", rec);
if(feof(fptr1))
break;
if(strcmp(rec, "greska") != 0)
fprintf(fptr2, "%s ", rec);
}
fclose(fptr2);
fclose(fptr1);
return 0;
}
#include "extern.h"
void greska(Greska)
{
fprintf(stderr, poruke_o_greskama[Greska]);
exit(1);
}
primer6_1
( , ).
. (source
103
files). , #include,
.h (header files).
, greska.
:
direkt.h #include
#define
( , ,
);
global.h
( ) (
) (greska());
extern.h
global.h,
( extern ).
(
global.h) (
). global.h,
, (
glavni.c), extern.h,
, .
(
direkt_h) :
#if !defined
#define
:
#endif
( )
. ,
diret.h (#if !defined _direkt_h_),
7. 10.
(#define _direkt_h_). .
(#endif) .
, glavni.c greska.c
( ):
glavni.c .
(
6.1 )).
FILE (fptr1 fptr2).
( 11. 12.) fopen()
. , ( argv[1]),
( 14. 15.), , (
argv[2]), ( 17. 18.).
while(1) ( 20. 28.).
( greska)
fscanf()
fprintf().
104
feof() ( 23.).
0,
. ,
1 ( 24.). ,
( 30. 31.);
greska.c
(
).
.
( )
6.1 ).
,
, ,
6.1 ), (
greska) 6.1 ).
6.1 a) primer6_1 ( )
6.1 ) primer6_1 ( )
6.1 ) primer6_1 ( )
6.1 ) primer6_1 ( )
primer6_2
,
1:
2:
3:
4:
5:
6:
7:
8:
9:
/
direkt.h
/
/
Datoteka_zaglavlje sa direktivama
/
#if !defined _direkt_h_
#define _direkt_h_
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
105
10:
11:
12:
13:
#define BROJ
#define MAX
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:
/
global.h
/
/
Datoteka_zaglavlje sa definicijama
/
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
/
extern.h
/
/
Datoteka_zaglavlje sa eksternim definicijama
/
106
100
30
#endif
};
struct adresa{
char prezime[MAX+1], ulica[MAX+1];
int br_ulaza, br_stana;
} spisak;
int broj_adresa;
void cita_adresu(void);
void dodaje_adresu(struct adresa x);
void menja_adresu(void);
void stampa_adrese(void);
void greska(Greska);
#endif
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
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:
107
37:
38:
39:
40:
41:
42:
43:
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:
108
}
}
if(broj_adresa > 0)
free(spisak);
return 0;
}
/
cita_adresu.c
/
/
Modul sa funkcijom koja cita podatke o adresi sa tastature
/
/
i funkcijom koja dodaje adresu spisku
/
#include "extern.h"
/
Funkcija koja cita podatke o adresi sa tastature
/
void cita_adresu(void)
{
struct adresa adr1;
int i, ista_adresa = 0;
printf("\nUneti prezime stanara, ime ulice, broj ulaza i broj stana:\n");
scanf("%s%s", adr1.prezime, adr1.ulica);
scanf("%d%d", &adr1.br_ulaza, &adr1.br_stana);
fflush(stdin);
if(broj_adresa==0)
dodaje_adresu(adr1);
else
{
for(i=0; i<broj_adresa; i++)
if(strcmp(spisak[i].prezime, adr1.prezime)==0 &&
strcmp(spisak[i].ulica, adr1.ulica)==0 &&
spisak[i].br_ulaza == adr1.br_ulaza &&
spisak[i].br_stana == adr1.br_stana)
ista_adresa = 1;
if(!ista_adresa)
dodaje_adresu(adr1);
}
}
/
Funkcija koja dodaje adresu spisku
/
void dodaje_adresu(struct adresa x)
{
if(broj_adresa==0)
{
if((spisak = malloc(sizeof(struct adresa))) == NULL)
greska(GRESKA_DODELE);
}
else if((spisak = realloc( spisak, (broj_adresa+1)
sizeof(struct adresa))) == NULL)
greska(GRESKA_PROMENE);
spisak[broj_adresa] = x;
broj_adresa++;
}
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
/
menja_adresu.c
/
/
Modul sa funkcijom koja azurira podatke o adresi u spisku
/
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
/
stampa_adrese.c
/
/
Modul sa funkcijom koja prikazuje na ekranu spisak adresa
/
1:
2:
3:
4:
/
greska.c
/
/
modul sa funkcijom koja prikazuje na ekranu poruke o greskama
/
#include "extern.h"
void menja_adresu(void)
{
char ulica[MAX+1];
int i, br_ulaza, br_stana;
printf("\nStara adresa (ulica, broj ulaza i broj stana):\n");
scanf("%s%d%d", ulica, &br_ulaza, &br_stana);
for(i=0; i<broj_adresa; i++)
if(strcmp(spisak[i].ulica, ulica)==0 &&
spisak[i].br_ulaza==br_ulaza &&
spisak[i].br_stana==br_stana)
{
printf("\nNova adresa (ulica, broj ulaza i broj stana):\n");
scanf("%s%d%d", spisak[i].ulica,
&spisak[i].br_ulaza,
&spisak[i].br_stana);
fflush(stdin);
}
}
#include "extern.h"
void stampa_adrese(void)
{
char ulica[MAX+1];
int i, br_ulaza;
printf("\nIme ulice i broj ulaza:\n");
scanf("%s%d", ulica, &br_ulaza);
fflush(stdin);
printf("\nSpisak stanara na adresi %s %d:\n", ulica, br_ulaza);
for(i=0; i<broj_adresa; i++)
if(strcmp(spisak[i].ulica,ulica)==0
&& spisak[i].br_ulaza==br_ulaza)
{
printf("%s %s ", spisak[i].prezime,spisak[i].ulica);
printf("%d %d\n", spisak[i].br_ulaza, spisak[i].br_stana);
}
}
#include "extern.h"
109
5:
6:
7:
8:
9:
10:
void greska(Greska)
{
fprintf(stderr, poruke_o_greskama[Greska]);
exit(1);
}
primer6_2
,
( , ).
:
direkt.h, #include
#define
;
global.h ,
glavni.c.
( ),
greska(),
adresa (prezime, ulica, br_ulaza, br_stana)
(spisak),
broj_adresa,
:
cita_adresu(), dodaje_adresu(), menja_adresu(), stampa_adrese()
(
dodaje_adresu()
);
extern.h .
global.h (
extern ).
glavni.c, cita_adresu.c,
menja_adresu.c, stampa_adrese.c greska.c (
):
glavni.c
broj_adresa 0 ( 9.) while(1) (
11. 38.) : 1. Nova adresa, 2. Izmena
adrese, 3. Prikaz, 4. Izlaz. 1.
broj_adresa
(BROJ) cita_adresu(), 2.
menja_adresu() 3.
stampa_adrese(). 4.
( 39. 40.);
cita_adresu. cita_adresu()
dodaje_adresu().
adr1
adresa, ( 9. 15.).
( 17.)
dodaje_adresu()
adr1, ( 18.).
110
( 19.),
dodaje_adresu()
adr1 ( 20. 28.).
dodaje_adresu()
adresa. ( 32.)
adresa ( 33.
34.),
adresa ( 36. 38.).
,
( 40. 41);
menja_adresu.
menja_adresu().
( 10. 11.)
( )
( 13. 22.);
stampa_adrese.
stampa_adrese(). :
( 10. 11.),
( )
( ) (
14. 20.);
greska.c
.
6.2 ) 6.2 )
.
6.2 a) primer6_2 ( )
6.2 ) primer6_2 ( )
6.2 ) primer6_2 ( )
111
6.2 ) primer6_2 ( )
6.2 ) primer6_2 ( )
6.2 ) primer6_2 ( )
6.2 ) primer6_2 ( )
6.2 ) primer6_2 ( )
112
primer6_3
, ,
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
/
direkt.h
/
/
Datoteka zaglavlje sa direktivama
/
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:
/
global.h
/
/
Datoteka zaglavlje sa definicijama
/
#endif
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:
/
extern.h
/
/
Datoteka zaglavlje sa eksternim definicijama
/
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
/
glavni.c
/
/
Glavni modul: prikaz na ekranu menu-a i pozivi ostalih funkcija
/
114
#include "global.h"
main()
{
int opcija, izlaz = 0;
do
{
printf("\n1. Dodavanje");
printf("\n2. Azuriranje");
printf("\n3. Prikaz");
printf("\n4. Izlaz");
printf("\n\nIzabrati opciju: ");
scanf("%d", &opcija);
fflush(stdin);
switch(opcija)
{
case 1:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
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:
dod_dat();
break;
case 2:
azur_dat();
break;
case 3:
prikaz_dat();
break;
case 4:
izlaz = 1;
break;
default:
break;
}
}while(!izlaz);
return 0;
}
/
dod_dat.c
/
/
Modul sa funkcijom koja datoteci dodaje zapise o studentima
/
#include "extern.h"
void dod_dat(void)
{
int rbr; struct pol_ispiti prazno = {0};
/Datoteka sa zadatim imenom ne postoji/
if((fptr = fopen("ispiti.bin", "rb+")) == NULL)
{
/Datoteka sa zadatim imenom se kreira/
if((fptr = fopen("ispiti.bin", "wb+")) == NULL)
greska(GRESKA1_DAT);
broj_zapisa = 0;
fwrite(&broj_zapisa, sizeof(broj_zapisa), 1, fptr);
}
/Datoteka postoji, citanje broja zapisa/
else
{
fread(&broj_zapisa, sizeof(broj_zapisa), 1, fptr);
/Dodavanje zapisa/
while(1)
{
printf("\nRedni broj studenta: ");
scanf("%d", &rbr);
fflush(stdin);
if(rbr<1 || rbr>BROJ) break;
printf("Ime studenta: ");
gets(polozio.student1.ime);
115
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
116
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:
48:
49:
50:
51:
52:
53:
54:
55:
56:
1:
2:
3:
4:
5:
6:
7:
8:
9:
}
fclose(fptr);
}
/
prikaz_dat.c
/
/
Modul sa funkcijom koja prikazuje na ekranu sadrzaj datoteke
/
#include "extern.h"
void prikaz_dat(void)
{
int rbr;
/Otvaranje datoteke sa zadatim imenom/
117
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
1:
2:
3:
4:
5:
6:
7:
8:
9:
primer6_3
,
.
:
direkt.h #include
#define
;
global.h
glavni.c.
( ),
greska(),
student (ime, reg_broj, god_upisa),
pol_ispiti ( student
broj_ispita),
118
,
polozio.student1:
polozio.student1.ime,
polozio.student1.reg_broj,
polozio.student1.god_upis,
polozio.broj_ispita
0 ( 38.),
,
( 42.),
(e 44. 45.),
,
,
,
() ( 52. 53.),
.
( ) ( 56.)
( 59. 60.);
azur_dat.c azur_dat().
"ispiti.bin"
( 9. 10.). ,
119
( 13.). ,
while(1) ( 16. 54.):
( ) ( 18. 28.),
()
( 31. 32.),
( 33.),
( 36.)
(polozio.student1.ime,polozio.student1.reg_broj,polozio.student1.god_
upisa, polozio.broj_ispita),
,
( 46.).
( 49. 50.),
, ,
.
( 55.);
prikaz_dat.c prikaz_dat().
"ispiti.bin"
( 10. 14.).
( 17.),
for ( )
, ( 19. 31.).
( 32.);
greska.c
.
6.3 ) 6.3 )
.
6.3 a) primer6_3 ( )
6.3 ) primer6_3 ( )
6.3 ) primer6_3 ( )
120
6.3 ) primer6_3 ( )
6.3 ) primer6_3 ( )
6.3 ) primer6_3 ( )
6.3 ) primer6_3 ( )
6.3 ) primer6_3 ( )
6.3 ) primer6_3 ( )
6.3 ) primer6_3 ( )
121
6.3 ) primer6_3 ( )
6.3 ) primer6_3 ( )
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:
122
/
primer6_4.c
/
/
Odredjivanje veceg od dva zadata cela broja, pomocu makroa
/
#include <stdio.h>
/Definicije Makroa/
#define UCITAJ_CELE(x,y)
#define ISPISI_TEKST(x)
#define ISPISI_CEO(x)
#define MAX(x,y)
scanf("%d%d",&x,&y)
printf(#x)
printf("%d\n\n",(x))
((x)>(y))?(x):(y)
main()
{
int a, b;
/Pozivi Makroa/
ISPISI_TEKST(\nZadati dva cela broja:\t\t);
UCITAJ_CELE(a,b);
ISPISI_TEKST(Veci od dva zadata broja je:\t);
ISPISI_CEO(MAX(a,b));
return 0;
}
primer6_4
#define
,
.
, #define ,
, .
(
),
( ).
.
( 7. 10.)
:
UCITAJ_CELE(x,y) scanf("%d%d",&x,&y),
ISPISI_TEKST(x) printf(x) ( printf(#x)),
ISPISI_CEO(x) printf("%d\n\n",(x)),
MAX(x,y) ((x)>(y))?(x):(y).
, ,
( ISPISI_CEO MAX).
ISPISI_TEKST #.
.
UCITAJ_CELE,
ISPISI_TEKST, ISPISI_CEO MAX ( )
. ( 16. 19.)
( ) -
,
. 6.4 ) 6.4 ) .
,
, ,
,
.
( )
( ). e
.
6.4 a) primer6_4 ( )
6.4 ) primer6_4 ( )
123
: ,
( ,
).
,
.
, ,
.
( ).
.
, (
)
.
.
124
6.
_____________________________________________
1.
: (
). : direkt.h,
global.h, extern.h, glavni.c, kopira.c, greska.c.
125
6.
_____________________________________________
e o .
:
a) , ,
) .
1.
( _ ).
2.
: #include #define, .
3.
n (n100) , : ime,
broj_indeksa, adresa br_telefona
( ).
4.
,
( _ ),
, ,
.
5.
m (m10)
( ), n (n10),
.
126
7.
/
++
/
/
/
127
_____________________________________________
primer7_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:
44:
128
//primer7_1.cpp
//Realizacija ulaza/izlaza (tastatura/ekran) za razlicite vrste podataka
#include <iostream>
//potrebna biblioteka ulaza/izlaza
#define MAX1
80
//broj korisnih karaktera u stringu
#define MAX2
10
//broj karaktera stringa, koji se citaju
using namespace std;
//potreban imenski prostor za biblioteke
int main( )
{
int znak, broj_i;
primer7_1
++
.
.
. ()
( ) ,
. ,
, (.):
ime_objekta_klase.ime_clana.
, ,
++ .
/ (stdio.h)
++,
++. ++ e e
/ (iostream fstream) (istream, ostream, fstream,
ifstream, ofstream) (cin, cout, cerr).
++ , std
, using namespace std; ( 6.).
. istream , ostream
, iostream .
:
in istream
(),
cout ostream
(),
cerr ostream
(),
.
scanf() printf(), %
, ++
( >> <<)
( ++).
>>
++ , <<
++ ( ,
, ).
( 11.
12.). ++:
:
printf("\nUlaz/Izlaz podataka u C programu\n")
++: cout << "\nUlaz/Izlaz podataka u C++ programu\n";
, (<<)
\n ( printf()).
( 13.) (D/N)
char (cin >> odgovor). (>>)
.
ignore(), cin (cin.ignore()), istream.
D (d) ( 16.),
129
(>>) : ( 18.),
( 22.) ( 27.).
19. endl,
.
,
( 31.) get() istream. get()
. cin.get(string, MAX1+1)
MAX1 string.
, cin.get(string, MAX1+1) cin.ignore()
cin.getline(string, MAX1+1) (
).
get()
put() ostream
( 36. 37.). put()
( ) (char).
( 41.) get()
: (string) MAX2+1,
MAX2 (10) .
, get() .
. ++
.
7.1 )
7.1 ).
7.1 ) primer7_1 ( )
7.1 ) primer7_1 ( )
7.1 ) primer7_1 ( )
7.1 ) primer7_1 ( )
130
7.1 ) primer7_1 ( )
7.1 ) primer7_1 ( )
7.1 ) primer7_1 ( )
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:
25:
26:
//primer7_2.cpp
//Primena funkcija za konverziju i formatiranje ulaza/izlaza
#include <iostream>
#include <iomanip>
using namespace std;
void stampa_rbr( void );
int main( )
{
char slovo = 'A';
char string[] = "Formatiranje C++ ulaza/izlaza";
int broj_i = 1234;
double broj_d = 1.23456;
//1. stampanje samog slova A
stampa_rbr();
cout << slovo;
//2. stampanje ASCII koda slova A
stampa_rbr();
cout << (int)slovo;
//3. stampanje znaka zadate ASCII vrednosti (slova a)
stampa_rbr();
cout << (char)97;
131
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
132
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
primer7_2
.
( )
(iomanip).
( 10. 13.) (
15. 94.):
slovo , :
cout << slovo; - ,
cout << (int)slovo; - ASCII .
( ) (
97) :
cout << (char)97;
, string
cout << string;
write() ostream
(5) (string):
cout.write(string,5);
,
:
133
-
,
cout.unsetf(ios::oct);
-
,
cout.setf(ios::hex);
-
,
cout.setf(ios::uppercase); -
,
cout.unsetf(ios::hex);
-
,
cout.width(10);
- (10)
,
,
cout.setf(ios::left);
-
,
cout.unsetf(ios::left);
-
,
cout.fill('0');
-
,
cout.fill(' ');
-
,
cout.precision(2);
-
,
cout.setf(ios::scientific); -
,
,
cout.unsetf(ios::scientific); -
.
setf()
, unsetf() .
stampa_rbr() ( 99. 104.)
,
.
7.2.
cout.setf(ios::oct);
7.2 primer7_2
134
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:
48:
//primer7_3.cpp
//Tabeliranje vrednosti izraza: 10 stepenovan brojem x
//u zadatom opsegu i sa zadatim korakom za x
#include <iostream>
#include <iomanip>
#include <math.h>
#define MIN
0
//donja granica opsega vrednosti x
#define MAX
20
//gornja granica opsega vrednosti x
#define MAX1
2
//sirina polja za prikaz vrednosti x
#define MAX2
10
//sirina polja za prikaz vrednosti izraza
using namespace std;
int main()
{
int xmin, xmax, dx;
do
{
cout << "\nUnesite cele brojeve ";
cout << "xmin>=" << MIN << ", xmax<=" << MAX << " i dx: ";
cin >> xmin >> xmax >> dx;
}while(xmin<MIN || xmax>MAX || dx>xmax);
//Stampanje na ekranu zaglavlja tabele i tabele
cout << "\nx\t10 stepenovano brojem x\t\t10 stepenovano brojem x"
<< "\n\t(desno poravnanje)\t\t(levo poravnanje)"
<< "\n================================"
<< "================================\n\n";
cout.setf(ios::fixed);
cout.precision(0);
for(int x = xmin; x<=xmax; x+=dx)
{
//Desno poravnanje vrednosti x u 1. koloni tabele
cout.width(MAX1);
cout.unsetf(ios::left);
cout << x << "\t\t";
//Desno poravnjanje vrednosti izraza u 2. koloni tabele
cout.width(MAX2);
cout.unsetf(ios::left);
cout << pow(10,x) << "\t\t";
//Levo poravnjanje vrednosti izraza u 3. koloni tabele
cout.width(MAX2);
cout.setf(ios::left);
cout << pow(10,x) << "\n";
}
cout << "\n";
return 0;
}
135
primer7_3
( 7.3 ))
x:
( 15. 19.). ( 30. 45.)
x:,
10x :
.
.
(<<)
,
( 22. 25.).
pow(10,x)
math.h, double.
, 27. 28.
setf(ios::fixed) precision(0) cout. ,
for .
x, ,
. MAX1 (2)
.
, unsetf(ios::left)
( 32. 33.).
10x,
x. MAX2 (10)
.
, unsetf(ios::left)
( 37. 38.).
10x,
x , ,
setf(ios::left), MAX2 (10) ,
( 42. 43.).
7.3 ).
7.3 ) primer7_3 ( )
7.3 ) primer7_3 ( )
136
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:
//primer7_4.cpp
//Citanje niza celih brojeva iz komandne linije i prikaz na ekranu
//njegovih elemenata u oktalnom, heksadecimalnom i binarnom obliku
#include <iostream>
#include <iomanip>
#include <stdlib.h>
using namespace std;
void stampa_bin( int decimal_value );
int main(int argc, char argv[])
{
int decimalni;
if( argc < 2 )
{
cerr << "\nUneti ime programa i niz celih brojeva.\n";
exit(1);
}
cout << "\nZadati niz brojeva u raznim oblicima:\n\n";
cout << "dec\tokt\theksa\tbin\n";
for(int i=1; i<argc; i++)
{
decimalni = atoi( argv[i]);
cout << "\n" << decimalni << "\t";
cout << oct << decimalni << "\t";
cout << hex << decimalni << "\t";
stampa_bin(decimalni);
}
return 0;
}
//Funkcija koja prikazuje na ekranu niz u binarnom obliku
void stampa_bin(int broj)
{
int broj_cifara = 0;
int niz_binarnih[50];
while( broj != 0 )
{
niz_binarnih[broj_cifara++] = broj % 2;
broj /= 2;
}
for( int i=broj_cifara-1; i>=0; i-- )
cout << dec << niz_binarnih[i];
}
137
primer7_4
,
.
( ).
( 14. 17.), cerr ostream
exit(1) .
, , for
( 22. 28.):
, atoi() ( 23),
decimalni
( 25. 26.). (decimalni,
cout << oct << decimalni cout << hex << decimalni),
( 27.)
stampa_bin(), ( 33. 44.).
stampa_bin()
, .
35. (niz_binarnih[50]),
.
2
2,
0 ( 37. 40.).
, ( 42. 43.),
.
7.4 ) 7.4 ).
7.4 ) primer7_4 ( )
7.4 ) primer7_4 ( )
138
/ /, C++
iostream ( ) (>>)
(<<). stdio.h,
/ C++
, .
,
:
cin >> x; (cin) (>>)
x,
cout << x; (cout) (<<)
x.
setf() ,
.
unsetf().
C++
, (
ignor() get()).
139
7.
_____________________________________________
1.
++ , (
) kraj, n=20 ,
,
.
140
7.
_____________________________________________
:
1.
;
2.
.
1.
++ n (n10)
,
.
2.
++ n (n5)
, ,
.
3.
++ (
)
.
4.
++ n (n5) (
) ,
, .
141
142
8.
, ,
++
143
_____________________________________________
primer8_1
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
//primer8_1.cpp
//Pristup globalnoj promenljivoj (istog imena kao i lokalna)
#include <iostream>
using namespace std;
float suma(float f1, float f2);
float f = 10.5;
int main()
{
float a=10.5, b=10.5;
cout << "\n" << a << "(lok) + " << b << "(lok) + ";
cout << f << "(glob) = " << suma(a, b) << endl;
return 0;
}
//Funkcija koja izracunava sumu
float suma(float f1,float f2)
{
float f = 20.5;
return(f1 + f2 + (::f) );
}
primer8_1
C++
(
)
(::)
, .
f ( 7.)
main() suma().
suma()
a=10.5 b=10.5 .
suma() f (
), ( 21.)
f, ,
(::f).
( b) f ( 8.1).
8.1 primer8_1
144
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:
//primer8_2.cpp
//Koriscenje funkcije sa podrazumevanim vrednostima argumenata
//za prikaz izabrane opcije i brojeva sa tastature
#include <iostream>
using namespace std;
void podr_argumenti(char c = 'X', int broj1 = 0, float broj2 = 0.5);
int main()
{
podr_argumenti('A', 1, 1.5);
//stampa: A, 1, 1.5
podr_argumenti('B', 2);
//stampa: B, 2, 0.5
podr_argumenti('C');
//stampa: C, 0, 0.5
podr_argumenti();
//stampa: X, 0, 0.5
return 0;
}
//Funkcija koja prikazuje na ekranu izabrane argumente
void podr_argumenti(char c, int broj1, float broj2)
{
cout << "\nIzabrana opcija: " << c << endl;
cout << "Ceo broj: " << broj1 << endl;
cout << "Realan broj: " << broj2 << endl;
}
primer8_2
C++
.
7. podr_argumenti()
( ASCII slova X,
broj1 0 broj2 0.5).
podr_argumenti() ( 21. 25.)
(c, broj1 broj2).
podr_argumenti() :
podr_argumenti() ( 10.),
,
podr_argumenti()
(broj2 = 0.5) ( 12.),
,
podr_argumenti()
(broj1 = 0 broj2 = 0.5) ( 14.),
,
podr_argumenti()
(c = 'X', broj1 = 0 broj2 = 0.5) ( 16.).
8.2 podr_argumenti().
145
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:
32:
33:
34:
35:
146
//primer8_3.cpp
//Izracunavanje srednje vrednosti izabranog niza
//pomocu preklopljenih funkcija
#include <iostream>
#define MAX 4
//duzina niza
using namespace std;
float srednja_vrednost(int niz_int[], int n);
float srednja_vrednost(float niz_float[], int n);
int main()
{
int a[MAX] = {1, 2, 3, 4};
float b[MAX] = {1.25, 2.25, 3.25, 4.25};
cout << "\nSrednja vrednost niza celih brojeva:\t";
cout << srednja_vrednost(a, MAX) << endl;
cout << "Srednja vrednost niza realnih brojeva:\t";
cout << srednja_vrednost(b, MAX) << endl;
return 0;
}
//Funkcija koja izracunava srednju vrednost niza celih brojeva
float srednja_vrednost( int niz_int[], int n)
{
int s = 0;
for(int i=0; i<n; i++)
s += niz_int[i] ;
return ((float)s/n);
}
//Funkcija koja izracunava srednju vrednost niza realnih brojeva
float srednja_vrednost( float niz_float[], int n )
{
float s = 0;
for(int i=0; i<n; i++)
s += niz_float[i] ;
return (s/n);
}
primer8_3
C++ .
, .
. ,
.
srednja_vrednost(). 8.
( , ,
), 9. (
, , ).
( 23. 28.)
.
( 30. 35.)
,
.
( 16.), b ( 18.)
( 8.3).
8.3 primer8_3
primer8_4
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
//primer8_4.cpp
//Prikaz na ekranu dela zadatog teksta, pomocu inline funkcije
#include <iostream>
#include <ctype.h>
using namespace std;
inline void stampa_slovo(char kod_slova)
int main()
{
char prvo, posl;
cout << "\n\inline\ funkcija nema potrebe za stekom\n";
cout << "C++ prevodilac proverava broj i tipove argumenata.\n";
do
{
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
primer8_4
(inline
).
.
,
, .
.
7. inline stampa_slovo()
ASCII .
( 8.4 ) 8.4 )) do..while
( 15. 20.) , for
( 23. 24.), ,
stampa_slovo(). 8.4 ).
8.4 a) primer8_4 ( )
8.4 ) primer8_4 ( )
8.4 ) primer8_4 ( )
148
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:
44:
45:
46:
47:
//primer8_5.cpp
//Poziv funkcije za izmenu zadate strukture podataka na tri nacina:
//po vrednosti, po referenci pomocu pokazivaca
//i po referenci pomocu reference.
#include <iostream>
#define MAX 30
//broj korisnih karaktera u stringu
using namespace std;
struct student{
char ime[MAX+1];
int reg_broj;
int god_upisa;
int polozenih;
};
void po_vrednosti(student x);
void po_ref_pok(student ptr_x);
void po_ref_ref(student &ref_x);
int main()
{
student s1;
s1.polozenih = 10;
cout << "Vrednost broja, clana strukture\n\n";
cout << "na pocetku: " << s1.polozenih << endl;
//Predaja funkciji kopije strukture
po_vrednosti(s1);
cout << "posle predaje funkciji strukture po vrednosti:\t";
cout << s1.polozenih << endl;
//Predaja funkciji pokazivaca na strukturu
po_ref_pok(&s1);
cout << "posle predaje funkciji pokazivaca na strukturu:\t";
cout << s1.polozenih << endl;
//Predaja funkciji reference strukture
po_ref_ref(s1);
cout << "posle predaje funkciji reference na strukturu:\t";
cout << s1.polozenih << \n\n;
return 0;
}
//Funkcija koja dobija strukturu po vrednosti
void po_vrednosti(student x)
{
x.polozenih++;
//sintaksa strukture
}
149
48:
49:
50:
51:
52:
53:
54:
55:
primer8_5
.
9. 14. student (ime, reg_broj,
god_upisa, polozenih) : po_vrednosti(),
po_ref_pok(), po_ref_ref() ( 16. 18.).
( 45. 55.)
: student (x),
student (ptr_x),
student (&ref_x).
(polozenih).
x.polozenih++;
,
.
ptr_x->polozenih++;
,
, .
ref_x.polozenih++;
,
, . ( )
( ), .
: ->
( , 54.), &
( , 38.).
( 18.) (&ref_x). ,
, ()
.
a
student (s1), s1.polozenih 10
( 21. 25.). C++,
student
: student s1 ( struct student s1).
.
po_vrednosti() s1
s1.polozenih ( 28. 30.).
po_ref_pok() s1
s1.polozenih ( 33. 35.).
po_ref_ref() s1
s1.polozenih ( 38. 40.).
150
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:
//primer8_6.cpp
//Odredjivanje najveceg broja u zadatom dinamickom nizu celih brojeva
#include <iostream>
#include <stdlib.h>
#define MAX 50
//dozvoljena duzina niza
using namespace std;
int main( )
{
int i, n, max, niz;
do
{
34:
35:
36:
37:
38:
delete niz;
return 0;
}
primer8_6
,
.
, , ++
new delete,.
new
NULL ( ).
delete
, .
. 9. niz int,
.
( 8.6 ))
( 11. 14.)
new (
) ( 16.).
niz.
NULL,
( 18. 21.). , ,
( 8.6 )) ( 23. 25.),
( 27. 31.)
( 8.6 )). ,
delete
( 35.).
8.6 ) primer8_6 ( )
8.6 ) primer8_6 ( )
8.6 ) primer8_6 ( )
152
primer8_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:
//primer8_7.cpp
//Dinamicka dodela memorije za zadatu strukturu podataka
#include <iostream>
#include <stdlib.h>
#define MAX 15
//broj korisnih karaktera u stringu
using namespace std;
struct student{
char ime[MAX+1];
char prezime[MAX+1];
int reg_broj;
int god_upisa;
};
int main()
{
student ptr_s;
ptr_s = new student;
if(ptr_s==NULL)
{
cerr << "Nije uspela dodela memorije\n";
exit(1);
}
cout << "\nIme, prezime, registarki broj i godina upisa:\n";
cin >> ptr_s->ime >> ptr_s->prezime;
cin >> ptr_s->reg_broj >> ptr_s->god_upisa;
cout << "\nUneti podaci:\n";
cout << ptr_s->ime << " " << ptr_s->prezime << " ";
cout << ptr_s->reg_broj << " " << ptr_s->god_upisa << "\n\n";
delete ptr_s;
return 0;
}
primer8_7
, .
8. 13. student (ime, prezime,
reg_broj god_upisa).
ptr_s
student, new (
) ( 18.)
153
8.7 ) primer8_7 ( )
8.7 ) primer8_7 ( )
primer8_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:
154
//primer8_8.cpp
//Prikaz na ekranu podataka zadatog dinamickog niza struktura
#include <iostream>
#include <stdlib.h>
#define BROJ
2
//broj adresa (struktura u nizu)
#define MAX
30
//broj korisnih karaktera u stringu
using namespace std;
struct adresa{
char ime[MAX+1];
char ulica[MAX+1];
int broj;
char grad[MAX+1];
};
void prikaz_adresa(struct adresa adrese[], int n);
void greska(void);
int main()
{
adresa adrese;
adrese = new adresa[BROJ];
if(adrese==NULL)
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
greska();
cout << "\n==============UNOS ADRESA ============== \n";
for(int i=0; i<BROJ; i++)
{
cout << "\nIme i prezime: ";
cin.getline(adrese[i].ime, MAX+1);
cout << "Ulica: ";
cin.getline(adrese[i].ulica, MAX+1);
cout << "Broj: ";
cin >> adrese[i].broj;
cin.ignore();
cout << "Grad: ";
cin.getline(adrese[i].grad, MAX+1);
}
prikaz_adresa(adrese, BROJ);
delete adrese;
return 0;
}
//Funkcija koja prikazuje na ekranu sadrzaj niza struktura
void prikaz_adresa(struct adresa adrese[], int n)
{
cout << "\n================ ADRESE ================ \n";
for(int i=0; i<BROJ; i++)
{
cout << "\nIme:\t\t" << adrese[i].ime << endl;
cout << "Ulica i broj:\t" << adrese[i].ulica << " ";
cout << adrese[i].broj << endl;
cout << "Grad :\t\t" << adrese[i].grad << endl;
}
cout << "\n";
}
//Funkcija koja prikazuje na ekranu poruke o greskama
void greska(void)
{
cerr << "Nije uspela dodela memorije\n";
exit(1);
}
primer8_8
, .
( 9. 14.) adresa
(ime, ulica, broj grad), prikaz_adresa() greska().
prikaz_adresa() ( 50. 59.)
adresa
for .
155
greska(void)
( 61. 64.).
adrese
adresa,
. new
, ,
( 22.) NULL ,
( 24. 25.).
( 11.8 )) ( 27.
41.), prikaz_adresa() ( 43.)
( 45.).
8.8 ) 8.8 )
, .
8.8 ) primer8_8 ( )
8.8 ) primer8_8 ( )
8.8 ) primer8_8 ( )
8.8 ) primer8_8 ( )
8.8 ) primer8_8 ( )
156
8.8 ) primer8_8 ( )
.
inline
.
. (
)
.
157
8.
_____________________________________________
1.
++ ,
(dan, mesec godina) :
Januar 1. 2004.
Februar 1. 2004.
:
: redni_broj_meseca ime_meseca.
.
158
8.
_____________________________________________
1.
++ (i, l d)
int, long
double. n (n50).
.
2.
++
n (n50) , ,
,
(O/R).
,
.
.
.
3.
++
a) :
1. Citanje niza
2. Sazimanje niza
3. Prosirenje niza
4. Prikaz niza
5. Izlaz
5.
) 1. , n
(n20),
) 2. ,
) 3. , n
(n20), ,
) 4. .
4.
++ :
) :
ime_vlasnika, adresa (ulica broj), broj_soba, broj_kvadrata cena.
100 ,
) , ,
,
) .
159
160
9.
++
161
_____________________________________________
primer9_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:
44:
162
//primer9_1.cpp
//Kopiranje sadrzaja jedne tekst datoteke u drugu,
//uz konverziju svih velikih slova u ista mala
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <ctype.h>
#define MAX 30
//broj korisnih karaktera u stringu
using namespace std;
int main()
{
int c;
char ime1[MAX+1], ime2[MAX+1];
ifstream fin;
ofstream fout;
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
primer9_1
++
:
fstream iostream (
),
ifstream istream (
),
ofstream ostream (
).
.
(fstream, ifstream ofstream) (get(), put()\)
( (>>), (<<))
(iostream, istream ostream).
.
.
.
fstream ( 5.).
14. 15. : fin ifstream fout ofstream.
( 9.1 ))
ime1 ( 18. 19.),
open() fin ( 22.),
ios::in ( ) ios::nocreate ( ,
). fin
ime1. (
) ( 25. 29.).
( 9.1 ))
im2 ( 32. 33.),
open fout ( 36.)
ios::out ( ) ios::noreplace (
). fout
ime2. (
) ( 39.
43.).
163
9.1 ) primer9_1 ( )
9.1 ) primer9_1 ( )
9.1 ) primer9_1 ( )
9.1 ) primer9_1 ( )
9.1 ) primer9_1 ( )
primer9_2
1:
2:
3:
4:
5:
6:
7:
8:
164
//primer9_2.cpp
//Kopiranje sadrzaja jedne tekst datoteke u drugu dodavanjem
//rednog broja linije, i u trecu dopisivanjem na kraj postojeceg sadrzaja
#include <iostream>
#include <fstream>
#include <stdlib.h>
#define MAX 80
//broj korisnih karaktera u stringu
using namespace std;
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:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
165
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
primer9_2
.
++
typedef enum,
enum typedef ( 9.).
typedef .
f1, f2 f3
( 21.).
f1 f2 "primer1.txt"
"primer2.txt", . "primer1.txt"
ios::in ( ) ios::nocreate ( , ),
"primer2.txt" ios::out ( ) ( 24. 30.).
while
f1, eof()
f1 0 ( 33.).
getline() ( MAX )
( 34.) f2
( 35.). ,
( 37.) ( 40. 41.).
f1 f3 "primer1.txt"
"primer3.txt", . , "primer1.txt"
ios::in ( ) ios::nocreate ( ),
"primer2.txt" ios::out ( ) ios::app (
) ( 44. 50.).
while
f1 eof() f1
0 ( 53.).
getline() ( MAX )
( 54.) ,
f3 ( 55.).
, ( 57.)
( 60. 61.).
9.2 ), 9.2 ) 9.2)
, 9.2 )
9.2 ) 9.2 )
.
166
9.2 ) primer9_2 ( )
9.2 ) primer9_2 ( )
9.2 ) primer9_2 ( )
9.2 ) primer9_2 ( )
9.2 ) primer9_2 ( )
9.2 ) primer9_2 ( )
primer9_3
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
//primer9_3.cpp
//Upis u tekst datoteku / citanje iz tekst datoteke stringova i
//prikaz na ekranu i izmene vrednosti tekuce pozicije u istoj datoteci
#include <fstream>
#include <fstream.h>
#include <stdlib.h>
#include <string.h>
#define MAX1
4
//broj korisnih karaktera u jednom stringu
#define MAX2
7
//broj korisnih karaktera u drugom stringu
using namespace std;
167
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:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
168
int main()
{
char string1[MAX1+1] = "Test";
char string2[MAX2+1] = "Program";
char string[MAX1+MAX2+1];
fstream f;
f.open("test.txt", ios::out | ios::in);
if(!f)
{
cerr << "\nGreska pri otvaranju datoteke\n";
exit(1);
}
cout << "\nUPIS PRVOG STRINGA";
for(int i = 0; string1[i] != '\0'; i++)
{
f.put(string1[i]);
cout << "\nUpisan znak: " << (char)string1[i];
cout <<"\t\t\tTekPoz: " << f.tellp();
}
cout << "\n\nUPIS DRUGOG STRINGA: ";
f.write(string2,strlen(string2));
cout << string2 << ",\tTekPoz: " << f.tellp();
cout << "\n\nPOVRATAK NA POCETAK";
f.seekp(0);
cout << ",\t\tTekPoz: " << f.tellp();
cout << "\n\nCITANJE DATOTEKE: ";
f.getline(string, MAX1+MAX2+1);
cout << string;
cout << ",\tTekPoz: " << f.tellp();
cout << "\n\nPOMERAJ " << MAX1 << " OD POCETKA";
f.seekp(MAX1, ios::beg);
cout << ",\t\tTekPoz: " << f.tellp();
cout << "\n\nPOMERAJ " << MAX2 << " OD TRENUTNE POZICIJE";
f.seekp(MAX2, ios::cur);
cout << ",\tTekPoz: " << f.tellp();
cout << "\n\nPOMERAJ " << -(MAX1+MAX2) << " OD KRAJA";
f.seekp(-(MAX1+MAX2), ios::end);
cout << ",\t\tTekPoz: " << f.tellp() << "\n\n";
f.close();
return 0;
}
primer9_3
,
, .
C++
,
. tellg(), a
seekg().
tellp(), seekp().
( 12., 13.
14.), f fstream ( 16.),
. f
"test.txt". "test.txt" ios::out | ios::in (
) ( 18. 22.).
string1
: . tellp()
f ( 24. 29.).
string2
, write() f. ,
tellp() f
( 31. 33.).
seekp(0) f
. seekp()
. tellp()
f, ( 35. 37.).
MAX1+MAX2 ,
getline() f, tellp()
f ( 39. 42.).
seekp(MAX1,ios::beg) f,
MAX1 (ios::beg).
seekp(MAX2,ios::cur) f,
MAX2 (ios::cur).
seekp(-(MAX1+MAX2),ios::end) f,
(MAX1+ MAX2) (ios::end).
tellp(),
9.3.
9.3 primer9_3
169
primer9_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:
48:
170
//primer9_4.cpp
//Citanje iz binarne datoteke prethodno upisanog niza celih brojeva
#include <iostream>
#include <fstream>
#include <stdlib.h>
#define MAX 10
//dozvoljena duzina niza
using namespace std;
fstream fbin;
void upis(int niz[], int n);
void prikaz_jednog(int niz[], int n);
void prikaz_svih(int niz[], int n);
int main()
{
int niz[MAX], opcija, izlaz = 0;
//Otvaranje binarne datoteke za upis i citanje
fbin.open("primer.bin", ios::out | ios::in | ios::binary);
if(!fbin)
{
cout << "\nGreska pri otvaranju datoteke!\n";
exit(1);
}
//Inicijalizacija i upis niza u binarnu datoteku
upis(niz, MAX);
//Prikaz jednog ili svih elemenata niza (opciono) iz binarne datoteke
while(1)
{
cout << "\n1. Prikaz vrednosti jednog elementa niza";
cout << "\n2. Prikaz vrednosti svih elemenata niza\n\n";
opcija = cin.get();
cin.ignore();
switch(opcija)
{case '1':
prikaz_jednog(niz, MAX);
break;
case '2':
prikaz_svih(niz, MAX);
break;
default:
izlaz = 1;
break;
}
if(izlaz)
break;
}
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
fbin.close();
return 0;
}
//Funkcija koja upisuje u datoteku niz celih brojeva
void upis(int niz[], int n)
{
cout << "\nNiz je inicijalizovan na vrednosti:\n";
for (int i=0; i<MAX; i++)
{
niz[i] = 10(i+1);
cout << niz[i] << " ";
}
cout << "\ni upisan u datoteku.\n";
fbin.write((char )niz, MAXsizeof(int));
}
//Funkcija koja prikazuje na ekranu vrednost elementa niza
//sa rednim brojem zadatim preko tastature
void prikaz_jednog(int niz[], int n)
{
int rbroj, broj;
do
{
171
primer9_4
, .
a fbin fstream
( 8.) .
10. 12. :
upis(), prikaz_jednog() prikaz_svih().
.
upis() ( 54. 63.)
, (
9.4 )) write() fbin.
prikaz_jednog() ( 66. 82.)
(rbroj) ( 69. 73.)
seekg() fbin
(ios::beg) int ((rbroj1)sizeof(int) ( 76.).
read((char )&broj,
sizeof(int)) fbin ( 79.).
( char),
.
( 9.4 )).
prikaz_svih() ( 84. 95.)
seekg(0) fbin
( 86.).
read((char )niz, nsizeof(int)) fbin ( 89.).
,
n (
char),
.
( 9.4 )).
int fbin
"primer.bin" ( 18.). "primer.bin"
ios::out | ios::in | ios::binary (, ).
upis(), ,
while(1) ( 28. 48.) :
(prikaz_jednog() prikaz_svih() ). ( 9.4
)), ( 47.) ( 50.).
9.4 ) primer9_4 ( )
172
9.4 ) primer9_4 ( )
9.4 ) primer9_4 ( )
9.4 ) primer9_4 ( )
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:
24:
//primer9_5.cpp
//Azuriranje sadrzaja binarne datoteke. Zapis fiksne duzine:
//ime studenta, smer, reg. broj i broj polozenih ispita.
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <string.h>
#define MAX 15
//broj korisnih karaktera u stringu
using namespace std;
enum Greska{GR_OTV_UP, GR_OTV_CIT};
char poruke_o_greskama[] = {
"\nGreska pri otvaranju datoteke za upis!\n",
"\nGreska pri otvaranju datoteke za citanje!\n"};
fstream fbin;
struct student{
char ime[MAX+1];
char prezime[MAX+1];
char smer[MAX+1];
char reg_broj[MAX+1];
int br_pol_ispita;
}s1;
int broj_struktura = 0;
173
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
174
void izmene(void);
void prikaz(void);
void greska(Greska status);
int main()
{
char opcija; int izlaz = 0;
//Otvaranje binarne datoteke za upis
fbin.open("studenti.bin", ios::out | ios::binary);
if(!fbin)
greska(GR_OTV_UP);
//Prihvatanje vrednosti clanova strukture i upis u datoteku
cout << "\nUnositi: ime, prezime, smer, reg. broj i ";
cout << "broj pol. ispita (do reci Kraj)\n";
while(1)
{
cin >> s1.ime;
if(strcmp(s1.ime, "Kraj")==0) break;
cin >> s1.prezime >> s1.smer;
cin >> s1.reg_broj >> s1.br_pol_ispita;
//Upis strukture u datoteku
fbin.write((char )&s1, sizeof(student));
broj_struktura++;
}
fbin.close();
do
{
cout << "\n1. Izmena\n2. Prikaz\n3. Izlaz";
cout << "\n\nIzabrati opciju: "; cin >> opcija;
switch(opcija)
{
case '1':
izmene(); break;
case '2':
prikaz(); break;
default:
izlaz = 1; break;
}while(!izlaz);
return 0;
}
//Funkcija koja azurira sadrzaj datoteke
void izmene(void)
{
int rbroj, promena;
//Otvaranje binarne datoteke za citanje i upis
fbin.open("studenti.bin", ios::in | ios::out | ios::binary);
if(!fbin)
greska(GR_OTV_CIT);
//Izmena podataka u datoteci
cout << "\nRedni broj studenta (do broja 0) i dodatni broj pol. Ispita\n";
while(1)
{
cin >> rbroj;
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
if(rbroj == 0)
break;
cin >> promena;
//Pomeraj na strukturu i citanje njenog sadrzaja
fbin.seekg(-(rbroj-1)sizeof(student), ios::beg);
fbin.read((char )&s1, sizeof(student));
s1.br_pol_ispita += promena;
//Povratak na pocetak strukture i upis njenog sadrzaja
fbin.seekp(-sizeof(student), ios::cur);
fbin.write((char )&s1, sizeof(student));
}
fbin.close();
}
//Funkcija koja prikazuje na ekranu sadrzaj datoteke
void prikaz(void)
{
int i;
//Otvaranje binarne datoteke za citanje
fbin.open("studenti.bin", ios::in | ios::binary);
if(!fbin)
greska(GR_OTV_CIT);
//Prikaz na ekranu sadrzaja datoteke
fbin.seekg(0);
for(i=0; i<broj_struktura;i++)
{
fbin.read((char )&s1, sizeof(student));
cout << s1.ime << " " << s1.smer << " ";
cout << s1.reg_broj << " " << s1.br_pol_ispita << endl;
}
fbin.close();
}
//Funkcija koja prikazuje na ekranu poruke o greskama
void greska(Greska status)
{
cerr << poruke_o_greskama[status];
exit(1);
}
primer9_5
(
, ).
a fbin fstream
( 15.), .
17. 23. student (ime,
prezime, smer, reg_broj, broj_pol_ispita) s1 ,
24. 0
broj_struktura.
175
9.5 ) primer9_5 ( )
9.5 ) primer9_5 ( )
176
9.5 ) primer9_5 ( )
9.5 ) primer9_5 ( )
9.5 ) primer9_5 ( )
9.5 ) primer9_5 ( )
9.5 ) primer9_5 ( )
primer9_6
1:
2:
3:
4:
5:
6:
7:
8:
9:
//primer9_6.cpp
//Pretrazivanje spiska stanara
//(upotreba dinamicke dodele memorije i povezanih lista)
#include <iostream>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define MAX 30
//broj korisnih karaktera u stringu
using namespace std;
177
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:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
178
struct adresa{
char ime[MAX+1];
char ulica[MAX+1];
int broj;
char grad[MAX+1];
adresa sledeca;
};
void cita(adresa ptr_a);
void nalazi(adresa ptr_a);
void stampa(adresa ptr_a);
void greska(void);
int main()
{
char odgovor = 'd';
adresa prva, tekuca;
prva = new adresa;
tekuca = prva;
do
{
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
}
//Funkcija koja prikazuje na ekranu ime od adrese
void stampa(adresa ptr_a)
{
cout << ptr_a -> ime << endl;
}
//Funkcija koja prikazuje na ekranu poruke o greskama
void greska(void)
{
cerr << "Nije uspela dinamicka dodela memorije\n";
exit(1);
}
primer9_6
(
) .
adresa (ime, ulica, broj, grad
sledeca ), : cita() , nalazi(), stampa() greska().
, greska(), adresa.
179
9.6 a) primer9_6 ( )
9.6 ) primer9_6 ( )
9.6 ) primer9_6 ( )
9.6 ) primer9_6 ( )
9.6 ) primer9_6 ( )
180
9.6 ) primer9_6 ( )
9.6 ) primer9_6 ( )
9.6 ) primer9_6 ( )
fstream fstream, ofstream
ifstream.
fstream. ,
ofstream, , ifstream.
fstream .
fstream
.
181
9.
_____________________________________________
1.
++
: .
.
182
9.
_____________________________________________
.
1.
++
.
2.
++
: .
3.
++
:
.
4.
++ :
a) m (m100) , n (n100),
, m ,
) ,
0, ,
) .
5.
++ :
) (ime, broj_indeksa, ocena) n
(n100) , n ,
)
,
) (ime broj_indeksa)
ocena.
183
184
10.
++
185
_____________________________________________
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:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
186
//primer10_1.cpp
//Izracunavanje broja sati, minuta i sekundi u zadatom broju sekundi
//(Koriscenje konstruktora i destruktora klase)
#include <iostream>
using namespace std;
class konv {
int ukupno_sek;
public:
konv(void)
{
ukupno_sek=0;
cout << "\nPocetak konvertovanja.\n\n"; }
~konv(void)
{
cout << "\nKraj konvertovanja.\n\n";
}
void prikaz(int);
void u_sate(void);
void u_min(void);
void u_sek_ost(void);
};
int main( )
{
konv konv_obj;
int ukupno;
cout << "Ukupan broj sekundi? "; cin >> ukupno;
konv_obj.prikaz(ukupno);
konv_obj.u_sate();
konv_obj.u_min();
konv_obj.u_sek_ost();
return 0;
}
void konv::prikaz(int sek)
{
if(sek>0)
ukupno_sek = sek;
cout << ukupno_sek << " sekundi je:" << endl;
void konv::u_sate(void)
{
cout<<ukupno_sek/3600 << " sati, ";
void konv::u_min(void)
{
cout << (ukupno_sek / 60) % 60 << " minuta, ";
void konv::u_sek_ost(void)
{
cout << ukupno_sek% 60 << " sekundi." << endl;
}
}
}
}
primer10_1
,
.
a konv ( 7. 20.),
.
konv. ukupno_sek ( 8.)
( ,
), (
).
( 9. 19.)
, .
konv() ( 10. 12.),
.
,
podatka ukupno_sek ( 11.)
( 12.).
~konv() ( 13. 14.),
, ~
. ,
( 14.).
prikaz(), u_sate(), u_min() u_sek_ost()
( 16. 19.).
konv_obj (
22.) ukupno (
24. 26.),
konv: prikaz(), u_sate(), u_min() u_sek_ost() konv_obj (
28. 31.).
. (
35. 44.), ,
, (::)
(void konv::prikaz(), void konv::u_sate(), void
konv::u_min(),void konv::u_sek_ost()).
ukupno_sek (
, ).
10.1 ) 10.1 )
.
10.1 a) primer10_1 ( )
187
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:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
188
//primer10_2.cpp
//Izracunavanje apsolutnih vrednosti brojeva u raznim oblicima
//(Preklapanje funkcija, clanica klase)
#include <iostream>
#include <stdlib.h>
#include <math.h>
using namespace std;
class apsolutna {
public:
int f_aps(int);
double f_aps(double);
double f_aps (char *);
};
int main( )
{
apsolutna aps_obj;
cout << "\nApsolutna vrednost broja -547 je: "
<< aps_obj.f_aps(-547) << endl;
cout << "\nApsolutna vrednost broja -547.256 je: "
<< aps_obj.f_aps(-547.256) << endl;
cout << "\nApsolutna vrednost broja \"-547.82abc\" je: "
<< aps_obj.f_aps("-547.82abc" ) << endl;
return 0;
}
int apsolutna:: f_aps(int broj)
{
int aps_i;
aps_i = abs(broj);
return aps_i;
}
double apsolutna:: f_aps(double broj)
{
double aps_d;
aps_d = fabs(broj);
return aps_d;
}
39:
40:
41:
42:
43:
44:
primer10_2
.
a apsolutna ( 9. 14.),
,
: ,
.
apsolutna.
( 10. 13.),
f_aps(), ,
, (
). int ,
double ,
doubl.
aps_obj ( 16.),
apsolutna (
f_aps()) aps_obj ( 18.
25.). , ,
f_aps()
, ,
( 29. 44.).
10.2 .
10.2 primer10_2
primer10_3
1:
2:
3:
4:
5:
6:
//primer10_3.cpp
//Provera lozinke studenta i prikaz poena ostvarenih na testu
//(Poziv funkcija, privatnih i javnih clanica klase)
#include <iostream>
#include <string.h>
#include <stdlib.h>
189
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:
48:
49:
50:
51:
52:
53:
54:
55:
56:
190
#define MAX 30
using namespace std;
class test {
char ime[MAX+1];
int lozinka,
br_tacnih,
br_netacnih;
double br_poena;
int Br_tacnih(void);
int Br_netacnih(void);
double Br_poena(void);
public:
void Prompt(int neka_lozinka);
void Pocetak(char *poc_ime,
int poc_lozinka,
int poc_tacnih,
int poc_netacnih,
double poc_poena);
void Pozdrav(void);
void Tacnih(int broj);
void Netacnih(int broj);
} student;
int main( )
{
int uneta_lozinka;
student.Pocetak("Student Student", 1234, 0, 0, 0);
cout<<"Unesite lozinku: "; cin>>uneta_lozinka;
student.Pozdrav(); student.Prompt(uneta_lozinka);
student.Tacnih(7); student.Prompt(uneta_lozinka);
student.Netacnih(3); student.Prompt(uneta_lozinka);
return 0;
}
int test::Br_tacnih(void)
{
return(br_tacnih);
}
int test::Br_netacnih(void)
{
return(br_netacnih);
}
double test::Br_poena(void)
{
return(br_poena);
}
void test::Prompt(int neka_lozinka)
{
char izbor;
if( neka_lozinka == lozinka )
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
}
else
{
}
}
void test::Pocetak( char *poc_ime,
int poc_lozinka,
int poc_tacnih,
int poc_netacnih,
double poc_poena)
{
strcpy(ime,poc_ime);
lozinka = poc_lozinka;
br_tacnih = poc_tacnih;
br_netacnih = poc_netacnih;
br_poena = poc_poena;
}
void test::Pozdrav(void)
{
cout<<"\nDobro dosli na test "<<ime<<endl;
cout<<"\nZa tacan odgovor ostvarujete 1 poen";
cout<<"\nZa netacan odgovor -0.5 poena"<<endl;
}
void test::Tacnih(int broj)
{
br_tacnih += broj;
br_poena += broj;
}
void test::Netacnih(int broj)
{
br_netacnih += broj;
br_poena -= broj*0.5;
}
primer10_3
, .
a test ( 10. 31.),
, .
191
,
student ( 31.).
test. ime, lozinka
br_tacnih, br_netacnih br_poena (e 11. 15.)
test. Br_tacnih(), Br_Netacnih() Br_poena()
(e 17. 19.),
. Prompt(), Pocetak(), Pozdrav(), Tacnih()
Netacnih() ( 21. 30.)
, .
uneta_lozinka
( 34.). Pocetak() student
( 36.), , , ,
. ,
uneta_lozinka test:
Pozdrav(), Tacnih() Netacnih() student, ,
. ,
Prompt() ( test)
student,
,
(e 36. 41.).
, Br_tacnih(), Br_Netacnih()
Br_poena(), , Prompt(), Pocetak(), Pozdrav(), Tacnih() Netacnih()
(e 45. 99.).
test,
. Prompt()
Br_tacnih(), Br_Netacnih() Br_poena()
(e 61. 66.), Pocetak()
ime, lozinka br_tacnih, br_netacnih br_poena
(e 81. 85.).
10.3 ) 10.3 )
.
10.3 ) primer10_3 ( )
10.3 ) primer10_3 ( )
192
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:
//primer10_4.cpp
//Azuriranje podataka o studentu i ocenama na ispitima
//(Nasledjivanje kod klasa)
#include <iostream>
#include <string.h>
#define MAX 30
using namespace std;
class student {
char ime[MAX+1],
st_program[MAX+1],
broj_ind[MAX+1];
public:
void citanje( void );
void prikaz( void );
};
193
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:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
194
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
void obavezno::citanje_ob(void)
{
citanje();
cout << "Naziv predmeta: ";
cin.get(predmet_ob, MAX+1, '\n');
cin.ignore();
cout << "Ocena: ";
cin >> ocena_ob;
cin.ignore();
}
void obavezno::prikaz_ob(void)
{
prikaz();
cout << "Naziv predmeta: " << predmet_ob << endl ;
cout << "Ocena: " << ocena_ob << endl ;
}
void izborno::citanje_izb(void)
{
citanje();
cout <<"Naziv predmeta: ";
cin.get(predmet_izb, MAX+1, '\n');
cin.ignore();
cout << "Ocena: ";
cin >> ocena_izb;
cin.ignore();
}
void izborno::prikaz_izb(void)
{
prikaz();
cout <<"Naziv predmeta: " << predmet_izb << endl ;
cout <<"Ocena: " << ocena_izb << endl ;
}
primer10_4
/ .
a student ( 9. 16.),
( )
. ,
student (
,
). : obavezno,
( 17. 23.) izborno,
( 24. 30.).
,
. ,
195
10.4 ) primer10_4 ( )
10.4 ) primer10_4 ( )
196
10.4 ) primer10_4 ( )
- ++
++,
" ", " ".
( ) -
,
,
, .
( )
(ime_objekta.ime_clana).
.
,
,
(tip_povr_vrednosti ime_klase::ime_funkcije(lista_argumenata){...}).
197
10.
_____________________________________________
1.
++,
10.4 (
) ,
. ( )
, .
198
10.
_____________________________________________
-
. .
,
.
, .
1.
++ :
) (: ime, pin,
stanje_na_racunu...),
) pin,
) pin izvestaj()
,
: podizanje_novca(),
polaganje_depozita()...
2.
++ :
) : ime, adresa, drzava...,
) : tip, snaga,
starost...
) ,
: kupovina(), iznajmljivanje(), kraj_programa(),
) , izvestaj() o
, ,
.
199
200
201
1.
zapis.txt
C
zapis.txt :
) sifrira zapis.txt
ASCII
ASCII
, sifra.txt.
( : 10110101
11011010, 01101010 00110101...),
) desifrira .
, sifrira,
desifrira.
.
1.
/
Program za sifriranje i desifriranje teksta
/
#include <stdio.h>
#include <stdlib.h>
void sifruje();
void desifruje();
void prikaz_sadrzaja(char ime);
void greska(char poruka);
main()
{
printf("*****************************************************\n");
printf("Prikaz sadrzaja datoteke pre sifrovanja\n\n");
prikaz_sadrzaja("zapis.txt");
sifruje();
printf("*****************************************************\n");
printf("Sifrovani sadrzaj datoteke:\n\n");
prikaz_sadrzaja("sifra.txt");
printf("*****************************************************\n");
printf("Desifrovani sadrzaj datoteke:\n\n");
desifruje();
}
/
Sifrovanje: rotaciono pomeranje za jedno mesto udesno
/
void sifruje()
{
char c;
unsigned short c1,pom;
FILE pt, pt1;
202
if(!(pt=fopen("zapis.txt","r+")))
greska("Nije uspelo otvaranje datoteke za sifrovanje!\n");
if(!(pt1=fopen("sifra.txt","w+")))
greska("Nije uspelo otvaranje datoteke za sifrovanje!\n");
while ((c=fgetc(pt))!= EOF)
{
c1=c;
pom=1;
pom=c1&pom;
/
sacuvan bit najmanje tezine
/
c1>>=1;
/
pomeraj za jedno mesto udesno
/
pom<<=7;
c1=c1|pom;
/
postavljen bit najvece tezine
/
c=c1;
fputc(c,pt1);
}
fclose(pt);
fclose(pt1);
}
/
Desifrovanje: rotaciono pomeranje za jedno mesto ulevo
/
void desifruje()
{
char c;
unsigned short c1,pom;
FILE pt;
if(!(pt=fopen("sifra.txt","r+")))
greska("Nije uspelo otvaranje datoteke za desifrovanje!\n");
while ((c=fgetc(pt))!= EOF)
{
c1=c;
pom=1;
pom<<=7;
pom=pom&c1;
/
sacuvan bit najvece tezine
/
pom>>=7;
c1<<=1;
/
pomeraj za jedno mesto ulevo
/
c1=c1|pom;
/
postavljen bit najmanje tezine
/
c=c1;
printf("%c",c);
}
fclose(pt);
}
/
Prikaz sadrzaja datoteke
/
void prikaz_sadrzaja(char ime[])
{
FILE pt;
char c;
203
if(!(pt=fopen(ime,"r")))
greska("Nije uspelo otvaranje datoteke za citanje!\n");
while ((c=fgetc(pt))!= EOF)
printf("%c",c);
printf("\n");
fclose(pt);
}
void greska(char poruka)
{
printf("%s\n",poruka);
exit(1);
}
204
2.
(string1) (string2).
. ,
, .
.
.
,
.
, ,
.
2.
/
Program koji u datoj datoteci zamenjuje jedan niz znakova drugim
/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef enum {poziv,memorija,datoteka,zamena,argumenti} Poruke;
char tekstovi_poruka[]={ "\nNema imena fajla\n",
"\nGreska prilikom dinamicke dodele memorije\n",
"\nGreska prilikom otvaranja datoteke\n",
"\nU tekstu se ne pojavljuje dati niz znakova\n",
"\nIma previse argumenata\n"
};
void stampanje_poruke(Poruke status)
{
fprintf(stderr,tekstovi_poruka[status]);
exit(1);
}
main(int arg, char argv[])
{
FILE fptr, tmpfptr;
unsigned broj_zamena,duzina1,duzina2,i,broj_znakova;
char tmp1, tmp2, p, tmp;
char c;
/
naredba visestruke selekcije prema broju ucitanih argumenata
/
switch(arg)
{
case 1:
stampanje_poruke(poziv);
case 2:
205
fptr=fopen(argv[1],"r");
if(fptr==NULL)
stampanje_poruke(datoteka);
while ((c=fgetc(fptr))!=EOF)
putchar(c);
fclose(fptr);
break;
case 3: /
naveden je i niz znakova koji se brise
/
case 4: /
naveden je i niz znakova kojim se zamenjuje
/
fptr=fopen(argv[1],"r");
if(fptr==NULL)
stampanje_poruke(datoteka);
broj_znakova=0;
while((c=fgetc(fptr))!=EOF)
broj_znakova++;
rewind(fptr);
broj_zamena=0;
duzina1=strlen(argv[2]);
tmp1=malloc(broj_znakova+1);
if(tmp1==NULL)
stampanje_poruke(memorija);
/
sadrzaj cele datoteke se smesta u jedan niz znakova
/
for(i=0;i<broj_znakova;i++)
(tmp1+i)=fgetc(fptr);
(tmp1+i)='\0';
p=tmp1;
tmp=tmp1;
/
prebrojavanje na koliko mesta treba obrisati odnosno
zameniti dati niz znakova
/
while(strstr(p,argv[2])!=NULL)
{
broj_zamena++;
p=strstr(p,argv[2])+duzina1;
}
if(broj_zamena==0)
{
puts(tmp1);
free(tmp1);
fclose(fptr);
stampanje_poruke(zamena);
}
/
brisanje niza znakova (zamena praznom niskom)
/
206
if(arg==4)
duzina2=strlen(argv[3]);
else
duzina2=0;
/
rezervacija mesta za izmenjeni niz znakova
/
tmp2=malloc(broj_znakova+1+
(duzina2-duzina1)broj_zamena);
if(tmp2==NULL)
stampanje_poruke(memorija);
tmp2='\0';
/
pronalazenje i zamena date niske znakova
/
while(1)
{
p=strstr(tmp,argv[2]);
if(p==NULL)
break;
strncat(tmp2,tmp,p-tmp);
if(arg==4)
strcat(tmp2,argv[3]);
tmp=p+duzina1;
}
strcat(tmp2,tmp);
puts(tmp2);
printf("\nUkupan broj izvrsenih zamena je %i\n",broj_zamena);
/
izmenjeni tekst se smesta u privremenu datoteku
/
tmpfptr=fopen("temp~","w");
if(tmpfptr==NULL)
stampanje_poruke(datoteka);
for(i=0;i<strlen(tmp2);i++)
fputc((tmp2+i),tmpfptr);
/
stara datoteka se brise a privremena datoteka se
preimenuje
/
fclose(fptr);
fclose(tmpfptr);
remove(argv[1]);
rename("temp~",argv[1]);
free(tmp1);
free(tmp2);
break;
default:
stampanje_poruke(argumenti);
break;
}
}
207
3.
C e
,
, .
:
struct zaposleni{
char imeIPrezime Radnika[40];
int maticniBroj;
int godineRadngStaza;
char strucnaSprema[45];
double plata;
}
:
struct licniPodaci{
int maticniBroj;
char adresa[40];
char grad[30];
long int brojTelefona;
char opisPosla[50];
}
0.
: , , .
3.
/
Program za evidenciju podataka o zaposlenima u jednoj firmi
/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct zaposleni{
char imeIPrezimeRadnika[40];
int maticniBroj;
int godineRadnogStaza;
char strucnaSprema[45];
double plata;
};
struct licniPodaci{
int maticniBroj;
char adresa[40];
char grad[30];
long int brojTelefona;
char opisPosla[50];
};
struct podaci{
208
char imeIPrezimeRadnika[40];
char adresa[40];
char strucnaSprema[45];
double plata;
};
void prikazuje(char ,int);
void greska(char g[]);
main(int argc, char argv[])
{
FILE fpt1, fpt2, fpt3;
struct zaposleni radnik;
struct licniPodaci licni;
char grad[30];
struct podaci tekuci;
double pl;
int broj=0,br1=0,i;
if(argc!=4)
greska("Niste uneli potreban broj parametara.\n");
if(!(fpt1=fopen(argv[1],"wb")))
greska("Nije uspelo otvaranje prve datoteke za pisanje.\n");
if(!(fpt2=fopen(argv[2],"wb")))
greska("Nije uspelo otvaranje druge datoteke za pisanje.\n");
while(1)
{
printf("\nUnesite maticni broj radnika.\n");
scanf("%d",&radnik.maticniBroj);
if(radnik.maticniBroj==0)
break;
licni.maticniBroj=radnik.maticniBroj;
printf("\nUnesite ime i prezime radnika ");
getchar();
gets(radnik.imeIPrezimeRadnika);
printf("\nUnesite broj godina radnog staza radnika %s.",
radnik.imeIPrezimeRadnika);
scanf("%d",&radnik.godineRadnogStaza);
printf("\nUnesite strucnu spremu radnika %s.",
radnik.imeIPrezimeRadnika);
scanf("%s",radnik.strucnaSprema);
printf("\nDohodak radnika %s je: ",radnik.imeIPrezimeRadnika);
scanf("%lf",&pl);radnik.plata=pl;
printf("\nUnesite licne podatke o radniku %s.\nAdresa:",
radnik.imeIPrezimeRadnika);
getchar();
209
gets(licni.adresa);
printf("\nGrad:");
scanf("%s",licni.grad);
printf("\nOpis posla: ");
getchar();
gets(licni.opisPosla);
printf("\nBroj telefona: ");
scanf("%d",&licni.brojTelefona);
if(fwrite(&radnik, sizeof(struct zaposleni),1,fpt1)!=1)
greska("Greska pri upisu u prvu datoteku\n");
if(fwrite(&licni,sizeof(struct licniPodaci),1,fpt2)!=1)
greska("Greska pri upisu u drugu datoteku\n");
broj++;
}
fclose(fpt1);
fclose(fpt2);
if(!(fpt1=fopen(argv[1],"rb")))
greska("Nije uspelo otvaranje prve datoteke za citanje.\n");
if(!(fpt2=fopen(argv[2],"rb")))
greska("Nije uspelo otvaranje druge datoteke za citanje.\n");
if(!(fpt3=fopen(argv[3],"wb")))
greska("Nije uspelo otvaranje trece datoteke za pisanje.\n");
printf("\nUnesite ime grada iz koga zelite podatke o radnicima.\n");
scanf("%s",&grad);
for (i=0;i<broj;i++)
{
if(fread(&radnik, sizeof(struct zaposleni),1,fpt1)!=1)
greska("Greska pri citanju prve datoteke\n");
if(fread(&licni,sizeof(struct licniPodaci),1,fpt2)!=1)
greska("Greska pri citanju druge datoteke\n");
if(strcmp(grad,licni.grad)==0)
{
strcpy(tekuci.imeIPrezimeRadnika,radnik.imeIPrezimeRadnika);
strcpy(tekuci.adresa, licni.adresa);
strcpy(tekuci.strucnaSprema, radnik.strucnaSprema);
tekuci.plata=radnik.plata;
if(fwrite(&tekuci,sizeof(struct podaci),1,fpt3)!=1)
greska("Greska pri upisu u drugu datoteku\n");
br1++;
}
}
fclose(fpt1);
fclose(fpt2);
fclose(fpt3);
prikazuje(argv[3],br1);
210
}
void prikazuje(char ime, int br)
{
FILE ptr;
int i;
struct podaci tekuci;
if(!(ptr=fopen(ime,"rb")))
greska("Nije uspelo otvaranje datoteke za citanje.\n");
printf("\nPodaci o odgovarajucim radnicima\n");
for(i=0;i<br;i++){
if(fread(&tekuci,sizeof(struct podaci),1,ptr)!=1)
greska("Greska pri upisu u drugu datoteku\n");
printf("\nIme i prezime: %s \n",tekuci.imeIPrezimeRadnika);
printf("\nAdresa: %s",tekuci.adresa);
printf("\nStrucna sprema: %s",tekuci.strucnaSprema);
printf("\nLicni dohodak %.2f dinara \n", tekuci.plata);
printf("\n");
}
}
void greska(char g[])
{
printf("%s",g);
exit(1);
}
211
4.
:
struct obaveza{
char opis_obaveze[30];
int dan, mesec, godina;
int sat, minut;
}
:
1.
Unos obaveze
2.
Brisanje obaveze
3.
Obaveze sa odredjenim datumom
4.
Pregled svih unetih obaveza
5.
Kraj rada
5.
4.
/
Program za evidenciju obaveza, po datumima i terminima
/
#include <stdio.h>
#include <stdlib.h>
struct obaveza{
char opis_obaveze[30];
int dan, mesec, godina;
int sat, minut;
};
struct cvor{
struct obaveza ob;
struct cvor cv;
};
struct cvor brisi_obavezu(struct cvor pocetak);
int prikaz_menija();
void prikazi_listu(struct cvor pocetak);
void prikaz_dnevnih_obaveza(struct cvor pocetak);
main()
{
int op;
struct cvor pocetak=NULL, tekuci, novi;
while(1)
{
op=prikaz_menija();
212
switch(op)
{
case 1:
if ((novi=malloc(sizeof(struct cvor)))==NULL)
{
printf("Greska prilikom dodele memorije");
exit(1);
}
novi->cv=NULL;
printf("Unesite opis obaveze\n");
scanf("%s", novi->ob.opis_obaveze);
printf("Unesite datum obaveze u formi dd mm gggg ");
scanf("%d%d%d", &novi->ob.dan,&novi->ob.mesec,
&novi->ob.godina);
printf("Unesite sat i minut u formi ss mm ");
scanf("%d %d",&novi->ob.sat,&novi->ob.minut);
if(pocetak==NULL) /
prvi element liste
/
pocetak=novi;
else
/
kretanje kroz listu i dodavanje
/
{
/
novog elementa na kraj
/
tekuci=pocetak;
while(tekuci->cv)
{
tekuci=tekuci->cv;
}
tekuci->cv=novi;
}
break;
case 2:
pocetak=brisi_obavezu(pocetak);
break;
case 3:
prikaz_dnevnih_obaveza(pocetak);
break;
case 4:
prikazi_listu(pocetak);
break;
case 5:
printf("\n\n");
exit(1);
default:
printf("Izabrali ste nepostojecu opciju!\n");
break;
}
}
}
213
int prikaz_menija()
{
int opcija;
printf("******************************************\n");
printf("1. Unos obaveze\n");
printf("2. Brisanje obaveze\n");
printf("3. Obaveze sa odredjenim datumom\n");
printf("4. Pregled svih obaveza\n");
printf("5. Kraj rada\n");
printf("******************************************\n");
printf("Unesite redni broj opcije koju ste izabrali: ");
scanf("%d",&opcija);
return opcija;
}
void prikazi_listu(struct cvor pocetak)
{
struct cvor tekuci=pocetak;
int brojac=1;
while(tekuci)
{
printf("\n%d. Obaveza %s ",brojac,tekuci->ob.opis_obaveze);
printf("datum obaveze: %d.%d.%d.",
tekuci->ob.dan,tekuci->ob.mesec,tekuci->ob.godina);
printf(" u %d sati i %d minuta.\n",tekuci->ob.sat,tekuci->ob.minut);
tekuci=tekuci->cv;
brojac++;
}
}
struct cvor brisi_obavezu(struct cvor pocetak)
{
struct cvor tekuci=pocetak, prethodni=pocetak;
int br,j=1;
prikazi_listu(pocetak);
printf("Unesite redni broj obaveze koju zelite da izbacite\n");
scanf("%d",&br);
if(pocetak==NULL)
/
ispitivanje da li je lista prazna
/
{
printf("Nedozvoljeno brisanje!\n");
return NULL;
}
214
if (br==1)
{
/
treba izbaciti prvi element liste
/
pocetak=tekuci->cv;
free(tekuci);
return pocetak;
}
else
{
while((tekuci->cv)&& j!=br)
{
prethodni=tekuci;
tekuci=tekuci->cv;
j++;
}
if(tekuci->cv==NULL)
if(br==j)
{
prethodni->cv=NULL;
free(tekuci);
return pocetak;
}
else
{
printf("Uneli ste preveliki redni broj\n");
return pocetak;
}
if(j==br)
{
prethodni->cv=tekuci->cv;
free(tekuci);
return pocetak;
}
return NULL;
}
}
void prikaz_dnevnih_obaveza(struct cvor pocetak)
{
struct cvor tekuci=pocetak;
int brojac=1,dan,mesec,godina;
printf("Unesite datum za koji zelite pregled obaveza\n");
scanf("%d%d%d",&dan,&mesec,&godina);
while(tekuci)
{
if((dan==tekuci->ob.dan) &&(mesec==tekuci->ob.mesec)
&& (godina == tekuci->ob.godina))
{
printf("\n%d. Obaveza %s ",brojac,tekuci->ob.opis_obaveze);
215
216
5.
.
reci.txt .
.
(_)
. .
, ,
.
.
5 ,
2 ,
1 . 10
. ,
.
.
.
10
.
2.
, . ,
.
15
. 15 .
5.
/
Program za igru pogadjanja reci
/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include<time.h>
#define BROJ_POKUSAJA 10
#define POGODAK 5
#define PROMASAJ -2
#define BONUS 2
#define KAZNA 1
typedef enum {MEMORIJA,DATOTEKA,CITANJE,UPIS}Greska;
char poruke[]={
"\nProblem sa memorijom\n",
"\nProblem sa datotekom\n",
"\nProblem sa citanjem podataka\n",
"\nProblem sa upisivanjem podataka\n"};
217
typedef struct {
char ime[20];
int bodovi;
} Igrac;
void poruka(GRESKA);
void lista(int);
main()
{
FILE fptr;
unsigned i,j,poeni=0,nadjen,ima,ind;
char rec, copy,c;
char slova1[]="A B C D E F G H I J K L M N O P R S T U V Z",slova[44];
time_t timer;
/
otvaranje datoteke u kojoj se nalaze zadate reci /
fptr=fopen("reci.txt","r");
if(fptr==NULL)
poruka(DATOTEKA);
/
pokretanje generatora slucajnih brojeva pomocu tekuceg vremena
/
srand(time(&timer));
while(1)
{
strcpy(slova,slova1);
while (!(i=rand()));
rec=malloc(15);
if(rec==NULL)
poruka(MEMORIJA);
j=0;
/
pomocu slucajnog broja ucitava se rec iz datoteke
/
while(j<i)
{
if(!fscanf(fptr,"%s",rec))
poruka(CITANJE);
j++;
if(feof(fptr))
rewind(fptr);
}
/
pravi se rec od donjih crta
/
copy=malloc(strlen(rec)+1);
if(copy==NULL)
poruka(MEMORIJA);
realloc(rec,strlen(rec)+1);
for(i=0;i<strlen(rec);i++)
(copy+i)='_';
218
(copy+i)='\0';
/
pocinje pogadjanje
/
for(i=0;i<BROJ_POKUSAJA;i++)
{
printf("\n\n\nPOGADJA SE REC");
printf("\t\tbroj poena: %i\t\tpreostalo pokusaja: %i\n",
poeni,BROJ_POKUSAJA-i);
printf("\nSlova na raspolaganju: %s\n\n",slova);
for(j=0;j<strlen(copy);j++)
printf("%c ",(copy+j));
putchar('\n');
/
proverava se da li je uneti znak slovo
/
while(1)
{
printf("\nUnesi slovo: ");
scanf("%c",&c);
c=toupper(c);
getchar();
if(c>'Z'||c <'A'||c=='Q'||c=='W'||c=='Y'||c=='X')
printf("\t\tNije slovo");
else
break;
}
/
ako je slovo nadjeno brise se sa spiska ponudjenih
/
nadjen=0;
for(j=0;j<strlen(slova);j++)
if(c==slova[j])
{
nadjen=1;
slova[j]=' ';
break;
}
if(nadjen==0)
{
printf("\t\tTo slovo je proslo");
ima=2;
poeni+=KAZNA;
i--;
}
/
nadjeno slovo se upisuje u rec umesto donje crte
/
else
{
ima=0;
for(j=0;j<strlen(rec);j++)
if(c==(rec+j))
219
{
(copy+j)=c;
ima=1;
}
}
if(ima==1)
{
poeni+=POGODAK;
i--;
}
else
{
poeni+=PROMASAJ;
if(ima!=2)
printf("\t\tNema tog slova");
}
if(ind=(strcmp(rec,copy)==0))
{
printf("\nBRAVO,pogodio si rec %s\n",rec);
poeni=poeni+(BROJ_POKUSAJA-i-1)BONUS;
printf("\nBonus: %i poena, ukupno : %i poena\n",
(BROJ_POKUSAJA-i-1)2,poeni);
break;
}
}
if(!ind) printf("\nZao mi je, nisi pogodio rec %s iz %i puta\n",rec, i);
printf("\nZelis li jos da pogadjas (d/n)? ");
scanf("%c",&c);
getchar();
if(c=='n' || c=='N')
{
printf("\n\n");
break;
}
}
fclose(fptr);
lista(poeni);
}
void lista(int poeni)
{
FILE fptr;
int i,j,mesto,plasman=0;
char novoime;
Igrac igrac,tmpigrac;
printf("\nBroj poena %i\n",poeni);
printf("\nTOP 15\n");
fptr=fopen("najbolji.dat","rb+");
220
/
slucaj ako niko pre nije igrao
/
if(fptr==NULL)
{
mesto=1;
fptr=fopen("najbolji.dat","wb");
if(fptr==NULL)
poruka(DATOTEKA);
printf("\nUnesi ime: ");
fflush(stdin);
gets(tmpigrac.ime);
tmpigrac.bodovi=poeni;
if(fwrite(&tmpigrac,sizeof(Igrac),1,fptr)!=1)
poruka(UPIS);
fclose(fptr);
printf("\n1. %-20s %i\n",tmpigrac.ime,poeni);
printf("\nTrenutno se nalazis na %i. mestu\n",mesto);
}
/
ispisivanje na ekranu liste rezultata
/
else
{
igrac=malloc(15sizeof(Igrac));
if(igrac==NULL)
poruka(MEMORIJA);
for(j=0;j<15;j++)
{
if(fread(igrac+j,sizeof(Igrac),1,fptr)!=1 && !feof(fptr))
poruka(CITANJE);
if(feof(fptr))
break;
printf("\n%2i. %-20s %i",j+1,(igrac+j)->ime,(igrac+j)->bodovi);
}
putchar('\n');
if(j<15) j++;
/
ako se rezultat nalazi u prvih petnaest
ubacivanje tog rezultata u listu
/
if((igrac+j-1)->bodovi<poeni)
{
plasman=1;
mesto=j;
printf("\nUnesite ime ");
novoime=malloc(20);
if(novoime==NULL)
poruka(MEMORIJA);
fflush(stdin);
gets(novoime);
(igrac+j-1)->bodovi=poeni;
strcpy((igrac+j-1)->ime,novoime);
221
for(i=j-1;i>0;i--)
if((igrac+i)->bodovi>(igrac+i-1)->bodovi)
{
mesto--;
tmpigrac=(igrac+i);
(igrac+i)= (igrac+i-1);
(igrac+i-1)=tmpigrac;
}
else
break;
}
rewind(fptr);
if(plasman)
{
printf("\n\nTOP 15\n\n");
for(i=0;i<j;i++)
{
if(fwrite(igrac+i,sizeof(Igrac),1,fptr)!=1) poruka(UPIS);
printf("%2i. %-20s %i\n",i+1,(igrac+i)->ime,(igrac+i)->bodovi);
}
printf("\n\nTrenutno se nalazis na %i. mestu\n\n",mesto);
}
else
printf("\n\n");
fclose(fptr);
getchar();
}
}
void poruka(Greska status)
{
fprintf(stderr,poruke[status]);
exit(1);
}
222
6.
mob.bin
:
struct mob{
char ime_modela[20];
int kolicina;
float cena;
};
:
1. Unos podataka
2. Kupovina
3. Kraj
:
1. 1. .
mob.bin .
.
(
). ,
mob.bin
, a , ,
;
2. 2. .
.
mob.bin
.
. ,
,
.
.
;
3. 3.
6.
/
Program koji zurira podatke o mobilnim telefonima
/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct mob{
char ime_modela[20];
int kolicina;
float cena;
};
struct mob model;
223
int broj_modela=0;
int prikaz_menija();
void unos_podataka();
void unos();
void kupovina();
main()
{
int opcija;
while(1)
{
opcija=prikaz_menija();
switch(opcija)
{
case 1:
unos_podataka();
break;
case 2:
kupovina();
break;
case 3:
exit(1);
default:
printf("Izabrali ste nepostojecu opciju, birajte ponovo!\n");
break;
}
}
return 0;
}
int prikaz_menija()
{
int opcija;
printf("******************************************\n");
printf("1. Unos podataka\n");
printf("2. Kupovina\n");
printf("3. Kraj\n");
printf("******************************************\n");
printf("Unesite redni broj opcije koju ste izabrali:");
scanf("%d",&opcija);
return opcija;
}
void unos_podataka()
{
224
fclose(pt1);
unesen=1;
break;
}/
kraj 1. slucaja
/
/
2. model nije upisan u mob.bin, ili se cene razlikuju
/
if (unesen==0)
{
broj_modela++;
if((pt1=fopen("mob.bin","ab"))==NULL)
{
printf("Greska pri otvaranju datoteke za pisanje!\n");
exit(1);
}
if(fwrite(&model,sizeof(struct mob),1,pt1)!=1)
{
printf("Greska\n");
exit(1);
}
fclose(pt1);
}/
kraj 2. slucaja
/
free(niz_struct);
}
/
mob.bin nije prethodno kreirana, unosi se prvi model
/
else
{
if((pt=fopen("mob.bin","wb"))==NULL)
{
printf("Greska pri otvaranju datoteke za pisanje!\n");
exit(1);
}
unos();
printf("Model %s komada: %d cena: %f\n",
model.ime_modela,model.kolicina,model.cena);
if(fwrite(&model,sizeof(struct mob),1,pt)!=1)
{
printf("Greska\n");
exit(1);
}
broj_modela++;
fclose(pt);
}
}
void kupovina()
{
FILE pt;
struct mob niz;
int i,j,postoji=0,kol;
226
float racun;
struct mob temp;
if((niz=malloc(sizeof(struct mob)broj_modela))==NULL)
{
printf("Greska pri dodeli memorije\n");
exit(1);
}
if((pt=fopen("mob.bin","rb"))==NULL)
{
printf("Greska pri otvaranju datoteke za citanje!\n");
exit(1);
}
if(fread(niz,sizeof(struct mob),broj_modela,pt)!=broj_modela)
{
printf("Greska pri citanju");
exit(1);
}
for(i=0;i<broj_modela;i++)
printf("Model %s komada: %d cena: %f\n",
niz[i].ime_modela,niz[i].kolicina,niz[i].cena);
fclose(pt);
printf("\nUnesite ime modela aparata koji zelite da kupite:");
scanf("%s",temp.ime_modela);
for(i=0;i<broj_modela;i++)
if(strcmp(temp.ime_modela,niz[i].ime_modela)==0)
{
postoji=1;
printf("Cena %s modela je %f.\n",niz[i].ime_modela,niz[i].cena);
printf("Koliko komada zelite da kupite\n");
scanf("%d",&kol);
if(kol>niz[i].kolicina)
{
printf("Mozete kupiti maksimalno %d aparata\n",niz[i].kolicina);
break;
}
racun=kolniz[i].cena;
printf("Vas racun iznosi %f dinara.\n",racun);
niz[i].kolicina-=kol; /
azurira se broj aparata posle prodaje
/
if(niz[i].kolicina==0) /
brisu se podaci o modelu
/
/
kog vise nema u ponudi
/
{
broj_modela--;
for(j=i;j<broj_modela;j++)
{
strcpy(niz[j].ime_modela,niz[j+1].ime_modela);
227
niz[j].cena=niz[j+1].cena;
niz[j].kolicina=niz[j+1].kolicina;
}
}
if((pt=fopen("mob.bin","wb"))==NULL)
{
printf("Greska pri otvaranju datoteke za upis!\n");
exit(1);
}
if(fwrite(niz,sizeof(struct
mob),broj_modela,pt)!=broj_modela)
{
printf("Greska\n");
exit(1);
}
fclose(pt);
break;
}
if(postoji==0)
printf("Model %s nije trenutno u ponudi\n", temp.ime_modela);
free(niz);
}
void unos()
{
printf("Unesite naziv modela: ");
scanf("%s",model.ime_modela);
printf("\nUnesite broj aparata: ");
scanf("%d",&model.kolicina);
printf("\nUnesite cenu %s modela: ", model.ime_modela);
scanf("%f",&model.cena);
printf("\n");
}
228
7.
.
: , .
.
-. -
75 99 100 185 .
.
:
( -) ,
2.0 1.8.
.
3 20.
.
.
.
.
. .
: , .
,
.
.
, ,
. ,
.
-
-.
7.
/
Program koji prati takmicenje u skijaskim skokovima
/
#include <stdio.h>
#include <stdlib.h>
#define NH 2.0
#define LH 1.8
#define BROJ_SUDIJA 5
#define BROJ_SERIJA 2
#define MINIMALNA_OCENA 3
#define MAKSIMALNA_OCENA 20
#define KRITICNA_TACKA 185
typedef struct{
229
{
printf("\nTrenutna rang lista prve serije\n");
stampanje(takmicari,i+1);
}
}
printf("\nPlasman posle prve serije\n");
stampanje(takmicari,broj_takmicara);
printf("\nSKACE SE DRUGA SERIJA\n\n");
izvedeni_skokovi=0;
for(i=broj_takmicara-1;i>=0;i--)
{
if((takmicari+i)->izvedena_serija!=BROJ_SERIJA)
{
broj_bodova=skok(takmicari+i);
trenutna_pozicija=plasman(takmicari,i,broj_takmicara);
izvestaj(broj_bodova,trenutna_pozicija);
i=broj_takmicara-1;
izvedeni_skokovi++;
if(izvedeni_skokovi%10==0)
{
printf("\nTrenutna rang lista prve serije\n");
stampanje(takmicari,izvedeni_skokovi);
}
}
}
printf("\nKonacan plasman posle druge serije\n");
stampanje(takmicari,broj_takmicara);
printf("\n\n");
free (takmicari);
return 0;
}
/
unosi se K-tacka i na osnovu nje odredjuje koeficijent
/
void Ktacka(void)
{
while(1)
{
printf("\nUnesite K-tacku skakaonice ");
scanf("%i",&K_tacka);
if(K_tacka<75 || K_tacka>185)
printf("\nNepravilno unesena K-tacka!\n");
else
break;
}
231
if(K_tacka<100)
koef=(float)NH;
else
koef=(float)LH;
}
/
unose se podaci o skakacima i odredjuje startna pozicija za prvi skok
/
void ucitavanje (Skakaci skakaci[],int broj_skakaca)
{
int i;
printf("\nUnosimo startnu listu:\n");
for(i=0;i<broj_skakaca;i++)
{
printf("\n");
printf("Ime: ");
scanf("%s",skakaci[i].ime);
printf("Prezime: ");
scanf("%s",skakaci[i].prezime);
printf("Zemlja: ");
scanf("%s",skakaci[i].zemlja);
skakaci[i].bodovi=0;
skakaci[i].izvedena_serija=0;
skakaci[i].startna_pozicija=i+1;
}
}
/
prikazuje se na ekranu trenutna rang lista posle n skokova
/
void stampanje (Skakaci skakaci[],int n)
{
int i;
printf("\nPlasman posle %i. takmicara\n\n",n);
for(i=0;i<n;i++)
{
printf("%2i. ",i+1);
printf("%-10s ",skakaci[i].ime);
printf("%-10s ",skakaci[i].prezime);
printf("(%s)\t\t",skakaci[i].zemlja);
if(skakaci[i].bodovi==0)
printf("-.-\n");
else
printf("%.2f\n",skakaci[i].bodovi);
}
}
/
ocenjivanje pojedinacnog skoka
/
float skok(Skakaci skakac)
{
int i,imax,imin;
232
float ocene[BROJ_SUDIJA],duzina_skoka,suma;
printf("\n%i. ",skakac->startna_pozicija);
printf("%s ",skakac->ime);
printf("%s ",skakac->prezime);
printf("(%s)\n",skakac->zemlja);
while(1)
{
printf("\nUnesite duzinu skoka: ");
scanf("%f",&duzina_skoka);
if(duzina_skoka>=0 && duzina_skoka<KRITICNA_TACKA)
break;
printf("\nNepravilno unesena duzina skoka\n");
}
/
diskvalifikovani takmicar ima duzinu skoka 0 i broj bodova je 0
/
if(duzina_skoka==0)
{
skakac->bodovi=0;
skakac->izvedena_serija=BROJ_SERIJA;
}
/
unose se ocene sudija
/
else
{
skakac->izvedena_serija++;
printf("\nOcene sudija:\n");
for(i=0;i<BROJ_SUDIJA;i++)
{
printf("%i. sudija: ",i+1);
scanf("%f",&ocene[i]);
if(ocene[i]<MINIMALNA_OCENA ||
ocene[i]>MAKSIMALNA_OCENA )
{
printf("\nNepravilno\n");
i=i-1;
}
}
imax=BROJ_SUDIJA-1;
imin=0;
for(i=0;i<BROJ_SUDIJA;i++)
{
if(ocene[i]<ocene[imin])
imin=i;
if(ocene[BROJ_SUDIJA-1-i]>ocene[imax])
imax=BROJ_SUDIJA-1-i;
}
/
odredjuje se ukupan broj poena
/
suma=0;
233
for(i=0;i<BROJ_SUDIJA;i++)
if (i!=imax && i!=imin)
suma=suma+ocene[i];
suma=suma+(duzina_skoka-K_tacka)koef;
/
ukoliko su poeni negativni takmicar je diskvalifikovan
/
if(suma<0)
{
skakac->bodovi=0;
skakac->izvedena_serija=BROJ_SERIJA;
}
else
skakac->bodovi=skakac->bodovi+suma;
}
return (skakac->bodovi);
}
/
odredjuje se trenutni plasman skakaca
/
int plasman(Skakaci skakaci[],int k,int broj_skakaca)
{
int i;
Skakaci temp;
if(k==broj_skakaca-1 || skakaci[k].bodovi>skakaci[k-1].bodovi)
{
for(i=k;i>0;i--)
if(skakaci[i].bodovi>skakaci[i-1].bodovi)
{
temp=skakaci[i];
skakaci[i]=skakaci[i-1];
skakaci[i-1]=temp;
}
else
break;
return i+1;
}
else
{
for(i=k;i<broj_skakaca-1;i++)
if(skakaci[i].bodovi<skakaci[i+1].bodovi)
{
temp=skakaci[i];
skakaci[i]=skakaci[i+1];
skakaci[i+1]=temp;
}
else
break;
return (i+1);
}
}
234
235
8.
.
:
1. Kreiranje baze
2. Listanje Baze
3. Rezervacija sobe
4. Potvrda rezervacije
5. Otkazivanje rezervacije
0 Izlaz
0 .
.
1. .
.
apt .
(Enter).
2. .
: , ,
.
3. .
.
. ,
.
4.
.
5.
.
.
.
8.
/
Program za evidenciju rezervacija soba u hotelu u toku jedne sezone
/
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#define KRAJ 0
#define PORUKE_MENIJA 7
#define OD_GODINE 2000
#define DO_GODINE 2015
#define MAX_IME 30
#define DANI 366
#define DUZINA 5
#define MESECI 12
236
int dani_u_mesecu[31];
char dani_u_godini[DANI][MAX_IME];
char meseci_u_godini[]={ "januar","februar","mart","april","maj","juni","juli",
"avgust","septembar","oktobar","novembar","decembar"};
int broj_dana[]={31,28,31,30,31,30,31,31,30,31,30,31};
typedef struct {
char broj_sobe[DUZINA];
char tip_sobe[DUZINA];
char dani[DANI][MAX_IME];
} Hotel;
int prestupna(int);
void niz_datuma(int);
int meni(void);
int baza_hotela (char );
int slobodni_termini(Hotel);
int pregled_baze(char );
int rezervacija_sobe(char );
int provera_datuma(int,int);
int potvrda_rezervacije(char );
int otkazivanje(char );
int rezervisano(Hotel);
void pisanje_poruka(int);
main()
{
int i,izbor,status;
char ime_hotela[MAX_IME],godina[DUZINA];
char ime_datoteke;
for(i=0; i<31; i++)
dani_u_mesecu[i] = i+1;
printf("\nUnesite ime hotela: ");
gets(ime_hotela);
while(1)
{
printf("\nUnesite godinu (%i - %i): ",OD_GODINE,DO_GODINE);
gets(godina);
if (OD_GODINE<=atoi(godina) && atoi(godina)<=DO_GODINE)
break;
printf("\nGodina je van opsega \n");
}
237
ime_datoteke=malloc(strlen(ime_hotela)+strlen(godina)+2);
if(ime_datoteke==NULL)
{
pisanje_poruka(1);
exit(1);
}
strcpy(ime_datoteke,ime_hotela);
strcat(ime_datoteke,"_");
strcat(ime_datoteke,godina);
niz_datuma(atoi(godina));
do
{
printf("\n\n HOTEL %s - godina %s\n\n",ime_hotela,godina);
izbor=meni();
switch(izbor)
{
case KRAJ: break;
case 1:
status=baza_hotela(ime_datoteke);
pisanje_poruka(status);
break;
case 2:
status=pregled_baze(ime_datoteke);
if(status)
pisanje_poruka(status);
break;
case 3:
status=rezervacija_sobe(ime_datoteke);
if(status>=0)
pisanje_poruka(status);
break;
case 4:
status=potvrda_rezervacije(ime_datoteke);
if(status)
pisanje_poruka(status);
break;
case 5:
status=otkazivanje(ime_datoteke);
if(status)
pisanje_poruka(status);
break;
default:
printf("\nNepoznat izbor\n");
break;
}
}
while(izbor!=KRAJ);
238
printf("\n\nKRAJ PROGRAMA\n\n");
}
int meni(void)
{
int i,izbor;
char poruke[]={
for(i=0;i<PORUKE_MENIJA-1;i++)
puts(poruke[i]);
printf("\n%s",poruke[PORUKE_MENIJA-1]);
scanf("%i",&izbor);
return izbor;
}
int prestupna(int god)
{
int prestup;
if(god%400==0) prestup=1;
else if(god%100==0)
prestup=0;
else if(god%4==0)
prestup=1;
else
prestup=0;
return prestup;
}
/
formira se niz datuma, redom, od 1. januara do 31. decembra
/
void niz_datuma(int god)
{
char temp;
int index=0,i,j;
temp=malloc(MAX_IME+1);
broj_dana[1]+=prestupna(god);
for(i=0;i<MESECI;i++)
for(j=0;j<broj_dana[i];j++)
{
itoa(dani_u_mesecu[j], temp, 10);
239
fptr=fopen(datoteka,"rb");
if(fptr==NULL)
return 2;
fflush(stdin);
while(1)
{
if(fread(&soba,sizeof(Hotel),1,fptr)!=1 && !feof(fptr))
{
fclose(fptr);
return 4;
}
if(feof(fptr))
break;
printf("\nBroj sobe: %s",soba.broj_sobe);
printf("\nTip sobe (broj kreveta): %s\n",soba.tip_sobe);
slobodni_termini(soba);
if(rezervisano(soba)==0)
printf("\nNema rezervisanih termina\n");
getchar();
}
fclose(fptr);
return 0;
}
/
soba je rezervisana odredjenog dana ako se umesto datuma u nizu nalazi
ime osobe na koju glasi rezervacija
/
int slobodni_termini(Hotel soba)
{
int ima_termina,nadjen,pocetak,kraj,i;
ima_termina=nadjen=0;
printf("\nSoba je slobodna u sledecim terminima:\n");
for(i=0;i<DANI;i++)
{
if(isdigit(soba.dani[i][0]))
{
ima_termina++;
nadjen=1;
if(ima_termina==1)
kraj=pocetak=i;
else
kraj=i;
}
else if(ima_termina!=0)
{
printf("\n%s - %s\n",soba.dani[pocetak],soba.dani[kraj]);
ima_termina=0;
241
}
}
if(kraj==DANI-1)
printf("\n%s - %s\n",soba.dani[pocetak],soba.dani[kraj]);
if(!nadjen) printf("\nNema slobodnih termina\n");
return nadjen;
}
int rezervacija_sobe(char datoteka)
{
FILE fptr;
Hotel soba;
char osoba[MAX_IME],br_sobe[DUZINA];
int mesto_u_bazi,nadjena,index_pocetka,index_kraja,slobodno,i;
int dan_pocetka,dan_kraja,mesec_pocetka,mesec_kraja;
mesto_u_bazi=nadjena=0;
fptr=fopen(datoteka,"rb+");
if(fptr==NULL)
return 2;
printf("\nUnesite broj sobe ");
scanf("%s",br_sobe);
fflush(stdin);
/
proverava se da li u bazi postoji soba sa unetim brojem
/
while(1)
{
if(fread(&soba,sizeof(Hotel),1,fptr)!=1 && !feof(fptr))
{
fclose(fptr);
return 4;
};
if(feof(fptr))
break;
mesto_u_bazi++;
if(strcmp(soba.broj_sobe,br_sobe)==0)
{
nadjena=1;
break;
}
}
if(!nadjena)
{
printf("\nNe postoji soba sa tim brojem\n");
fclose(fptr);
return -1;
}
242
/
daje se izvestaj da li je i u kojim terminima je slobodna soba
/
if(!slobodni_termini(soba))
{
fclose(fptr);
return -1;
}
/
unosi se datum pocetka i kraja rezervacije i proverava se da li su
podaci pravilno uneti
/
printf("\nUnesite datum pocetka rezervacije (d-m) ");
scanf("%i-%i",&dan_pocetka,&mesec_pocetka);
index_pocetka=provera_datuma(dan_pocetka,mesec_pocetka);
if(index_pocetka==-1)
{
printf("\nPogresno unet datum\n");
fclose(fptr);
return -1;
}
printf("\nUnesite datum kraja rezervacije (d-m) ");
scanf("%i-%i",&dan_kraja,&mesec_kraja);
index_kraja=provera_datuma(dan_kraja,mesec_kraja);
if(index_kraja==-1)
{
printf("\nPogresno unet datum\n");
fclose(fptr);
return -1;
}
if(index_kraja<index_pocetka)
{
printf("\nPogresno uneti termini\n");
fclose(fptr);
return -1;
}
fflush(stdin);
slobodno=0;
for(i=index_pocetka;i<=index_kraja;i++)
if(!isdigit(soba.dani[i][0]))
{
slobodno=1;
break;
}
if(slobodno)
{
printf("\nSoba nije slobodna u tom terminu\n");
fclose(fptr);
return -1;
}
243
/
umesto datuma upisuje se ime osobe na koju ce glasiti rezervacija
/
printf("\nUnesite ime na koje ce biti rezervacija :");
gets(osoba);
for(i=index_pocetka;i<=index_kraja;i++)
strcpy(soba.dani[i],osoba);
if(fseek(fptr,(mesto_u_bazi-1)sizeof(Hotel),SEEK_SET))
{
fclose(fptr);
return 3;
}
if(fwrite(&soba,sizeof(Hotel),1,fptr)!=1)
{
fclose(fptr);
return 3;
}
fclose (fptr);
return 0;
}
int provera_datuma(int dan, int mesec)
{
char temp;
int i;
temp=malloc(MAX_IME);
if(mesec>0 && mesec<=MESECI && dan>0 && dan<=31)
{
/*brojevi od 1 do 31 pretvaraju se u niz znakova*/
itoa(dani_u_mesecu[dan-1], temp, 10);
strcat(temp, ". ");
strcat(temp,meseci_u_godini[mesec-1]);
for(i=0;i<DANI;i++)
if(strcmp(dani_u_godini[i],temp)==0)
{
free(temp);
return i;
}
}
free(temp);
return -1;
}
/
trazi u datoteci za koju sobu se umesto datuma nalazi navedeno ime
/
int potvrda_rezervacije(char datoteka)
{
char osoba[MAX_IME];
FILE fptr;
int nadjen_u_bazi,nadjen,i,index_pocetka,index_kraja;
Hotel soba;
244
fflush(stdin);
fptr=fopen(datoteka,"rb");
if(fptr==NULL)
return 2;
printf("\nUnesite ime osobe ");
gets(osoba);
nadjen_u_bazi=nadjen=0;
printf("\nNa ime %s je rezervisano:\n",osoba);
while(1)
{
if(fread(&soba,sizeof(Hotel),1,fptr)!=1 && !feof(fptr))
{
fclose(fptr);
return 4;
}
if(feof(fptr))
break;
for(i=0;i<DANI;i++)
{
if(strcmp(soba.dani[i],osoba)==0)
{
nadjen++;
nadjen_u_bazi=1;
if(nadjen==1)
index_pocetka=index_kraja=i;
else
index_kraja=i;
}
else
{
if(nadjen!=0)
{
printf("\nSoba %s : ",soba.broj_sobe);
printf("%s - ",dani_u_godini[index_pocetka]);
printf("%s\n",dani_u_godini[index_kraja]);
}
nadjen=0;
}
}
}
if(nadjen_u_bazi==0)
printf("\nNema rezervacije na to ime\n");
fclose(fptr);
return 0;
}
245
/
umesto imena ponovo se upisuje datum
/
int otkazivanje (char datoteka)
{
FILE fptr;
Hotel soba;
char osoba[MAX_IME];
int nadjen,mesto_u_bazi,i;
nadjen=mesto_u_bazi=0;
fflush(stdin);
fptr=fopen(datoteka,"rb+");
if(fptr==NULL)
return 2;
printf("\nNa koje ime se otkazuje rezervacija ");
gets(osoba);
while(1)
{
if(fread(&soba,sizeof(Hotel),1,fptr)!=1 && !feof(fptr))
{
fclose(fptr);
return 4;
}
if(feof(fptr)) break;
mesto_u_bazi++;
for(i=0;i<366;i++)
if(strcmp(soba.dani[i],osoba)==0)
{
nadjen++;
strcpy(soba.dani[i],dani_u_godini[i]);
}
if(fseek(fptr,(mesto_u_bazi-1)sizeof(Hotel),SEEK_SET))
{
fclose(fptr);
return 3;
}
if(fwrite(&soba,sizeof(Hotel),1,fptr)!=1)
{
fclose(fptr);
return 3;
}
if(fseek(fptr,mesto_u_bazisizeof(Hotel),SEEK_SET))
{
fclose(fptr);
return 3;
}
}
246
if(nadjen==0)
printf("\nNema rezervacije na ime %s\n",osoba);
else
printf("\nOtkazano %i rezervacija\n",nadjen);
fclose(fptr);
return 0;
}
int rezervisano (Hotel soba)
{
int nadjen=0,rezervisano=0,i;
printf("\nSoba je rezervisana u sledecim terminima:\n");
for(i=0;i<366;i++)
{
if(isalpha(soba.dani[i][0]))
{
nadjen++;
rezervisano=1;
if(nadjen==1)
printf("\n%s -",dani_u_godini[i]);
else if(strcmp(soba.dani[i],soba.dani[i-1])!=0)
{
printf(" %s na ime %s\n",dani_u_godini[i-1],soba.dani[i-1]);
nadjen=0;
i=i-1;
}
}
else if(nadjen!=0)
{
printf(" %s na ime %s\n",dani_u_godini[i-1],soba.dani[i-1]);
nadjen=0;
}
}
return rezervisano;
}
void pisanje_poruka(int broj_greske)
{
char poruke[]={
"Uspesno",
"Nema dovoljno memorije",
"Neuspeh prilikom otvaranja datoteke",
"Neuspeh prilikom upisivanja podataka u datoteku",
"Neuspeh prilikom citanja podataka"
puts(poruke[broj_greske]);
}
};
247
248
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
______________________________
______________________________
______________________________
249
250
_____________________________________________
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
, ++ 32 ,
: class, private, protected, public, new delete.
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 )
251
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
14
13
12
11
10
9
8
7
6
5
4
3
2
1
2
1
2
2
2
2
2
2
2
2
2
2
3
2
2
[ ] ( ) . ->
! ~ ++ -- + - & () sizeof
/ %
+ << >>
< <= > >=
== !=
&
^
|
&&
||
?:
= += -= = /= %= &= ^= |= <<= >>=
,
++ o ,
: :: ( 16),
new delete ( 14)
>> << ( , 11).
252
7. stdio.h
scanf("format",a1,2\)
printf("format",izraz1,izraz2\)
getchar(void)
putchar()
gets(s)
puts(s)
fopen(ime, mod)
fclose(fptr)
fscanf(fptr, "format,a1, 2\)
fputc(c, fptr)
fputs(s, fptr)
fread(a, vel, n, fptr)
fwrite(a, vel, n, fptr)
ftell(fptr)
fseek(fptr, n, poz)
rewind(fptr)
fflush(fptr)
feof(fptr)
formatu
(1,2...)
, formatu,
(izraz1, izraz2...)
ASCII
ASCII
,
s
s
ime mod
FILE
NULL
fptr
fptr, formatu
(1,2...)
formatu,
izraz fptr
fptr ASCII
ASCII
fptr
fptr , max
s
s
fptr
n x vel
( fptr)
n x vel
( fptr),
fptr
fptr, poz n
fptr,
fptr
0,
fptr
253
8. 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 .
9. 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.
254
10. stdlib.h
stdlib.h.
atof(s)
a double,
s.
atoi(s)
a int,
s.
atol(s)
a long,
s.
rand()
a - int,
0 RAND_MAX (32767).
exit(status)
status
: 1 ( ) 0 (
).
malloc(n)
n
.
( ) NULL .
realloc(a,n)
n .
( ) NULL .
free(a)
11. string.h
string.h, s, s1 s2
, c 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).
255
12. fstream.h
f.open(ime, mod)
f.close()
f.get()
f.get(s, max+1)
f.get(s, max+1, c)
f.getline(s, max+1)
f.put(c)
f.read(a, n)
f.write(a, n)
f.tellg()
f.tellp()
f.seekg(n, poz)
f.seekp(n, poz)
f.flush()
f.eof()
256
ime mod
f
f
f ASCII
f, max
s
f, max
s
f, max
, s (
\n)
f
ASCII
n
f
n
f,
,
f
,
f
, f,
poz n
, f,
poz n
f
0,
f
13. ASCII
257
258
_____________________________________________
[1]
, ,
, 2006.
[2]
, ++ ,
, 2004.
[3]
,
e , 2004.
[4]
, , , 1996.
[5]
[6]
Augie Hansen,
, , 1991.
[7]
[8]
259