Uvod u programiranje  C i C++ 

Sadržaj

hardcover-spine3d

Predgovor 13

1 Prvi koraci 21

1.1 Hello world 22

1.1.1 Redoslijed izvršenja 24
1.1.2 Šta se dešava kada pokrenemo program? 25
1.1.3 Sintaksne i logičke greške 25

1.2 Promjenljive i ulaz/izlaz 27

1.2.1 Šta je to promjenljiva? 27
1.2.2 Inicijalizacija i neinicijalizirane promjenljive 29
1.2.3 Deklaracija i tipovi promjenljivih 29
1.2.4 Formati i escape sekvence 31
1.2.5 Unos promjenljivih pomoću funkcije scanf 33
1.2.6 Dodjela 34
1.2.7 Literali 35
1.2.8 Neki osnovni matematički operatori 36
1.2.9 Ulaz i izlaz u programskom jeziku C++ 37

1.3 Rješavanje programskih zadataka 38

1.3.1 Simboličke konstante 40
1.3.2 Komentari 41
1.3.3 Kamo dalje... 41

2 Uslovi i grananje 43

2.1 Vrste grananja 43

2.1.1 Naredba if 44

2.2 Operatori poređenja 46
2.3 Alternativa 48
2.4 Logički operatori 49

2.4.1 Matematička logika u C-u 50
2.4.2 Kratkospojna evaluacija 53

2.5 Višestruki izbor 54

2.5.1 Ugniježđena grananja 57
2.5.2 switch-case 59

2.6 Kontrola toka naredbom goto 61

3 Skok u svijet programiranja 65

3.1 Predstavljanje podataka u memoriji računara 65

3.1.1 Binarni brojevni sistem 67
3.1.2 Oktalni i heksadecimalni brojevni sistem 68
3.1.3 Negativni binarni brojevi 69
3.1.4 Realni binarni brojevi 70
3.1.5 Binarni brojevi sa beskonačno mnogo cifara 70
3.1.6 Problem nepreciznosti realnih vrijednosti 72
3.1.7 Znakovni tip 74
3.1.8 Odsijecanje i zaokruživanje 76
3.1.9 Prekoračenje 78

3.2 Operatori 79

3.2.1 Implicitna konverzija tipa 81
3.2.2 Prefiksni i postfiksni operatori 81
3.2.3 Ternarni (kondicionalni) operator 82
3.2.4 Operator zarez 83
3.2.5 Operator sizeof 83
3.2.6 Još o nekim operatorima 84

4 Ponavljanje dijelova koda - Petlje 87

4.1 for petlja 88

4.1.1 Struktura for petlje 89
4.1.2 Kako funkcioniše for petlja? 91
4.1.3 Zloupotrebe zaglavlja for petlje 92
4.1.4 Petlje sa različitim koracima 94
4.1.5 Opadajuća for petlja 96
4.1.6 Naredbe break i continue 97
4.1.7 Višestruke (ugniježđene) petlje 99

4.2 while petlja 105

4.2.1 Transformacija for u while i obrnuto 106

4.3 do-while petlja 107
4.4 Primjeri zadataka sa petljama 110

4.4.1 Crtanje oblika na ekranu ASCII karakterima 110
4.4.2 Sume 115
4.4.3 Prosti brojevi, problemi tipa “za svako x” 120
4.4.4 Razdvajanje broja na cifre 124

5 Nizovi (polja) 129

5.1 Rad sa nizovima 130

5.1.1 Unos niza pomoću tastature 132
5.1.2 Inicijalizacija članova niza 134
5.1.3 Neke matematičke operacije nad nizom 134
5.1.4 Zadaci tipa “za svako x” i “postoji barem jedan” 137
5.1.5 Nizovi proizvoljne dužine 140

5.2 Neki algoritmi za rad sa nizovima 144

5.2.1 Maksimum i minimum 145
5.2.2 Izbacivanje člana iz niza 150
5.2.3 Ubacivanje člana u niz 153
5.2.4 Prebrojavanje članova niza i histogram 155
5.2.5 Sortiranje: Selection Sort 158

5.3 Višedimenzionalni nizovi 160

5.3.1 Algoritmi za rad sa matricama 163

5.4 C++ vektori 166

5.4.1 Rad sa vektorima 167
5.4.2 Promjena veličine vektora 168
5.4.3 Osnovne operacije sa vektorima 170
5.4.4 "Siguran" pristup članovima vektora 170
5.4.5 Višedimenzionalni vektori 171

6 Funkcije 175

6.1 Uvod u funkcije u C-u 175

6.1.1 Sintaksa C funkcija 176
6.1.2 Kako pisati funkcije? 178
6.1.3 Korist od funkcija i potreba za njima 181

6.2 Funkcije u C-u 183

6.2.1 Analiza dijelova funkcije 183
6.2.2 Pozivanje funkcija 185
6.2.3 Mjesto pisanja funkcija 187
6.2.4 Prototip funkcije 190
6.2.5 Procedure (funkcije koje ne vraćaju ništa) 193
6.2.6 Funkcije bez parametara 194
6.2.7 Vidljivost promjenljivih deklarisanih unutar funkcije 196
6.2.8 Redoslijed određivanja vrijednosti parametara prilikom poziva 200
6.2.9 Globalne promjenljive 202
6.2.10 Statičke promjenljive 204

6.3 Prosljeđivanje nizova funkcijama 206
6.4 Rekurzivne funkcije 211

7 Pokazivači (pointeri) 221

7.1 Rad sa pokazivačima 224

7.1.1 Stil deklaracije pokazivača 224
7.1.2 Inicijalizacija pokazivača 225
7.1.3 Operator dereferenciranja 226

7.2 Pokazivači kao parametri funkcija 229

7.2.1 Vraćanje više vrijednosti iz funkcije 230
7.2.2 Pogrešne implementacije "zamijeni" funkcije 234

7.3 Pokazivači i nizovi 238

7.3.1 Pokazivačka aritmetika 239
7.3.2 Sličnost između imena niza i pokazivača 240
7.3.3 Prefiksni i postfiksni operatori nad pokazivačima 242
7.3.4 Prosljeđivanje nizova funkcijama 245
7.3.5 Rad sa nizovima koristeći pokazivačku aritmetiku 247

7.4 Pokazivači kao povratni tip funkcije 254

7.4.1 Viseći pokazivači 256

8 Stringovi (znakovni nizovi) 263

8.1 Osnovne operacije nad stringovima 264

8.1.1 Ulaz i izlaz 265
8.1.2 Česte funkcije za rad sa stringovima i njihova implementacija 267
8.1.3 Rješavanje zadataka sa stringovima 279

8.2 Neki algoritmi za rad sa stringovima 280

8.2.1 Pretvaranje broja u string 280
8.2.2 Ekstrakcija broja iz stringa 282
8.2.3 Rad sa rečenicama i riječima 284
8.2.4 Izbacivanje podstringa 285
8.2.5 Ubacivanje podstringa 289

8.3 C++ stringovi 292

8.3.1 Rad sa C++ stringovima 292
8.3.2 Unos stringova u C++u 293
8.3.3 Povećavanje stringova 294
8.3.4 Operacije nad stringovima 295

9 Vlastiti tipovi podataka 299

9.1 Ključna riječ typedef 299
9.2 Pobrojani tip (enum) 300
9.3 Strukturni tip podataka (struct) 303

9.3.1 Definicija strukturnog tipa i deklaracija promjenljivih 304
9.3.2 Anonimne strukture 305
9.3.3 Imenovanje strukturnog tipa pomoću typedef 306
9.3.4 Rad sa strukturnim promjenljivim 306
9.3.5 Strukture i funkcije 307
9.3.6 Strukture i nizovi, podstrukture 310
9.3.7 Nizovi struktura 313
9.3.8 Pokazivači na strukture 314
9.3.9 Bitpolja 315

9.4 Unija (union) 317

10 Rad sa datotekama 321

10.1 O datotekama 321

10.1.1 Datotečni sistem 321
10.1.2 Putanja 322
10.1.3 Standardna hijerarhija i prava pristupa 324

10.2 Rad sa datotekama u C-u 325

10.2.1 Otvaranje i zatvaranje datoteke 325
10.2.2 Rad sa karakterima 329
10.2.3 Rad sa formatiranim datotekama 333

10.3 Baze podataka 338
10.4 Binarne datoteke 342

10.4.1 Funkcije za rad sa binarnim datotekama 343
10.4.2 Pomjeranje kursora 346
10.4.3 Tekstualne vs. binarne datoteke 347

A Tablica operatora 351

B Naredbe za ulaz i izlaz 353

B.1 printf i scanf 353

B.1.1 Formatni stringovi (formati) 353
B.1.2 Podspecifikatori 354
B.1.3 Escape sekvence 355
B.1.4 Povratna vrijednost 356

C Napredne teme o pokazivačima 359

C.1 Dopune uvodnog poglavlja o pokazivačima 359

C.1.1 Napomene o adresnom modelu 359
C.1.2 Pokazivač na element iza kraja niza 359
C.1.3 Tip ptrdiff_t i "negativne" adrese 361
C.1.4 Konstantni pokazivači i pokazivači na konstantne objekte 362

C.2 Dinamička alokacija memorije 367

C.2.1 Generički pokazivači (void *) 367
C.2.2 Konverzije pokazivača 372
C.2.3 Funkcije malloc i free 375

C.3 Višestruki pokazivači 381

C.3.1 Neke primjene dvostrukih i trostrukih pokazivača 383
C.3.2 Nizovi pokazivača 386
C.3.3 Pokazivači na višedimenzionalne nizove 391
C.3.4 Pokazivači na matrice kao cjeline 397
C.3.5 Dinamički alocirane i “grbave” matrice 398

C.4 Pokazivači na funkcije 403
C.5 Greške prilikom kompajlerskih optimizacija 417

C.5.1 Ključna riječ volatile 418
C.5.2 Ključna riječ restrict 419

Indeks 421