Programiranje I Beleˇskeza Predavanja
Total Page:16
File Type:pdf, Size:1020Kb
Programiranje I Beleˇskeza predavanja Smer Informatika Matematiˇckifakultet, Beograd Predrag Janiˇci´ci Filip Mari´c 2010. 2 Sadrˇzaj I Osnovni pojmovi raˇcunarstva i programiranja9 1 Raˇcunarstvo i raˇcunarski sistemi 13 1.1 Rana istorija raˇcunarskihsistema.................. 13 1.2 RaˇcunariFon Nojmanove arhitekture................ 17 1.3 Organizacija savremenih raˇcunara................. 23 1.4 Oblasti savremenog raˇcunarstva................... 23 2 Reprezentacija podataka u raˇcunarima 27 2.1 Analogni i digitalni podaci i digitalni raˇcunari........... 27 2.2 Zapis brojeva............................. 29 2.2.1 Neoznaˇcenibrojevi...................... 30 2.2.2 Oznaˇcenibrojevi....................... 33 2.2.3 Razlomljeni brojevi...................... 34 2.3 Zapis teksta.............................. 34 2.4 Zapis multimedijalnih sadrˇzaja................... 41 2.4.1 Zapis slika........................... 41 2.4.2 Zapis zvuka.......................... 42 3 Algoritmi i izraˇcunljivost 47 3.1 Formalizacije pojma algoritma................... 47 3.2 Cerˇc-Tjuringovaˇ teza......................... 49 3.3 ur maˇsine............................... 49 3.4 Enumeracija urm programa..................... 54 3.5 Neizraˇcunljivost i neodluˇcivost................... 55 3.6 Vremenska i prostorna sloˇzenostizraˇcunavanja.......... 58 4 Programski jezici 63 4.1 Maˇsinskizavisni programski jezici.................. 63 4.1.1 Asemblerski jezici...................... 64 4.1.2 Maˇsinskijezik......................... 65 4.2 Programski jezici viˇsegnivoa.................... 66 4.2.1 Leksika, sintaksa, semantika................. 66 4.2.2 Pragmatika programskih jezika............... 69 4.2.3 Jeziˇckiprocesori....................... 71 4 SADRZAJˇ II Jezik C 75 5 O programskom jeziku C 77 5.1 Standardizacija jezika........................ 77 6 Prvi programi 79 6.1 Program “Zdravo!”.......................... 79 6.2 Program koji ispisuje kvadrat unetog celog broja......... 81 6.3 Program koji izraˇcunava rastojanje izmedu taˇcaka........ 81 6.4 Program koji ispituje da li je uneti broj paran........... 82 7 Promenljive, tipovi, deklaracije, operatori, izrazi 85 7.1 Promenljive i imena promenljivih.................. 85 7.2 Deklaracije.............................. 86 7.3 Tipovi podataka........................... 87 7.3.1 Tip int ............................ 87 7.3.2 Tip char ........................... 88 7.3.3 Tipovi float, double i long double ............ 88 7.3.4 Logiˇckitip podataka..................... 89 7.3.5 Operator sizeof........................ 89 7.4 Brojevne konstante i konstantni izrazi............... 89 7.5 Operatori i izrazi........................... 91 7.5.1 Operator dodele....................... 91 7.5.2 Aritmetiˇckioperatori..................... 92 7.5.3 Relacioni i logiˇckioperatori................. 93 7.5.4 Bitovski operatori...................... 95 7.5.5 Sloˇzenioperatori dodele................... 96 7.5.6 Operator uslova........................ 97 8 Naredbe i kontrola toka 99 8.1 Naredba izraza............................ 99 8.2 Sloˇzenenaredbe i blokovi...................... 100 8.3 Naredba if-else ........................... 100 8.4 Konstrukcija else-if ........................ 101 8.5 Naredba if-else i operator uslova................. 102 8.6 Naredba switch ........................... 102 8.7 Petlja while .............................. 104 8.8 Petlja for ............................... 104 8.9 Petlja do-while ........................... 105 8.10 Naredbe break i continue ..................... 106 9 Struktura programa i funkcije 109 9.1 Primeri definisanja i pozivanja funkcije............... 109 9.2 Definicija funkcije........................... 110 9.3 Povratna vrednost funkcije..................... 110 9.4 Argumenti funkcije.......................... 111 SADRZAJˇ 5 9.5 Prenos argumenata.......................... 111 9.6 Deklaracija funkcije......................... 112 10 Nizovi i niske 115 10.1 Deklaracija niza............................ 116 10.2 Nizovi kao argumenti funkcija.................... 117 10.3 Niske.................................. 118 10.4 Standardne funkcije za rad sa niskama............... 119 11 Pretprocesor 125 11.1 Ukljuˇcivanje datoteka zaglavlja................... 125 11.2 Makro zamene............................ 126 11.3 Uslovno prevodenje.......................... 128 12 Konverzije tipova 131 12.1 Eksplicitne konverzije........................ 132 12.2 Konverzije pri dodelama....................... 132 12.3 Implicitne konverzije u aritmetiˇckimizrazima........... 133 12.4 Konverzije tipova argumenata funkcije............... 134 13 Izvrˇsnookruˇzenjei organizacija memorije 137 13.1 Organizacije memorije dodeljene programu............ 137 13.2 Segment koda............................. 137 13.3 Segment podataka.......................... 138 13.4 Stek segment............................. 138 13.5 Ilustracija funkcionisanja izvrˇsnogokruˇzenja:rekurzija...... 139 14 Doseg i ˇzivotni vek 141 14.1 Doseg................................. 141 14.2 Zivotniˇ vek.............................. 143 14.3 Lokalne automatske promenljive.................. 143 14.4 Lokalne statiˇcke promenljive..................... 143 14.5 Globalne statiˇcke promenljive i funkcije.............. 144 15 Pokazivaˇci 147 15.1 Pokazivaˇcii adrese.......................... 147 15.2 Pokazivaˇcii argumenti funkcija................... 149 15.3 Pokazivaˇcii nizovi.......................... 150 15.4 Pokazivaˇcka aritmetika........................ 151 15.5 Karakterski pokazivaˇcii funkcije.................. 153 15.6 Pokazivaˇcina funkcije........................ 155 16 Viˇsedimenzionalninizovi i nizovi pokazivaˇca 159 16.1 Viˇsedimenzionalninizovi....................... 159 16.2 Odnos viˇzedimenzionalnih nizova i nizova pokazivaˇca....... 160 6 SADRZAJˇ 17 Korisniˇckidefinisani tipovi 163 17.1 Strukture............................... 163 17.1.1 Osnovne osobine struktura................. 163 17.1.2 Strukture i funkcije...................... 164 17.1.3 Nizovi struktura....................... 166 17.2 Unije.................................. 167 17.3 Nabrojivi tipovi (enum)....................... 167 17.4 Typedef ................................ 167 18 Dinamiˇcka alokacija memorije 171 18.1 Funkcije C standardne biblioteke za rad sa dinamiˇckom memorijom171 18.2 Greˇske u radu sa dinamiˇckom memorijom............. 175 18.3 Fragmentisanje memorije...................... 177 18.4 Hip i dinamiˇckiˇzivotni vek..................... 177 19 Standardna biblioteka i ulaz/izlaz 179 19.1 Standardni ulaz, standardni izlaz i standardni izlaz za greˇske.. 179 19.1.1 Ulaz i izlaz pojedinaˇcnihkaraktera............. 180 19.1.2 Linijski ulaz i izlaz...................... 181 19.1.3 Formatirani izlaz printf ................. 181 19.1.4 Formatirani ulaz scanf .................. 184 19.2 Ulaz iz niske i izlaz u nisku..................... 186 19.3 Ulaz iz datoteka i izlaz u datoteke................. 187 19.3.1 Tekstualne i binarne datoteke................ 187 19.3.2 Pristupanje datoteci..................... 188 19.3.3 Ulaz i izlaz pojedinaˇcnihkaraktera............. 189 19.3.4 Provera i greˇsaka i kraja datoteke............. 191 19.3.5 Linijski ulaz i izlaz...................... 191 19.3.6 Formatirani ulaz i izlaz................... 192 19.3.7 Rad sa binarnim datotekama................ 193 19.4 Argumenti komandne linije programa................ 194 20 Pregled standardne biblioteke 197 20.1 Zaglavlje string.h .......................... 198 20.2 Zaglavlje stdlib.h .......................... 198 20.3 Zaglavlje ctype.h .......................... 200 20.4 Zaglavlje math.h ........................... 200 20.5 Zaglavlje assert.h .......................... 201 21 Programi koji se sastoje od viˇsejedinica prevodenja 203 21.1 Primer kreiranja i koriˇs´cenjakorisniˇcke biblioteke......... 203 21.2 Povezivanje.............................. 209 21.2.1 Unutraˇsnjepovezivanje i kvalifikator static ........ 209 21.2.2 Spoljaˇsnjepovezivanje i kvalifikator extern ........ 210 A Tabela prioriteta operatora 213 SADRZAJˇ 7 B Reˇsenjazadataka 215 8 SADRZAJˇ Deo I Osnovni pojmovi raˇcunarstva i programiranja Predgovor Ova knjiga namenjena je kao udˇzbenik za predmet „Programiranje I” stu- dentima I smera Matematiˇckog fakulteta u Beogradu. 12 Glava 1 Raˇcunarstvo i raˇcunarski sistemi Koreni raˇcunarstva su mnogo stariji od prvih raˇcunara.Vekovima su ljudi su stvarali mehaniˇcke i elektromehaniˇcke naprave koje su mogle da reˇsavaju neke numeriˇcke zadatke. Raˇcunariu danaˇsnjemsmislu nastali su polovinom dvade- setog veka. Danaˇsnjiraˇcunarisu programabilni, tj. mogu da se isprogramiraju da vrˇse razliˇcitezadatke. Za funkcionisanje modernih raˇcunaraneophodan je hardver i softver. Hardver ˇcine opipljive, fiziˇcke komponente raˇcunara:procesor, memorija, matiˇcnaploˇca,hard disk, DVD uredaj, itd. Softver ˇcineraˇcunarski programi i prate´cipodaci koji odreduju izraˇcunavanja koje vrˇsiraˇcunar.Raˇcu- narstvo je danas veoma ˇsiroka i dobro utemeljena nauˇcnadisciplina sa mnoˇstvom podoblasti. 1.1 Rana istorija raˇcunarskihsistema Programiranje u savremenom smislu je postalo praktiˇcnomogu´cetek kra- jem Drugog svetskog rata, ali je njegova istorija znatno starija. Prvi preci- zni postupci i sprave za reˇsavanje matematiˇckihproblema postojali su joˇsu vreme antiˇckih civilizacija. Na primer, kao pomo´cpri izvodenju osnovnih ma- tematiˇckihoperacija koriˇs´cenesu raˇcunaljke zvane abakus. U IX veku u Persiji matematiˇcar Al Horezmi (engl. Muhammad ibn Musa al-Khwarizmi, 780–850) precizno je opisao