Elektronskoizdanje(2019)
Total Page:16
File Type:pdf, Size:1020Kb
Elektronsko izdanje (2021) Elektronsko izdanje (2021) Filip Marić Predrag Janičić PROGRAMIRANJE 1 Osnove programiranja kroz programski jezik C Elektronsko izdanje (2021) Beograd 2021. Autori: dr Filip Marić, vanredni profesor na Matematičkom fakultetu u Beogradu dr Predrag Janičić, redovni profesor na Matematičkom fakultetu u Beogradu PROGRAMIRANJE 1 Izdavač: Matematički fakultet Univerziteta u Beogradu Studentski trg 16, 11000 Beograd Za izdavača: prof. dr Zoran Rakić, dekan Recenzenti: dr Gordana Pavlović-Lažetić, redovni profesor na Matematičkom fakultetu u Beogradu dr Miodrag Živković, redovni profesor na Matematičkom fakultetu u Beogradu dr Dragan Urošević, naučni savetnik na Matematičkom institutu SANU Obrada teksta, crteži i korice: autori Elektronsko izdanje (2021) ISBN 978-86-7589-100-0 ○c 2015. Filip Marić i Predrag Janičić Ovo delo zaštićeno je licencom Creative Commons CC BY-NC-ND 4.0 (Attribution-NonCommercial-NoDerivatives 4.0 International License). Detalji licence mogu se videti na veb-adresi http://creativecommons.org/licenses/by-nc-nd/ 4.0/. Dozvoljeno je umnožavanje, distribucija i javno saopštavanje 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. Sadržaj Sadržaj 5 I Osnovni pojmovi računarstva i programiranja9 1 Računarstvo i računarski sistemi 10 1.1 Rana istorija računarskih sistema.................................... 10 1.2 Računari Fon Nojmanove arhitekture.................................. 13 1.3 Oblasti savremenog računarstva..................................... 16 1.4 Hardver savremenih računara...................................... 17 1.5 Softver savremenih računara....................................... 19 2 Reprezentacija podataka u računarima 27 2.1 Analogni i digitalni podaci i digitalni računari............................. 27 2.2 Zapis brojeva............................................... 28 2.3 Zapis teksta................................................ 33 2.4 Zapis multimedijalnih sadržaja ..................................... 38 3 Algoritmi i izračunljivost 42 3.1 Formalizacije pojma algoritma ..................................... 42 3.2 Čerč-Tjuringova teza........................................... 43 3.3 UR mašine ................................................ 43 3.4 Enumeracija urm programa....................................... 47 3.5 Neizračunljivost i neodlučivost ..................................... 48 3.6 Vremenska i prostorna složenost izračunavanja ............................ 49 4 Viši programski jezici 53 4.1 Kratki pregled istorije programskih jezika ............................... 53 4.2 Klasifikacije programskih jezika..................................... 54 4.3 Leksika,Elektronsko sintaksa, semantika programskih jezika izdanje............................ (2021) 54 4.4 Pragmatika programskih jezika ..................................... 56 II Jezik C 60 5 Osnovno o programskom jeziku C 61 5.1 Standardizacija jezika .......................................... 61 5.2 Prvi programi............................................... 62 6 Predstavljanje podataka i operacije nad njima 68 6.1 Promenljive i deklaracije......................................... 68 6.2 Osnovni tipovi podataka......................................... 70 6.3 Konstante i konstantni izrazi ...................................... 73 6.4 Operatori i izrazi............................................. 75 6.5 Konverzije tipova............................................. 84 5 6.6 Nizovi i niske............................................... 87 6.7 Korisnički definisani tipovi........................................ 93 7 Naredbe i kontrola toka 101 7.1 Naredba izraza ..............................................101 7.2 Složene naredbe (blokovi) ........................................101 7.3 Naredbe grananja.............................................102 7.4 Petlje ...................................................104 8 Funkcije 112 8.1 Primeri definisanja i pozivanja funkcije.................................112 8.2 Deklaracija i definicija funkcije .....................................113 8.3 Parametri funkcije ............................................114 8.4 Prenos argumenata............................................115 8.5 Konverzije tipova argumenata funkcije.................................116 8.6 Povratna vrednost funkcije .......................................116 8.7 Rekurzivne funkcije............................................116 8.8 Nizovi i funkcije..............................................117 8.9 Korisnički definisani tipovi i funkcije..................................119 8.10 Funkcije sa promenljivim brojem argumenata.............................120 9 Organizacija izvornog i izvršivog programa 124 9.1 Od izvornog do izvršivog programa...................................124 9.2 Organizacija izvornog programa.....................................128 9.3 Organizacija izvršivog programa ....................................145 10 Pokazivači i dinamička alokacija memorije 155 10.1 Pokazivači i adrese............................................155 10.2 Pokazivači i argumenti funkcija.....................................158 10.3 Pokazivači i nizovi ............................................160 10.4 Pokazivačka aritmetika..........................................161 10.5 Pokazivači i niske.............................................163 10.6 Nizovi pokazivača i višedimenzioni nizovi................................166 10.7 Pokazivači i strukture ..........................................168 10.8 Pokazivači na funkcije ..........................................168 10.9 Dinamička alokacija memorije......................................171 11 Pregled standardne biblioteke 178 11.1 Zaglavlje string.h ............................................178 11.2 Zaglavlje stdlib.h ............................................180 11.3 Zaglavlje ctype.h ............................................181 11.4 Zaglavlje math.h .............................................181 11.5 Zaglavlje assert.h ............................................182 12 Ulaz i izlaz programaElektronsko izdanje (2021) 184 12.1 Standardni tokovi.............................................184 12.2 Ulaz iz niske i izlaz u nisku .......................................190 12.3 Ulaz iz datoteka i izlaz u datoteke ...................................190 12.4 Argumenti komandne linije programa .................................195 A Tabela prioriteta operatora 199 B Rešenja zadataka 201 Indeks 253 6 Predgovor Ova knjiga pisana je kao udžbenik za predmet Programiranje 1 na smeru Informatika Matematičkog 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ć pokušavaju da dâju šire osnove programiranja, ilustrovane kroz jedan konkretan jezik. Knjiga je nastala na osnovu materijala za predavanja koja smo na ovom predmetu držali od 2005. godine. Ipak, vremenom je materijal proširen i delovima koji se u okviru tog predmeta ne predaju ili se predaju u vrlo ograničenom obimu. Zahvaljujući tome, ova knjiga i njen nastavak (Programiranje 2 — Osnove programiranja kroz programski jezik C) mogu se koristiti kao udžbenici za više različitih kurseva. Za predmet na studijama na kojima nema drugih (ili nema mnogo drugih) računarskih predmeta, predlažemo obrađivanje čitave knjige, s tim što obrađivanje glave 4 preporučujemo samo za studije sa jakom matematičkom orijentacijom. Čitaocima (studentima) koji poznaju osnove računarstva i programiranja, a ne znaju jezik C, preporučujemo čitanje samo drugog dela knjige (Jezik C). Za kurs Programiranje 1 na smeru Informatika preporučujemo samo ubrzano upoznavanje sa glavama 1 i 2 (jer se ti sadržaji izučavaju u okviru drugih predmeta na prvoj godini). Za ovaj kurs preporučujemo i upoznavanje sa glavama 3 i 4, a upoznavanje sa glavama 10 i 12 preporučujemo za drugi semestar. Na kraju većine poglavlja naveden je veći broj pitanja i zadataka koji mogu da služe za proveru znanja. Među ovim pitanjima su praktično sva pitanja koja su zadata na testovima i ispitima iz predmeta Programiranje 1 u periodu od pet godina. Odgovori na pitanja nisu eksplicitno navođeni, jer su već implicitno sadržani u osnovnom tekstu knjige. Na kraju knjige navedena su rešenja zadataka, te se može smatrati da ova knjiga obuhvata i potpunu prateću zbirku zadataka. Za zadatka tipa „šta ispisuje naredni program?“ nisu navođeni odgovori jer čitalac to može da proveri na svom računaru (i knjiga pokušava da ohrabri čitaoca da čitanje knjige kombinuje sa radom na računaru). U pripremi knjige koristili smo mnoge izvore, pre svega sa interneta. Od izvora o jeziku C, pomenimo ovde znamenitu knjigu Programski jezik C (The C Programming Language, K&R) Brajana Kernigena i Denisa Ričija koja je dugo služila kao nezvanični 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 izračunljivost koristili smo knjigu Teorija algoritama, jezika i automata - zbirka zadataka, Irene Spasić i Predraga Janičića. Na veoma pažljivom čitanju i brojnim korisnim savetima zahvaljujemo recenzentima Gordani Pavlović- Lažetić, Miodragu Živkoviću i Draganu Uroševiću. Na brojnim sugestijama i ispravkama zahvalni smo i nastav- nicima MatematičkogElektronsko fakulteta Mileni Vujošević-Janičić, izdanje Nenadu Mitiću i Mladenu (2021) Nikoliću, kao i studentima Nikoli