You are on page 1of 7

Elektronsko izdanje

(2015)
Elektronsko izdanje
(2015)
Elektronsko izdanje
(2015)
Filip Mari Predrag Janii

PROGRAMIRANJE 1
Osnove programiranja kroz programski jezik C
Beograd
2015.

Elektronsko izdanje
(2015)
Autori:
dr Filip Mari, docent na Matematikom fakultetu u Beogradu
dr Predrag Janii, redovni profesor na Matematikom fakultetu u Beogradu
PROGRAMIRANJE 1

Izdava: Matematiki fakultet Univerziteta u Beogradu


Studentski trg 16, 11000 Beograd
Za izdavaa: prof. dr Zoran Raki, dekan
Recenzenti:
dr Gordana Pavlovi-Laeti, redovni profesor na Matematikom fakultetu u
Beogradu
dr Miodrag ivkovi, redovni profesor na Matematikom fakultetu u Beogradu
dr Dragan Uroevi, nauni savetnik na Matematikom institutu SANU
Obrada teksta, crtei i korice: autori
ISBN 978-86-7589-100-0
c 2015. Filip Mari i Predrag Janii
Ovo delo zatieno je licencom Creative Commons CC BY-NC-ND 4.0 (AttributionNonCommercialNoDerivatives 4.0 International License). Detalji licence mogu se
videti na veb-adresi http://creativecommons.org/licenses/by-nc-nd/4.0/. Dozvoljeno je umnoavanje,
distribucija i javno saoptavanje dela, pod uslovom da se
navedu imena autora. Upotreba dela u komercijalne svrhe nije dozvoljena. Prerada,
preoblikovanje i upotreba dela u sklopu nekog drugog nije dozvoljena.

Elektronsko izdanje
(2015)
Sadraj
Sadraj 5

I Osnovni pojmovi raunarstva i programiranja 10


1 Raunarstvo i raunarski sistemi 11
1.1 Rana istorija raunarskih sistema . . . . . . . . . . . . . . . . . 12
1.2 Raunari fon Nojmanove arhitekture . . . . . . . . . . . . . . . 16
1.3 Oblasti savremenog raunarstva . . . . . . . . . . . . . . . . . . 21
1.4 Hardver savremenih raunara . . . . . . . . . . . . . . . . . . . 22
1.5 Softver savremenih raunara . . . . . . . . . . . . . . . . . . . . 26
2 Reprezentacija podataka u raunarima 38
2.1 Analogni i digitalni podaci i digitalni raunari . . . . . . . . . . 38
2.2 Zapis brojeva . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.3 Zapis teksta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.4 Zapis multimedijalnih sadraja . . . . . . . . . . . . . . . . . . 55
3 Algoritmi i izraunljivost 61
3.1 Formalizacije pojma algoritma . . . . . . . . . . . . . . . . . . 61
3.2 er-Tjuringova teza . . . . . . . . . . . . . . . . . . . . . . . . 63
3.3 ur maine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
3.4 Enumeracija urm programa . . . . . . . . . . . . . . . . . . . . 69
3.5 Neizraunljivost i neodluivost . . . . . . . . . . . . . . . . . . 71
3.6 Vremenska i prostorna sloenost izraunavanja . . . . . . . . . 73

4 Vii programski jezici 78


4.1 Kratki pregled istorije programskih jezika . . . . . . . . . . . . 79
4.2 Klasifkacije programskih jezika . . . . . . . . . . . . . . . . . . 80
4.3 Leksika, sintaksa, semantika programskih jezika . . . . . . . . . 80
5

Elektronsko izdanje
(2015)
4.4 Pragmatika programskih jezika . . . . . . . . . . . . . . . . . . 83

II Jezik C 90
5 Osnovno o programskom jeziku C 91
5.1 Standardizacija jezika . . . . . . . . . . . . . . . . . . . . . . . 91
5.2 Prvi programi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
6 Predstavljanje podataka i operacije nad njima 101
6.1 Promenljive i deklaracije . . . . . . . . . . . . . . . . . . . . . . 101
6.2 Osnovni tipovi podataka . . . . . . . . . . . . . . . . . . . . . . 104
6.3 Konstante i konstantni izrazi . . . . . . . . . . . . . . . . . . . 109
6.4 Operatori i izrazi . . . . . . . . . . . . . . . . . . . . . . . . . . 112
6.5 Konverzije tipova . . . . . . . . . . . . . . . . . . . . . . . . . . 126
6.6 Nizovi i niske . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
6.7 Korisniki defnisani tipovi . . . . . . . . . . . . . . . . . . . . . 140
7 Naredbe i kontrola toka 151
7.1 Naredba izraza . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
7.2 Sloene naredbe (blokovi) . . . . . . . . . . . . . . . . . . . . . 152
7.3 Naredbe grananja . . . . . . . . . . . . . . . . . . . . . . . . . . 152
7.4 Petlje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
8 Funkcije 168
8.1 Primeri defnisanja i pozivanja funkcije . . . . . . . . . . . . . . 168
8.2 Deklaracija i defnicija funkcije . . . . . . . . . . . . . . . . . . 170
8.3 Parametri funkcije . . . . . . . . . . . . . . . . . . . . . . . . . 171
8.4 Prenos argumenata . . . . . . . . . . . . . . . . . . . . . . . . . 172
8.5 Konverzije tipova argumenata funkcije . . . . . . . . . . . . . . 174
8.6 Povratna vrednost funkcije . . . . . . . . . . . . . . . . . . . . 175
8.7 Nizovi i funkcije . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
8.8 Korisniki defnisani tipovi i funkcije . . . . . . . . . . . . . . . 178
8.9 Rekurzija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
8.10 Funkcije sa promenljivim brojem argumenata . . . . . . . . . . 179
9 Organizacija izvornog i izvrnog programa 186
9.1 Od izvornog do izvrnog programa . . . . . . . . . . . . . . . . 187
9.2 Organizacija izvornog programa . . . . . . . . . . . . . . . . . . 193
9.3 Organizacija izvrnog programa . . . . . . . . . . . . . . . . . . 219
10 Pokazivai i dinamika alokacija memorije 234

10.1
10.2
10.3
10.4

Pokazivai i adrese . . . . . . . . . . . . . . . . . . . . . . . . . 234


Pokazivai i argumenti funkcija . . . . . . . . . . . . . . . . . . 239
Pokazivai i nizovi . . . . . . . . . . . . . . . . . . . . . . . . . 241
Pokazivaka aritmetika . . . . . . . . . . . . . . . . . . . . . . . 244

Elektronsko izdanje
(2015)
10.5 Pokazivai i niske . . . . . . . . . . . . . . . . . . . . . . . . . . 247
10.6 Nizovi pokazivaa i viedimenzioni nizovi . . . . . . . . . . . . . 251
10.7 Pokazivai i strukture . . . . . . . . . . . . . . . . . . . . . . . 254
10.8 Pokazivai na funkcije . . . . . . . . . . . . . . . . . . . . . . . 255
10.9 Dinamika alokacija memorije . . . . . . . . . . . . . . . . . . . 258
11 Pregled standardne biblioteke 269
11.1 Zaglavlje string.h . . . . . . . . . . . . . . . . . . . . . . . . . 269
11.2 Zaglavlje stdlib.h . . . . . . . . . . . . . . . . . . . . . . . . . 272
11.3 Zaglavlje ctype.h . . . . . . . . . . . . . . . . . . . . . . . . . 274
11.4 Zaglavlje math.h . . . . . . . . . . . . . . . . . . . . . . . . . . 275
11.5 Zaglavlje assert.h . . . . . . . . . . . . . . . . . . . . . . . . . 276
12 Ulaz i izlaz programa 277
12.1 Standardni tokovi . . . . . . . . . . . . . . . . . . . . . . . . . . 277
12.2 Ulaz iz niske i izlaz u nisku . . . . . . . . . . . . . . . . . . . . 285
12.3 Ulaz iz datoteka i izlaz u datoteke . . . . . . . . . . . . . . . . 286
12.4 Argumenti komandne linije programa . . . . . . . . . . . . . . 294
A Tabela prioriteta operatora 300
B Reenja zadataka 301
Indeks 373
7

Elektronsko izdanje
(2015)
Predgovor
Ova knjiga pisana je kao udbenik za predmet Programiranje 1 na smeru
Informatika Matematikog fakulteta u Beogradu. U ovom predmetu i u ovoj
knjizi, centralno mesto ima programski jezik C, ali predmet i knjiga nisu samo

kurs ovog jezika, ve pokuavaju da dju ire osnove programiranja, ilustrovane


kroz jedan konkretan jezik.
Knjiga je nastala na osnovu materijala za predavanja koja smo na ovom
predmetu drali od 2005. godine. Ipak, vremenom je materijal proiren i delovima koji se u
okviru tog predmeta ne predaju ili se predaju u vrlo ogranienom obimu. Zahvaljujui tome,
ova knjiga i njen nastavak (Programiranje 2
Osnove programiranja kroz programski jezik C) mogu se koristiti kao udbenici
za vie razliitih kurseva. Za predmet na studijama na kojima nema drugih
(ili nema mnogo drugih) raunarskih predmeta, predlaemo obraivanje itave knjige, s tim
to obraivanje glave 4 preporuujemo samo za studije sa
jakom matematikom orijentacijom. itaocima (studentima) koji poznaju osnove raunarstva
i programiranja, a ne znaju jezik C, preporuujemo itanje
samo drugog dela knjige (Jezik C). Za kurs Programiranje 1 na smeru Informatika
preporuujemo samo ubrzano upoznavanje sa glavama 1 i 2 (jer se ti
sadraji izuavaju u okviru drugih predmeta na prvoj godini). Za ovaj kurs
preporuujemo i upoznavanje sa glavama 3 i 4, a upoznavanje sa glavama 10 i
12 preporuujemo za drugi semestar.
Na kraju veine poglavlja naveden je vei broj pitanja i zadataka koji mogu
da slue za proveru znanja. Meu ovim pitanjima su praktino sva pitanja
koja su zadata na testovima i ispitima iz predmeta Programiranje 1 u periodu od pet godina.
Odgovori na pitanja nisu eksplicitno navoeni, jer su ve
implicitno sadrani u osnovnom tekstu knjige. Na kraju knjige navedena su
reenja zadataka, te se moe smatrati da ova knjiga obuhvata i potpunu prateu
zbirku zadataka. Za zadatka tipa ta ispisuje naredni program? nisu navoeni
odgovori jer italac to moe da proveri na svom raunaru (i knjiga pokuava
da ohrabri itaoca da itanje knjige kombinuje sa radom na raunaru).
U pripremi knjige koristili smo mnoge izvore, pre svega sa interneta. Od
8

Elektronsko izdanje
(2015)
izvora o jeziku C, pomenimo ovde znamenitu knjigu Programski jezik C (The
C Programming Language, K&R) Brajana Kernigana i Denisa Riija koja je
dugo sluila kao nezvanini standard jezik, knjigu Knjiga o C-u (The C Book)
Majka Banahana, Deklana Brejdija i Marka Dorana, kao i ISO standarde jezika
C. Za pripremu glave Algoritmi i izraunljivost koristili smo knjigu Teorija algoritama, jezika i
automata - zbirka zadataka, Irene Spasi i Predraga Janiia.
Na veoma paljivom itanju i brojnim korisnim savetima zahvaljujemo recenzentima Gordani
Pavlovi-Laeti, Miodragu ivkoviu i Draganu Uroeviu. Na brojnim sugestijama i
ispravkama zahvalni smo i nastavnicima Matematikog fakulteta Mileni Vujoevi-Janii,
Nenadu Mitiu i Mladenu Nikoliu,
kao i studentima Nikoli Premevskom, Mladenu Canoviu, Nemanji Mioviu,

Vojislavu Grujiu, Stefanu oreviu, Petru Vukmiroviu, Bobanu Piskuliu,


Jani Proti, Ljubici Peleksi, Ivanu Baleviu, Danielu Doi, Milou Samardiji,
Stefanu Saviu, Petru Kovrliji i Tomislavu Milovanoviu.
Ova knjiga dostupna je (besplatno) u elektronskom obliku preko internet
strana autora. Sadraj tampanog i elektronskog izdanja je identian. Besplatna dostupnost
elektronskog oblika knjige odraava stav autora o otvorenim
sadrajima kdu programa i sadraju knjiga.
Autori
Beograd, april 2015. godine
9

Elektronsko izdanje
(2015)
Deo I

Osnovni pojmovi raunarstva i


programiranja
10

Elektronsko izdanje
(2015)
Glava

Raunarstvo i raunarski sistemi


Raunarstvo i informatika predstavljaju jednu od najatraktivnijih i najvanijih oblasti
dananjice. ivot u savremenom drutvu ne moe se zamisliti bez korienja razliitih
raunarskih sistema: stonih i prenosnih raunara,
tableta, pametnih telefona, ali i raunara integrisanih u razliite maine (automobile, avione,
industrijske maine, itd). Defnicija raunarskog sistema je
prilino iroka. Moe se rei da se danas pod digitalnim raunarskim sistemom
(raunarom) podrazumeva maina koja moe da se programira da izvrava razliite zadatke
svoenjem na elementarne operacije nad brojevima. Brojevi
se, u savremenim raunarima, zapisuju u binarnom sistemu, kao nizovi nula

i jedinica tj. binarnih cifara, tj. bitova (engl. bit, od binary digit). Koristei

You might also like