You are on page 1of 153

2

C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





SADRAJ
1. Openito o programima i programskim jezicima
1.1. Ljudi i raunari...................................................................................................................6
1.2. Podjela programskih jezika..................................................................................................7
2. Programski Pristup
2.1. O proceduralnom i neprceduralno programiranju ...............................................................10
2.2. Osnove faze razvoja programi ranja ....................... .................................. 12
3 .Algoritmi
3.1.Uvod u algoritme ..........................................................................................................13
3.2.Dijagram toka ..................................................................................................................14
3.3.Pravolinijske algoritamske strukture.....................................................................................18
3.4.Grananje..........................................................................................................................19
3.5.Petlje...............................................................................................................................23
4. Pseudo Jezik
4.1.Varijable..........................................................................................................................28
4.2. Operatori........................................................................................................................29
4.3.Funkcije...........................................................................................................................33
5 .Kako zapoeti?
5.1.MS Vi sual C++.......................................... ............................... ............34
5.2.Programski paket DEV C++..............................................................................................37
Pitanja za utvrivanje ......................................................................................................41
6.Uvod u C++
6.1 Proces kompajliranja. .......................................................................................................42
6.2. Rijei u C++ programskom jeziku ......................................................................................44
6.3.Struktura programa...........................................................................................................45
6.4. Varijable .........................................................................................................................47
6.5. Memorija ........................................................................................................................48
6.6. Ulazno/izlazni usmjerivai toka ..........................................................................................49
6.7. Komentari .....................................................................................................................50


3
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





6.8. Imena (identifikatori) .......................................................................................................51
6.9. Tipovi podataka ...............................................................................................................52
Pitanja za utvrivanje .............................................................................................................55
7.Operatori
7.1 Aritmetiki operatori .......................................................................................................56
7.2 Relacijski operatori .....................................................................................................58
7.3 Logiki operatori .............................................................................................................59
7.4 Bitovni operatori .............................................................................................................59
7.5 Inkrementalni i dekrementalni operatori .............................................................................59
7.6 Operatori pridruivanja .....................................................................................................60
7.7 Operator razdvajanja (zarez-operator) ...............................................................................61
7.8 typedef imena ................................................................................................................61
7.9 sizeof operator ...............................................................................................................62
7.10 Hijerarhija operatora ......................................................................................................62
Pitanja za utvrivanje ............................................................................................................63
8.Naredbe
8.1 Jednostavne i sloene naredbe ...........................................................................................64
8.2 Naredba if........................................................................................................................66
8.3 Naredba switch-case .........................................................................................................72
8.4 Naredba for .....................................................................................................................75
8.5 Naredba while . ................................................................................................................78
8.6 Naredba do ......................................................................................................................79
Pitanja za utvrivanje .............................................................................................................81
9. Funkcije
9.1. Definicija ........................................................................................................................81
9.2. Parametri i argumenti ......................................................................................................84
9.3. Globalne i lokalne varijable ...............................................................................................85
9.4 Rekurzivne funkcije ..........................................................................................................86
Pitanja za utvrivanje ..........................................................................................................87

10. Polja (Arrays ),nizovi
10.1. Jednodimenzionalni niz ...................................................................................................87
10.2. Deklaracija niza..............................................................................................................88
10.3.Inicijalizacija niza............................................................................................................89
10.4.Pristup elementima niza...................................................................................................91
10.5.Multidimenzionalna polja(nizovi)........................................................................................94
Pitanja za utvrivanje ........................................................................................................96


4
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





11. Pointeri
11.1. Osnovno o pointerima ....................................................................................................97
11.2. Dinamika memorija ......................................................................................................97
11.3. Pointeri i polja ...............................................................................................................99
11.4. Aritmetika sa pointerima .................................................................................................99
11.5. Funkcijski pointeri ........................................................................................................101
Pitanja za utvrivanje ........................................................................................................102
12. Datoteke
12.1. Standardna biblioteka fstream .......................................................................................103
12.2. Otvaranje datoteka ......................................................................................................103
12.3. Zatvaranje datoteka .....................................................................................................107
12.4. Pisanje na datoteke ......................................................................................................108
12.5. itanje sa datoteka ......................................................................................................110
Pitanja za utvrivanje ........................................................................................................113

13.Zbirka zadataka 113


14.Rjeenja 123




Literatura 157




5
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Kratka biografija autora

Dipl.prof.Informatike Smajo(Irfana)Meki- zv.Smayson- roen
01.01.1972.u G.Bukovici Travnik;

Srednju tehniku kolu zavrio u Zenici,Nastavniki fakultet zavrio
na Univerzitetu emal Bijedi u Mostaru,nastavio studij na
Panevropskom Univerzitetu Apeiron na FIT-u(Fakultet
Informacionih Tehnologija) u Banjaluci smjer nastavnika
informatiku gdje dobiva zvanje Diplomirani profesor
Informatike,Specijalistiki studio zavrio na istom fakultetu,a
Diplomski/Specijalistiki rad na temu Poreenje Pascala i C++ u
nastavnom procesu odbranio pred akademikom
dr.Zoran..Avramovi dipl.ing.elektrotehnike.

Oenjen, otac etiri sina,trenutno nastanjen na Kalibunaru-Travnik,
uposlen u Mjeovitim srednjim kolama Busovaa i Vitez.








Rje autora

Autor ove knjige je pokuao na osnovu jako puno literature, dostupne u raznim formatima i na mnogim
jezicima, na temu C++ programiranje , da u skladu sa nastavnim planom i programom za srednje
kole izdvoji i obradi osnovne teme iz ove oblasti.Teme su uraene uz potovanje pedagokih nastavni
principa.Cilj ove knjige je lake shvatanje predvienog gradiva ,postupno rjeavanja zadataka
,stjecanje rutina,navika,upornosti,preciznosti,analize i sinteze....Ovu knjigu prati projekat u html-u
C++ programiranje za srednje kole na www.mssbusovaca.com.ba. ,takoer je u pripremi
muldimedijalni DVD koji prati ovu knjigu.
Uraeni materijal moe biti od koristi za sve one koji ele da naine prve korake u programiranju u
programskom jeziku C++.Knjiga predstavlja radnu verziju i podlona je izmjenama,dopunama te se
kao takva koristi interno i nije planirana komercijalizacija i umnoavanje.Zbirka rijeenih zadataka
ima za cilj da motivie uenike za rad analizu,sintezu,da pokuaju da urade rjeenja na drugi nain.
Autor je naveo koritene izvore za ovaj projekat,izvore nekih od tema je naveo kroz footnote, tako da
je u potpunosti zatitio autorska prava navedene literature.
Autor zahvaljuje menadmentima Mjeovite srednje kole Busovaa, direktoru Admiru Hodiu i
menadmentu Mjeovite srednje kole Vitez direktor Hrusti Seadu na razumjevanju i podrci za ovaj
projekat.

Neke ideje,sugestije i primjedbe koje su ugraene u ovu knjigu predloili su moji dragi prijatelji;
Dipl.prof. informatike Almin Halilovi,
Prof.informatike i matematike Junuz Junuzovi,
Dipl.ing.mainstva prof.abanovi Latif,
Prof.Haski Selvedin.




6
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





1.Openito o programima i programskim jezicima
S programiranjem se danas susreete posvuda - bilo da programirate snimanje na videorekarderu,
koristite mainu za pranje vea, vozite neki noviji automobil, koristite mobitel ili jednostavno
programirate na raunaru. Zahvaljujui programiranju svijet je danas podesiv i prilagodljiv.I zato je
dobro znati programirati. U ovom kratkom pregledu neemo odmah uskoiti u programiranje sistema
za nadzor svemirske letjelice, ali ete razumjeti na emu se programiranje zasniva i kako funkcionira.
1.1.Ljudi i raunari

Prosjeni raunar ba i nije pametna naprava . Ono nema mogunost samostalnog odluivanja,
zakljuivanja , nema ono po emu se ljudi razlikuju od svih ostalih - pamet i iskustvo.Da bismo
natjerali raunar da radi ono to mi elimo, moramo ga tome nauiti. Budui da raunari ne znaju
samostalno misliti , programeri moraju u njih ugraditi upustva koji im govore to trebaju raditi.U
situaciji slinoj programerovoj nalazi se roditelj kada svoje dijete eli nauiti jesti kaikom.Dijete je u
ovom sluaju, slino kao i raunar , "prazna ploa" - treba ga nuiti i najsitnijim detaljima. Dijete prvo
mora podii kaiku (ali da ne prospe njen sadraj), prinijeti je ustima, paziti da u kaici juha nije
prevrua , otvoriti usta, staviti kaiku u usta (a ne pored usta), progutati sadraj kaike (ali ne i
kaiku). Zapravo, ovo uope nije jednostavan postupak.Tako je i s raunarima. Njih takoer treba
nauiti da rade ono to bismo mi eljeli. No ovdje je problem malo vei nego s djetetom jer raunari
komuniciraju na razne naine - koriste, tj. razumiju razliite raunarske jezike.
Raunari oko nas
Danas se raunar nalazi u svakom novijem automobilu,u svakom mobitelu, ak i u najobinijem
televizoru ili videorekorderu. Svi ti ureaji u sebi sadre raunar koji ima je potrebno naloiti to da
rade. Tako e se televizor sam iskljuiti nakon nekog vremena,ako mu vi tako zadate, videorekorder e
u 20:15 snimiti utakmicu na drugom programu u trajanju od 120 minuta, maina za pranje rublja e
ukljuiti program za pranje osjetljivog rublja,a automobil e upotrijebiti neki od ugraenih sistema za
sprjeavanje zanoenja na cesti. Spomenimo i obine line raunare. Oni su sposobnI obavljati mnogo
kompliciraniji skup radnji nego raunari ugraenI u npr. kuanske ureaje. Unato tome, svi raunari
imaju jednu zajedniku injenicu - ne mogu samostalno zakljuivati i donositi odluke. Zato im
programer treba rei ta da rade. Programer to ini koristei poseban programski jezik i posebne
naredbe pomou kojih komunicira s raunarom i opisuje mu to i kako treba raditi .Raunarski program
je skup naredbi koji govori raunaru na koji nain da obavi odreeni zadatak. Tekst programa koji je
itljiv programeru i korisniku zove se izvorni kod programa, dok je izvrna verzija programa binarna, i
moe je itati i izvoditi samo raunar. Programski jezik je skup leksikih, sintaksnih i semantikih
pravila koja uobliuju strogu strukturu pisanja izvornog koda. Svaki program sastoji se od naredbi.
Naredbe se sastoje, u ovisnosti o programskom jeziku, od izraza, konstanti, identifikatora i
poziva.Openito postoji vie nivoa programskih jezika, i podijeljeni su u generacije jezika. Do danas
postoje jezici od prve do pete generacije, no to nije jedina podjela programskih jezika, oni se takoer
razlikuju po namjeni, nainu izvravanja, strukturiranosti i proceduralnosti.
1

1.2.Podjel a programskih jezika

1
Preuzeto i obraeno iz knjige Informatika i raunarstvo

7
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Podjela programskih jezika po namjeni:
Programski jezici za numerike probleme
Programski jezici za poslovne probleme
Programski jezici temeljeni na listama i nizovima
Vienamjenski jezici (u ovu skupinu spadaju .NET jezici)
Podjela po nainu izvoenja:

Imperativni postiu funkcionalnost pridruivanjem vrijednosti i njihovim ispitivanjem, te
skokovima (Ada, C, FORTRAN, Pascal)
Funkcionalni jezici ne postoji pridruivanje, temelje se na funkcijama i listama (Lisp, ML,
LOGO)
Ciljno orijentirani jezici temelje se na izvravanju upita, dok nain na koji se on izvrava
ostaje sakriven (Sql, Prolog)
Objektno orijentirani jezici temelje se na manipulaciji objektima (VB 6.0)
Hibridni jezici u ovu grupu spadaju .NET jezici i C++
Po strukturi ranosti jezi ci mogu bi ti strukturi rani i nestrukturi rani .
Po procedural nosti mogu bi ti procedural ni i neprocedural ni .
Podjela programskih jezika po generacijama generacijsku podjelu danas smatraju najbitnijom.

Jezici prve generacije temelje se na mainskom jeziku, tj. kodovima naredbi koje izvodi direktno
sam procesor. Programi su napisani u binarnim kodovima, i vrlo su neitljivi. Kasnije su dodani
simbolini nazivi naredbama, no skokovi su bili izvedeni prema hardverskim adresama koje su zadane
brojem.



Primjer programa u mainskom kodu:




8
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i







Zanimljivo je to se i danas svaki program na kraju svodi na ovaj nivo, jer to je jedini oblik programa
koji raunar razumije. Za prevoenje jezika vieg nivoa jezike nieg nivoa koriste se programi zvani
prevodioci ili compileri.
Drugu generaciju programskih jezika predstavljaju simboliki programski jezici ili Assembli. Od
jezika prve generacije razlikuje se u tome to su uvedena simbolika imena adresa (labeli) i
jednostavniji pristup adresiranjima putem mnemonikih kodova pojedinih naredbi. Mnenonik ili
mnemoniki kod je simboliki prikaz binarne naredbe, npr. Naredba 001011 predstavlja se
mnemonikom MOV.
Primjer programa pisanog u jeziku druge generacije:



Programski jezici tree generacije temelje se na proceduralnoj paradigmi, tj. program se izvodi
putem pozivanja procedura, osim samo jednostavnog dodjeljivanja vrijednosti i njihovog ispitivanja.
Ovakvi jezici prevode se u jezike niih nivoa da bi se mogli izvoditi, i esto jedna naredba jezika ovog
nivoa predstavlja mnogo naredbi jezika nieg nivoa. Uneseno je razrjeivanje izraza i prevodioc vri niz
analiza koje olakavaju pisanje programa i ispravljanja greaka.
U ovu grupu pripadaju jezici C, Pascal i drugi.
Primjer jezika pisanog u jeziku tree generaci:

9
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Jezici etvrte generacije temelje se uglavnom na objektno orijentiranoj paradigmi, te raznim
generatorima koda i korisnikim interfejsom. Ovi jezici su obino kombinacija raznih alata, tako da je
veina napornih i dugotrajnih postupaka automatizirana i pojednostavljena. U ovu grupu pripadaju
.NET jezici, Java, Delphi itd. Program napisan u jeziku etvrte generacije predstavlja alat za brzu i
jednostavnu izradu svih vrsta aplikacija.

Primjer aplikacije u jeziku 4. generacije:



Jezici pete generacije su uglavnom usko specijalizirani jezici koji esto kreiraju cijele aplikacije
potpuno automatski putem raznih Wizarda i slino. Razvoj ovakvih jezika je u poetnoj fazi.

2. Programski pristup

10
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





2.1. O proceduralnom programiranju

Za bilo koji problem vjerovatno postoji jednako puno naina da se isti analizira i rijei . Tako se sa
programerskog aspekta, na primjer, problem moe podijeliti (dekompozirati) algoritamski ili
proceduralno, tj. u odnosu na sekvencu ili proceduru dogaaja koji se moraju desiti. Alternativno,
problem se moe rijeiti pomou "objektno-orijentisanog"pristupa, posmatrajui razne cjeline koje
utjeu jedne na druge i uzimajui u obzir njihovo meusobno djelovanje. Ova dva pristupa u
dekompoziranju problema algoritamski i objektno-orijentisani su dva pristupa koji programeri
najee koriste. Pristupi su figurativno prikazani na Sl.2.1.
Algoritamski pristup poinje optim zadatkom koji treba izvriti (kao to je "omoguiti korisniku da
izvri opte bankarske funkcije"), zatim dijeli opti zadatak na naredne nivoe specificiranijih
podzadataka (kao to je "proces podizanja novca", te "proces stavljanja depozita"), te na dalje nivoe
jo specifinijih zadataka (kao to su "upitaj korisnika na vrijednost depozita" ili "verifikuj unesenu
vrijednost kao vaeu").


Slika 2.1: Dva pristupa u dekompoziranju problema


11
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Slika 2.2: Algoritamska dekompozicija problema

Kada se zadatak prikae u obliku dijagrama, najoptiji zadatak je obino na vrhu, a najspecifiniji
zadaci se granaju prema dnu. Razni pravougaonici u takvom "stablu" odgovaraju raznim procedurama i
podprocedurama koje treba programirati, kao to je prikazano na Sl.2.2.
Algoritamske ili proceduralne metode u dizajniranju softvera su razvijene u kasnim 60tim kako bi se
ukazalo na probleme u kojem se u to vrijeme nalazilo opte stanje u razvijanju softvera. Poto su novi
pristupi omoguili strukturni pristup programiranju (u odnosu na haotini "hack and run" pristup, koji
su koristili neki programeri), moe se naii i na podatak da se algoritamski ili proceduralni pristup
programiranju zove "strukturno programiranje". S obzirom da ovaj pristup poinje na vrhu (opti
zadatak koji treba izvriti) i dijeli najvii zadatak na naredne nivoe specifinijih podzadataka prema
dnu,ovaj pristup se ponekad naziva i "top-down" pristup. Neki autori ga zovu i proceduralni pristup,
imajui u vidu da se algoritamski pristup fokusira na procedure koje izvravaju zadatak. Dakle, ovaj
pristup dizajniranju softvera ima razliite nazive, i to:
Funkcionalna dekompozicija
Algoritamska dekompozicija
Strukturno programiranje
"top-down" programiranje
proceduralno programiranje
Bez obzira na naziv, ovaj pristup se fokusira na funkcionalnost programa,poinjui sa vrha (najoptija
funkcija), i idui prema dnu ka najspecifinijim funkcijama. Mnogi programeri i danas koriste ovaj
pristup, a jo uvijek je koristan za izradu kvalitetnih softvera , naroito za manje programe ili
softverske module. Bez obzira na injenicu da je C++ u osnovi OOP jezik, ovaj tekst se bavi osnovama
C++ sintakse u oblasti proceduralnog programiranja, kao uvod u OOP paradigmu.
Neproceduralno programiranje
Ovaj pristup programiranju temelji se na slijednom izvoenju nekog programa. Uglavnom se sastoji od
jednostavnog niza naredbi gdje je izvedeno grananje putem goto ili sline naredbe. Ne postoje pozivi
metoda i funkcija. Ovi jezici su zastarjeli i nedovoljno razvijeni za dananje potrebe.



Modularno programiranje

12
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Modularno programiranje omoguava fragmentaciju koda na module koji mogu biti pisani u razliitim
datotekama, i tako pojednostavljuje programe i poveava njihovu itljivost. Unesen je pojam dijeljenja
koda izmeu aplikacija.
2.2.Osnove faze razvoja programiranja

Analiza problema
Postavljanje modela
Izrada algoritma
Izrada dijagrama toka
Kodiranje programa
Prevoenje programa
Testiranje programa
Dokumentiranje programa
Eksploatacija programa
Svrha programa je rjeavanje problema, najei nain rjeavanja je pomou tri modela
model podataka
model procesa i
model resursa.
Model podataka sadri definiciju podataka (nazive, vrste, dimenzije, ogranienja vrijednosti...) te
strukture podataka (nizovi, skupovi, datoteke, tablice...).
Model procesa moe biti prikazan razliitim tehnikama (dijagram toka, dijagram strukture procesa,
dijagrami akcija....), ali svi oni, na svoj nain, prikazuju slijed odvijanja procesa.
Model resursa sadri definiciju raunarskih resursa i njihovih svojstva (operativni sistem, vrsta
programskog prevodioca, svojstva jedinica raunara...) koje su potrebne da bi program uredno radio.


















ema rijeavanja problema








MODEL
RESURSA
MODEL
PODATAKA
MODEL
PROCESA

13
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





3.Algoritmi
3.1.Uvod u algoritam
Priu o algoritmima zapoeti emo onako kako poinju sve klasine prie.Nekada davno ivio je u
Bagdadu pisac, matematiar, astronom i geograf po imenu Muhammed ibn Musa al Khowarizmi
.Vjerojatno nije niti sanjao tamo daleke 852. godine kada je pisao knjigu Kitab al jabr w'al-muqubala
da e od toga nastati ak dva uzroka glavobolje uenicima deset-jedanaest vijekova nakon toga.
Njegov al jabr je postala algebra. Isto tako pravila rjeavanja iz poetka prvenstveno matematiki
problema su iskrivljavanjem imena al Khowarizmi nazivana algoritmi. No, tu grekama nije kraj. Prema
korijenu rijei bilo bi pravilno umjesto algoritmi koristiti algorizmi. Ali kako jezik nije nauka nego skup
dogovora, izgleda da je dogovoreno da najee greke postaju jezika pravila.Tako mi danas imamo
algoritme, a oni su niz preciznih uputa koje nas korak po korak vode do rjeenja nekog problema.To su
zapravo toliko precizne upute da za njihovo izvravanje nije potrebna inteligencija.Zato bi se mi bavili
stvarima za koje ne treba nimalo pameti?Zato to izrada algoritma u programiranju prethodi samom
pisanju programa. Pri pisanju programa prvo nam mora biti jasno to se zapravo od programa
oekuje.Kao i kod rjeavanja zadataka u bilo kom podruju prvo moramo znati postaviti problem.Drugi
korak je gruba skica rjeenja.Trei korak je izrada algoritma. Ako smo dobro napravili algoritam, tada
pisanje programa nije nita drugo negoli prepisivanje algoritma u neki programski jezik.Kada smo to
uinili dobili smo program, a program "tjera" raunar da radi ono to mi zapravo elimo.Neko je rekao
da je raunar idiot velike brzine. To je ustvari bit prie o algoritmima. Mi put do rjeenja moramo toliko
rascjepkati i detaljno napisati da bi ga mogao razumjeti i taj "idiot velike brzine".Drugim rijeima,
upute moraju biti jednostavne i precizne tako da ih moe izvravati i maina. Pokuajte se sjetiti gdje
ste zadnji put proitali neko detaljno uputstvo. Moda vam je i bilo u rukama,ali niste itali jer to ve
znate napamet, kao npr.Dopuniti raun mobitela putem bona.Ili moda da probamo obrnuto. Da li ste
se nedavno nali u situaciji da niste neto znali napraviti jer su upute bile toliko loe i nerazumljive ili
uope niste imali upute? U svakodnevnom ivotu smo zapravo stalno u doticaju s algoritmima, a esto i
postupamo po algoritmima da toga nismo niti svjesni. Znati "algoritamski" razmiljati dobro je bez
obzira bavili se vi poslije programiranjem ili ne.

Pojam algoritama (dijagram toka) je jedan od najstarijih i najvanijih pojomova u matematici. Teko je
da se precizno definie algoritma, jer pripada grupi osnovnih pojmova kao to su skup ili taka. U
poetku algoritmom se nazivaju samo pravila raunanja s brojevima, kasnije i pravila obavljanja ostalih
zadataka u matematici, u XX vjeku, pojavom raunara, pojam se proiruje na informatiku, a zatim i na
druga podruja. Precizan opis svih pravila i postupaka potrebnih za postizanje eljenog rezultata. Evo
nekih definicija koje blie opisuju algoritam.
Definicija 1.
Algoritam je taan opte razumljiv propis koji definie proces transformacije poetnih podataka u
traeni rezultat.
Definicija 2.
Algoritam je taan propis o tome koje operacije nad kojim brojevima i u kom redosljedu treba izvriti
da bi se rjeili svi zadaci nekog zadatog tipa.



Definicija 3.

14
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Algoritam je precizan,ureeni i nedvosmisleni niz koraka koji u konanom vremenu vodi do rjeavanja
problema ako problem ima rjeenje,odnosno u konanom vremenu kae da nema rjeenja ako problem
nema rjeenja.

Definicija 4.
Algoritam je konani skup pravila koja daju redosljed operacija za rjeavanje specifinog problema.
Najbitnije osobine algoritma su:
Odreenost- je osobina algoritma da za iste poetne podatke daje uvjek iste rezultate.
Razumljivost. -algoritam treba da bude razumljiv ovo je relativni pojam i zavisi od nivoa
obrazovanja korisnika.
Masovnost- je osobina algoritma da se mogu rjeavati svi zadaci istog tipa.
Rezultativnost- je osobina algoritma da on mora da vodi ka rjeenju zadatka ako su poetni
podaci iz skupa moguih podataka.
Konanost- je osobina algoritma da se algoritam realizuje sa konano mnogo koraka. Pri tome
ta konanost treba da je ostvarljiva, tj. da moe da se realizuje za neko razumno vrijeme.



Primjer algoritma
Bilo koji problem se moe rijeiti izvravanjem serije akcija u odreenom redosljedu. Akcije koje e se
izvriti i redosljed u kojem e se to odvijati nazivamo algoritam. Iskustvo pokazuje da je najtei dio
rijeavanja programerskog problema na raunaru upravo razvijanje algoritma za rijeenje. Jednom kad
je odreen ispravan algoritam, razvoj programa za sam alorgitam je poprilino jednostavan.
Sljedei primjer pokazuje korektan i nekorektan sljed dogaaja za algoritam kojim elimo opisati
pokretanje automobila:





KOREKTAN SLIJED:

otkljuavanje automobila
sjedanje u automobil
paljenje motora
otputanje rune konice
pokretanje automobila
zaustavljanje

NEKOREKTAN SLIJED:

otkljuavanje automobila
sjedanje u automobil
paljenje motora
pokretanje automobila
zaustavljanje
otputanje rune konice


3.2.Dijagram toka (flowchart)

Dijagram toka je sredstvo za vizualnu prezentaciju toka podataka, operacija koje se izvode, te slijeda
(sekvenca) kojim se navedene operacije izvode u informacijskom sistemu. Crtanje dijagrama toka je
jedna od faza rjeavanja problema i uvelike olakava pisanje programskog koda. Pri crtanju dijagrama
toka potrebno je slijediti odreena upustva, te koristiti standardne simbole koje je propisao American
National Standard Institute.


Znaaj dijagrama toka

15
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Dijagram toka je reprezentacija kojom ilustrirate sekvencu operacija koje je potrebno izvriti kako bi se
dolo do rjeenja problema. Dijagram toka se crta u ranoj fazi formuliranja kompjuterskog rjeenja.
Dijagram toka olakava komunikaciju izmeu programera i poslovnih ljudi. Takoe,dijagram toka igra
znaajnu ulogu u procesu programiranja jer olakava razumijevanje logike kompliciranih i opsenih
problema. Jednom kad ste nacrtali dijagram toka postaje jednostavno napisati program u bilo kojem
programskom jeziku. Vrlo esto je nemogue objasniti logiku programa bez dijagrama toka. Osim
toga,dijagram toka je neizostavan dio dokumentacije bilo kojeg programa.
Smjernice za crtanje dijagrama toka
Za crtanje dijagrama toka koriste se standardni simboli. Neke od esto koritenih simbola moete
pogledati u sljedeoj tabeli:




16
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Za unos i ispis podataka vrlo esto se koristi paralelogram

Pravila za crtanje dijagrama toka:
Da bi ste nacrtali korektan dijagram toka, potrebno je napraviti popis svih zahtijeva.Dijagram toka
treba biti pregledan i jednostavna za pratiti.Dijagram toka treba biti jednoznaan (ne smije kod osobe
koja ga gleda izazivati vieznane konotacije).
Uobiajen smjer toka je s lijeva na desno ili odozgo prema dolje.U dijagramu toka kad je u pitanju
simbol za procesiranje moe postojati samo jedan izlaz
Podataka

Kad je u pitanju simbol odluke moe postojati samo jedan ulaz podataka, ali mogu postojati dva ili tri
izlaza podataka (jedan za svaki mogui odgovor).

17
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Terminalni simbol (start, kraj) takoder moe imati samo jedan ulazno, odnosno jedan izlazni tok
podataka.

Ukoliko elite jasnije opisati podatke ili korake koristite simbol za napomene/komentare
(annotation symbol).

Ukoliko je dijagram toka kompleksan bolje je koristiti simbole konektora kako bi ste
reducirati broj linija toka. Izbjegavajte presijecanje (krianje) linija.
Vodite rauna da vam dijagram toka ima logian poetak i kraj.
Prednosti
Prednosti dijagrama toka su:
Komunikacija(Dijagram toka olakava komunikaciju svih koji su zainteresirani za rjeavanje
problema).
Efektivna analiza(Uz pomo dijagrama toka problem se moe efektivnije analizirati).
Odgovarajua dokumentacija( Dijagram toka je dio obavezne programske dokumentacije, koja moe
sluiti u razliite svrhe).
Efikasno kodiranje( Korektan dijagram toka olakava pisanje programa (bez obzira u kojem
programskom jeziku).
Otklanjanje greaka( Dijagram toka olakava pronalaenje greaka).
Efikasno odravanje programa( Olakava odravanje programa).

Ogranienja
Kompleksnost Ponekad je problem kompleksan, pa je i dijagram toka kojim ga pokuavate predstaviti
kompleksan i nezgrapan.
Alternative i odravanje( U sluaju potrebe za alternativnim rjeenjima vrlo esto je neophodno
dijagram toka nacrtati ponovno (iz poetka).

3.3.Pravolinijska algoritamska struktura

18
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Iz osnovne kole sjeamo se da je brzina nekog tijela zapravo prijeeni put u jedinici vremena.
Matematiki bismo to zapisali kao V = s / t, gdje je V brzina, s prijeeni put i t vrijeme. To je tako
jednostavno da nam nije potrebna nikakva priprema i gruba skica rjeenja. Moemo odmah raditi
algoritam.



Za vjebu: Pokuajmo prema ovom primjeru nacrtati dijagram toka za izraunavanje povrine
pravougaonika, a zatim dijagram za izraunavanje obima pravougaonika.
Evo jo jednog primjera za izraunavanje obima i povrinu kruga. Kako na tastaturi nemamo na
raspolaganju grka slova, nau formulu za izraunavanje obima pisati emo kao

O = 2 * r * Pi.

Isto tako za sada jo ne znamo funkciju za kvadriranje pa emo formulu za povrinu kruga pisati
ovako:
P = r * r * Pi
gdje je r * r zapravo r
2
.

19
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i







Za vjebu: Po uzoru na obim i povrinu kruga, pokuajte algoritme za izraunavanje obima i povrine
pravougaonika spojiti tako da u jednom algoritmu bude i obim i povrina pravougaonika.
3.4.Grananje

Na alost, u stvarnom ivotu zbivanja ne teku tako jednostavno kao to su to pravolinijski algoritmi.
Ponekad treba stati, razmisliti, usporediti neke stvari i donijeti odluku kako dalje. Takovo mjesto u
algoritmu zove se grananje.

Simbol za grananje je romb. Obino se u gornji vrh upie upitnik i u sredini se
postavi logiki uvjet. Grananje uvijek ima jedan ulaz i najmanje dva izlaza. Ako
su samo dva izlaza tada je rije o jednostrukom grananju, a odgovori na
postavljeni logiki uvjet mogu biti DA i NE, odnosno T i F (true i false). Ako je
mogue vie odgovora tada je to viestruko grananje.
Primjer 1
Sjetimo se zadataka iz prethodne lekcije za izraunvanje brzine ako su poznati put i vrijeme:
V = s / t.
Ako se na raunaru dogodi situacija da dijelimo s nulom program e nam izbaciti greku. Da bismo
sprijeili "ispadanje" programa, prije izraunavanja brzine provjeriti emo da li je upisano vrijeme vee
od 0.





20
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Prepravite dijagram toka iz gornjeg primjera tako da ako upisano vrijeme t nije vee od nula da se na
grani NE ispisuje poruka 'Vrijeme mora biti vee od nula' i tek tada odlazi na kraj. Pojedine znakove ili
nizove znakova kao to je ova poruka u dijagramu toka piemo unutar navodnika koji ovisno o
programskom jeziku koji emo poslije koristiti mogu biti jednostruki ili dvostruki.
Primjer 2
Idemo rijeiti jo jedan zadatak. Prisjetimo se zadatka obima i povrine pravougaonika iz prethodnih
vjebi koji emo jo malo proiriti. Preko tastature upisuju se stranice pravouganika a i b. Treba
izraunati obim i povrinu pravougaonika te ispisati poruku o tome da li je upisani lik pravouganik ili
kvadrat.

21
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Da objasnimo:


Nakon to smo upisali stranice a i b,
izraunali smo obim O i povrinu P
pravougaonika.
Dobivene rezultate moemo odmah
ispisati.Kako emo utvrditi da li moda
upisane stranice pripadaju kvadratu?
Ako su stranice a i b jednake tada je to
kvadrat.
Ispisujemo poruke i odlazimo na kraj.
Kraj.



Primjer 3
Treba upi sati ci jel i broj a i i spi sati poruku da l i je upi sani broj paran i l i neparan.

Obratite panju na konstrukciju ispisa. Pogledati emo lijevu granu koja se izvrava ako je odgovor na
logiki uvjet NE. Imamo dio poruke u navodnicima 'Broj ' pa zatim odvojeno zarezom varijablu a i

22
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





nakon toga opet iza zareza drugi dio poruke u navodnicima 'je neparan.' Ako je upisan npr. broj 9 tada
e naredba za ispis 'Broj ',a,' je neparan' rezultirati porukom koja izgleda kao reenica u komadu: Broj
9 je neparan.
Primjer 4
Treba upisati dva broja a i b i ispisati poruku o tome koji je vei.


Stvar je zapravo vrlo jednostavna. Ali pokuajte sada zamisliti da neko upie dva ista broja, npr. 7 i 7.
U uvjetu emo imati pitanje da li je 7 vee od 7. Odgovor je NE. Izvriti e se lijeva grana i kao
rezultat dobiti emo poruku:
Broj 7 je vei od broja 7.
Ova poruka ba i nema logike i dokaz je da na raunar od milja zvani idiot velike brzine i ne
razmilja ba puno. Zato ljudi koji rade na razvoju informacijskih sistema moraju predvidjeti puno vie
situacija, pa i onih najekstremnijih koje bi se pri radu programa mogle dogoditi. Kau da dobra kontrola
podataka pri unosu sprjeava ak 90% greaka koje bi se naknadno u radu programa mogle dogoditi.
Zato emo mi rjeenje naeg zadatka malo promijeniti:


3.5.Petlje


23
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Naslov ove lekcije govori da sve ovo to smo do sada radili nije dovoljno zapetljano, pa emo stvari jo
malo dodatno zapetljati.
Nekada su nastavnici imali obiaj nestane uenike kanjavati tako da su im zadali 100 puta
napisati u biljenicu: "Neu nikada vie brbljati na asu informatike!". Zamislite da je nama neko dao
takvu kaznu. Mi emo se probati izvui tako da to raunar odradi umjesto nas. Treba mu samo zadati
da 100 puta ispie jednu te istu poruku. Nita jednostavnije. Evo rjeenja:

Hm, ve nakon tree upute raunaru da ispie
poruku sam odustao jer mi je dosadilo. Morate
priznati da ovo rjeenje ba i nije neto s ime bi
se mogli pohvaliti.
Pokuajmotoodraditina drugaiji nain:


Nakon to se i 100-ti puta izvre naredba grananja i naredbe ispod grananja i e postati 101. Tada je
odgovor na pitanje u grananju da li je i vei od 100 konano DA i tada bi program trebao zavriti s
radom. Dio programa, niz istih naredbi koje se ponavljaju dok je neki uvjet zadovoljen ili dok ne

24
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





postane zadovoljen, naziva se petlja. U naem se primjeru ispis poruke i poveanje varijable i za jedan
ponavljaju dok i nije postao vei od 100. Varijabla i je u naem primjeru broja jer svakim prolaskom
kroz petlju i postaje i vie 1.

Neki ljudi tvrde da napredak moemo zahvaliti samo ljudskoj lijenosti. Naime, ljudi e svata
izmisliti samo da ne moraju raditi. Tako je neko izmislio jo jednostavnije rjeenje za na primjer s
ispisom 100 poruka.

Pravougaonik ispod simbola za poetak je naredba for koja je sama po sebi petlja. Broja i kao i uvjet
ve su sadrani u naredbi pa ne moramo mi voditi brigu oko odbrojavanja. Taj red u algoritmu itali
bismo kao: "Za i koji ide od 1 do 100 uini slijedee:".
Broj ponavljanja u petlji za rjeenje odreenih problema se zna unaprijed, prije poetka
ponavljanja, a za neke se ne zna unaprijed, ve ovisi o izvravanju niza naredbi koje se ponavljaju. Za
sada emo se samo baviti petljama u kojima unaprijed znamo broj ponavljanja, dakle petljom for.
Koliko vremena vam treba da saberete sve brojeve od 1 do 100? Prava sitnica.

Za na zbir svih brojeva do 100 koristiti emo
varijablu zbir koju na poetku algoritma moramo
postaviti na vrijednost 0.


Za i koji ide od 1 do 100 treba uiniti slijedee:


Varijabli zbir dodati vrijednost varijable i koja je
u naem primjeru broja.

Svakim prolaskom kroz petlju i se poveava za 1 i njegova vrijednost pridodaje sadraju varijable zbir.
U prvom prolazu kroz petlju zbir je 0, a i je 1, pa prema tome zbir postaje 1. U drugom prolazu zbir
je 1, a i je 2. Zbir postaje 1+2, dakle sada je 3. I tako 100 puta.

Idemo jo malo zapetljati neto to znamo raunati jo od petog osnovne, a to je prosjek ocjena.
Prosjek je zbir svih ocjena podijeljen s brojem predmeta.

25
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Varijablu zbir koristiti emo za zbir svih
ocjena i moramo ju na poetku postaviti na
vrijednost 0.

Neka u prvom razredu imamo 15
predmeta. Varijablu i postavili smo na
poetnu vrijednost 1.

U prvom prolazu kroz petlju upisujemo
prvu ocjenu iz imenika, a to je bosanski
jezik. Ocjena se upisuje u varijablu
ocjena. Sadraj varijable ocjena se
dodaje u varijablu zbir.


U drugom prolazu upisujemo ocjenu iz drugog predmeta, u treem iz treeg i tako 15 puta. Po izlazu iz
petlje izraunavamo prosjek i ispisujemo ga.
Ovo je bilo prejednostavno da bi bilo stvarno. U stvarnom ivotu desiti e se da je neko npr.
osloboen nastave tjelesnog i zdravstvenog odgoja pa ima 14 predmeta. Neko moda ima 16 predmeta
jer je izabrao i fakultativnu nastavu. Isto tako u drugom, treem ili etvrtom razredu sigurno neete
imati 15 predmeta. Ve smo napomenuli da se programi piu im openitije tako da bi se mogli
primjenjivati za rjeavanje im vie slinih problema. Zato emo na algoritam prepraviti tako to emo
umjesto 15 uvesti varijablu brpred koja e predstavljati na broj predmeta.

26
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Nakon to smo varijablu zbir postavili na
poetnu vrijednost 0 treba preko tastature
unijeti broj predmeta koji se smjeta u
varijablu brpred.

Broja i u petlji sada broji od 1 do brpred
pa je primjenjivo za sve uenike i razrede s
razliitim brojem predmeta.

Da bismo dobili prosjek treba po izlasku iz
petlje zbir ocjena podijeliti s brojem
predmeta brpred.


Za vjebu: Pokuajte po uzoru na prosjek ocjena za jednog uenika napraviti dijagram toka za
izraunavanje prosjene ocjene razreda.


Jo nekoliko primjera petlji

Nakon postavljanja varijable zbir na
poetnu vrijednost 0 treba u upisati poetni
broj n i zavrni broj m od kojeg do kojeg
elimo ispisati i sabrati neparne brojeve.

Broja u petlji for sada broji od n do m


Da li je i neparan broj znati emo ako ga
podijelimo s 2 koristei operator mod i
dobijemo rezultat 1.

Ako ostatak je 1 tada ispisujemo i i
dodajemo njegovu vrijednost varijabli zbir.

to e se dogoditi ako neko upie za n vei broj nego za m?
Prepravite gornji algoritam tako da izraunava i zbir neparnih i zbir parnih brojeva od n do m.

27
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Uenici su na satu fizike nauili Ohmov zakon po kojem otpor u istosmjernom strujnom kola moete
izraunati tako da podijelite napon sa jakou struje:
R = U / I
gdje je otpor R, napon U i jakost struje I. Naueno su odmah provjerili mjerei veliine u strujnom
kolu, ako su mjerili napon i jakost mogli su po gornjoj formuli izraunati otpor, ako su mjerili otpor i
napon mogli su izraunati jakost struje I = U / R, a ako su mjerili otpor i jakost struje mogli su
izraunati napon U = I * R. Treba napraviti algoritam po kome je mogue za odreeni broj mjerenja
na temelju dvije izmjerene veliine izraunati treu. Za broj mjerenja emo koristiti varijablu brmjer.
Uvest emo jo jednu varijablu koju emo zvati izbor i dogovoriti emo se da u nju upiemo 1 ako
elimo raunati otpor, 2 ako elimo raunati napon i 3 ako elimo raunati jakost struje. Ako upisani
broj ne bude 1, 2 ili 3 ne treba poduzimati nita. Poto slovo I koristimo kao varijablu za jakost struje,
u petlji for emo ovaj puta kao broja upotrijebiti slovo k.

Ovaj primjer moe se daleko elegantnije rijeiti viestrukim grananjem.
Izrada algoritama zahtjeva puno vjebe. Algoritmi se ne mogu natrebati. Potrebno je rijeiti puno
primjera, od jednostavnijih do sve sloenijih.
Dijagram toka crtamo obinom olovkom s gumicom pri ruci. Stvari se rjeavaju u hodu,
mijenjaju, popravljaju i prepravljaju. Uoavaju se stvari koje se mogu pojednostavniti. Prednost
dijagrama toka je to je pregledan, lako se test primjerima moe "pjeice" provjeriti. Zanimljivo je i to
da vie ljudi moe napraviti na isti zadatak vie razliitih algoritama i da su svi dobri. Sloeni algoritmi
mogu se rastaviti na manje, tako rastavljeni rijeiti do detalja i onda prikazati kao rjeenje u

28
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





blokovima. Problemi se mogu lako analizirati, lako se uoavaju slinosti i razlike izmeu vie rjeenja i
odabire najbolje.
Moda nakon ovih vjebi vidite dijagrame toka i tamo gdje ih do sada niste uoavali - razliiti
shematski prikazi nekih postupaka, hodogrami nekih aktivnosti...
I na kraju to je bio cilj nae izrade algoritama - pisanje programa. Kada je jednom algoritam
gotov pisanje programa u nekom programskom jeziku je prepisivanje simbola iz dijagrama toka u
naredbe programskog jezika. Obino svaki simbol u dijagramu toka predstavlja jednu naredbu u
programu. Dijagram toka bi trebao biti dio svake dobre programske dokumentacije.
Uenicima je crtanje dijagrama toka ponekad nerazumljivo, a sve to je nerazumljivo je i
dosadno. Oni bi najradije sjeli za raunar i odmah pisali program. Kod jednostavnih problema to i
moemo napraviti. Ali kod sloenijih... Jednom sam sreo svog biveg uenika koji se u svom poslu
intenzivno bavi programiranjem. alio mi se da nekad nekoliko sati provede za raunarom
pokuavajui rijeiti neki problem, ali ne ide i gotovo. Pitao sam ga to tada uini. Odgovorio je: "Pa
uzmem olovku i papir i nacrtam algoritam..."


4.Pseudo jezik

Pseudokod je neoficijelan jezik koji pomae programerima u razvijanju algoritama.
Pseudokod nije programerski jezik.
Njegova svrha je rijeiti program prije pisanja u programerskom jeziku kao to je C++.
Pseudokod se sastoji jedino od izvrnih naredbi onih koje se izvravaju kada program iz
pseudokoda pretvorimo u C++ i pokrenemo.

Ne postoji ope prihvaena norma naina pisanja pseudo jezika ve svaki autor moe u naelu koristiti
svoj nain pisanja.

4.1.Varijable

Mjesto u memoriji rezervisano za pohranu podatka naziva se varijabla. Svaka varijabla ima ime koje ju
jednoznano odreuje kako bi se razlikovala od ostalih varijabli. Ime varijable se u pseudo jeziku moe
zadati proizvoljno, npr. x, a, TX, B_Pod, AmPe.
Vrijednost varijable
Varijabli se vrijednost pridruuje uz pomo operatora pridruivanja. Operator pridruivanja koji se
koristi u ovoj verziji pseudo jezika je znak (:=). Tim se operatorom varijabli pridruuje ili u varijablu
upisuje vrijednost.Npr.
izraz x:=3 se moe itati "varijabli x se pridruuje broj 3".
Kraj naredbe
Algoritam zapisan pseudo jezikom sastoji se od niza naredbi. Svaka naredba ove verzija pseudo jezika
zavrava znakom taka-zarez (;).







4.2.Operatori



29
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Operatori su simboli koji predstavljaju (zamjenjuju) odreene funkcije. Operatori se mogu svrstati u
grupe prema vrsti funkcije koju prestavljaju, npr.:


aritmetiki operatori,

logiki operatori,

operatori usporeivanja (relacijski operatori).

Za ispravno zapisivanje algoritma pseudo jezikom izmeu ostalog treba poznavati i znaenje pojedinih
operatora. Pri tom moe zbunjivati slinost izgleda operatora pseudo jezika i operatora kojima se
koristimo u matematici (ponekad izgledaju isto a imaju razliita znaenja).

Aritmetiki operatori

Opis Pseudo jezik Pascal C/C++
Sabiranje + + +
Oduzimanje - - -
Mnoenje * * *
Dijeljenje / / /
Cjelobrojno dijeljenje DIV DIV /
Ostatak cjelobrojnog
dijeljenja
MOD MOD %

Operatori sabiranja, oduzimanja i mnoenja se u pseudo jeziku koriste na uobiajen nain.
Kod poetnika zabunu mogu stvoriti tri razliita operatora dijeljenja. Osim operatora dijeljenja (/) koji
kao rezultat vraa vrijednost kolinika u obliku realnog broja tu su i operatori DIV i MOD.
Operator DIV vraa cjelobrojni dio dijeljenja dva cijela broja.
Operator MOD vraa cjelobrojni ostatak dijeljenja dva cijela broja.

Primjer upotrebe operatora dijeljenja:

x:= 5;
y:=2;
a:=x/y;
b:=x DIV y;
c:=x MOD y;

Rezultat e biti:
a=2,5 ;b=2;c=1 (5:2=2 cijela i 1 ostatak).
Logiki operatori

Logiki podaci su podaci koji mogu poprimiti samo jednu od dvije mogue vrijednosti. To su na primjer
true/false, da/ne, istina/la, 1/0. Varijabla u koju se pohranjuju podaci ove vrste moe poprimiti
vrijednosti true (1) ili false (0). Za rad s logikim podacima, postoje logike funkcije. Logike se
funkcije zapisuju logikim operatorima. Rezultat rada logikih operatora je podatak logikog tipa.




30
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Opis Pseudo jezik Pascal C/C++
Logiki I I AND &&
Logiki ILI ILI OR ||
Logiki NE NE NOT !



Tablica stanja operatora Tablica stanja operatora Tablica stanja operatora

I ILI NE




Primjer upotrebe logikih operatora:

Rezultati logikih operacija e biti:
e=0
f=1
g=1.









Operatori poreenja (relacijski operatori)

Dva se podatka mogu usporeivati. Ako je napisani izraz istinit, rezultat poreenja e biti 1 (true), a
ako nije, rezultat e biti 0 (false). Usporeuje se upotrebom operatora poreenja.



31
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Opis Pseudo jezik Pascal C/C++
Manje < < <
Manje ili jednako <= <= <=
Vee > > >
Vee ili jednako >= >= >=
Jednako = = =
Razliito <> <> !=


Primjer upotrebe operatora poreenja:

Rezultati usporedbe e biti:

a=1

b=1

c=0

d=0.
Kod poetnika zabunu moe stvoriti operator jednakosti (=). Operator jednakosti NE pridruuje
vrijednost varijabli ve samo provjerava da li je vrijednost njegove lijeve i desne strane jednaka.
Npr. Izraz
x=3 se moe itati: "da li je vrijednost varijable x jednaka 3?".
Tim izrazom se vrijednost varijable ne mijenja i ostaje kakva je bila i prije izraza. Operator jednakosti
ne mijenja vrijednost varijable.

Operator pridruivanja (:=) mijenja vrijednost varijable. Npr.:

Rezultat na kraju e biti:

x=3;a=0.


Redoslijed izvravanja operatora

Pri zapisivanju sloenih izraza pseudo jezikom vano je imati na umu redoslijed izvravanja operatora
(prioritet).


Redosljed izraavanja Operatori

32
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





1 ()
2 NE
3 */ DIV MOD I
4 + - ILI
5 <,<=,>=,<>,=



1.Primjer redoslijeda izvravanja operatora:


Svi su operatori ravnopravni, izraz se izvrava s lijeva u desno ovim redoslijedom:

1. 22 DIV 5 = 4
2. 4 * 11 = 44
3. 44 MOD 3 = 2 (ostatak dijeljenja 44/3)
4. x=2




2.Primjer redoslijeda izvravanja operatora:


Zagrade ponitavaju prioritete operatora pa se izvrava ovim redoslijedom:

1. 22 DIV 5 = 4
2. 11 MOD 3= 2
3. 4 * 2 = 8
4. x = 8

3. Primjer redoslijeda izvravanja operatora:

S obzirom na prioritete, operacije se izvravaju ovim redoslijedom:
1. 55 MOD 6 = 1
2. 3 * 4 = 12
3. 6 / 3= 2
4. 12 + 2 - 1 = 13
5. x = 13



4.3.Funkcije


33
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Izdvojeni nizovi naredbi koji ine logike cjeline a obavljaju tano utvrene zadatke nazivaju se
funkcije. Mogue je stvoriti vlastite funkcije pa ih zatim koristiti u svom programu ili koristiti ve
postojee i za upotrebu pripremljene funkcije. U ovoj verziji pseudo jezika od uenika se oekuje
poznavanje nekoliko pripremljenih matematikih funkcija.
Opis Pseudo jezik Pascal C/C++
Apsolutna vrijednost
realnog broja
Abs(x) Abs(x) abs(x)
Drugi korijen realnog
broja
Sqrt(x) Sqrt(x) sqrt(x)
Zaokruivanje ralnog
brojana najblii cijeli
broj
Round(x) Round(x) round(x)
Najvei broj manji ili
jednak od x
Trunc(x) Trunc(x) ceil(x)





























5.Kako zapoeti?


34
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Da bismo napravili program koji treba da obavi neki zadatak, neophodna su nam dva specijalizirana
programa: jedan koji koristimo da napiemo izvornu datoteku (editor), i drugi sa kojim dobijemo
izvrnu datoteku (kompajler).
Ova dva programa se najee kombiniraju u jedinstven paket - tzv. razvojno okruenje. Danas,
najpoznatije C++ okruenje predstavlja Microsoftov proizvod Visual C++ .NET. Meutim, ovaj, kao i
veina ovakvih programa, je komercijalan i nije dostupan svim korisnicima. Ipak, mogue je nai veliki
broj besplatnih C++ okruenja. Jedno od takvih okruenja je i Dev-C++ .

5.1.MS Visual C++

Nakon pokretanja MS Visual C++ razvojnog okruenja otvorit e se prozor programa. Ovisno o
podeenosti programa raspored i sadraj cjelina unutar prozora programa moe biti i drugaiji.

Slika 5.1.
Novi projekt se pokree naredbom File/New.Nakon odabira naredbe File/New otvara se prozor New u
kojem treba na kartici Projects odabrati vrstu projekta te zadati osnovne podatke za projekt.


35
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Slika 5.2.

U popisu projekata treba birati Win32 Console Application. Projektu treba dati ime (engl. Project name)
i mjesto pohrane (engl. Location). Nakon unosa potrebnih podataka otvara se prozor Win32 Console
Application Step 1 of 1.


Slika5.3.
Odabirom An empty project i klikom na dugmi Finish stvoren je i pohranjen novi projekt obiljeja
prikazanih u prozoru New Project Information.


Slika5.4.
Sada u stvorenom projektu (okviru za izradu programa) treba otvoriti novu datoteku izvornog
kda. Potrebno je kliknuti na karticu FileView, a potom oznaiti mapu Source Files koja se nalazi pod
nazivom projekta. Na kraju birati naredbu File/New.


36
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Slika 5.5
Otvorit e se prozor New u kojem treba na kartici Files izabrati vrstu datoteke. Bira se vrsta datoteke
C++ Source File.

Slika 5.6.

37
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Na kraju treba zadati ime datoteci (engl. File name). Izvorni kd programa C++ sprema se u datoteku
izabranog imena i nastavka cpp.
5.2.Programski paket Dev-C++

Najnoviju verziju programa mogue je nai na web stranici firme BloodshedSoftware
(http://bloodshed.net/download.html). Instalacija Dev-C++ programa ni u emu se ne razlikuje od
koritenja veine instalacionih datoteka u Windows okruenjima. Dovoljno je dvostrukim klikom
pokrenuti instalacionu datoteku (npr. devcpp-4.9.9.2 setup.exe) i pratiti
poruke na ekranu. Nakon zavretka ovog postupka, u traci sa alatima pojavljuje se ikona za pokretanje
programa Dev-C++ .
Korak po korak prvi program u Dev C++


Slika 5.7. Korak 1-pokretanje Dev C++

Slika 5.8. korak 2-kreiranje novog projekta


38
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Slika 5.9.korak 3- biranje praznog projekta


Slika 5.10.korak 4 spremanje projekta


39
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Slika 5.11.korak 5 mjesto za pisanje programskog koda



Slika 5.12. korak 6-pisanje programskog koda

40
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Slika 5.13.korak7 proces kompajliranja



Slika 5.14. korak8-pokretanje izvrne datoteke
Pitanja za utvrivanje:

41
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






1. Definii Algoritam?
2. Kako se jo naziva proceduralno programiranje i zbog ega?
3. Koje su najbitnije osobine algoritma?
4. Nabroj nekoliko programskih paketa koji omoguavaju pisanje i kompajliranje programa
napisanih u C++ ?
5. Programski jezik C++ pripada ........... jezicima.
6. ta je osnovna karakteristika proceduralnog programiranja?
7. ta je pseudo jezik?















6.Uvod u C++

C++ je vii programski jezik ope namjene. Ovo je kratka reenica sa dosta nerazumljivih ojmova.Prvi
od njih je programski jezik. Ljudi u svakodnevnom ivotu koriste govorne jezike, i bilo bi idealno kada
bi mogli na naem maternjem jeziku kazati raunaru da nam neto uradi, npr. Molim te nai mi
rjeenja kvadratne jednaine
x
2
+5x+6=0!.
To bi nam itekako olakalo ivot iz matematike, ali naalost stvari sa raunarima nisu jo uvijek tako
jednostavne, iako bi jednog dana mogle biti upravo takve. Govorni jezici ne koriste se za komuniciranje
sa raunarom jer su preobimni, dvosmisleni i neprecizni.
Tako npr. na ulazu u jedan ribnjak stoji natpis Gostima zabranjeno hraniti ribe!. Svima je jasno da se
misli na to da posjetioci ribnjaka ne smiju bacati hranu ribama, ali se reenica moe tumaiti i na nain
da se ribe ne smiju hraniti sa gostima! Takva reenica je sigurno dvosmislena.Primjer nepreciznosti se
moe vidjeti u reenici: Odi u prodavnicu i kupi mlijeko!. Na koju prodavnicu se misli? Koju masnou
mlijeka? Od kojeg proizvoaa?
Primjer preobimnosti jezika moemo nai u bilo kojem knjievnom djelu, gdje je ljepota izraavanja
poeljna, ali u informatici je to nepotrebno ako nema u sebi nekih korisnih informacija.Dakle
programski jezik je precizan i nedvosmislen jezik razvijen za komuniciranje i kontrolu nad
raunarom.Kae se da je C++ jezik ope namjene, to znai da nije specijaliziran u npr. matematike
ili neke druge svrhe.
C++ je vii programski jezik, ali to nema nikakve veze sa visinom, jer jezici nemaju visinu, niti
duinu.Ovo vii (eng. highlevel) stoji uz C++ jer postoje jezici i nieg nivoa (eng. lowlevel).Ako je jezik
vieg nivoa to ne znai da je automatski bolji od jezika nieg nivoa. To znai samo vei nivo apstrakcije
od mainskog jezika, koji je jedini jezik koji procesor razumije bez prevoenja. On se sastoji od nula i
jedinica i moe se rei da je za ljudska bia gotovo nerazumljiv i neupotrebljiv. Vei nivo apstrakcije
znai jednostavniji rad ali i manju kontrolu nad raunarom.

42
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





C++ je programski jezik za koji se slobodno moe rei da je C programski jezik sa dodatim klasama i
svim ostalim osobinama modernih jezika. Dokaz za to je i prvo ime ovog jezika koje je glasilo C sa
klasama! Tvorac C programskog jezika je Dennis Ritchie, koji je tad radio u AT&T Bell Laboratories. C
je nastao da bi zamijenio jezik B(postojao je i jezik A, a poetkom 2007 je izdat i jezik D) iji tvorac je
otac Unix operativnog sistema Ken Thompson i prvenstvena mu je namjena bila odravanje Unix
operativnog sistema. C je udan jezik koji ima osobine i viih i niih programskih jezika, pa kao takav
ima sve prednosti i mane takvih jezika. Da bi prevaziao mane i iskoristio prednosti C jezika, Bjarne
Stroustrup zaposlenik AT&T Bell Laboratories je razvio C++ programski jezik. Da li je u tome uspio ili je
samo jo doprinio zbrci oko u sutini vrlo snanog programskog jezika je rasprava koja se esto vodi u
programerskim krugovima.
6.1. Proces kompajliranja

Da bi se napisani program izvrio na raunaru(da bi ga koristili), potrebno ga je iz izvornog koda
(programa) prevesti u oblik koji procesor razumije tj. mainski jezik. Prevedeni oblik se najee naziva
izvrni ili objektni kod(program). Kada radite sa nekim programom na raunaru npr. sa Firefoxom
radite sa objektnim programom. Objektni program se zna nazivati i kompajlirani program, jer se
program iz izvornog oblika prevodi u objektni putem posebnih programa koji se nazivaju kompajleri ili
prevodioci. Pored kompajlera, da bi pravili vlastite programe potrebni su nam jo dvije vrste programa:
tekst editori i debuggeri. Tekst editor je program sa kojim piemo izvorni program, kao npr. Notepad ili
Vim. Kako programe piu ljudi, a oni su po svojoj prirodi skloni grekama, esto su nam potrebni i
programi koji nam pomau da takve greke otkrijemo i uklonimo. Takvi programi se nazivaju
debuggeri, a naziv im potie od engleskog naziva bug za greku u programu, dok je proces uklanjanja
greaka debugging.
Dakle, za pisanje izvornog koda nam treba editor. Za prevoenje tog izvornog koda u izvrni kod nam
treba kompajler, a da bi otkrili eventualne greke u svojim programima, esto nam zatrebaju
debuggeri.
Kako ovo znai da prilikom pisanja svoga programa trebamo koristiti tri razliite vrste programa, neko
se dosjetio da ta tri programa ujedini u jedan program. Takvi programi se nazivaju integrirana
razvojna okruenja ili IDE(Integrated Development Environment), a mi emo koristiti Blodshed
DevC++ IDE.


43
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i









Izvorni kod
Kombinacijom naredbi programskog jezika nastaje izvorni kod (engl. source code). Izvorni je kod
mogue pisati u bilo kojem programu za ureivanje teksta (engl. text editor). Danas se uglavnom
programi za pisanje izvornog koda objedinjuju u cjelinu sa prevodiocem i povezivaem (integrirana
razvojna okolina, IDE). Izvorni kod programa C++ sprema se u datoteku izvornog koda pod smislenim
imenom i nastavkom *.cpp
Izvrni oblik
Programi se mogu izvriti na raunaru samo ako su u binarnom obliku. Takav se oblik programa naziva
izvrni oblik (engl. executable). Izvorni se kod mora prevesti u izvrni. Prevodi se pomou programa
koji se nazivaju prevodioc (engl. compiler) i poveziva (engl. linker). Program prevodioc prevodi izvorni
kod iz vieg programskog jezika u mainski oblik te provjerava sintaksu napisanog izvornog koda. Ako
pronae pogreke (engl. compile-time error), ispisuje poruke i upozorenja o njima. Otkrivene pogreke
treba ispraviti pa ponovo pokrenuti program za prevoenje.
Prevoenjem nastaje datoteka objektnog koda (engl. object code), nastavka *.obj. Objektni kod nije
izvrni program i ne moe se direktno izvriti na raunaru. Objektni kod je meukorak do izvrnog
koda i uz ostalo omoguava ukljuivanje gotovih dijelova programa iz drugih datoteka.

Biblioteke
Datoteke koje sadravaju gotove dijelove programa nazivaju se biblioteke (engl. libraries). Takvi se
gotovi dijelovi programa mogu koristitit u drugim programima. Kada se koriste biblioteke vie nije
potrebno uvijek iznova zapisivati radnje (funkcije) koje se esto koriste. Takve se radnje u program
ukljuuju iz postojeih biblioteka. Npr. moe postojati biblioteka formula za izraunavanje povrina
geometrijskih likova ije formule mogu koristiti drugi programi.
Poveziva
Program koji povezuje objektnu datoteku s bibliotekama i drugim potrebnim
datotekama naziva se poveziva (engl. linker). Ako se pri povezivanju pojavi
greka (engl. link-time error), bit e ispisana poruka o tome.Greku valja
ispraviti pa ponovno pokrenuti prevoenje i povezivanje. Rezultat uspjenog
povezivanja je izvrna datoteka (*.exe). U naelu,izvrnoj datoteci nisu
potrebni nikakvi dodaci pa se moe izvravati i bez izvornog programa,
objektnih datoteka, prevodioca, povezivaa itd.



6.2.Rijei u C++ programskom jeziku


44
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Programski jezici koriste imena kako bi se oznaile razliite cjeline koje ine program. Osim imena
varijabli, ovdje spadaju i imena funkcija, tipova, te makroa. C++ postavlja sljedea pravila za pravilno
kreiranje imena (ili identifikatora). Ime traba da se sastoji od jednog ili vie karaktera, od kojih bilo
koji moe biti slovo (tj, slova engleske abecede a-z i A-Z), broj (0-9) i znak "_", priemu na prvom
mjestu ne moe da bude broj. Uz to, velika i mala slova se razlikuju, tako da se, na primjer, varijable
zarada i Zarada razlikuju.
C++ ne postavlja nikakvo ogranienje na broj karaktera u nekom identifikatoru. Meutim, veina
implementacija ima ovo ogranienje, ali je ono toliko veliko da ne predstavlja nikakav problem (npr. i
do 255 karaktera). Treba imati na umu da postoje odreene rijei u C++ koje su rezervisane, tako da
identifikatori ne mogu uzimati njihova imena.
Te rijei se nazivaju rezervisane ili kljune rijei i date su u tabeli:
Tabela 1: Kljune (rezervisane) rijei u C++


6.3.Struktura programa


//program koji ispisuje pozdravnu poruku komentar
#include<iostream> // zaglavlje standardne biblioteke
using namespace std;
int main() // zaglavlje funkcije
{
cout<<Sretan pocetak; // naredba tijelo funkcije funkcija
system(Pause);
return 0;
}
Objanjenje
Znak // oznaava komentar, kompajler potupuno ignorie sve od pojave znaka // pa do kraja
reda,svrha komentara je objanjenje korisnicima koji pokuavaju razumjeti ta program radi,komentar
je obino kratak,komentari su vrlo vani kod velikih programa gdje komentar treba da objasni o emu
se radi u pojedinim dijelovima programa.
#include <iostrem> prestavlja predprocesorsku direktivu kojom se oznaava da kompajler treba da
oita tzv.heder datoteku u kojoj se nalazi definicije, deklaracije funkcija i objekata za unos i ispis sa
standardnog ulaza odnosno izlaza.
using namespace std;ovom linijom koda definiramo podruje za imenovanje objekata.Naravno
poznato nam je da u jednom programu dva objekta ne mogu imati isto ime odnosno isti identifikator
jer e doi do kolizije i program nee raditi.
int main() je zaglavlje funkcije,svaki program u C++ mora imati najmanje jednu funkciju main glavna
funkcija.Funkcija koja e se prva izvriti kada program pone sa radom.U programskim jezicima
funkcija je potprogram koja vraa neki rezultat u navedenom primjeru funkcija int main vraa
cijelobrojni rezultat . Nakon zaglavlja funkcije dolazi tijelo funkcije koje poinje otvorenom vitiastom
zagradom {, a zavrava zatvorenom vitiastom zagradom }.Vitiaste zagrade koristimo kada imamo

45
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





skupinu naredbi koje ine jednu cjelinu.Tijelo funkcije sainjavaju naredbe svaka naredba zavrava
taka-zarezom; Naredbe su niz instrukcija koje govore raunaru ta treba da radi.
Cout je skraenica od consol out predstavlja objekat tzv. izlaznog toka podataka output stream koji je
povezan sa standardnim ureajima za ispis tpino ekran. '<<' prestavlja znak redirekcije odnosno
umetanja koji pojednostavljeno moemo itati kao alji Sretan pocetak na ekran to ustvari
predstavlja niz znakova koje aljemo na ekran, takav niz znakova nazivamo string. System("PAUSE");
zaustavlja izvrenje programa, kako bismo mogli vidjeti rezultat njegovog rada. Bez ove linije program
bi se nakon pokretanja izvrio, a konzola bi se zatvorila veoma brzo, tako da bismo imali osjeaj kao da
program nije nita ni uradio.
Return 0 znai da naa funkcija vraa cijelobrojnu vrijednost 0. } zatvrena vitasta zagrada zatvara
tijelo funkcije.


Primjer2;
1 #include <iostream>
2 using namespace std;
3 int main()
4 {
5 cout << " Sretan pocetak u C++ zeli Vam prof Smajo \n";
6 system("PAUSE");
7 return 0;
8 }


Naredba u datom primjeru alje string1 " Sretan pocetak u C++ zeli Vam prof Smajo " na tok
cout(output stream). Posljednji karakter u datom stringu (n) je karakter koji oznaava
novi red .Za istu svrhu moe se koristiti i funkcija endl, odnosno:
cout << " Sretan pocetak u C++ zeli Vam prof Smajo " << endl;
Tok (stream) je objekat koji izvrava ulazne i izlazne naredbe. Tok cout je standardni izlazni tok
(obino ekran) u C++ . Simbol << je izlazni operator (usmjeriva toka) kojem je lijevi operand izlazni
tok, a desni izraz. Ovaj operator upuuje desni operand na lijevi. Dakle, u ovom sluaju string "Sretan
pocetak u C++ zeli Vam prof Smajo /n" se alje na cout, tj. uzrokuje njegov ispis na ekranu i
pomjeranje usljedei red.

Slika 6.1. Izgled programskog koda i izvrne datoteke
Kompajliranje C++ programa obuhvata nekoliko koraka, koji su veinom nevidljivi za korisnika:

46
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Prvi korak, C++ predprocesor ide kroz program i izvodi instrukcije koje su specificirane
predprocesorskim direktivama (npr. #include). Rezultat ovoga je modificirani tekst programa koji vie
ne sadri nikakve direktive.
Drugi korak, C++ kompajler prevodi programski kod. Kompajler moe biti pravi C++ kompajler, koji
pravi osnovni (asemblerski ili mainski) kod,ili samo prevodilac, koji kod prevodi u C jezik. U drugom
sluaju, rezultujui C kod se zatim prevodi kroz C kompajler kako bi se napravio osnovni kod. U oba
sluaja, rezultat moe biti nepotpun zbog toga to program poziva podprogramske biblioteke koje nisu
definisane u samom programu.
Trei korak, linker zavrava objektni kod njegovim povezivanjem sa objektnim kodom bilo kojeg
modula biblioteka, koji program moe pozvati.
Konaan rezultat je izvrna datoteka.
6.4.Varijable

Varijabla je simboliko ime za memorijsku lokaciju u koju se mogu pohraniti podaci, koji se naknadno
mogu pozvati. Varijable se koriste za uvanje vrijednosti podataka tako da se iste mogu koristiti u
raznim proraunima u programu. Sve varijable imaju dvije vane osobine:
Tip, koji se postavlja kada se varijabla definie (npr. cijeli broj, realni broj, karakter, ...). Kada
se jednom definie, tip varijable u C++ se ne moe promijeniti.
Vrijednost, koja se moe promijeniti davanjem nove vrijednosti varijabli.
Vrsta vrijednosti koja se moe pridruiti nekoj varijabli zavisi od njenog tipa. Na primjer, cjelobrojna
varijabla (int) moe uzeti samo vrijednosti cijelih brojeva (npr. -5, 13, ...).
Kada se varijabla definie, njena vrijednost je nedefinisana sve dok joj se ne pridrui neka.
Pridruivanje vrijednosti nekoj varijabli po prvi put naziva se inicijalizacija. Neophodno je da se svaka
varijabla inicijalizira prije nego se koristi. C++ podrava dvije vrste inicijalizacije: (i) inicijalizaciju
kopiranjem (eng. copy-initialisation) i (ii) direktna inicijalizacija (eng. directinitialisation).
Inicijalizacija kopiranjem koristi znak jednakosti, =, dok se direktna inicijalizacija izvodi pomou malih
zagrada, (), kao u sljedeim primjerima:

int broj(10); // direktna inicijalizacija
int broj = 10; // inicijalizacija kopiranjem

U oba sluaja varijabla broj je inicijalizirana na vrijednost 10. Treba napomenuti da inicijalizacija ne
predstavlja pridruivanje (iako se u inicijalizaciji kopiranjem koristi znak jednakosti), nego se deava
onda kada se varijabla definie i kada joj se da poetna vrijednost. S druge strane, pridruivanje
predstavlja ponitavanje trenutne vrijednosti varijable i zamjene novom.
Takoer je mogue da se varijabla definie i inicijalizira u isto vrijeme,to je vrlo praktino. Naredni
primjer pokazuje razlicite naine definisanja i inicijaliziranja varijabli.

1 #include <iostream>
2 using namespace std;
3 main()
4 {
5 int a,b,c;
6 float x = 4.32;
7 int e,f,g;
8 char ime;
9 e = 4;
10 f = g = 12;
11 ime = C
12 }

Da objasnimo

Linije 5, 7 i 8 pokazuju primjere definisanja varijabli a, b, c, zatim e, f, g i ime, respektivno. Varijable
e, f i g su inicijalizirane linijama 9 i 10, a varijabla ime u liniji 11. Istovremeno definisanje i

47
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





inicijalizacija data je u liniji 6 za varijablu x. Na kraju, treba napomenuti da veina autora proces
definisanja varijabli poistovjeuje sa procesom deklarisanja. Meutim, neki autori prave razliku izmeu
ovih pojmova. Naime, zbog situacija u kojima se u vie datoteka jednog te istog programa pristupa
istoj varijabli, C++ razlikuje pojmove definisanja i deklarisanja. Tako, definisanje varijable predstavlja
alociranje prostora za nju, te moguu inicijalizaciju. U jednom programu moe biti samo jedna
definicija varijable. S druge strane, deklaracija upoznaje program sa tipom i imenom varijable.
Definicija je time i deklaracija. Deklarisanje se izvrava na taj nain da se ispred tipa doda kljuna rije
extern. Sljedei primjer pokazuje razliku izmeu definisanja i deklarisanja neke varijable:
extern int broj; // deklarise ali ne i definise broj
int broj; // deklarise i definise broj
Osnovna razlika je u tome da se sa extern, odnosno procesom deklaracije,ne alocira prostor za datu
varijablu, nego samo upuuje na to da je varijabla definisana negdje u programu.
6.5.Memorija
Za pohranjivanje izvrnog koda kao i podataka sa kojima program manipulira,kompjuter ima na
raspolaganju RAM memoriju (eng. Random AccessMemory). Pri tome, memorija se moe zamisliti kao
neprekidan niz bita, od kojih svaki moe da pohrani binarni broj (0 ili 1). Memorija se obino dijeli na
grupe od 8 uzastopnih bita (ovo predstavlja bajt). Bajtovi su uzastopno adresirani, tako da je svaki bajt
jedinstveno predstavljen svojom adresom .C++ kompajler generie izvrni kod, koji mapira ulazne
veliine na memorijske lokacije. Na primjer, definicija varijable
int zarada = 500;
navodi kompajler da alocira nekoliko bajta kako bi predstavio varijablu zarada.


Slika 2.5.1.Organizacija memorije u kompjuteru
Taan broj bajta koji je alociran i metoda koja se koristi za binarnu reprezentaciju cijelog broja zavisi
od specificnosti C++ implementacije. Pretpostavimo,na primjer, da se radi o 2 bajta. Kompajler koristi
adresu prvog bajta na koju se alocira zarada kako bi oznaio varijablu. Prethodna jednakost uzrokuje
da se vrijednost 500 pohrani u ova dva bajta koja su alocirana (Sl.2.5.2)

48
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Slika 2.5.2: Reprezentacija cijelog broja u memoriji
6.6.Ulazno-izlazni tokovi

Treba napomenuti da je organizacija memorije i koritenje adresa koji se odnose na podatke veoma
vano za programera, dok tana binarna reprezentacija podataka koje on koristi to nije.Da bi program
bio koristan, mora komunicirati s ulazno/izlaznim ureajima (tastaturom, monitorom, diskom i sl.).
Komunikacija s ulazno/izlaznim ureajima se u programu C++ ostvaruje ulazno-izlaznim tokovima
(engl. input and output streams).
Svaki program prima podatke posredstvom ulazno-izlaznih tokova i rezultat predaje okolini
posredstvom ulazno-izlaznih tokova. S gledita programa sasvim je svejedno o kojem je ulaznom ili
izlaznom ureaju rije pa se svi podaci u program unose i iz programa predaju okolini na isti
nain.Ulazno-izlaznim tokovima se rukuje funkcijama biblioteka iostream.
Biblioteka iostream
iostream je biblioteka koja sadri niz ulazno-izlaznih funkcija koje omoguavaju rukovanje ulazno-
izlaznim tokovima. Dvije funkcije koje su najee u upotrebi su cout i cin.
Cin ulazni tok

Funkcija cin usmjerava podatke s tastature na ulazni tok. Podaci se u ulazni tok umeu operatorom
unosa (>>).
Primjena funkcije cin
cin>>x; Program oekuje unos podataka s tastature koji
e biti pohranjen u varijablu x.
cin>>a>>b; Program oekuje unos sa tastaturekoji e bit
pohranjen u varijablu a i b
cout<<34<<mogu je i ispis niza znakova; Mogue je ulanavanje operatora unosa koji se
izvodi s lijeva na desno.

Posljedica funkcije unosa cin je prekid izvrenja programa sve dok se ne unese podatak i pritisne tipka
Enter (program "eka" da korisnik upie podatak). Vie ulaznih podataka moe se upisati u istome
redu, odvojeni prazninama (tek na kraju treba pritisnuti tipku Enter).



49
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Cout izlazni tok
Funkcija cout usmjerava podatke s izlaznog toka na ekrana monitora. Ispis podataka se ostvaruje
operatorom ispisa (<<).
Primjena funkcije cout
cout<<17; Ispisat e broj 17
cout<<Mogu je ispis znakova; S desne strane operatora ispis moe biti bilo koji
tip podataka.U primjeru e se ispisati tekst unutar
navodnika.
cout<<15<<a<<Mogu je i ispis niza znakova; Mogue je ulanavanje operatora unosa koji se
izvodi s lijeva na desno.Ispisat e se redom jedno
iza drugog;15,vrijednost varijable a,i tekst
naveden unutar navodnih znakova.

endl
U prethodnom bi se primjeru svi podaci ispisali u istome redu. Ako korisnik eli pregledniji ispis, tj.
nakon zavrenog ispisa jednog podatka pokaziva prebaciti na poetak sljedeeg reda treba koristiti
konstantu endl (takoer pohranjenu u biblioteci iostream).
Upotreba konstante endl
cout<<34<<endl;
cout<<a<<endl;
cout<<Mogu je i ispis niza znakova<<endl;
Cout<<34<<endl<<a<<endl<<Mogu je ispis niza znakova;
U oba primjera rezultat(ispis) e biti isti:
34
a
Mogu je ispis znakova

6.7.Komentari
Komentar je dio opisnog teksta koji objanjava neke aspekte programa. Kompajler u potpunosti
ignorie komentare u programu, tako da je jedina svrha koju komentar ima, da pomogne onome koji
ce itati program. C++ daje dvije mogunosti pisanja komentara:
bilo ta napisano nakon //, pa do kraja date linije smatra se komentarom3,
i
bilo ta napisano izmeu /* i */ smatra se komentarom.
Sljedei primjer pokazuje upotrebu oba naina pisanja komentara.
#include <iostream>

50
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





2 using namespace std;
3
4 /* Ovaj program racuna ukupnu platu radnika,
5 koja se zasniva na ukupnom broju radnih sati i satnici. */
6
7 int main (void)
8 {
9 int radniDani = 22; // Broj radnih dana u mjesecu
float radniSati = 7.5; // Broj radnih sati u danu
11 float satnica = 33.50; // Satnica
12 float plata; // Ukupna mjesecna plata
13
14 // Racunanje i ispis plate
15
16 plata = radniDani * radniSati * satnica;
17 cout << "Plata = " << plata << \n;
18 }

Prvi nain se moe koristiti za komentar jedne i samo jedne linije (ili dijela jedne linije), kao to je to
demonstrirano u linijama 14 (cijeli red), te linijama 9-12 (dio reda). Drugim nainom se (koristei /* i
*/), pak, moe komentarisati tekst upisan u vie linija (linije 4-5).
6.8.Imena (identifikatori)
Programski jezici koriste imena kako bi se oznaile razliite cjeline koje ine program. Osim imena
varijabli, ovdje spadaju i imena funkcija, tipova, te makroa. C++ postavlja sljedea pravila za pravilno
kreiranje imena (identifikatora):
ime treba da se sastoji od jednog ili vie karaktera, od kojih bilo koji moe biti slovo (tj, slova
engleske abecede a-z i A-Z), broj (0-9) i znak " ", pri emu na prvom mjestu ne moe da bude
broj.
velika i mala slova se razlikuju (zarada nije isto to i Zarada).C++ ne postavlja nikakvo
ogranienje na broj karaktera u nekom identifikatoru.
Meutim, veina implementacija ima ovo ogranienje, ali je ono toliko veliko da ne predstavlja nikakav
problem (npr. i do 255 karaktera). Ipak, treba imati na umu da postoje odreene rijei u C++ koje su
rezervisane, tako da identifikatori ne mogu uzimati njihova imena. Te rijei se nazivaju rezervisane
ili kljune rijei i neke od njih su date u Tabela 1: Kljune (rezervisane) rijei u C++.
Pored navedenih pravila o davanju imena varijablama, postoji i veliki broj prihvaenih konvencija, koje
se uglavnom koriste radi lakeg praenja programa.
Neke od vanijih su:
imena varijabli se obino piu malim slovima

51
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





za davanje imena se obino koriste mnemonika imena, tj. imena koja poblie opisuju varijablu
ime moe da ima i vie rijei, koje su obino razdvojene donjom crtom,ili su direktno povezane
sa poetnim velikim slovom rijei koja se dodaje imenu.
No, bez obzira na konvencije, opte je pravilo da se jedna odreena konvencija konstantno koristi.

6.9.Tipovi podataka
2


6.9.1.Organizacija numerikih brojeva u raunarskoj memoriji
Brojni sistemi
Da bi shvatilli tipove podataka neophodne za uenje programskog jezika,potrebno je osvrnuti se na
organizaciju numerikih podataka u raunarskoj memoriji.
Prvi pojam koji je potrebno savladati je brojni sistem.
Postavimo pitanje:ta predstavlja broj 342,i po emu se on razlikuje od brojeva 423 i 234 koji su
sastavljeni od istih cifara? Poznato je da svaka cifra unutar broja ima odreenu "teinu" (ovisno o
poziciji unutar broja) ,te moemo rei da je broj 342 skraeni zapis sljedeeg broja:

Ako o razmislimo zato je baza 10, shvati emo da ovakav izbor nema posebnog argumenta. Jedini
razlog je zapravo historijski zbog injenice da ovjek ima 10 prstiju i da je shvatio da za brojeve vee
od deset ne moe vie raunati na prste,nego mora izmisliti neki nain zapisa veih brojeva.
Brojni sistem s bazom 10 naziva se decimalni ili dekadski brojni sistem.
Baza je mogla biti bilo koji broj,jer se lako moe dokazati da se pozitivan broj moe zapisati u obliku.

U digitalnim elektronskim sklopovima(u koje spadaju i raunari) brojni sistem sa bazom 10 se pokazao
nepogodnim za praktinu realizaciju.Baza 2 je,s druge strane,bila mnogo "laka" za implementaciju;
jer se dvije znamenke-0 i 1-mogu predstaviti kao "odsustvo" i prisustvo"neega(npr.ima struje-nema
struje ).
Ovaj brojni sistem od svega dvije znameke naziva se binarni.
Pokuajmo predstaviti neki broj u binarnom brojnom sistemu(po bazi 2).
npr.142=128+14=128+8+6=2
7
+2
3
+2
1
=(10001110)
2

Dakle, 142 se u binarnom brojevnom sistemu pie kao 1001110.Gore opisana metoda pretvorbe
brojeva iz dekadskog u binarni brojni sistem nije pogodna za pretvaranje veih brojeva.


2
Preuzeto i obraeno Diplomski rad Poreenje Pascala i C++ u nastavi Smajo Mekic

52
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Standardna metoda za pretvaranje,zasniva se na uzastopnom dijeljenju broja sa 2 ispisivanjem
ostataka, sve dok se ne doe do kolinika 0,ostaci dijeljenja,proitani redom odozdo na gore,
predstavljaju traeni binarni broj.
142 0
71 1
35 1
17 1
8 0
4 0
2 0
1 1
0


U C++ su ugraeni prosti i sloeni tipovi podataka,ovdje emo objasniti proste tipove podataka.
6.9.2.Brojevi

U C++ su ugraena dva osnovna tipa brojeva, i to: cijeli i realni brojevi.
Cijeli brojevi
Cijeli broj (engl. integer) se moe definisati pomou tipova short, int i long.
Jedina razlika je u tome to int koristi vie ili barem isto bajta kao short, a long koristi vie ili barem
isto bajta kao int . Ovo zavisi od kompjutera na kojem se radi.Konvencija je da cjelobrojne varijable
uzimaju u obzir i pozitivne i negativne brojeve (tada se kae da su oni tipa signed). Meutim, u sluaju
kada se koriste samo pozitivne vrijednosti, ukljuujui i 0, koriste se sa predznakom unsigned.Ovo
vrijedi i za realne brojeve.
Najee se pri definisanju cijelih brojeva koristi tip int, koji u kompjuteru obino zauzima 4 bajta
(mada kod nekih starijih kompjutera zauzima 2 bajta).
S obzirom da 4 bajta predstavlja 4*8 = 32 bita, i da prvi bit odreuje predznak broja, preostaje nam
31 bit da pohranimo vrijednost nekog broja. Na taj nain se tipom int mogu pohraniti svi brojevi vei
od najmanjeg negativnog broja
-2
31
= -2147483648
i manji od najveeg mogueg pozitivnog broja
-2
31
1 = 2147483647
Treba napomenuti da se cjelobrojne veliine u izvornom kodu mogu prikazati u jednom od tri brojna
sistema, i to: dekadskom, oktalnom i heksadecimalnom.
Pri tome, naravno, dekadski brojni sistem je sistem brojeva od 0-9,oktalni 0-7, i heksadecimalni (0-9,
A-F).
U jeziku C++ oktalne vrijednosti se piu tako da se ispred prve cifre broja napie broj 0, nakon ega
slijedi oktalni zapis broja, kao npr.

int broj = 010; // broj 8 u dekadskom zapisu
U sluaju heksadecimalnog zapisa u C++ , ispred broja se pie 0x ili 0X,tj.
int broj = 0x0C; // broj 12 u dekadskom zapisu
Ipak, bez obzira koji od prikaza koristimo pri pridruivanju neke vrijednosti,na ekranu se ispisuje broj u
dekadskom brojnom sistemu.
Tako u sljedeem primjeru za svaki sluaj ispis je jednak broju 32:

int broj = 32; // broj 32 u dekadskom zapisu
cout << broj; // ispis 32
int broj = 040; // broj 32 u oktalnom zapisu
cout << broj; // ispis 32

53
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





int broj = 0x20; // broj 32 u heksadecimalnom zapisu
cout << broj; // ispis 32

Realni brojevi
Da bismo operisali sa realnim, tj. decimalnim, brojevima moemo koristiti varijable tipa float i double.
Tip double koristi vie bajta i time omoguuje vei opseg i veu tanost pri predstavljanju realnih
brojeva.
Naredni primjeri pokazuju upotrebu tipa float (analogno je za ostale tipove koji predstavljaju realne
brojeve):
float pi = 3.1415926;
float brzinaSvjetlosti = 2.997925e8;
float naboj = -1.6E-19;

U prvom sluaju koristi se klasini nain prikaza broja sa decimalnim zarezom,dok je u drugom i
treem sluaju koriteno nauno oznaavanje (eng.scientific). Pri tome, u naunom oznaavanju je
mogue koristiti i malo i veliko slovo "e", ali ne smije biti nikakvih praznina unutar broja (izmeu cifri i
slova e, te iza predznaka).
U sluaju da nam tanost na sedam decimala nije dovoljna, koristimo brojeve sa dvostrukom tanou,
tj. brojeve tipa double. U principu, za prikaz decimalnih brojeva najbolje je uvijek koristiti tip double,
jer je brzina obavljanja operacija sa ovim tipovima na dananjim kompjuterima podjednako velika
kao i sa tipom float.
Ogranienja brojevnih tipova

Kao to je pokazano u dijelu o cijelim brojevima, na osnovu veliine memorije koju neki brojevni tip
zauzima, mogue je odrediti maksimalan i minimalan broj koji se sa njim moe prikazati. O tome kako
se odreuje veliina memorije koju zauzima neki objekat ili tip.
Ipak, koritenjem datoteka climits(Datoteka mora biti pozvana naredbom #include), za cjelobrojne, i
cfloat, za decimalne brojeve, mogue je nai ove vrijednosti. Na primjer, konstante INT_MIN i
INT_MAX daju najmanju i najveu vrijednost brojeva tipa int. Sline konstante postoje i za ostale
tipove, a sljedei dio programa daje njihovu primjenu:

cout << "Najmanji int: " << INT_MIN << endl;
cout << "Najveci int: " << INT_MAX << endl;
cout << "Najmanji long: " << LONG_MIN << endl;
cout << "Najveci int: " << LONG_MAX << endl;
cout << "Najveci float: " << FLT_MAX << endl;
cout << "Najmanji double:" << DBL_MIN << endl;


Simbolike konstante
Prethodni brojevni tipovi se koriste za definisanje varijabli koje mijenjaju svoju vrijednost u toku
izvravanja programa. Meutim, u C++ je mogue definisatii konstante, tj. veliine koje ne treba da
mijenjaju svoju vrijednost u toku izvrenja programa. Takve su na primjer, vrijednost brzina
svjetlosti, naboj elektrona, itd.Osnovni razlog zbog koritenja simbolikih konstanti je osiguranje od
promjene njihove vrijednosti. Naime, moe se desiti da u toku pisanja programa napiemo naredbu
koja mijenja vrijednost konstante (npr. broja ) i na taj nain napravimo veliku greku u daljem
proraunu.
Kako bismo izbjegli ovakve probleme, na raspolaganju nam je kvalifikator const, koji nam govori da se
radi o varijabli koja ne mijenja svoju vrijednost.
Ovaj kvalifikator se koristi na taj nain da se postavlja ispred tipa varijable, kao u primjeru:
const float pi = 3.1415926;
Ako bismo pokuali promijeniti vrijednost varijable pi (na primjer sa pi = 2*pi;) kompajler bi prijavio
greku.
Drugi nain definisanja neke konstante je pomou predprocesorske naredbe #define, kao u:
#define PI 3.1415926

54
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Jedina razlika u koritenju ova dva pristupa je u tome to varijanta sa const omoguuje i simboliko
lociranje pogreaka pri debagiranju, dok to nije mogue sa drugom varijantom.
Takoer, bitno je napomenuti da se sve simbolike konstante moraju i inicijalizirati prilikom definisanja,
tj. pogreno je napisati:
const float pi; // greka!!!

Logiki tipovi
Logiki tipovi su vrlo kasno uvedeni u standardni jezik C++ . Prije nego se uveo tip za ovu vrstu
podataka, bool (od engleske rijei boolean, po matematiaru Booleu), u ovu svrhu su se koristili cijeli
brojevi 0 i 1 (mada se umjesto 1 mogao koristiti bilo koji broj razliit od 0).
Osnovna karakteristika logikih tipova je da mogu imati dvije vrijednosti,i to: tano i netano (eng.
true i false). Primjer definisanja logikih varijablije:
bool jaSamUcenik = true;
bool autoLeti = false;
Prilikom manipulisanja sa logikim varijablama (ispis, aritmetike operacije,i sl.), oni se predstavljaju
cjelobrojnim tipom int, i to: true se pretvara u 1,a false u 0. No, logikim varijablama se mogu
pridruiti i aritmetiki tipovi,tako da se svim brojevima razliitim od nule pridruuje true, a jednakim
nuli
false.

Karakteri (znakovi)

Varijabla karakter (znak) se definie tipom char (od engleske rijei character -karakter, znak) i
uglavnom se pie kao samo jedan znak upisan izmeu jednostrukih znaka navoda . Ona obuhvata
jedan jedini bajt koji sadri kod datog karaktera. Ovaj broj je numerika vrijednost i zavisi od sistema
kodiranja karaktera koji se koristi (to je zavisno od kompjutera). Najei sistem je ACSII
(eng. American Standard Code for Information Interchange). Na primjer,karakter A ima ASCII kod 65,
a karakter a 97.
Kao i cijeli broj i karakter moe da bude signed i unsigned. Tako, signed karakter moe da sadri
numerike vrijednosti izmeu -128 i 127, a unsigned 0do 255.
Sljedei primjer pokazuje upotrebu tipa char za jednoznakovne varijable:



Pri pokretanju, ovaj program se nastavlja ako se unese bilo koji drugi karakter osim k ili K. Ako se,
pak, unese k ili K, program se zaustavlja. Problem nastaje ako korisnik programa pritisne samo tipku
ENTER. U tom sluaju objekat cin oekuje da se unese neka vrijednost, pa tek onda pritisne ENTER.
#include <iostream>
2 using namespace std;
3 main()
4 {
5 char ch;
6 do
7 {
8 cout << "Pritisnite K ili k za kraj,
9 a bilo koju tipku za nastavak \n";
10 cin >> ch;
11
12 if (ch != K && ch != k)
13 cout << "Zelite nastaviti?\n";
14 else
15 cout << "Kraj programa";
16 }while (ch != K && ch != k);
17 }

55
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Osim klasinih karaktera (slova i sl.), postoje i karakteri koji imaju posebnu namjenu (ne predstavljaju
karaktere koji se ispisuju). Oni se predstavljaju pomou tzv. escape-sekvenci, kao npr:
\n - novi red
\t - novi tabulator
\v - novi vertikalni tabulator
\b - backspace
\ - znak navoda (apostrof)
\" - dvostruki znak navoda
\\ - backslash (/)
\a - zvuni signal
Znakovne varijable se, ipak, najee koriste kao nizovi karaktera (eng. string)za ispis tekstova.


Pitanja za utvrivanje:
1. Da li je mogue definisati vie varijabli jednom naredbom? Ako jeste,
dati primjer.
2. Koja je razlika izmeu tipova podataka unsigned int i int?
3. Koja je uloga include direktive?
4. Koliko main funkcija moe biti u programu?
5. ta predstavlja varijabla?
6. ta radi kompajler?
7. ta radi linker?
8. ta radi predprocesor?
9.ta je od navedenog ispravna definicija varijable:
a. int n=-100;
b. unsigned int i =-100;
c. signed int = 2.9;
d. long m=2,p=4;
10.Koje od navedenih rijei predstavljaju pravilne nazive varijabli:
a. identifier
b. dva 15
c. ukupna-plata
d. ukupna_plata
e) default
f) proc.program
11. Definii varijable koje predstavljaju sljedee veliine:
a. visina neke osobe
b. zarada neke osobe
c. broj rijeci u rjeniku
d. slovo u abecedi
12. Dati primjer starog (jedan red) i novog naina pisanja komentara.
13. Koju datoteku (header file) moramo pozvati u izvornoj datoteci da bi se koristile cout i cin?
14. Napisati naredbu koja dobiva numeriku vrijednost sa tastature i pridruuje je varijabli temp.
15. Kako se definiu brojevi u C++ ?
16. Kako se definiu znakovi u C++ ?
17. Kako se u C++ definiu logike varijable?


7.Operatori

56
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





C++ nudi operatore za izvravanje aritmetikih, relacijskih, logikih,bitovnih i uslovnih izraza.
Takoer, tu su i veoma korisne "popratne pojave" (eng. side-effect) kao to su pridruivanje,
inkrement i dekrement.



7.1.Aritmetiki operatori

C++ nudi pet osnovnih operatora, koji su sumirani u Tabeli.
Osim ostatka pri dijeljenju (%) svi aritmetiki operatori prihvataju mijeanje cijelih i realnih brojeva.
Openito, ako su oba operanda cijeli brojevi,i rezultat je cijeli broj. Meutim, ako je jedan od
operanada realan, onda je i rezultat realan (na primjer, tipa double; Ovakav nain konverzije u C++
naziva se implicitna konverzija).
Kada su oba operanda pri dijeljenju cijeli brojevi, rezultat je takoer cijeli broj (tzv. cjelobrojno
dijeljenje). U tom sluaju rezultat se zaokruuje na donju vrijednost, tj..

9/2 daje 4, a ne 4.5!
-9/2 daje -5, a ne -4.5!
ak i u sluaju kada je rezultat dijeljenja definisan kao realan broj, kao u sljedeem primjeru

int cijena = 100; int volumen = 80;

double jedinicnaCijena = cijena/volumen; // daje 1

rezultat dijeljenja je cjelobrojan, s obzirom da dijeljenje ima vei prioritet od pridruivanja.
Cjelobrojno dijeljenje predstavlja jednu od najeih greki u programiranju, pa je neophodno upoznati
naine na koje se moe zaobii. Ovo se moe ostvariti pomou tzv. eksplicitne konverzije, ili dodjele
tipa (eng. cast). U tu svrhu se mogu koristiti sljedei operatori (eng. cast operators):
static_cast,dynamic_cast, const_cast i reinterpret_cast,

ali je za na sluaj vaan operator static_cast (koristi se u sluajevima kada se manjem aritmetikom
tipu pridruuje vei; na primjer tipu int pridruuje tip double). Sljedei primjer pokazuje njegovu
primjenu:

int cijena = 100;
int volumen = 80;
double jedinicnaCijena = static_cast<double>(cijena)/volumen; //daje 1.25
Operator static_cast moe se koristiti i na varijabli volumen, ali i na obje varijable u koliniku.
Prije nego se poeo koristiti ovaj C++ nain pisanja, u upotrebi je bio stari nain (eng. old-style cast),
koji se daje ili u tzv. funkcijskom obliku (varijabla meu zagradama):

double jedinicnaCijena = double(cijena)/volumen; // daje 1.25
ili u tzv. starom nainu pisanja u jeziku C (sa tipom meu zagradama):
double jedinicnaCijena = (double)cijena/volumen; // daje 1.25

57
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Ipak, stari nain pisanja se ne preporuuje u pisanju programa koji e se kompajlirati na C++
kompajlerima.
Operator % daje ostatak pri dijeljenju dva cijela broja (oba operanda moraju biti cijeli brojevi!!!), npr.
13%3 daje 1.
Prilikom koritenja aritmetikih operatora veoma vano mjesto zauzima pojam preljeva. Naime, u
sluaju da zbir brojeva prelazi maksimalno dozvoljenu vrijednost, dobivena vrijednost moe biti
negativna. Ovaj fenomen se lako moe pokazati na slici ako se za tip int pretpostavi da ima 2 bajta, tj.
16 bita (to znai da je maksimalan pozitivan broj jednak 215 = 32767).

Dakle, ukoliko neku varijablu koja ima vrijednost 32767 uveamo za samo 1, vrijednost koju dobivamo
je -32768 (!!!), odnosno za jedan vea od najvee mogue u smjeru kazaljke na satu na slici.

7.2.Relacijski operatori

C++ nudi est relacijskih operatora za raunanje brojnih veliina.
Pri tome, treba zapamtiti da se operatori <= i >= mogu koristiti samo u tom obliku, a da =< i => ne
znae nita u ovom kontekstu.
Operandi nekog relacijskog operatora moraju biti brojevi. No, i karakteri su ispravni operandi poto
predstavljaju brojnu vrijednost .
Relacijski operatori se ne smiju korisiti za poreenje stringova, poto se u tom sluaju porede njihove
adrese, a ne sadraj. U tom sluaju, rezultat je neodreen. Ipak, postoje funkcije koje mogu porediti i
leksikografsku razliku dva stringa.

58
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i









7.3.Logiki operatori

Za kombinovanje logikih izraza C++ nudi tri logika operatora.
Slino relacijskim operatorima, rezultat pri koritenju logikih operatora je 0 (false) ili 1 (true).




Za razliku od logikog i i logikog ili operatora, koji su binarni operatori, logika negacija je unarni
operator, tj. ima samo jedan operand kojem daje negaciju vrijednosti koju posjeduje.

7.4.Bitovni operatori

C++ obezbijeuje est bitovnih (eng. bitwise) operatora koji se koriste za manipulisanje pojedinanim
bitovima cjelobrojnih podataka.
Bitovni operatori su definisani samo za cjelobrojne (int, long int) operand i tretiraju ih kao sekvence
bita. Tako, binarna negacija ( - tilda) predstavlja unarni operator koji mijenja stanje bita operanda, tj.
svi bitovi koji su jednaki 0 postavlja u 1, a sve bitove koji su jednaki 1 u 0. Binarno i uporeuje
odgovarajue bitove svojih operanada i kao rezultat daje 1 ako su oba bita 1, a 0 u ostalim
sluajevima. Binarno iskljuivo ili uporeuje odgovarajue bitove svojih operanada i kao rezultat daje 1
ako su oba bita razliita, a 0 u ostalim sluajevima.



59
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Operatori pomaknuti lijevo i pomaknuti desno kao lijevi operand uzimaju sekvencu bitova, a kao desni
neki cijeli broj n. Prvi operator daje kao rezultat sekvencu bita koja je jednaka lijevom operandu, ali
koja je pomjerena n bitovnih pozicija ulijevo. Drugi operator ima istu funkciju, s tom razlikom to
pomjera sekvencu bita za n pozicija udesno.

7.5.Inkrementalni i dekrementalni operatori

Takozvani auto inkrementalni (++) i auto dekrementalni () operatori obezbijeuju prigodan nain za
poveavanje, odnosno smanjivanje brojne varijable za 1. Upotreba ovih operatora je sumirana u
Tabeli, pri emu se pretpostavlja da je
int k = 5;

Kao to se vidi, oba operatora se mogu koristiti u prefiksnom i postfiksnom obliku. Razlika je velika, jer
kada se operator koristi u prefiksnom obliku prvo se primjenjuje operator, a onda se u izrazu koristi
rezultat. Kada se koristi u postfiksnom obliku, prvo se rauna izraz, a onda se primjenjuje operator.
Oba operatora se mogu primijeniti kako na cjelobrojne, tako i na realne brojeve, iako se ova
karakteristika veoma rijetko koristi na realnim brojevima.
7.6.Operatori pridruivanja

Operator pridruivanja (=) se koristi za pohranjivanje vrijednosti na neku memorijsku lokaciju (koja je
obino pridruena nekoj varijabli). Lijevi operand operatora treba biti neka vrijednost, npr.
lijevaVrijednost, dok desni operand moe biti proizvoljni izraz. Desni operand se izrauna i pridrui
lijevoj strani.
Pri tome lijevaVrijednost predstavlja bilo ta to zauzima neku memorijsku lokaciju na koju se moe
pohraniti neka veliina; moe biti varijabla, te zasnovana na pointerima i referencama.
Operator pridruivanja moe imati mnogo varijanti, koje se dobivaju njegovim kombinovanjem sa
aritmetikim operatorima (mogua je kombinacija i sa bitovnim operatorima).

Kako operator pridruivanja sam po sebi predstavlja izraz ija se vrijednost pohranjuje u lijevi operand,
on se moe koristiti kao desni operand za narednu operaciju pridruivanja, odnosno moe se napisati:

60
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





int m, n, p; m = n = p = 5; // isto kao: m = (n = (p = 100));
m =(n= p = 100) + 2; // isto kao: m = (n = (p = 5)) + 2;
ili
m = 100; m += n = p = 5; // isto kao: m = m + (n = p = 5);}





7.7.Operator razdvajanja (zarez-operator)

Operator razdvajanja, ili zarez-operator (eng. comma operator) koristimo kada mnogostruke izraze
elimo kombinovati u jedan izraz. Ovaj operator ima dva operanda, pri emu prvo izraunava lijevi
operand, a zatim desni, pa tek nakon toga vraa vrijednost posljednjeg kao konaan rezultat.
Na primjer:
int m, n, min;
int mBroji =0, nBroji=0;
......
min = (m < n ? mBroji++, m : nBroji++, n);
U ovom primjeru, kada je m < n, izraunava se mBroji++, a zatim se vrijednost m pohranjuje u min. U
suprotnom, izraunava se nBroji++, a zatim se vrijednost n pohranjuje u min.

7.8.typedef imena

Kljuna rije typedef omoguava definisanje novih imena (sinonima) za postojee tipove podataka.
Opta formula ima oblik:
typedef tip novo_ime_tipa;

Dakle, typedef definicija poinje kljunom rijei typedef, nakon ega se ispisuje tip podatka i
identifikator. Pri tome, identifikator ne uvodi novi tip podatka, nego samo sinonim (nadimak) za
postojei tip. Ovaj identifikator se moe koristiti bilo gdje u programu u kojem bi se mogao koristiti i
sam tip.
Na primjer, sljedei primjer pokazuje koritenje sinonima prirodni, za prirodne, tj. nenegativne cijele
brojeve.
typedef unsigned int prirodni;
Ukoliko bismo eljeli definisati prirodni broj N koritenjem imena prirodni, piemo:
prirodni N;
Treba napomenuti da se u posljednjem primjeru identifikator prirodni moe koristiti kao tip u nekoj
drugoj typedef deklaraciji. Inae, typedef imena se koriste kako bi se smanjila kompleksnost ispisivanja
pojedinih tipova, kao to su kompleksne deklaracije imenika, pointera na funkcije, te pointera na
funkcijske lanove klasa.

7.9.sizeof operator

Sizeof operator slui za raunanje veliine bilo kojeg podatka ili tipa. To je unarni operator, koji za
operand moe imati tip (npr. int, char, . . . ) ili izraz, a kao rezultat daje broj bajtova koji operand
zauzima u memoriji raunara.
Ovaj rezultat je u potpunosti zavisan od raunara na kojem se radi. Naredni primjer ilustruje koritenje
ovog operatora za raunanje veliine osnovnih tipova podataka.

#include <iostream>
2 using namespace std;
3
4 int main (void)
5 {

61
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





6 cout << "char size = " << sizeof(char) << " bytes\n";
7 cout << "short size = " << sizeof(short) << " bytes\n";
8 cout << "int size = " << sizeof(int) << " bytes\n";
9 cout << "long size = " << sizeof(long) << " bytes\n";
10 cout << "float size = " << sizeof(float) << " bytes\n";
11 cout << "double size =" << sizeof(double) << " bytes\n";
12 cout << "HELLO size = " << sizeof("HELLO") << " bytes\n";
13 system("pause");
14 }

7.10.Hijerarhija operatora

Slino pravilima u matematici o redoslijedu izvoenja pojedinih raunskih operacija,i redoslijed
koritenja pojedinih operatora u nekom izrazu u C++ je veoma bitan. Stoga se operatori dijele na
razliite hijerarhijske nivoe, pri emu operatori na viim nivoima imaju prednost nad onim koji su nie.
daje prikaz hijerarhije nekih od operatora operatora u C++ , od onih sa najvecim
prema onim sa najmanjim prioritetom. Pri tome su operatori sa istim prioritetom smjeteni u isti blok
(odvojen horizontalnim linijama).


Na primjer, u izrazu

62
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





a=b+c*d;
prvo se rauna c*d, jer znak mnoenja * ima vei prioritet od znaka sabiranja + i znaka pridruivanja
=. Rezultat mnoenja se zatim dodaje varijabli b, jer operacija sabiranja ima vei prioritet od operacije
pridruivanja.
Ovakav nain definisanja hijerarhije je neophodan, jer se pojedini operatori koriste za vie namjena.
Takav primjer je znak plus, +, koji se moe koristiti kao binarni operator za sabiranje, unarni operator
za promjenu znaka nekog broja, ali i kao operator za uveavanje (postfiks i prefiks inkrement). Ako, na
primjer, elimo sabrati dva broja, pri emu je drugi broj prethodno uvean za
jedan, imamo izraz:
c=a+ ++b;
No, moe se desiti da umjesto prethodnog izraza napiemo:
c=a+++b;
to bi, imajui na umu hijerarhiju operatora, kompajler razumio kao:
c=a++ +b;
U ovom sluaju, prvo se izvrava sabiranje brojeva a i b, a zatim se broj a povea za jedan, to
naravno nismo eljeli uraditi.
Treba napomenuti da u sluaju dvoumljenja oko prioriteta operatora, najbolje je koristiti zagrade, i na
taj nain zaobii ugraenu hijerarhiju. Tako bi ranije primjere mogli napisati u obliku:
a=b+(c*d);
odnosno
c=a+(++b);

Pitanja za utvrivanje:
1. Koji od logikih operatora su unarni, a koji su binarni?
2. ta radi inkrement operator?
3. ta radi dekrement operator?
4. Objasni ta radi sljedea naredba:
cout >> --broj!
5.Dodati zagrade sljedeim izrazima tako da se pokae kojim redom se izraunavaju
pojedini operatori:
a) (n <= p + q && n >= p - q || n == 0)
b) (++n * q / ++p - q)
c) (n | p & q p 2 + q)
d) (p < q ? n < p ? q * n - 2 : q / n + 1 : q - n)
6. ta e biti vrijednost sljedeih varijabli nakon inicijalizacije:
a) double d = 2 * int(3.14);
b) long k = 3.14 - 3;
c) char c = a + 2;
d) char c = p + A - a;
7. Tano ili netano: u naredbi pridruivanja, vrijednost sa lijeve strane od znaka jednako je uvijek
jednako vrijednosti na desnoj strani.
8. Tano ili netano: potpuno je normalno koristiti razliite tipove podataka
u istom aritmetikom izrazu.
9. Objasniti pojam preljeva?
10. Napisati naredbu koja pomou operatora pridruivanja poveava vrijednost varijable temp za 23.
Napisati istu naredbu bez operatora pridruivanja.
11. Relacijski operator;
a) Pridruuje jedan operator drugom
b) Daje Boolean rezultat
c) Poredi dva operanda
d) Logiki kombinuje dva operanda
12. Napisati izraz koji koristi relacijski operator koji ima vrijednost true ako varijabla var1 nije jednaka
varijabli var2.
13. Operatori && i ||:
a) Porede dvije numerike vrijednosti

63
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





b) Kombinuju dvije numerike vrijednosti
c) Porede dvije Boolean vrijednosti
d) Kombinuju dvije Boolean vrijednosti
14. Provjeriti ta je rezultat sljedee upotrebe uslovnog operatora, ako je
m=5.1, n=7.2:
int min = (m < n ? m++ : n++);





8.Naredbe
Ovim naslovom opisat emo razne oblike C++ naredbi koje slue za pisanje programa.
Kao i veina ostalih programskih jezika, C++ nudi razliite vrste naredbi koje se koriste u razliite
svrhe. Tako se deklaracione naredbe koriste za definisanje varijabli, naredbe pridruivanja za
jednostavne proraune, itd.

8.1.Jednostavne i sloene naredbe
3


Jednostavna naredba je svaka naredba koja zavrava taka-zarezom (;). Definicije varijabli i izrazi koji
zavravaju sa taka-zarezom su samo neki od primjera, kao u sljedeim sluajevima:
int i; // deklaraciona naredba
++i; // naredba sa popratnom pojavom
double d = 10.5; // deklaraciona naredba
d + 5; // beskorisna naredba
Najjednostavniji oblik naredbe je linija koja sadri samo taka-zarez, tzv.null-naredba. No, i ovakva
naredba ponekad ima smisla.
Mnogostruke naredbe se mogu kombinovati u sloene naredbe kada se grupiu izmeu velikih zagrada
({}), kao na primjer:

{ int min, i = 10, j = 20;
min = (i < j ? i : j);
cout << min << \n;
}
Ovakve naredbe su korisne iz dva razloga:
a) omoguuju da se mnogostruka naredba postavi tamo gdje bi inae mogla da se postavi samo jedna,
b) omoguuju da se u program uvede podruje definisanosti varijable (eng. scope).
Podruje varijable predstavlja dio programa unutar kojeg varijabla ostaje definisana.
Izvan tog podruja ona to vie nije.












3
Preuzeto i obraeno by Uvod u programiranja u C++ -predavanja na FIT Mostar;

64
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





8.2.Naredba if

Ponekad je poeljno da se izvri odreena naredba koja zavisi od ispunjenja nekog uslova. Upravo tu
mogunost prua if naredba, iji je opti oblik:
if (izraz)
naredba;
Prvo se izvrava izraz, i ako je rezultat razliit od nule izvrava se naredba. U suprotnom, nita se ne
deava.

Uvjet je logiki izraz, zapisuje se unutar para okruglih zagrada.
Na kraju naredbe if ne stavlja se znak taka zarez ;
Primjer 1
Ako elimo provjeriti da li je pri dijeljenju djelilac razliit od nule i izvriti dijeljenje, upotreba naredbe if
ima oblik:
if (djelilac != 0)
Kolicnik=djelitelj/djelilac;
U sluaju da elimo izvriti vie naredbi koje ovise o nekom istom uslovu,koristimo sloenu naredbu, tj.
sve naredbe stavljamo izmeu velikih zagrada.
Varijanta if naredbe koja omoguuje da se specificiraju dvije alternativne naredbe, jedna koja se
izvrava kada je uslov ispunjen i druga kada nije, naziva se if-else naredba i ima oblik:
if (izraz)
naredba1;
else
naredba2;
Ovdje se najprije izvrava izraz, i ako je rezultat razliit od nule, izvrava se naredba1. U suprotnom,
izvrava se naredba2, to pokazuje i primjer provjere
da li je broj paran ili ne:


1 #include <iostream>
2 using namespace std;
3
4 main()
5 {
6 int x;
7 cout << "Unesite neki broj";
8 cin >> x;
9 if (x % 2 == 0)
10 cout << "Broj je paran" << endl;
11 else
12 cout << "Broj je neparan" << endl;
13 system(Pauase);return 0;
}

65
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Pored prethodno navedenih varijanti, postoji i ugnijedena if naredba, u kojoj se javlja vie od dvije
alternative. Primjer takve varijante je, recimo,
izraunavanje cijene telefonskog rauna:
if (vrijemePoziva > 7 && vrijemePoziva < 19) {
if (duzinaPoziva <= 60)
cijena = duzinaPoziva * tarifa1;
else
cijena = 60 * tarifa + (duzinaPoziva - 60) * tarifa2;
} else
cijena = osnovnaCijena;
Kao to se vidi unutar prve if naredbe, koja provjerava uslov da li je poziv izvren u periodu 7.00-19.00
sati, nalazi se jo jedna if naredba. Ova naredba ima za cilj da provjerava duinu poziva, i na osnovu
toga formira cijenu istog.
U sluaju da je poziv izvren izvan perioda 7.00-19.00, cijena se formira na osnovu osnovne cijene
poziva.
Primjer 2
Treba unijeti cijeli broj razliit od 0 pa provjeriti da li je negativan ili pozitivan. U oba sluaja ispisati
apsolutnu vrijednost broja.

Ako je (a<0) izvrit e se prvi blok naredbi.
Ako uvjet nije zadovoljen, prvi blok naredbi se preskae i izvoenje se programa nastavlja od prve
naredbe iza bloka, a to je provjera drugog uvjeta (a>0).
Ako nije ispunjan niti drugi uvjet (za a=0), drugi blok naredbi se preskae i izvoenje se nastavlja od
naredbe return 0.
Naredba if else
Za dvostruko uvjetno grananje koristi se naredba if - else.

66
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Ako je vrijednost uvjeta logika istina izvodi se prvi blok. Nakon njegova zavretka izvoenje se
nastavlja od prve naredbe iza drugog bloka.
Ako je vrijednost uvjeta logika neistina, preskae se prvi blok i izvodi se drugi blok (iza naredbe else).
Nakon njegova zavretka izvoenje se nastavlja od prve naredbe iza drugog bloka.
Primjer3.
Primjer je rijeen uz pomo if else naredbe.
Ako je (a<0) izvrit e se prvi blok naredbi.
Ako je (a>0), preskae se prvi blok i izvodi se drugi blok naredbi.


to ako korisnik ne proita uputu paljivo, pa unese broj 0? Rezultat nee biti ispravan:

67
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Uneseni broj treba provjeriti. Ako je unesena 0, korisnika valja upozoriti, a potom korisnik mora unijeti
novi broj koji je razliit od 0.
Da bi to bilo mogue, potrebna je naredba koja omoguava nastavak odvijanja programa od odabrane
naredbe.
Naredba goto
Naredba goto omoguava nastavak odvijanja programa od odabrane naredbe.
Naredba na koju se eli skoiti, od koje se eli nastaviti odvijanje programa, moe biti bilo gdje u
programu.
Opi oblik naredbe:
goto oznaka_naredbe;

Naredbu od koje se eli nastaviti odvijanje programa treba oznaiti oznakom iza koje dolazi znak
dvotake.
oznaka_naredbe:naredba;


goto oznaka_naredbe;


estom upotrebom naredbe goto teko je slijediti tok odvijanja programa to oteava otkrivanje
pogreaka.
Naredbu goto stoga treba izbjegavati i nastojati zadatak rjeiti na drugi nain, pomou petlji koje e
biti objanjene kasnije.
Nredba if-else if-else

68
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Za viestruko uvjetno grananje koristi se naredba if else if - else.Broj pustavljenih uvjeta nije
ogranien.

Ako je vrijednost prvog uvjeta logika istina, izvodi se prvi blok naredbi. Nakon njegova zavretka
izvoenje se nastavlja od prve naredbe iza zadnjeg bloka naredbi.
Ako je vrijednost prvog uvjeta logika neistina, provjerava se drugi uvjet.
Ako je on logika istina, izvodi se drugi blok naredbi, a potom prva naredba iza zadnjeg bloka naredbi.
Ako je vrijednost drugog uvjeta logika neistina, provjerava se trei uvjet, i td.
Provjere se tako redom nastavljaju sve do naredbe else.
Ako do tada niti jedan od uvjeta nije imao vrijednost logike istine, izvrit e se zadnji blok naredbi koji
se nalazi iza naredbe else.

Primjer4

69
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Treba upisati prirodni broj pa provjeriti da li je vei ili manji od 100, te da li je paran ili neparan.


Viestrukim uvjetnim grananjem provjerava se da li je broj vei, manji ili jednak 100.
Dvostrukim uvjetnim grananjem (neovisno o tome da li je broj vei ili manji od 100) provjerava se
parnost broja.
Parnost se provjerava operatorom modulo (ostatak dijeljenja s 2 se usporeuje s 0).





8.3.Naredba switch

Naredba switch-case omoguava jednostruko grananje koje ovisi o vrijednosti postavljenog uvjeta.
Za razliku od viestrukog grananja naredbom if u kojoj su uvjeti logiki izrazi, u naredbi switch-case
uvjet je cjelobrojan izraz ili cjelobrojna varijabla.Grananje swich-case.

70
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i







Opti oblik switch naredbe je:
switch (izraz)
{
case konstanta_1:
naredbe;
break;
...
case konstanta_n:
naredbe;
break;
default:
naredbe;
}


Prvo se rauna izraz (switch tag), a zatim se rezultat poredi sa svakom od numerikih konstanti
(labele), po redu kako se javljaju, dok se ne poklopi sa jednom od komponenti. Nakon toga se
izvravaju naredbe koje slijede.
Izvravanje se izvodi sve dok se ne naie na naredbu break ili dok se ne izvre sve naknadne naredbe.
Posljednji sluaj (default) moe, a i ne mora da se koristi, i pokree se ako nijedna od prethodnih
konstanti nije zadovoljena.
Koritenje ove naredbe dat je u sljedeem primjeru, koji odreuje opseg osvojenih bodova na ispitu na
osnovu dobijene ocjene.


71
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





#include <iostream>
using namespace std;
main()
{
int ocj;
cout << "Unesite ocjenu: ";
cin >> ocj;
switch (ocj)
{
case 5:
cout << "Imate 90 100 bodova" << endl;
break;
case 4:
cout << "Imate 80 89 bodova" << endl;
break;
case 3:
cout << "Imate 70 79 bodova" << endl;
break;
case 2:
cout << "Imate 60 69 bodova" << endl;
break;
default:
cout << "Imate ispod 60 bodova" << endl;
system(Pause);return 0;
}
}


Primjer 5
Treba izraunati ukupni otpor za otpore R1 i R2, ovisno o tome da li su spojeni serijski ili paralelno.
Za odabir serijskog spoja korisnik upisuje 1, a za paralelnog 2.
Valja nainiti dvije grane (serijski spoj-1, paralelni-2).
Ovisno o tome to korisnik upie (broj 1 ili broj 2) izvrit e se jedna od dvije grane.
U sluaju da korisnik unese vrijednost koja nije 1 ili 2, ispisat e se upozorenje.


72
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Rezultat programskog koda.

Ako se ne upie broj 1 ili 2 ispisat e se poruka o greci.


8.4.Naredba for

73
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





For petlja se najee koristi ako se dijelovi programa trebaju ponoviti unaprijed poznati broj puta.
Svaka for petlja ima svoju kontrolnu varijablu.Njena se vrijednost svakim prolaskom kroz petlju
mijenja ovisno o vrijednosti prirasta. Kontrolnu varijablu petlje potrebno je prije ulaska u petlju
deklarirati. U petlji se najprije zadaje vrijednost poetnog stanja kontrolne varijable petlje (poetno
stanje). Po zadavanju poetnog stanja kontrolne varijable petlje zapisuje se uvjet.
Rezultat uvjeta je podatak tipa bool (0 ili 1).Blok naredbi se izvrava sve dok je vrijednost uvjeta
jednaka logikoj istini (1).
Kad vrijednost uvjeta postane neistina (0) petlja se prekida.
Naredba for (for petlja) je slina naredbi while, ali ima dvije dodatne komponente:
(i) izraz koji se izraunava samo jednom prije nekog prorauna koji se ponavlja, i (ii) izraz koji se
izraunava jednom na kraju svake iteracije. Opti oblik naredbe for je:
for (izraz1; izraz2; izraz3)
naredba;
Prvo se izraunava izraz1. Svakim prolaskom kroz petlju se izraunava izraz2.
Ako je rezultat razliit od nule izraunava se izraz3. U suprotnom petlja se zaustavlja. Oblik while
petlje koja je ekvivalentna do petlji je:
izraz1;
while (izraz2) {
naredba;
izraz3;
}
Naredba for se najee koristi u situacijama kada se neka varijabla poveava ili smanjuje za neku
veliinu u svakoj iteraciji, odnosno kada je broj iteracija unaprijed poznat. Sljedei primjer rauna zbir
svih brojeva od 1 do n:

sum = 0;
for (int i = 1; i <= n; ++i)
sum += i;

Prvo se vrijednost zbira inicijalizira na vrijednost nula (sum=0;). Prvi izraz u petlji for predstavlja
poetnu vrijednost brojaa i, koja je jednaka 1. Nakon toga, provjerava se uslov i <= n. Ako je uslov
ispunjen, izraunava se naredba.
U ovom sluaju, radi se o jednostavnoj naredbi (sum += i;), tako da nema potrebe za koritenjem
velikih zagrada. Nakon izvrenja naredbe, izraunavase trei izraz, ++i, i postupak nastavlja sve dok
se ne ispuni uslov i <= n.
Treba naglasiti da se umjesto prefiks inkrementa, kao trei izraz mogao staviti i postfiks inkrement
(i++).
Bilo koja od komponenti u petlji moe biti prazna. Na primjer, ako se uklone prvi i trei izraz, onda je
do petlja
for (; i != 0;)
bilo-sta;
ekvivalentna sa while petljom
. while (i != 0)
bilo-sta;
Uklanjanje svih izraza u petlji daje beskonanu petlju:

for (;;) // beskonana petlja
bilo-sta;

Poto petlje predstavljaju naredbe, mogu se pojaviti unutar drugih petlji (tzv. ugnijedene petlje).
Klasini primjer je koritenje dvostruke petlje pri ispisu tablice mnoenja brojeva do 10:
for (int i = 1; i <= 10; ++i){
for (int j = 1; j <= 10; ++j)
cout << setw(5)<< i*j;
cout << endl;

74
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





}
U liniji sa ispisom (cout << setw(5)<< i*j;) koriten je operator za manipulisanje setw(), koji se koristi
za formatirano ispisivanje. Naime, brojka unutar zagrada (u gornjem primjeru to je broj 5) predstavlja
najmanji prostor predvien za ispis podataka u izlaznom toku.

Primjer 1: Ispii prvih 20 prirodnih brojeva, svaki u svom redu.
Na kraju ispii i vrijednost varijable i nakon izvoenja petlje.


Rjeenje:


Primjer 2: Ispii parne brojeve od 20 do 450.

Rjeenje:

75
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i














Primjer 3: Ispii sve prirodne brojeve izmeu 1 i N, koji su djeljivi sa 3.

Rjeenje:

76
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i








8.5.Naredba while

Naredba while (naziva se i while petlja) omoguuje ponavljanje neke naredbe sve dok je ispunjen neki
uslov. Opti oblik ove naredbe je:
while (izraz)
naredba;
Prvo se izraunava izraz (naziva se i uslov petlje). Ako je rezultat razliit od nule tada se izvrava
naredba (naziva se i tijelo petlje) i cijeli proces se ponavlja.
U suprotnom, proces se zaustavlja.
Na primjer, ako elimo izraunati zbir svih brojeva od 1 do n, upotreba while naredbe ima oblik:
i = 1;
sum = 0;
while (i <= n)
sum += i++; \\ili {sum = sum + i; i = i + 1;}
Tijelo petlje while moe biti prazno, tj. sa null-naredbom, ali to nije uobiajeno.
Ipak, sljedei primjer, problem nalaenja najveeg neparnog faktora nekog broja, pokazuje i jedan
takav sluaj.
while (n % 2 == 0 && n /= 2)
Ovdje uslov petlje izvrava sve neophodne kalkulacije, tako da nema potrebe za tijelom.

Primjer:Za niz od 5 razliitih brojeva ispii zbir.


77
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






8.6.Naredba do

Naredba do (naziva se i do petlja) je slina naredbi while, osim to se prvo izvrava tijelo petlje, a
zatim se provjerava uslov. Opti oblik naredbe je:
do
naredba;
while (izraz);
Prvo se izvrava naredba, a zatim provjerava izraz. Ako je izraz razliit od nule cijeli proces se
ponavlja. U suprotnom, petlja se zaustavlja.
Naredba do se manje koristi nego while petlja. Obino se koristi kada se tijelo petlje mora izvriti
najmanje jedanput bez obzira na ispunjenje uslova. Takav primjer je, recimo, ponovljeno unoenje
nekog broja u primjeru izraunavanja njegovog kvadrata sve dok se ne unese broj 0:
do {
cin >> n;
cout << "Kvadrat broja " << n << " je" << n * n << "\n";
} while (n != 0);
Za razliku od while petlje, do petlja se nikada ne koristi sa praznim tijelom prvenstveno zbog jasnoe.


Primjer:Za niz prirodnih brojeva od 1-N ispii sumu (zbir) neparnih.



78
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i










Pitanja za utvrivanje:
1. Koja od petlji (for, while, do) se izvrava barem jednom?
2. Koja od petlji je najbolji izbor kada je broj iteracija poznat?
3. Napii naredbe za sljedee:
a) provjera da li je broj neparan,
b) provjera da li je broj neparan i negativan,
c) dati apsolutnu vrijednost nekog broja.
4. Pretpostavljajui da je n = 20, ta e biti rezultat sljedeeg koda:
if (n >= 0)
if (n < 10)
cout << "n je malo\n";
else
cout << "n je negativno\n";
5. Opii svrhu tri naredbe unutar for petlje.
6. Tano ili netano: inkrementalni izraz unutar for petlje moe smanjiti varijablu petlje.
7. Blok nekog koda je odvojen .....
8. Koliko puta se izvrava tijelo do petlje?
9. Dati sintaksu naredbe switch!



79
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





9.Funkcije
Funkcije obezbijeuju prikladan nain pakovanja nekog numerikog "recepta", koji se moe koristiti
koliko god je to puta potrebno, i predstavljaju okosnicu tehnike proceduralnog programiranja.
Na primjer Ja u vam dati jedan broj. Vi trebate tom broju dodati 2 i proizvod pomnoiti sa datim
brojem .
Sline instrukcije moete dati i kompjuteru izraene na nekom programskom jeziku. Tada oekujete
da broj x unesete, da maina izrauna x + 2, zatim (x + 2) * x.
Za dati ulaz x maina e proizvesti jedinstven izlaz
broj ((x + 2) * x).
U matematici, proces koji, za dati ulaz (odreenog tipa), proizvodi jedinstven izlaz naziva se funkcija.
Efekt procesa obrade na raunaru moe se posmatrati kao evaluacija funkcija. Zato su funkcije
najvanija matematika tema u oblasti kompjuterske obrade.
9.1.Definicija

Definicija funkcije se sastoji od dva glavna dijela:
1.zaglavlja ili interfejsa, i
2.tijela funkcije.
Interfejs definie kako se funkcija moe koristiti. On se sastoji od tri dijela:
Imena. Ovo je, u stvari, jedinstveni identifikator funkcije.
Parametara (ili potpisa). Ovo je niz od nula ili vie identifikatora nekog tipa koji se koriste za
prosljeivanje vrijednosti u i iz funkcije.
Tipa. Ovo specificira tip vrijednosti koji funkcija vraa. Funkcija koja ne vraa nijednu vrijednost
bi trebala da ima tip void.
Tijelo funkcije sadri raunske korake (naredbe) koji ine samu funkciju.Koritenje funkcije se izvodi
njenim pozivanjem. Poziv funkcije se sastoji od imena funkcije, praenim zagradama za pozivanje ().
Unutar ovih zagrada se pojavljuje nula ili vie argumenata koji se odvajaju zarezom. Broj argumenata
treba odgovarati broju parametara funkcije. Svaki argument je izraz iji tip treba odgovarati tipu
odgovarajueg parametra u interfejsu funkcije.
Kada se izvrava poziv funkcije, prvo se raunaju argumenti i njihove rezultujue vrijednosti se
pridruuju odgovarajuim parametrima. Nakon toga se izvrava tijelo funkcije. Na kraju, funkcija vraa
vrijednost poziva (ako isti postoji).
Sljedei primjer ilustrativno pokazuje definiciju jednostavne funkcije koja izraunava vrijednost stepena
cijelog broja na neki cijeli broj.



1 int Stepen (int baza, unsigned int eksponent)
2 {
3 int rezultat = 1;
4 for (int i = 0; i < eksponent; ++i)
5 rezultat *= baza;
6 return rezultat;
7 }

Linija 1 definie interfejs funkcije. Ona poinje tipom funkcije koji se vraa;u ovom sluaju radi se o
cjelobrojnoj vrijednosti, int . Nakon toga je dato ime funkcije, Stepen, a zatim lista njenih parametara.
Funkcija Stepen ima dva parametra (baza i eksponent) koji su tipa int. Pri tome, uzeto je da varijabla
eksponent ima samo pozitivne vrijednosti (unsigned int), jer je i funkcija Stepen cjelobrojnog tipa int1.
Sintaksa parametara je slina sintaksi definisanja varijabli, tj. nakon tipa daje se ime parametra, osim
to se parametri ne odvajaju zarezom, kao u:


80
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





int Stepen (int baza, eksponent) // Ovo je pogreno!

Zagrada { u liniji 2 predstavlja poetak tijela funkcije. U liniji 3 definisana je lokalna varijablu rezultat.
Stepen varijable baza na varijablu eksponent pomou for petlje se rauna u linijama 4 i 5. Rezultat se
pohranjuje u varijablu rezultat
(linija 5). U liniji 6 vraa se vrijednost rezultat kao rezultat funkcije. Zagrada } u liniji 7 predstavlja
kraj tijela funkcije.
Naredni primjer pokazuje kako se funkcija poziva (bez definicije funkcije).
Posljedica poziva funkcije je da se vrijednosti argumenata 2 i 8 pridruuju parametrima baza i
eksponent, respektivno, a zatim se rauna tijelo funkcije.
1 #include <iostream>
2 using namespace std;
3
4 main(void){
5 cout << "2 ^ 8= " << Stepen(2,8) << \n;
6 }


Kada se program pokrene daje sljedei izlaz:
2 ^ 8 = 256
Definisanje gore pomenute funkcije moe se izvriti na vie naina, kao to emo pokazati u narednim
primjerima.
Primjer 1.
1 #include <iostream>
2 using namespace std;
3
4 double Stepen (int baza, int eksponent)
5 {
6 double rezultat = 1;
7
8 for (int i = 0; i < eksponent; ++i)
9 rezultat *= baza;
10 return rezultat;
11 }
12
13 main ()
14 {
15 int a,b;
16 cout << "Unesi bazu:";
17 cin >> a;
18 cout << "\nUnesi eksponent:";
19 cin >> b;
20 cout << a<<"^" <<b<<" = " << Stepen(a,b) << \n;
21 system("PAUSE");
22 }

Vidi se da je funkcija Stepen definisana prije glavnog programa (sve funkcije,koje se koriste u nekom
programu, moraju se definisati prije glavnog programa, dakle prije funkcije main). U ovom sluaju,
funkcija ima tip double, tako da moe da "pokrije" vie mogunosti (vee rezultate, decimalne brojeve
kao rezultat). Poziv funkcije, linija 20, vri se pomou Stepen(a,b), pri emu tipovi oba argumenta a i
b, odgovaraju tipovima parametara funkcije baza i eksponent, respektivno.
Primjer 2.
Treba napomenuti da se definicija funkcije sastoji od njenog prototipa, tako da je za definisanje
dovoljno ispisati samo njen prototip. Na taj nain, kompletna definicija funkcije se moe dati kasnije,

81
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





kao to je pokazano u narednom primjeru. Takoer je mogue izostaviti nazive parametara u definiciji,
ali to
nije preporuljivo.




1 #include <iostream>
2 using namespace std;
3
4 double Stepen (int baza, int eksponent);
5 // deklarisanje funkcije
6
7 /* moguce je funkciju daklarisati i na sljedeci nain
8 double Stepen (int, int);
9 */
10
11 main ()
12 {
13 int a,b;
14 cout << "Unesi bazu:";
15 cin >> a;
16 cout << "\nUnesi eksponent:";
17 cin >> b;
18 cout << a<<"^" <<b<<" = " << Stepen(a,b) << \n;
19 system("PAUSE");
20 }
21
22 double Stepen (int baza, int eksponent)
23 {
24 double rezultat = 1;
25
26 for (int i = 0; i < eksponent; ++i)
27 rezultat *= baza;
28 return rezultat;
29 }

Dakle, funkcija je definisana u liniji 4, koristei njen potpis. Vano je napomenuti da je u ovom sluaju
neophodno staviti taka-zarez (;) nakon definisanja, jer linija 4 predstavlja naredbu. Sjetimo se da se
nakon definisanja funkcije ne stavlja taka-zarez nakon zagrade }, koja zatvara tijelo funkcije.
itava definicija funkcije data je linijama 22-29.

Primjer 3.
Radi preglednosti veoma je korisno sakupiti sve funkcije u posebne datoteke, i umjesto njihovog
definisanja u sklopu izvrne datoteke, treba samo proitati tu datoteku. Na primjer, ako je definicija
funkcije Stepen data u datoteci
StepenInt.h,tj.


\\ sadrzaj datoteke StepenInt.h
int Stepen (int baza, int eksponent)
{
int rezultat = 1;
for (int i = 0; i < eksponent; ++i)
rezultat *= baza;

82
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





return rezultat;
}
onda prethodni program ima oblik:



#include <iostream>
#include StepenInt.h
using namespace std;
main ()
{
int a,b;
cout << "Unesi bazu:";
cin >> a;
cout << "\nUnesi eksponent:";
cin >> b;
cout << a<<"^" <<b<<" = " << Stepen(a,b) << \n;
system("PAUSE");
}
Ovdje treba paziti gdje se datoteka StepenInt.h nalazi. U primjeru koji je dat, ona se nalazi u istom
direktoriju kao i izvrna datoteka. U suprotnom, treba dati tanu lokaciju iste (eng. path).

9.2.Parametri i argumenti

C++ podrava dva oblika parametara: vrijednost i referencu. Parametar po vrijednosti prima kopiju
vrijednosti argumenata koja im se prenosi. Kao posljedica toga, ako funkcija napravi bilo kakvu
promjenu na parametrima, ovo nee promijeniti vrijednosti argumenata. Na primjer, u programu:
#include <iostream>
using namespace std;
void Funkcija (int broj)
{
broj = 0;
cout << "broj = " << broj << \n;
}
int main ()
{
int x = 10;
Funkcija(x);
cout << "x = " << x << \n;
system("PAUSE");
return 0;
}
kao lokalna varijabla u funkciji. Kada se funkcija pozove i vrijednost x se prenese,
varijabla broj primi kopiju vrijednosti varijable x. Kao rezultat toga, iako varijabla broj u funkciji
mijenja vrijednost na 0, to nece utjecati na varijablu x. Program e dati sljedei izlaz:
broj = 0;
x = 10;
Za razliku od parametra po vrijednosti, parametar po referenci prima argumentkoji se prenosi i sve
obavlja direktno na njemu. Bilo koja promjena parametra po referenci u samoj funkciji,direktno se
odnosi i na argument, tj. i on se mijenja. Da bismo definisali parametar po referenci, potrebno je
dodati simbol & (ampersand) ispred varijable koja je parametar u interfejsu funkcije, tj. u prethodnom
primjeru interfejs funkcije. Funkcija ima oblik:

void Funkcija (int &broj)

83
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Mogue je simbol & staviti i iza tipa varijable broj, kao u void Funkcija (int& broj),i na programeru je da
odabere nain koji mu vie odgovara. U principu, vano se uvijek drati istog pravila, ako ni zbog cega
drugog onda zbog preglednosti programa.
U kontekstu pozivanja funkcija, a na osnovu prethodno iznesenog, razlikujemo dvije vrste
pridruivanja: pridruivanje prema vrijednosti i pridruivanje prema referenci. U praksi (u pogledu
funkcija) se mnogo vie koristi pridruivanje prema vrijednosti.
9.3.Globalne i lokalne varijable

Za sve to se definie izvan programskog podruja (scope) se kae da ima globalni karakter. Tako, sve
funkcije koje smo do sada koristili predstavljaju globalne funkcije. No, i varijable se mogu definisati u
globalnom podruju, tj.izvan svih funkcija koje se koriste u programu, ukljuujui i funkciju main.
Na primjer:
int godina = 1994; // globalna varijabla
int Maksimum (int,int); // globalna funkcija
int main (void){ // globalna funkcija
//...
}
Treba zapamtiti da su globalne varijable automatski inicijalizirane na vrijednost nula.
Poto su globalni entiteti "vidljivi" na svim programskim nivoima, oni moraju biti jedinstveni na nivou
programa. To znai da se globalne varijable ili funkcije na globalnom podruju ne mogu definisati vie
nego jedanput, iako se ime funkcije moe definisati vie puta sve dok su im parametri (njen potpis)
jedinstveni . Globalni entiteti su openito pristupani bilo gdje u programu.Svaki blok u programu
definie lokalno podruje. Na taj nain, tijelo funkcije predstavlja lokalno podruje. Parametri funkcije
imaju isto podruje kao i tijelo funkcije. Varijable koje su definisane unutar lokalnog podruja su
vidljive
samo u tom podruju. Lokalno podruje moe da bude ugnijedeno, pri cemu unutranje podruje
ponitava vanjsko.
Na primjer:

int xyz; // xyz je globalna varijabla
void Funkc (int xyz) // xyz je lokalna varijabla
// u tijelu funkcije
Funkc {
if (xyz > 0) {
double xyz; // xyz je lokalna varijabla u ovom bloku
//...
}
}

imamo tri razliita podruja, od kojih svaki ima razliitu varijablu xyz.Openito, ivotni vijek varijable je
ogranien na podruje iste. Tako, na primjer, globalne varijable traju svo vrijeme izvrenja programa,
dok se lokalne varijable kreiraju kada se ue u njihovo podruje, a unitavaju kada se iz njega
izae. Memorijski prostor za lokalne varijable je rezervisan prije izvrenja programa, dok je memorijski
prostor za lokalne varijable alociran "u hodu" u toku izvrenja programa.
Poto lokalno podruje ponitava globalno, to lokalne varijable sa istim imenom kao globalne varijable
onemoguavaju pristup globalnim varijablama unutar lokalnog podruja.
Na primjer, u
int greska; \\globalna varijabla
void Greska (int greska) { \\lokalna varijabla
//...
}
globalna varijabla greka je, kao to se i oekuje, nepristupana unutar funkcije.
Greska, poto je ponitena lokalnim parametrom greka.Ovaj problem se moe prevazii koritenjem
unarnog operatora podruja (unary scope operator), koji globalni entitet uzima kao argument, kao u
primjeru

84
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i







int greska;
void Greska (int greska) {
//...
if (::greska != 0) // odnosi se na globalnu varijablu
// greska
//...
}

9.4.Rekurzivne funkcije

Za funkciju koja poziva samu sebe kaemo da je rekurzivna. Rekurzija je opta programska metoda
koja se primjenjuje na probleme koji se definiu u odnosu na same sebe.
Na primjer, problem raunanja faktorijela je primjer rekurzivne funkcije.
Faktorijel je definisan sa:
Faktorijel od 0 je 1.
Faktorijel pozitivnog broja n je n puta faktorijel od n-1, tj. n!=n(n-1)!
Posljednji dio definicije jasno pokazuje da je faktorijel definisan u odnosu na samog sebe, te se stoga
moe predstaviti rekurzivnom funkcijom, npr.
int Faktorijel (unsigned int n) {
return n == 0 ? 1 : n * Faktorijel(n-1);
}
U principu, sve rekurzivne funkcije se mogu napisati koristei iteracije. Naime, treba imati u vidu da u
sluaju velikog broja poziva funkcija (u primjeru faktorijela je to veliki broj n), dolazi do zauzimanja
velikog memorijskog prostora (tzv. runtime stack ), pa je upotreba iteracija bolje rjeenje. No, u nekim
sluajevima elegantno i jednostavno rekurzivno rjeenje moe da bude bolja opcija.
U sluaju faktorijela, na primjer, iterativna opcija je bolja, pa bi funkcija imala oblik:
int Faktorijel (unsigned int n) {
int rezultat = 1;
while (n > 0) rezultat *= n--;
return rezultat;
}




Pitanja za utvrivanje:
1. Da li funkcija moe imati vie od jednog argumenta?
2. Da li funkcija mora imati return vrijednost?
3. Da li funkcija moe imati vie od jedne return vrijednosti?
4. Da li je mogue da funkcija nema ni argumente ni return vrijednost?
5. Da li funkcija moe imati i argumente i return vrijednosti?
6. Nakon imena funkcije slijedi .....
7. Tijelo funkcije je odvojeno ....
8. Skup naredbi koji obavlja radnje neke funkcije predstavlja ..... funkcije.
9. Opis funkcije dat jednom naredbom, koja zapoinje definiciju funkcije,
naziva se ....
10. Tano ili netano: kada se argumenti funkcije prenose po vrijednosti,funkcija radi sa originalnim
argumentima iz programa koji poziva funkciju.
11. Varijabla definisana unutar bloka je vidljiva:
a) od take definisanja nadalje u programu,
b) od take definisanja nadalje u funkciji,
c) od take definisanja nadalje u bloku,
d) u cijeloj funkciji.

85
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





12. ta znai kada se koriste prazne zagrade () u definiciji funkcije?
13. Koliko vrijednosti se moe vratiti iz funkcije?
14. Tano ili netano: kada funkcija vraa vrijednost, cijeli poziv funkcije se moe pojaviti na desnoj
strani znaka jednakosti i pridruiti drugoj varijabli.
15. Gdje se specificira tip vrijednosti koji se vraa nekom funkcijom?
16. Kada se argument prenosi po referenci:
a) kreira se varijabla u funkciji da pohrani vrijednost argumenta,
b) funkcija ne moe pristupiti vrijednosti argumenta,
c) kreira se privremena varijabla u programu koji poziva funkciju da pohrani vrijednost argumenta,
d) funkcija pristupa originalnoj vrijednosti argumenta u programu koji je poziva.

10.Polja (Arrays)ili nizovi

10.1.Jednodimenzionalni niz

Polje se sastoji od niza objekata (nazivaju se i elementi polja), koji su istog tipa i zauzimaju neprekidan
memorijski prostor. Openito, samo polje ima simboliko ime, a ne njegovi elementi. Svaki element je
identificiran njegovim indeksom, koji pokazuje poloaj nekog elementa u polju. Broj elemenata u polju
naziva se dimenzija polja.Dimenzija polja je fiksirana i prethodno odreena, i ne moe se promijeniti u
toku izvrenja programa.
Polja su pogodna za predstavljanje podataka koji se sastoje od mnogo slinih, individualnih objekata.
Primjeri za to su lista imena, tabela gradova i njihovih sezonskih temperatura, i slino.
Tipovi poput int, double i sl.dozvoljavaju predstavljanje samo pojedinanih vrijednosti.
esto pri rjeavanju problema iz stvarnog svijeta trebamo predstaviti skupinu vrijednosti koje su sve
istog tipa, na primjer:
Prosjene koliine padavina za svaki mjesec
Ocjene svih uenika u razredu
Stanje prodaje za svaki dan u sedmici, itd
U jeziku C++ takve skupine vrijednosti predstavljamo pomou nizova.Niz je struktura podataka koja
omoguava pohranu niza vrijednosti. Vrijednosti su pohranjene u kontinuirani blok memorije. Nizovi
omoguavaju brz (random access) pristup pojedinim elementima.
Kao i varijable, niz moramo deklarirati prije nego ga upotrijebimo. Sintaksa deklaracije niza izgleda
ovako:
tip ime_niza [broj_elemenata];

tip moe biti bilo koji validni tip podatka u C++(npr. int, float...)
ime niza je bilo koji validan identifikator u C++
u uglatim zagradama[] se nalazi broj elemenata niza tj. veliina niza (obavezno neka
konstantna vrijednost).
Na primjer:
int rezultati [9];
niz rezultati koji se sastoji od 5 elemenata tipa int moemo grafiki predstaviti ovako:



86
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Svaki element niza je varijabla , odreena svojim indeksom. Bilo koja operacija koja se moe vriti nad
varijablama obinog tipa, moe se vriti i nad individualnim elementima niza.
Indeks se navodi nakon imena niza, u uglatim zagradama:
Na primjer:
rezultati [5]= 21;
cout<<rezultati [5];


10.2.Deklaracija nizova
4


Prilikom deklaracije nizova, unutar uglastih zagrada mora se nalaziti neto ija je vrijednost
konstantna, poput broja ili konstante deklarirane sa const. Tako, ako je n varijabla,deklaracija
poput double prosjek[n]; nije dozvoljena, dok je ista deklaracija dozvoljena u sluaju da je n
konstanta. S druge strane, kada pristupamo elementima niza, indeks u zagradi moe biti proizvoljan
cjelobrojni aritmetiki izraz, tako da je uz pretpostavku da je n cjelobrojna varijabla, sljedei izraz
potpuno legalan:
prosjek [2*n-3] = 13.7;
Nizovi su sloeni tipovi (non-scalar types) podataka. Kod nizova iskljuivo pristupamo pojedinanim
elementima, a nikad nizu kao cjelini. Ne moemo jednom naredbom ispisati itav niz na ekran, niti
jednom naredbom unijeti cijeli niz sa tastature.
Indeksi niza koji ima n elemenata se kreu od 0 do n-1.
Procesiranje bilo kojeg polja obino ukljuuje koritenje petlje, koja ide kroz polje od elementa do
elementa. Sljedei primjer pokazuje funkciju koja rauna srednju vrijednost elemenata nekog polja od
tri cjelobrojna elementa:
const int velicina = 3;
double Srednja (int broj[velicina]) {
double srednja = 0;
for (int i = 0; i < velicina; ++i)
srednja += broj[i];
return srednja/velicina;
}

10.3.Inicijalizacija niza

Kad deklariramo niz lokalno (npr u funkciji), kao i kod obinih varijabli, elementi niza nemaju nikakvu
precizno odreenu vrijednost sve dok se eksplicitno ne izvri dodjela, bilo pomou operatora dodjele
=, bilo pomou unosa sa tastature.
Meutim, kod globalno deklariranih nizova lanovi niza se automatski inicijaliziraju nulama.
U oba sluaja ( i lokalno i globalno) pri deklaraciji niza imamo mogunost dodijeliti inicijalne vrijednsti
svakom elementu niza.
Na primjer:
int rezultat [9] = { 16, 2, 77, 40, 1207, 18, 103, 22, 49 };
Jo jedan primjer u kojem se dimenzija polja moe izostaviti je kada je neko polje parametar u nekoj
funkciji. Na primjer, funkcija Srednja se moe napisati na bolji nain, ako se postavi da dimenzija polja
nije fiksirana na neku konstantnu vrijednost, nego se doda jo jedan parametar, tj.
double Srednja (int broj[], int velicina) {
double srednja = 0;
for (int i = 0; i < velicina; ++i)
srednja += broj[i];
return srednja/velicina;
}


4
Preuzeto i prilagoeno by Motik, B. and ribar, J. Demistificirani C++. Element, Zagreb, 2. izdanje
edition, 2001.

87
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Vidi se da se pomou definicije int broj[] omoguava vea fleksibilnost dimenzije polja, pa je kompletan
program u tom sluaju:


Sljedei program predstavlja primjer pomou kojeg se unosi, sortira i ispisuje neki niz. Pri tome,
sortiranje je izvedeno od najveeg prema najmanjem elementu niza.

1#include <iostream>
2 using namespace std;
3 int main ()
4 {
5 // DEFINISANJE
6 int x[10];
7 int y[10];
8 int i, j, n;
9 // UNOSENJE
10 cout << "Unesite broj clanova polja (<10): ";
11 cin >> n;
12 for (i = 0; i < n; i++)
13 {
14 cout << "Unesite clan br. " << i << ": ";
15 cin >> x[i];
16 y[i] = x[i];
17 }
18 // SORTIRANJE
19 for (i = 0; i < n-1; i++)

88
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





20 {
21 for (j = i+1; j < n; j++)
22 {
23 if (y[i] < y[j]) swap(y[i],y[j]);
24 }
25 }
26 // STAMPANJE
27 cout << "x:" << \t << "y:" << endl;
28 for (i = 0; i < n; i++)
29 {
30 cout << x[i] << \t << y[i] << endl;
31 }
32 }

U ovom primjeru je za zamjenu vrijednosti varijabli koritena funkcija swap (linija 23), mada
programer sam moe definisati slinu funkciju.
Kao to je ranije reeno, za pohranjivanje testova se koriste znakovna polja (eng. string). To su, u
stvari, polja iji elementi imaju tip char. Prilikom inicijalizacije ovakvih polja, sadraj se stavlja izmeu
znaka dvostrukih navoda
. Na primjer:

"char str[] = "VOZDRA";
definie varijablu str kao niz od sedam (7) karaktera: est slova i jedan prazan karakter (null-
karakter). Zavrni prazan karakter postavlja kompajler. Zarazliku od toga,
char str[] = {V, O, Z, D, R, A};
definie varijablu str kao niz od 6 elemenata. Treba naglasiti da prethodni primjer nije ispravan, jer
svaki pravilno inicijalizirani niz karaktera mora obavezno da zavri null-karakterom. Takoer, ovakav
nain inicijaliziranja je neefikasan u odnosu na prvi.
Osim ovakvog predstavljanja rijei, tj. znakovnih polja, u C++ je ugraen i tip string, koji manipulie
sa znakovnim poljima. S obzirom da se radi o specijalnoj klasi u C++ , to pripada objektno-
orijentisanoj paradigmi, ovdje o tome nee biti rijei.


Broj elemenata navednih u vitiastim zagradama mora biti jednak broju elemenata koje smo naveli u
uglatim zagradama.
C++ dozvoljava i sljedee: ukoliko pri inicijalizaciji ostavite uglate zagrade prazne kompjaler e
pretpostaviti da je veliina niza jednaka broju vrijednosti navedenih u vitiastim zagradama.
int rezultat [ ] = { 16, 2, 77, 40, 1207, 18, 103, 22, 49 };
Kao i kod ostalih varijabli, vrijednosti elemenata polja se mogu inicijalizirati.U tu svrhu koriste se
zagrade {}, izmeu kojih se specificira lista poetnih vrijednosti elemenata polja koje su odvojene
zarezom. Na primjer,
int broj[3] = {5, 10, 15};
definie polje broj, i inicijalizira tri elementa ovog polja na vrijednosti 5, 10, 15, respektivno. Ovo je
tzv. eksplicitno inicijaliziranje. Kada je broj vrijednosti u inicijalizatoru manji od dimenzije polja, ostali
elementi su inicijalizirani na nulu, kao u sluaju:
int broj[3] = {5, 10}; // broj[2] je inicijaliziran na 0


89
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Kada se koristi potpuni inicijalizator (broj poetnih vrijednosti odgovara dimenziji polja), dimenzija
polja postaje suvina i moe se izostaviti, tj. broj elemenata je implicitan u inicijalizatoru implicitna
inicijalizacija. U ovom sluaju inicijalizacija polja broj se moe izvriti i na sljedei nain:
int broj[] = {5, 10, 15}; // dimenzija nije potrebna

10.4.Pristup elementima niza

Mogue je pristupiti bilo kojem pojedinanom elementu niza (kao bilo kojoj obinoj varijabli)
jednostavnim navoenjem imena niza i indeksa eljenog elementa:
ime [indeks]

Na primjer, ako elite pohraniti vrijednost 75 kao trei elment niza billy moete napisati sljedee:
rezultati[2] = 77;
a ako elite dodijeliti vrijednost treeg elementa niza varijabli a, moete pisati:
a = rezultati[2];
Primjeujete da je trei elment niza rezultati specificiran sa rezultati[2]. Zato indeks treeg elementa
ima vrijednost 2?
Prvi element niza ima vrijednost indeksa .
Dakle, polje ili niz je najjednostavnija struktura podataka . Niz je uredeni skup koji sadi odreeni
broj elemenata istoga tipa T. S nizom se moe manipulisati kao sa cjelinom, ali se takoer moe i
pristupati pojedinim njegovim elementima.
Nekom se elementu niza pristupa navoenjem njegovoga indeksa; pritom vrijeme pristupa
ne ovisi o vrijednosti indeksa. U jezicima C i C++ za pristup i_tom elementu niza a piemo a[i].
Vano je upamtiti da prvi element niza koji sadri n elemenata ima indeks 0, a posljednji indeks n-1.
Elementi niza se u memoriji raunala pohranjuju u n uzastopno smjetenih varijabli odreenoga tipa T.
U znanstvenim i tehnikim primjenama esto se pojavljuju velike koliine podataka (naprimjer
rezultata raznih mjerenja) koje treba srediti i klasificirati. Najee su to nizovi podataka istog tipa
(realni ili cijeli brojevi), pa su nizovi prikladne strukture za njihov prikaz.
Vidjeli smo osnovne karakteristike jednodimenzionalnog niza.
Sada emo objasniti osnovne elemente upotrebe niza kao parametra funkcije:
Navedimo nekoliko primjera:
1. Trebamo nai element niza koji ima maksimalnu vrijednost
2. Neka se bitna svojstva niza statistikih podataka mogu izraziti pomou nekoliko statistikih
parametara:
a) za dani se niz podataka n-1

90
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Za izraunavanje emo koristiti funkcije:
1. za lan niza sa maksimalnom vridjenou funkciju double max(double x[], int velicina)
2. a) za izraunavanje aritmetike sredine napisati emo funkciju koju emo nazvati double:
double mean(double x[], int velicina).
Navedemo li, pri pozivu funkcije, kao argument naziv neke varijable, njezina se vrijednost pridruuje
parametru funkcija (barata sa kopijom vanjske varijable). Znamo da se takvo prenoenje argumenta
u funkciju naziva poziv po vrijednosti.
Medutim ako bi tako radili sa nizom kao parametrom funkcije trebali bi u funkciju iskopirati
vrijednosti svih njegovih elemenata (kopiranje u novi privremeni niz) to bi nepotrebno produljilo
vrijeme izvoenja programa i gubitak memorijskoga prostora.
Radi toga niz u funkciju prenosimo referencom ali ne kristimo operator adrese & kao kod varijabli.
U C i C++ programskom jeziku ime niza sadrava adresu prvog (sa indeksom 0) lana.
Dakle, parametri funkcije su ime niza i veliina niza.
Funkcija za zadatak 1 je:
int max(int x[], int velicina)
{
int imax=0;
for (int i=1; i<velicina; i++)
if (x[i]>x[imax]) imax=i;
return(imax);
}
Poziv funkcije iz glavnog programa bie imax(x, velicina), s time da je int n poznat (definiran kao
konstanta).

91
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i













10.5.Multidimenzionalna polja(nizovi)


92
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Polje moe da ima i vie nego jednu dimenziju (dvije, tri, i vie). Ipak, organizacija polja u memoriji je
ista kao i prije, tj. neprekidna sekvenca elemenata,pa je percepcija programera neto drugacija od one
koja se namee na prvi pogled (kao multidimenzionalna). Na primjer, pretpostavimo da je srednja
vrijednost temperatura po godinjim dobima za tri bosanskohercegovaka grada data tabelom:


Ovo se moe predstaviti dvodimenzionalnim poljem cijelih brojeva:
int godDobTemp[3][4];
Ovo je u memoriji predstavljeno kao neprekidan niz od 12 elemenata tipa int . Programer, meutim,
moe to zamisliti kao tri reda od po 4 elementa u svakom,kao na slici.


Kao i kod jednodimenzionalnih polja (nizova), i ovdje se elementima pristupa preko indeksa. No,
neophodan je dodatni indeks za svaku dimenziju.
Na primjer, srednja temperatura u Zenici u toku ljeta, data je elementom
godDobTemp[2][1].
Inicijalizacija polja se moe obaviti pomocu ugnijedenog inicijalizatora, kao u:


int godDobTemp[3][4] = {
{10, 20, 10, 1},
{13, 21, 12, 3},
{14, 23, 11, 4}
};

Poto se ovo dvodimenzionalno polje mapira kao jednodimenzionalni niz od 12 elemenata, mogue je
koristiti i sljedei nain:

int godDobTemp[3][4] = {
10, 20, 10, 1, 13, 21, 12, 3, 14, 23, 11, 4
};

Ipak, bolja opcija je koritenje ugnijedenog inicijalizatora, poto ne samo da je pregledniji, nego daje i
dodatne mogunosti. Na primjer, ako je samo prvi element svakog reda razliit od nule, a ostali su
jednaki nuli, moemo koristiti:

int godDobTemp[3][4] = {{26}, {24}, {28}};





Takoer je mogue izostaviti prvu dimenziju (implicitna inicijalizacija), kao u:
int godDobTemp[][4] = {

93
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





{10, 20, 10, 1},
{13, 21, 12, 3},
{14, 23, 11, 4}
};

Procesiranje multidimenzionalnih polja je slino jednodimenzionalnim, s tim da se moraju koristiti
ugnijedene petlje. Sljedei primjer pokazuje pronalaenje maksimalnog elementa u
dvodimenzionalnom polju iz prethodnih primjera.



#include <iostream>
using namespace std;
const int redovi = 3;
const int kolone = 4;
int godDobTemp[redovi][kolone] = {
{72, 20, 10, 11},
{13, 21, 66, 3},
{14, 56, 11, 4}
};
int najTemp (int temp[redovi][kolone])
{
int najveca = temp[0][0];
for (int i = 0; i < redovi; ++i)
for (int j = 0; j < kolone; ++j)
if (temp[i][j] > najveca)
najveca = temp[i][j];
return najveca;
}
main ()
{
cout << najTemp(godDobTemp) << "\n";
system("PAUSE");
}
Napomena: Treba paziti kako se inicijalizira vrijednost kontrolne varijable najvea u prethodnom
primjeru; pravilno je postaviti na prvi lan polja,umjesto pretpostaviti neku konanu vrijednost (na
primjer 0).













Primjer 1: Unesi N lanova niza X pomou for petlje te ih zatim ispii na ekranu raunara, takoer
petljom for


94
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int i,N;
int X[10]; /*deklaracija niza od 10 cijelih brojeva*/
cout<<"Zadaj 0<N<10 = "; /*broj N mora biti manji od 10 jer je
deklariran niz od maksimalno 10 lanova*/
cin >>N;
for (i=0;i<N;i++) /*upis lanova niza*/
{
cin>>X[i]; /*upis i-tog lana niza*/
}

for (i=0;i<N;i++) /*ispis lanova niza for petljom*/
{
cout << X[i]; /*ispis i- tog lana niza*/
cout <<endl; /*ispis praznog retka (end line)*/
}
system ("PAUSE");
return 0;
}


Pitanja za utvrivanje
1. Da li neko polje moe sadravati i cijele brojeve, realne brojeve i karaktere?
2. Koji je indeks prvog elementa u nizu?
3. Koji je indeks posljednjeg elementa u nizu?
4. Koja je razlika izmeu inicijalizacije i pridruivanja?
5. Koja su dva naina inicijalizacije polja?












11.Pointeri(Pokazivai)
11.1.Osnovno o pointerima
5


5
Preuzeto i obraeno by Osnove programiranja u C++ -Aleksandar Kara;

95
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Pointeri (pokazivai) predstavljaju adresu neke memorijske lokacije i omoguuju indirektni nain
pristupa podacima u memoriji. Pointer varijabla se definie pokazivanjem na podatak odreenog tipa.

Na primjer,
int *ptr1; // pointer cijelog broja
char *prt2; // pointer karaktera
Vrijednost pointera varijable je adresa na koju pokazuje. Na primjer, ako se uzme da je:
int num;
moemo pisati:
ptr1 = &num;
Simbol & (ampersand, znak i) je adresni operator; on uzima varijablu kao argument i vraa
memorijsku adresu te varijable. Efekt prethodnog pridruivanja je da je adresa varijable num
pridruena pointeru ptr1. Na taj nain, kaemo da ptr1 pokazuje na num. Dijagramski prikaz ovog
pridruivanja datje na slici

Uzimajui da ptr1 pokazuje na num. Izraz:
*ptr1

dereferencira ptr1 da bi se dobilo ono na ta on pokazuje, pa je time ekvivalentan num. Simbol * je
operator dereferenciranja; on uzima pointer kao argument i vraa sadraj memorijske lokacije na koju
pokazuje.
Openito, tip pointera mora odgovarati tipu podatka na koji taj pointer pokazuje. Meutim, pointer tipa
void odgovara bilo kojem tipu. Ovo je veoma korisno pri definisanju pointera koji mogu pokazivati na
podatke razliitih tipova, ili one podatke kojima tip u poetku nije poznat.
Pointer se moe konvertovati (pomou cast) u neki drugi tip.
Na primjer,
ptr2 = (char*) ptr1;
konvertuje ptr1 u pointer karaktera prije nego se pridrui pointeru ptr2.
Bez obzira na tip, pointeru se moe pridruiti vrijednost 0. Ovakav pointer se naziva null-pointer. Null-
pointer se koristi za inicijalizaciju pointera, i za obiljeavanje kraja struktura sa podacima koji se
zasnivaju na pointerima (na primjer, linkovane liste i sl.).

11.2.Dinamika memorija

Pored programskog stoga (eng. stack ), koji se koristi za pohranjivanje globalnih varijabli, te blokova
stogova za pozivanje funkcija, na raspolaganju je i drugi vid memorije, koji se naziva hrpa (eng. heap).
Ova memorija se koristi za dinamiko alociranje memorijskih blokova u toku izvrenja programa.
Zbog toga se ova memorija esto naziva i dinamika memorija. S druge strane, programski stog se
esto naziva statika memorija.
Za alociranje i dealociranje memorijskih blokova u hrpi (jo se naziva i javna memorija) koriste se dva
operatora. Operator new kao argument uzima tip i alocira memorijski prostor za objekat tog tipa. On
vraa pointer na alocirani prostor. Na primjer,
int *ptr = new int;
char *str = new char[10];
alociraju prostor za jedan cijeli broj i prostor koji je dovoljno velik da pohrani niz od deset karaktera,
respektivno.
Memorija koja se alocira iz hrpe ne ispunjava ista pravila podruja definisanosti (eng. scope rules) kao
normalne varijable. Na primjer, kada funkcija
Funkcija

96
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





void Funkcija (void) {
char *str = new char[10];
//...
}

vraa vrijednost, lokalna varijabla str je unitena, ali memorijski prostor koji pokazuje na str nije. Ovo
posljednje ostaje alocirano sve dok ga programer eksplicitno ne oslobodi.
Operator delete se koristi za oslobaanje memorijskog prostora koji se alocira pomou new. On uzima
pointer kao argument i oslobaa memorijski prostor na koji taj pointer pokazuje.
Na primjer,
delete ptr; // brie neki objekat
delete [] str; // brie niz objekata
Ukoliko bi se na niz podataka, koristio prvi pristup, oslobaa se prostor samo jednog elementa niza,
tako da je u sluaju nizova uvijek neophodno dodati zagrade [ ], koje treba da to i pokau. Ako se
operator delete treba primijeniti na pointer koji pokazuje ni na ta drugo no dinamiki alocirani objekat
(na
primjer varijabla u stogu), moe doi do ozbiljne greke (tipa runtime). S druge strane, potpuno je
bezazleno primijeniti ovaj operator na null-pointer. Dinamiki objekti su veoma korisni za kreiranje
podataka koji traju due od poziva funkcija koje ih kreiraju. Sljedei primjer pokazuje jedan takav
sluaj,
gdje se koristi funkcija koja uzima string parametar i vraa kopiju stringa.

1 #include <string>
2 char* CopyOf (const char *str)
3 {
4 char *copy = new char[strlen(str) + 1];
5 strcpy(copy, str);
6 return copy;
7 }

U linija 1, kao to je ve poznato, poziva se standardna biblioteka string koja definie mnotvo funkcija
za manipulisanje sa stringovima. Funkcija strlen (definisana u string), u liniji 4, daje broj karaktera
njenog argumenta (koji je tipa string) do posljednjeg null-karaktera, koji nije uzet u obzir. Kako
nullkarakter nije ukljuen u brojanje, treba dodati jo jedan karakter i alocirati niz karaktera te velicine
(sa tim brojem karaktera). Funkcija strcpy, koja je takoer definisana u string, kopira drugi argument
na prvi, karakter po karakter, ukljuujui i posljednji null-karakter.
Zbog ogranienih memorijskih resursa, uvijek postoji mogunost da se dinamika memorija "potroi" u
toku izvrenja programa, naroito ako se alocira veliki prostor, ali se i ne oslobodi. U sluaju da
operator new ne moe da alocira prostor potrebne veliine, vratie vrijednost nula. Na programeru je
da sebavi ovakvim problemima. Jedna od osnovnih karakteristika jezika C++ , rad
sa iznimkama, daje praktian primjer ta i kako raditi sa ovim problemima.


11.3.Pointeri i polja

Pointeri i polja su u jeziku C++ povezani. Naime, lanovima polja se pristupa preko pointera. Tako na
primjer, naredbom
int cijeliBroj[10];
definiemo jednodimenzionalno polje cijelih brojeva tipa int sa deset lanova.Ime varijable cijeliBroj
ima smisao pointera na prvi elemenat polja cijeliBroj[0]. Prilikom pristupa elementima polja, kompajler
vrijednost indeksa dodaje pointeru na prvi elemenat, tako da se naredba
int broj = cijeliBroj[3];
prevodi kao
int broj = *(cijeliBroj+3);

97
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Posljednja naredba se moe shvatiti kao: uzmi adresu prvog elementa polja,poveaj je za 3, pogledaj
ta se nalazi na toj adresi, te pridrui tu vrijednost varijabli broj. Dakle, ako imamo definisano polje
int cijeliBroj[] = {1,2,3};
onda imamo sljedea znaenja:

cout << cijeliBroj << endl;
// adresa pocetnog elementa
cout << *cijeliBroj << endl;
// vrijednost pocetnog elementa polja
cout << &(cijeliBroj[1]) << endl;
// adresa elementa cijeliBroj[1]
cout << (cijeliBroj + 1) << endl;
// adresa elementa cijeliBroj[1]

Stoga se elementima polja moe pristupati i preko pointera i preko indeksa, i na programeru je koji e
pristup koristiti. Ipak, treba naglasiti da se definicijom
int cijeliBroj[10];
ne stvara pointer na varijablu cijeliBroj koji pokazuje na polje, nego je cijeliBroj samo sinonim za
pointer na prvi elemenat polja. Vrlo slina diskusija se moe primijeniti i na viedimenzionalna polja, s
obzirom da su u memoriji raunara ista predstavljena jednodimenzionalnim poljima.
11.4.Aritmetika sa pointerima

U C++ je mogue neku cjelobrojnu vrijednost dodati i oduzeti od pointera.Programeri esto koriste ovu
mogunost, koja se jo naziva i aritmetika sa pointerima. Ova aritmetika, pak, nije ista kao ona sa
cjelobrojnim vrijednostima, jer rezultat zavisi od veliine objekta na koji se pokazuje.
Na primjer,
pretpostavimo da je int predstavljen sa 4 bajta. Ako se uzme da je
char *str = "VOZDRA";
int broj[] = {10, 20, 30, 40};
int *ptr =&broj[0];
str++ e "napredovati" str za jedan karakter char, tj. za jedan bajt, tako da pokazuje na drugi karakter
niza karaktera "VOZDRA", dok e ptr++ "napredovati"ptr za jedan int, tj. 4 bajta, tako da pokazuje na
drugi elemenat niza.

Na osnovu prethodno reenog slijedi da se elementi niza "VOZDRA" mogu predstaviti i sa *str,
*(str+1), *(str+2), itd.. Na slian nain, elementi niza broj se mogu predstaviti sa
*ptr, *(ptr+1), *(ptr+2) i *(ptr+3).
Jo jedan vid aritmetike sa pointerima koji je dozvoljen u C++ je oduzimanje pointera istog tipa.
Na primjer,
int *ptr1 = &broj[1];
int *ptr2 = &broj[3];
int n = ptr2 - ptr1; // n postaje 2
Aritmetika sa pointerima je veoma korisna kada se pristupa elementima nekog niza. Sljedei primjer
pokazuje funkciju za kopiranje rijei slinu funkciji strcpy.

98
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





1 void CopyString (char *dest, char *src)
2 {
3 while (*dest++ = *src++)
4 ;
5 }

U liniji 3, uslov petlje pridruuje sadraj src sadraju dest, a zatim inkrementalno povecava oba
pointera. Ovaj uslov postaje jednak nuli kada je posljednji null-karakter pointera src kopiran u dest.
Pokazuje se da je varijabla koja predstavlja niz, kao to je to sluaj sa broj sama po sebi adresa prvog
elementa niza koji predstavlja. Stoga se elementima varijable broj moe pristupiti i preko aritmetike sa
pointerima na broj, tj. broj[i] je ekvivalentno *(broj+i). Razlika izmeu broj i ptr je u tome to je broj
konstanta, tako da ne moe pokazivati ni na ta, dok je ptr varijabla i moe se iskoristiti da pokazuje
na bilo koji drugi cijeli broj.Sljedei primjer pokazuje kako funkcija najTemp, koja je pokazana u
prethodnom poglavlju moe da se pobolja koritenjem aritmetike sa pointerima.
1 int najTemp (const int *temp, const int redovi,
2 const int kolone)
3 {
4 int najveca = 0;
5 for (int i = 0; i < redovi; ++i)
6 for (int j = 0; j < kolone; ++j)
7 if (*(temp + i * kolone + j) > najveca)
8 najveca = *(temp + i * kolone + j);
9 return najveca;
10 }

U ovom sluaju, umjesto da se na funkciju prenosi niz (linija 1), prenosi se int pointer i dva dodatna
parametra koja specificiraju dimenzije niza. Na ovaj nain, funkcija nije ograniena na niz odreene
duine. Izraz *(temp+i * kolone+ j) u liniji 8, je ekvivalentan izrazu temp[i][j] koji je koriten u
prethodnom poglavlju.
Funkcija najTemp se moe dalje pojednostaviti, ako se temp tretira kao jednodimenzionalni niz od
redovi*kolone cijelih brojeva. Ovo je pokazano u sljedeem primjeru.
1 int najTemp (const int *temp, const int redovi,
2 const int kolone)
3 {
4 int najveca = 0;
5 for (int i = 0; i < redovi * kolone; ++i)
6 if (*(temp + i) > najveca)
7 najveca = *(temp + i);
8 return najveca;
9 }

11.5.Funkcijski pointeri
6

Pored svega do sada reenog o pointerima, mogue je uzeti i adresu funkcije i pohraniti je kao pointer
funkcije. Tada se pointer moe koristiti da indirektno pozove funkciju.
Na primjer,
int (*Uporedi)(const char*, const char*);


6
Preuzeto i obraeno by Osnove programiranja u C++ -Aleksandar Kara;

99
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





definie pointer funkciju koja se naziva Uporedi koja moe zadrati adresu bilo koje funkcije koja kao
argumente uzima dva konstantna pointera tipa char i vraa cjelobrojnu vrijednost. Takva je, na
primjer, funkcija strcmp, koja slui za uporeivanje stringova.
Na taj nain imamo:
Uporedi = &strcmp; // funkcija Uporedi pokazuje na strcmp
// funkciju
Operator & nije neophodan i moe se izostaviti:
Uporedi = strcmp; // funkcija Uporedi pokazuje na strcmp
// funkciju
Kao alternativa, mogue je definisati i inicijalizirati pointer odjednom, kao

int (*Uporedi)(const char*, const char*) = strcmp;

Kada se adresa funkcije pridruuje pointeru funkcije, dva tipa se moraju poklapati. Prethodna definicija
je ispravna jer se prototip funkcije strcmp poklapa
int strcmp(const char*, const char*);
Sa definicijom funkcije Uporedi datom prethodno, strcmp se moe koristiti direktno, ili indirektno preko
Uporedi. Sljedea tri poziva su ekvivalentna:
strcmp("Suljo","Mujo"); // direktni poziv
(*Uporedi)("Suljo","Mujo"); // indirektni poziv
Uporedi("Suljo","Mujo"); // indirektni poziv (skraceno)
est sluaj koritenja pointer funkcije je da se prenese kao argument nekoj drugoj funkciji; obino zbog
toga to posljednja trai razliite oblike prve u razliitim okolnostima. Dobar primjer je binarna
pretraivaka funkcija koja pretrauje kroz ureeni niz stringova. Ova funkcija moe koristiti funkciju
uporeivanja (kao to je strcmp) radi uporeivanja stringa koji se trai i niza stringova. No, ovo ne
mora da bude prigodno za sve sluajeve. Na primjer,strcmp razlikuje mala i velika slova. Ako bismo
eljeli da izvrimo pretraivanje bez razlikovanja malih i velikih slova, onda bismo trebali koristiti drugu
funkciju za uporeivanje.
Kao to je pokazano u sljedeem primjeru, postavljajui funkciju uporeivanja kao parametar funkcije
pretraivanja, imamo mogunost da ih postavimo nezavisno jednu od druge.

1 int BinTrazi (char *podatak, char *tabela[], int n,
2 int (*Uporedi)(const char*, const char*))
3 {
4 int dole = 0;
5 int gore = n - 1;
6 int sred, cmp;
7 while (dole <= gore) {
8 sred = (dole + gore) / 2;
9 if ((cmp = Uporedi(podatak,tabela[sred])) == 0)
10 return sred; // return item index
11 else if (cmp < 0)
12 gore = sred - 1; // pretrazi donji dio
13 else
14 dole = sred + 1; // pretrazi gornji dio
15 }
16 return -1; // nije pronadjeno
17 }


100
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Linije 1 i 2 predstavljaju potpis funkcije BinTrazi, koja predstavlja poznati algoritam za traenje kroz
sortiranu listu podataka. Lista traenja je, u ovom sluaju, tabela koja predstavlja polje stringova sa
dimenzijom n. Podatak koji se trai je pod imenom podatak. Linija 2 predstavlja pointer funkciju koja
treba da se koristi za uporeivanje podatka podatak sa elementima polja.
Algoritam za pretraivanje zapoinje u liniji 7 koristei while petlju, i u svakom koraku opseg
pretraivanja polovi. Postupak se zaustavlja kada se granice opsega, oznaene sa dole i gore, poklope,
ili dok se podatak ne nae.
Podatak se poredi sa srednjim elementom polja (linija 9), i ako se sa njim poklapa, vraa se indeks
istog (linija 10). Ako je, pak, podatak manji od srednjeg podatka, pretraivanje se ograniava na donju
polovinu polja (linija 11-12). U suprotnom, pretraivanje se ograniava na gornju polovinu polja
(linija 13-14).
U sluaju da nije pronaen podatak koji se poklapa sa traenim, funkcija vraa vrijednost 1.
Sljedei primjer pokazuje kako se funkcija BinTrazi moe pozvati sa strcmp,koji se prenosi kao funkcija
za uporeivanje.
char *gradovi[] = {"Doboj","Kakanj","Sarajevo","Zenica"}
cout << BinTrazi("Zenica", gradovi, 4, strcmp) << endl;
Rezultat posljednje naredbe bio bi, naravno, 3.



Pitanja za utvrivanje
1. ta su pointeri ili pokazivai?
2. Koja je razlika u definisanju cjelobrojne varijable i cjelobrojne pointer varijable?
3. Koje je znaenje tipa podatka u definiciji pointera?
4. ta je to null-pointer?
5. Koji operator se koristi da bi se pointer pridruio adresi neke druge varijable ili konstante?
6. Da li pointer moe pokazivati na razliitu memorijsku lokaciju u razliitim vremenskim periodima u
programu?
7. Da li na istu memorijsku lokaciju moe da pokazuje vie od jednog pointera?
8. ta je rezultat inkrementiranja pointer varijable?
9. ta je to dinamika memorija?
10. Koja je veza pointera i polja?
11. ta predstavljaju aritmetike operacije sa pointerima?
12. Objasni pojam funkcijskih pointera?


12.Datoteke
Ovo poglavlje pokazuje kako se podaci dobiveni pokretanjem nekog programa mogu sauvati
(pohraniti) na neku datoteku. S obzirom da uvanje podataka nema svrhu ako tim podacima ne
moemo da pristupamo, bie objanjeno i kako proitati podatke sa neke datoteke.
Datoteka, pri tome, predstavlja skup podataka koji su snimljeni na neku formu trajne memorije (hard
disk, CD-ROM, floppy disk, itd.). Datoteci se pristupa preko njenog imena (filename), u ijem sastavu
se obino nalazi ekstenzija (dio imena iza take), koja oznaava tip podataka u datoteci (npr. .doc
za Microsoft Word, .xls Microsoft Excel, .cpp za C++ izvornu datoteku, itd.).

101
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





U osnovi, postoje dvije vrste datoteka: tekstualne i binarne. Tekstualne datoteke sadre tekst, dok
binarne mogu sadravati i kompleksnije vrste podataka, kao to su slike, izvrni programi, baze
podataka, itd. Tekstualnim datotekama je neto jednostavnije pristupiti, pisati podatke u njih, te itati
sa
njih. Upravo to je i razlog zbog ega ce se primjeri u ovom poglavlju odnositi samo na njih.
12.1.Standardna biblioteka fstream

U ranijim poglavljima koristili smo standardnu biblioteku iostream (io se odnosi na input/output), koja
pored ostalog, daje mogunost ispisivanja na standardni izlaz (ekran, monitor) pomou cout, te itanje
sa standardnog upisa (tastatura) pomou cin. Meutim, ova datoteka nam ne omoguava da podatke
trajno sauvamo. U tu svrhu se koristi standardna biblioteka fstream (f se odnosi na datoteku, tj. file),
koja omoguava pisanje na i itanje sa datoteka. Ovo se postie pozivanjem sadraja datoteke fstream
sa:
#include <fstream>
Biblioteka fstream definie tri nova tipa podataka:
ofstream. Ovaj tip podataka predstavlja tok za izlazne datoteke (o se odnosi na output). Pravac
izlaza je sa programa na datoteku. Ovaj tip podataka se koristi za kreiranje datoteka i pisanje
informacija na njih. Ne moe se koristiti za itanje datoteka.
ifstream. Ovaj tip podataka predstavlja tok za ulazne datoteke (i se odnosi na input). Pravac
ulaza je sa datoteke prema programu. Ovaj tip podataka se koristi za itanje informacija sa datoteka.
Ne moe se koristiti za kreiranje datoteka i pisanje na njih.
fstream. Ovaj tip podataka predstavlja openito tok za datoteke, ima karakteristike i ofstream i
ifstream objekata. Pomou ovog tipa, datoteke se mogu kreirati, moe se pisati na njih ali i itati sa
njih.

"ivotni" ciklus pristupa datotekama
Kada program pristupa datotekama, bez obzira da li ih ita, ili na njih pie,ili ini oboje, on prolazi kroz
sljedee korake:
Datoteka prvo mora da se otvori. Ovo otvara put u komunikaciji izmeu datoteke i objekta toka
u programu (fstream, ifstream, ofstream), koji se koristi u pristupu datoteci.
Nakon otvaranja, program ita sa datoteke, pie na nju, ili ini oboje.
Na kraju, program zatvara datoteku. Ovo je bitan korak, poto odravanje komunikacije izmeu
datoteke i objekta toka zahtijeva resurse, tako da zatvaranje datoteke oslobaa ove resurse kada vie
nisu potrebni. Uz to,postoji mogunost da se kasnije u programu ne moe pristupiti datoteci ako
prethodno nije zatvorena.
12.2.Otvaranje datoteka
Bez obzira da li se sadraj datoteke treba proitati ili se na datoteku trebaju ispisati neki podaci,
datoteka prvo treba da se otvori. Naredna poglavlja pokazuju kako se to obavlja.
Otvaranje datoteke za pisanje
Datoteke za pisanje se mogu otvoriti pomou fstream i ofstream objekata na dva naina:
(i) pomou metode open, ili (ii) pomou konstruktora (constructor1).
Otvaranje pomou funkcije open Ovaj nain otvaranja datoteke postiemo na sljedei nain:
1 ofstream izlaz;
2 izlaz.open("ucenici.txt");
Prvom linijom je kreiran objekat izlaz tipa ofstream, dok se u drugoj liniji kreira datoteka ucenici.txt.
Kao to se vidi, argument funkcije open je ime i lokacija datoteke koja se treba otvoriti. Meutim,

102
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





mogue je dodati i drugi argument zavisno od toga da li je funkcija open lan objekta fstream ili
ofstream,
ili se eli neki drugi modul od onog koji se daje .
Datoteka u koju elimo pisati podatke ne mora postojati. U sluaju da ne postoji, ona e se automatski
kreirati pod imenom i na lokaciji koju smo upisali.
Lokacija se moe dati kao relativna (relative path) ili apsolutna (absolute path). Pri tome, relativni put
predstavlja lokaciju u odnosu na lokaciju programa, tj.direktorij u kojem se nalazi izvorna datoteka.
Za razliku od relativnog puta, apsolutni put predstavlja lokaciju koja zapoinje slovom drajva,
sadravajui sve direktorije i poddirektorije, dok se ne doe do datoteke. Na primjer, ako je datoteka
ucenici.txt u direktoriju Srednja, a ovaj je poddirektorij direktorija Mssbusovaca, a sve se nalazi na
tvrdom disku sa slovom C, onda bi se datoteka otvorila na sljedei nain:
ofstream izlaz;
izlaz.open("C:\\MFZE\\Busovaca\\ucenici.txt");
Vidimo da se u tom sluaju koriste po dva znaka n, jer samo jedan izmeu navodnika predstavlja
escape-sekvencu.
Bez obzira da li koristimo relativni ili apsolutni put, argument za funkciju open ne mora da bude neko
ime (rije), nego i (string) varijabla, kao to je to u sljedeem primjeru:
ofstream izlaz;
char imeDatoteke[80];
cout << "Unesite ime datoteke: ";
cin >> imeDatoteke;
izlaz.open(imeDatoteke);

Vano je zapamtiti da je koritenje relativnog puta bolja opcija, jer se moe desiti da neki direktorij u
apsolutnom putu ne postoji, naroito ako se program koristi na nekom drugom kompjuteru (sa
drugaijim rasporedom direktorija).
Koritenje drugog argumenta u funkciji open definie modul u kojem se datoteka treba otvoriti. Neke
od opcija (tzv. file mode flag), koje se mogu koristiti date su u Tabeli:

Ako, na primjer, elimo da konstantno dodajemo neke podatke u datoteku
log, koristimo opciju ios::app, tj.
ofstream izlaz;
izlaz.open("log", ios::app);
Kada za otvaranje datoteke koristimo ofstream objekat, onda ne moramo koristiti dodatne argumente,
ali treba zapamtiti da u tom sluaju moemo samo upisivati informaciju na datoteku, ali ne i itati sa
nje.

103
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Meutim, ako se za otvaranje datoteke za pisanje koristi fstream objekat, treba dodati jo jedan
argument, tj. opcija za pisanje ios::out. U ovom sluaju imamo:
fstream izlaz;
izlaz.open("ucenici.txt", ios::out);
Otvaranje pomou konstruktor

Konstruktori su funkcije koje se automatski pozivaju kada se pokuava kreirati primjerak (eng.
instance) nekog objekta (primjerak je prema objektu isto to i varijabla prema tipu podatka). Oni mogu
biti optereeni (eng. overloaded), tako da isti objekat moe imati konstruktor sa nijednim, jednim, dva,
ili vie argumenata. U prethodnim primjerima (npr. fstream izlaz;) koritene su naredbe sa
konstruktorima bez argumenata.
Naredni primjeri pokazuju upotrebu konstruktora sa jednim i dva argumenta, respektivno:
ofstream izlaz("ucenici.txt");
fstream izlaz("ucenicii.txt",ios::out);
Prvi sluaj zamijenjuje izraz:
ofstream izlaz;
izlaz.open("ucenici.txt");
a drugi
fstream izlaz;
izlaz.open("ucenici.txt", ios::out);
Primjena konstruktora, u stvari, omoguava definisanje i inicijalizaciju primjerka nekog objekta. Kao i u
sluaju definisanja (deklarisanja) i inicijalizacije varijabli, koritenje jednog od naina otvaranja
datoteke zavisi od samog programa i naih potreba.


Otvaranje datoteka za itanje
Sve to je reeno u prethodnom poglavlju moe se primijeniti i na otvaranje datoteka za itanje. Jedina
razlika je to se, uz koritenje objekta fstream, umjesto objekta ofstream koristi ifstream objekat. Uz
to, datoteka sa koje se ita mora postojati, jer se pokretanjem jednog od prethodnih objekata datoteka
ne kreira.
Analogno diskusiji o otvaranju datoteka za pisanje, otvaranje datoteke za itanje se moe otvoriti na
jedan od sljedeih naina:
1) pomou ifstream objekta
ifstream ulaz;
ulaz.open("ucenici.txt");
2) pomou fstream objekta
fstream ulaz;
ulaz.open("ucenici.txt", ios::in); //obavezno dodati argument ios::in
3) pomou konstruktora
ifstream ulaz("ucenici.txt");
fstream ulaz("ucenici.txt", ios::in);

Otvaranje datoteka za itanje i pisanje
Kao to je ranije reeno, objekat fstream se moe koristiti za otvaranje datoteka i za pisanje i za
itanje. U tu svrhu koristi se sljedea sintaksa:
fstream izlazUlaz;
izlazUlaz.open("ucenici.txt", ios::in | ios::out);
ili pomou konstruktora:

104
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





fstream izlazUlaz("ucenici.txt", ios::in | ios::out);
U oba primjera koriten je bitovni operator i, |,
Provjera da li je datoteka otvorena.
Prije nego ponemo itati podatke sa neke datoteke, korisno je znati da li ona uopte postoji. Provjera
se moe izvriti na dva naina. Ako se datoteka ne moe otvoriti za itanje, onda je:
(i) vrijednost ifstream objekta jednaka NULL (nula),
(ii) vrijednost funkcije fail objekta ifstream je true(1). Sljedei primjer ilustruje koritenje oba naina.

#include <fstream>
#include <iostream>
using namespace std;
int main (){
ifstream ulaz;
ulaz.open("ucenici.txt");
cout << "(ulaz) = " << ulaz << endl;
cout << "(ulaz.fail()) = " << ulaz.fail() << endl;
return 0;
}

Ako datoteka ucenici.txt ne postoji nakon izvrenja programa dobijamo:
(ulaz) = 0
(ulaz.fail()) = 1
U sluaju da postoji, izlaz je, na primjer:
(ulaz) = 0x22fed4
(ulaz.fail()) = 0
pri emu 0x22fed4 predstavlja memorijsku lokaciju (adresu) ifstream varijable ulaz.

105
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i







Za razliku od ifstream objekta, ofstream objekat koji pokuava otvoriti datoteku koja ne jo postoji nije
NULL, a njegova fail funkcija ima vrijednost false(0). To je zbog toga to operativni sistem kreira
datoteku, ako ona ne postoji. Ipak, i u ovom sluaju je korisno provjeriti da li datoteka postoji.
Naime, ako datoteka postoji, ali ima osobinu read-only2, dobiemo negativan odgovor o njenom
postojanju (vrijednost iostream objekta je NULL, a funkcije fail je true, tj. 1).




12.3.Zatvaranje datoteka

Svaka otvorena datoteka se treba zatvoriti prije nego se napusti program. To je zbog toga to svaka
otvorena datoteka zahtijeva sistemske resurse. Osim toga, neki operativni sistemi imaju ogranienje
na broj otvorenih datoteka sa kojima se ne "manipulie".
Zatvranje datoteka se vri pomou funkcije close. Sljedei primjeri pokazuju njenu upotrebu pri
zatvaranju datoteka za pisanje i itanje:
ofstream izlaz;
izlaz.open("ucenici.txt");
// skup naredbi
outfile.close();

106
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





ifstream ulaz;
ulaz.open("ucenici.txt");
// skup naredbi
ulaz.close();

12.4.Pisanje na datoteke

Pisanje podataka na datoteku se izvodi pomou operatora za ispisivanje (<<),
kao to je to bio sluaj sa ispisivanjem na ekran (cout<<). Jedina razlika je utome to se ovdje koristi
fstream ili ofstrem objekat, a ne cout objekat.
Sljedei program pokazuje primjer upisivanja podataka na datoteku ucenici.txt:

1 #include <fstream>
2 #include <iostream>
3 using namespace std;
4
5 int main (){
6 char podaci[80];
7 ofstream izlaz;
8 izlaz.open("ucenici.txt");
9 cout << "Zapisivanje u datoteku" << endl;
10 cout << "=======================" << endl;
11 cout << "Upisite razred: ";
12 cin.getline(podaci, 80);
13 izlaz << podaci << endl;
14 cout << "Unesite broj ucenika: ";
15 cin >> podaci;
16 cin.ignore();
17 izlaz << podaci << endl;
18 izlaz.close();
19 return 0;
20 }


107
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






U ovom primjeru upis teksta sa tastature je obavljen pomou funkcijskog lana objekta cin getline()
(linija 12), koji kao prvi argument uzima znakovni niz, a kao drugi duinu istog. Ovim se tekst koji je
upisan preko tastature,pridruuje varijabli podaci, koja je data kao niz od 80 elemenata. U liniji
16 koritena je funkcija ignore() (i ovo je funkcijski lan klase iostream), koja u ovom obliku (bez
argumenata) ima za cilj da proita sljedei karakter pri upisu, ali ga ne pridrui nijednoj varijabli. To je
zbog toga to nema potrebe za pridruivanjem karaktera, koji oznaava novu liniju, koji je ostao pri
itanju u ulaznom meuspremniku (eng. input buffer) nekoj varijabli.
Upotrebom drugog argumenta pri otvaranju datoteke za pisanje (ios::app)
moemo dodavati sadraj na postojeu datoteku kao to to pokazuje sljedei primjer. U ovom primjeru
zapisivanje se prekida nakon unosa znakova ***.



#include <iostream>

108
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





#include <string>
#include <fstream>
using namespace std;
int main ()
{
char x[100];
ofstream izlaz;
izlaz.open("podaci.txt", ios::app);
while (x != "***")
{
cout << "Unesite neki tekst
(za kraj unesite ***):" << endl;
cin >> x;
izlaz << x << endl;
}
izlaz.close();
}

12.5.itanje sa datoteka

Analogno prethodnom poglavlju, itanje podataka sa datoteka obavlja se pomou operatora za itanje
(>>) kao to je to sluaj sa ispisivanjem sa tastature (cin>>). Sljedei primjer nadopunjava onaj iz
prethodnog dijela, tj. nakon to korisnik upie informacije na datoteku, program ita iste podatke sa
datoteke i ispisuje ih na ekran.
1 #include <fstream>
2 #include <iostream>
3 using namespace std;
4
5 int main (){
6 char podaci[100];
7 ofstream izlaz;
8 izlaz.open("ucenici.txt");
9 cout << "Upisivanje u datoteku" << endl;
10 cout << "=====================" << endl;
11 cout << "Unesite razred: ";
12 getline(cin,podaci);
13 izlaz << podaci << endl;
14 cout << "Unesite broj ucenika: ";
15 cin >> podaci;
16 cin.ignore();
17 izlaz << podaci << endl;
18 izlaz.close();
19
20 ifstream ulaz;
21 cout << "Citanje sa datoteke" << endl;
22 cout << "===================" << endl;
23 ulaz.open("ucenici.txt");
24 getline(ulaz,podaci);
25 cout << podaci << endl;
26 getline(ulaz,podaci);
27 cout << podaci << endl;
28 ulaz.close();
29 return 0;

109
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





30 }

Slino primjeru iz prethodnog dijela, podaci se unose pomou funkcije getline (linija 13) sa neto
drugaijom sintaksom. Ovdje pomenuta funkcija (definisana je kao funkcija, a ne funkcijski lan) ima
dva argumenta:
prvi tipa iostream (cin), a drugi varijabla podaci. Na slian nain se pomou iste funkcije podaci itaju
sa datoteke (linije 23 i 25), pri emu je prvi lan objekat ulaz tipa ifstream.
Prethodni primjer se moe napisati i na programerski adekvatniji nain upotrebom funkcija za itanje i
pisanje na datoteku.
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
bool upisiDatoteku (ofstream&, char*);
bool citajDatoteku (ifstream&, char*);
int main (){
char podaci[100];
bool status;
ofstream izlaz;
status = upisiDatoteku(izlaz, "ucenici.txt");
if (!status)
{
cout << "Datoteka za ispisivanje se ne moze otvoriti\n";
cout << "Program se zavrsava\n";
system("PAUSE");
return 0;
}
else
{
cout << "Pisanje u datoteku" << endl;
cout << "==================" << endl;
cout << "Upisite razred: ";
getline(cin, podaci);
izlaz << podaci<< endl;
cout << "Unesite broj ucenika: ";
cin >> podaci;
cin.ignore();
izlaz << podaci<< endl;
izlaz.close();
}
ifstream ulaz;
status = citajDatoteku(ulaz, "ucenici.txt");
if (!status)
{
cout << "Datoteka za citanje se ne
moze otvoriti\n";
cout << "Program se zavrsava\n";
system("PAUSE");
return 0;
}
else
{
cout << "Citanje se datoteke" << endl;

110
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





cout << "===================" << endl;
getline(ulaz, podaci);
while(!ulaz.fail()) {
cout << podaci << endl;
getline(ulaz, podaci);
}
ulaz.close();
}
system("PAUSE");
return 0;
}
bool upisiDatoteku (ofstream& datoteka, char* strDatoteka)
{
datoteka.open(strDatoteka);
if (datoteka.fail())
return false;
else return true;
}
bool citajDatoteku (ifstream& datoteka, char* strDatoteka)
{
datoteka.open(strDatoteka);
if (datoteka.fail())
return false;
else return true;
}


Iz ovog primjera se vidi da se ifstream i ofstream objekti u funkcijama upisiDatoteku i citajDatoteku
prosljeuju po referenci, iako nije dna od ovih funkcija ne mijenja sadraj datoteke. Razlog lei u
injenici da unutranje stanje objekta toka moe promijeniti koritenjem open funkcije, iako se sadraj
ne mijenja.
Sukcesivno itanje
esto puta je potrebno proitati sve podatke sa neke datoteke, pri emu unaprijed ne poznajemo
konaan broj informacija (na primjer, proizvoljan broj vrijednosti neke varijable). U tu svrhu se koristi
funkcija eof (od engleske rijei end of file), koja je tana ukoliko se proe posljednja linija u kojoj
postoji
neka informacija. Sljedei primjer pokazuje upotrebu ove funkcije u problemu itanja nizova karaktera
(rijei).
#include <iostream>
#include <fstream>
using namespace std;
int main ()
{
char podaci[80];
ifstream saDat;
saDat.open("podaci.txt");
while(!saDat.eof()) {
saDat >> podaci;
cout << podaci << endl;
}
saDat.close();
system("PAUSE");

111
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





}
Linije petlja while, omoguavaju sukcesivno itanje podataka sa datoteke podaci.txt. Kada se doe do
posljednje linije sa nekom informacijom, funkcija eof vraa vrijednost true i automatski se izlazi iz
petlje. Na analogan nain se mogu itati podaci rasporeeni u kolone.

Pitanja za utvrivanje
1. Nabrojati formate datoteka u kojima se mogu pohraniti podaci!
2. Koja standardna datoteka treba da se pozove kada program pie na datoteku ili ita sa nje?
3. Koji od tri objekta iostream, ifstream, fstream, moe sluiti i za upis i za ispis na datoteke?
4. U emu se sutina zatvaranja datoteke?
5. ta je konstruktor?
6. Da li se stream objekti trebaju proslijediti po vrijednosti ili referenci, i zato?

13.Zbirka Zadataka
13.1.Zadaci pravolinijska struktura
Zadatak 1
Potrebno je izraunati srednju vrijednost po volji izabrana etiri realna broja. Ispis neka bude oblika:
Unesi cetiri realna broja:
Srednja vrijednost brojeva ...., ...., .... i .... je ......
Zadatak 2
Potrebno je unijeti cijeli broj, a zatim mu unarnim operatorom promijeniti predznak. Ispis neka bude
oblika:
Unesi broj:
Kada se broju .... promijeni predznak, on postaje ....
Zadatak 3
Potrebno je unijeti broj i pridruiti ga varijabli A. Sadraj varijable prvo treba uveati za 5, pa umanjiti
za 8, na kraju pomnoiti s 3. Zadatak rijeiti upotrebom operatora obnavljajueg pridruivanja. Ispis
neka bude oblika:
Upisi zeljeni broj:
Sadrzaj varijable A se uvecava za 5. Sada A iznosi: ....
Od trenutnog sadrzaja varijable A se oduzima 8. Sada A iznosi: ....
Trenutni sadrzaj varijable A se mnozi s 3. Sada A iznosi: ....
Zadatak 4
Zadatak je primjer svoenja rezultata na zajedniki tip s operandima. Treba izraunati kolicnik dvaju
cijelih brojeva i spremiti ga u realnu varijablu. Ispis neka bude oblika:
Unesi prvi broj:
Unesi drugi broj:
Kolicnik iznosi: ....
Zadatak 5
Zadatak je primjer svoenja operanada na zajedniki tip. Treba izraunati kolicnik dva broja od kojih je
jedan cijeli, a drugi realan. Rezultat spremiti u cjelobrojnu varijablu kolicnikt. Ispis neka bude oblika:
Unesi prvi broj:
Unesi drugi broj:
Vrijednost izraza a/b= ....

112
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Sadrzaj varijable kolicnik iznosi: ....
Zadatak 6
Treba unijeti godinu roenja neke osobe i tekuu godinu. Raunaju se godine starosti osobe. Ispis neka
bude oblika:
Upisi godinu svog rodjenja:
Koja je godina sada?
Sada imas .... godina.
Zadatak 7
Treba izraunati otpor bakrene ice ako je zadana duzina u metrima i poluprecnik u milimetrima. Ispis
neka bude oblika:
Upisi poluprecnik zice (u mm):
Upisi duzinu zice (u m):
Bakrena zica duzine ... m i presjeka ... mm2 ima otpor ... oma.
Zadatak 8
Tijelu mase m kilograma promijeni se za t sekundi brzina s v1 na v2 m/s. Treba izraunati silu koja je
djelovala na tijelo. Ispis neka bude oblika:
Upisi masu tijela (u kg):
Upisi vrijeme (u s):
Upisi pocetnu brzinu (u m/s):
Upisi konacnu brzinu (u m/s):
Na tijelo je djelovala sila od ... N.
Zadatak 9
Treba unijeti vrijeme u sekundama a zatim izraunati koliko je to sati, minuta i sekundi. Ispis neka
bude oblika:
Upisi vrijeme u sekundama:
... sekundi je ... sati, ... minuta i ... sekundi.
Zadatak 10
Tijelo mase m kilograma pada s visine h metara brzinom v m/s. Kolika je ukupna energija tijela. Ispis
neka bude oblika:
Upisi masu tijela (u kg):
Upisi visinu (u m):
Upisi brzinu (u m/s):
Tijelo ima ... J kineticke energije i ... J potencijalne energije, sto daje ukupnu energiju od ... J.
Zadatak 11
Treba unijeti trocifreni broj a zatim ispisati vrijednost cifre desetice. Ispis neka bude oblika:
Upisi trocifreni broj:
U trocifrenom broju ... na mjestu desetice je cifra ...



Zadatak 12
Na izvor napona U su prikljuena tri serijski spojena otpornika: R1, R2 i R3. Potrebno je izraunati
ukupni otpor R,snagu struje I i pojedine padove napona na otporima: U1, U2 i U3. Ispis neka bude
oblika:
U (V)=
R1 (om)=
R2 (om)=
R3 (om)=

113
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Ukupni otpor R iznosi ... oma.
Snaga struje I iznosi ... A.
Pad napona U1 je ... V.
Pad napona U2 je ... V.
Pad napona U3 je ... V.
Zadatak 13
Jedan voz kree iz mjesta A prema mjestu B brzinom v1 km/h, a drugi, istodobno, u obrnutom smjeru
brzinom v2 km/h. Mjesta A i B su meusobno udaljena s kilometara. Izraunati udaljenost od mjesta A
na kome e se vlakovi susresti i trenutak kad e se to dogoditi. Ispis neka bude oblika:
Upisi brzinu prvog voza (u km/h):
Upisi brzinu drugog voz (u km/h):
Upisi udaljenost izmedju dva mjesta (u km):
Susret ce se dogoditi nakon .... km. Preostali dio puta je .... km (vrijedi za prvi voz, za drugi su iznosi
obrnuti).
Vozovi ce se susresti nakon .... sati.
Zadatak 14
Na stolici mase Ms kilograma sjedi ovjek mase Mc kilograma. Koliki je pritisak na tlo ako stolica ima
etiri noge. Presjek svake od noga je kvadrat sa stranicama X centimetara. Ispis neka bude oblika:
Upisi masu stolice u kg:
Upisi masu covjeka u kg:
Unesi vrijednost stranice kvadrata u cm:
Pritisak kojim covjek mase ... kg, koji sjedi na stolici mase ... kg, djeluje na tlo je ... paskala.
Zadatak 15
Poluprenik Zemlje je 6370 km. Za koje e vrijeme avion obletjeti Zemlju ako leti na visini od h
kilometara brzinom v km/h. Ispis neka bude oblika:
Upisi visinu na kojoj leti avion (u km):
Upisi brzinu kojom leti avion (u km/h):
Avion koji leti brzinom ... km/s, na visini od ... km obletjet ce Zemlju za ... sati.
Zadatak 16
Treba izraunati snagu P koju mora imati elektrino kuhalo koje za t minuta moe vodu mase m grama
zagrijati od temperature temp1 do temperature temp2 (temperatura je izraena u C). Ispis neka bude
oblika:
Upisi vrijeme (u min):
Upisi masu vode (u gr):
Upisi pocetnu temperaturu (u C):
Upisi konacnu temperaturu (u C):
Elektricno kuhalo koje za ... min moze ... grama vode zagrijati sa ...C na ...C ima snagu od ... vata.

Zadatak 17
Treba izraunati koliko bi vremena bilo potrebno zvuku da pree razmak izmeu dva mjesta ako taj isti
razmak svjetlost pree za t sekundi. Ispis neka bude oblika:
Upisi vrijeme (u sek):
Svjetlost pree razmak izmedju dva mjesta za ... s, a zvuk je sporiji pa mu za isti razmak treba ... s.
13.2.Zadaci struktura grananja
Zadatak 1
Treba unijeti cijeli broj pa provjeriti da li je >=0. Ako nije, treba izraunati apsolutnu vrijednost
unesenog broja. Potom treba provjeriti da li je broj paran. Ako je paran treba izraunati i ispisati
njegovu treu potenciju, a ako nije treba ispisati: Broj je neparan.

114
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Unesi broj :
Broj ... je paran, a njegova treca potencija iznosi ...
ili
Broj ... je neparan.
Zadatak 2
Treba unijeti dva realna broja pa izraunati i ispisati njihov cjelobrojni kolicnik i ostatak dijeljenja.
Potrebno je nainiti i provjeru. Ako je djelitelj 0 treba ispisati odgovarajuu poruku. Ispis neka bude
oblika:
Upisi djeljenik :
Upisi djelitelj :
... / ... = ... cijelih i ... ostatka.
Provjera: ... * ... + ... = ...
ili
Ne moze se dijeliti sa 0.
Zadatak 3
Treba unijeti koeficijente kvadratne jednaine, pa zavisno o njihovim vrijednostima izraunati i ispisati
rjeenja.
Vano je provjeriti vrijednost koeficijenta a, ako je a=0, jednaine nije kvadratna.
Treba provjeriti predznak diskriminante jer on odreuje hoe li rjeenja kvadratne jednaine bit realni
ili kompleksni brojevi. Ispis neka bude oblika:
Upisi koeficijent a:
Upisi koeficijent b:
Upisi koeficijent c:
Rjesenja su realni brojevi:
x1=... i x2=...
ili
Rjesenja su kompleksni brojevi:
z1=...+...i, z2=...-...i
ili
Ako je koeficijent a=0, jednaina nije kvadratna.






Zadatak 4
U pravougli je trouglu poznat ugao alfa (izraen u stepenima) i kateta a (u cm).Treba izraunati
vrijednost hipotenuze c.

Unesi vrijednost ugla alfa u stepenima:

115
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Unesi vrijednost katete a:
Ako je vrijednost ugla alfa ... stepeni, a vrijednost katete
a= ... cm, hipotenuza ima vrijednost c= ... cm.
Zadatak 5
amac vozi brzinom vc okomito na tok rijeke koja tee brzinom vr. Kojom se brzinom krece amac u
odnosu na obalu? Za koji ugao e amac skrenuti sa svoje putanje?

Unesi brzinu camca u m/s:
Unesi brzinu rijeke u m/s:
Ako je brzina rijeke ... m/s a brzina camca ... m/s, camac se u odnosu na obalu krece brzinom ...
m/s.
Camac je skrenuo sa svoje putanje za ... stepeni.
Zadatak 6
Treba unijeti tri realna broja zatim pronai i ispisati najmanji. Ispis neka bude oblika:
Upisi prvi broj :
Upisi drugi broj :
Upisi treci broj:
Ako se upisu brojevi: ..., ... i ... najmanji od njih je ...
Zadatak 7
Treba unijeti tri realna broja zatim ih ispisati od najmanjeg ka najveem. Ispis neka bude oblika:
Upisi prvi broj:
Upisi drugi broj:
Upisi treci broj:
Brojevi: ..., ... i ... poredani od najmanjeg ka najvecem: ..., ..., ...
Zadatak 8
Treba izraunati jainu struje, napon ili otpor, prema odabiru korisnika. Za raunanje jaine struje
treba birati 1, za napon 2, a za otpor 3. Ovisno o tome to se eli raunati treba unijeti odgovarajue
podatke. Ispis neka bude oblika:
Ohmov zakon
Za raunanje jaine struje upii 1, za raunanje napona upii 2, a za otpor 3:
NPR:
U (V)=...
R (om)=...
Ako je napon ... V, a otpor ... oma, jaina struje iznosi ... ampera
Zadatak 9
Program na osnovu unesenog rednog broja mjeseca ispisuje koliko taj mjesec ima dana. U sluaju
unosa broja koji nije iz raspona od 1 do 12 treba ispisati upozorenje. Ispis neka bude oblika:
Upisi redni broj mjeseca:
... . mjesec ima 31 dan.
ili
... . mjesec ima 30 dana.
ili

116
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





2. mjesec ima 28 dana (ili 29 ako je godina prestupna).

Zadatak 10
Program na osnovu unesenih vrijednosti stranica trougla rauna obim ili povrinu, po elji korisnika. Za
rezultat obima upisuje se 1, a za povrinu 2.
Za rezultat obima upisi 1, a za rezultat povrsine 2:
a=
b=
c=
Obim trougla je O= ....
ili
Povrsina trougla je P= ...
Zadatak 11
Program na osnovu unesenog maksimalnog broja bodova koji se moe ostvariti na testu oblikuje
bodovnu skalu, a zatim na temelju osvojenog broja bodova na testu, ispisuje odgovarajuu ocjenu.
Upisi maksimalni broj bodova na testu:
Odlican od 89% do 100%: - bodova.
Vrlo dobar od 77% do 88%: - bodova.
Dobar od 64% do 76%: - bodova.
Dovoljan od 51% do 63%: - bodova.
Nedovoljan za manje od 50%: i manje bodova.

Upisi osvojeni broj bodova na testu: :
bodova je %, ocjena je
Zadatak 12
Treba unijeti prirodni broj pa ga rastaviti na proste faktore. Ispis neka bude oblika:
Upisi broj veci od 0:
... = 1 * ... * ... * ... * ...






Zadaci struktura petlje
Zadatak 1
Potrebno je ispisati brojeve iz raspona od M do N (raspon bira korisnik). Ispis neka bude oblika:
Ispis pocinje od broja:
Ispis zavrsava brojem:
Ispis brojeva od ... do ...:
... ... ... ...
Zadatak 2
Treba ispisati tablicu mnoenja odabranog broja sa brojevima od 1 do 10. Broj bira korisnik. Ispis neka
bude oblika:
Upisi broj sa kojim zelis mnoziti:
... * 1 = ...
... * 2 = ...
...

117
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





...
...
... * 10 = ...
Zadatak 3
Potrebno je ispisati prvih N neparnih brojeva. Ispis neka bude oblika:
Upisi zeljeni broj neparnih brojeva:
Prvih ... neparnih brojeva su: ... ... ... ....
Zadatak 4
Potrebno je sabrati prvih 100 prirodnih brojeva. Ispis neka bude oblika:
Zbir prvih 100 prirodnih brojeva je ...
Zadatak 5
Treba prebrojiti koliko brojeva unutar raspona od M do N ima cifru jedinice vrijednosti 9. Ispis neka
bude oblika:
Raspon pocinje od broja:
Raspon zavrsava brojem:
U rasponu od ... do... ima ... brojeva sa cifrom jedinice vrijednosti 9.
Zadatak 6
Treba provjeriti djeljivost brojeva iz odabranog raspona od M do N sa zadanim brojem B. Ispis neka
bude oblika:
Pocetna vrijednost raspona:
Zavrsna vrijednost raspona:
Provjerava se djeljivost s brojem:
Brojevi djeljivi sa ... iz raspona od ... do ... su:
... ... ... ... ...
Zadatak 7
Potrebno je sabrati sve prirodne trocifrene brojeve. Ispis neka bude oblika:
Zbir svih prirodnih trocifrenih brojeva je ....
Zadatak 8
Potrebno je sabrati N odabranih cijelih brojeva. Ispis neka bude oblika:
Upisi koliko brojeva zelis sabirati:
Upisi broj:
Upisi broj:
.......
.......
Zbir unesenih brojeva je ...
Zadatak 9
Potrebno je sabrati N lanova niza :
(1 + 1/2 + 1/3 + 1/4 + 1/5 +....+ 1/N). Ispis neka bude oblika:
Upisi zeljeni broj clanova niza:
Zbir ... clanova ovog niza iznosi ... .
Zadatak 10
Potrebno je ispisati i sabrati sve prirodne brojeve djeljive s 3 iz raspona od 1 do N. Ispis neka bude
oblika:
Upisi zavrsnu vrijednost raspona:
U intervalu od 1 do ... brojevi djeljivi sa 3 su:
.... ... ...
Zbir brojeva djeljivih s 3 iz intervala od 1 do... je ...
Zadatak 11

118
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Potrebno je prebrojiti i sabrati sve parne prirodne brojeve iz raspona od 1 do N . Ispis neka bude
oblika:
Upisi gornju granicu raspona:
U intervalu od 1 do ... ima ... brojeva djeljivih sa 2. Njihov zbir je ... .
Zadatak 12
Potrebno je provjeriti da li je odabrani prirodni broj prost (prost broj je djeljiv samo sa 1 i sa samim
sobom). Ispis neka bude oblika:
Upisi prirodni broj:
... je/nije prost.
Zadatak 13
Potrebno je provjeriti da li je odabrani prirodni broj savren (broj je savren ako je jednak zbiru svih
svojih djelitelja, osim njega samog). Ispis neka bude oblika:
Upisi prirodni broj:
Broj ... je/nije savrsen.
Zadatak 14
Potrebno je ispisati sve savrene prirodne brojeve iz raspona od 1 do 3000. Ispis neka bude oblika:
Savrseni brojevi iz zadanog raspona su ... ... .... ...
Zadatak 15
Potrebno je ispisati sve etverocifrene brojeve iji je proizvod cifara 100. Ispis neka bude oblika:
Brojevi ciji je proizvod cifara 100 su:... ... ... ...
Zadatak 16
Potrebno je ispisati sve trocifrenee brojeve koji su djeljivi sa 7, a zadnja im je cifra 7. Ispis neka bude
oblika:
Brojevi koji zadovoljavaju uslov su:
... ... ... ...
Zadatak 17
Potrebno je ispisati dekadske ASCII vrijednosti (od 32 do 255) i njihove odgovarajue znakove.Da bi
ispis bio u pravilnim stupcima, koristi manipulator setw.



Zadatak 18
Potrebno je ispisati tekst "***" u obliku slova V, kao na slici (koristiti manipulator setw(int):
Zadatak 19
Treba unijeti N realnih brojeva pa izraunati njihovu srednju vrijednost. Unos brojeva traje sve dok
korisnik ne upie 0. Primjer rijeiti do-while petljom. Ispis neka bude oblika:
Nakon posljednjeg broja unesi nulu.
Unesi broj:
Unesi broj:
...
Uneseno je ... brojeva. Srednja vrijednost je ....
Zadatak 20
Potrebno je unesenom prirodnom broju ispisati vrijednosti pojedinih cifara poevi od cifre najmanje
teinske vrijednosti, jednu ispod druge. Ispis neka bude oblika:
Upisi prirodni broj:
Njegove cifre su:

...

119
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





...
...
Zadatak 21
Potrebno je unesenom prirodnom broju sabrati vrijednosti njegovih cifara. Ispis neka bude oblika:
Upisi prirodni broj:
Zbir cifara broja ... je ... .
Zadatak 22
Korisnik unosi prirodne brojeve. Nakon posljednjeg broja unosi 0. Program ispisuje najvei uneseni
broj. Ispis neka bude oblika:
Upisi prirodni broj:
Upisi prirodni broj:
...
Najveci broj je ...
Zadatak 23
Program rauna ukupni otpor N otpora spojenih u paralelu. Nakon posljednje vrijednosti otpora unosi
se 0. Ispis neka bude oblika:
Upisi vrijednost otpora u omima:
Upisi vrijednost otpora u omima:
...
Ukupni otpor ... otpora spojenih u paralelu je ... oma.
Zadatak 24

Program rauna srednju ocjenu uspjeha uenika. Nakon posljednje ocjene treba unijeti 0. U sluaju da
je bilo koja od ocjena 1, ispisuje se poruka: Negativan uspjeh. Ako se unese vrijednost koja nije iz
raspona od 1-5, ispisat e se poruka: Pogrean unos. Ispis neka bude oblika:
Srednja ocjena uspjeha je ...




Zadatak 25
Potrebno je ispisati N lanova Fibonaccijevog niza. Fibonaccijev niz je niz u kome su prva dva lana
jednaka jedan, a svaki sljedei lan je zbir prethodna dva lana niza (1, 1, 2, 3, 5, 8, 13, 21, 34,
......). Ispis neka bude oblika:
Upisi koliko clanova niza zelis:
lanovi niza: 1, 1, ..., ..., ..., .....
Zadatak 26
Potrebno je izraunati najveu zajedniku mjeru dva prirodna broja. Najvea zajednika mjera dva
broja je najvei prirodni broj kojim su djeljiva oba broja. Ispis neka bude oblika:
Unesi prvi broj:
Unesi drugi broj:
Najveca mjera brojeva ... i ... je ...
Zadatak 27
Potrebno je unijeti odabrani broj cifara poevi od cifre najvee teinske vrijednosti, pa od njih sastaviti
i ispisati prirodni broj. Unos cifara se prekida kada se unese broj manji od 0 ili vei od 9. Ispis neka
bude oblika:
Upisi cifru:
Upisi cifru:

120
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Upisi cifru:
...
Broj sastavljen od zadanih cifara je ...





















14.Rjeenja
Pravolinijska struktura Rjeenje1
#include<iostream>
using namespace std;
int main()
{
float a,b,c,d,srvr;
cout<<"Unesi cetiri realna broja"<<endl;
cin>>a>>b>>c>>d;
srvr=(a+b+c+d)/4;
cout<<endl<<"Srednja vrijednost brojeva:";
cout<<endl<<a<<", "<<b<<", "<<c<<" i "<<d<<" je "<<srvr<<endl;
system("PAUSE");return 0;
}

Pravolinijska struktura Rjeenje 2
#include<iostream>
using namespace std;
int main()

121
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





{
int a;
cout<<"Unesi broj:";
cin>>a;
cout<<endl<<"Kada se broju "<<a<<" promijeni predznak, on postaje
"<<-a<<endl;
system("PAUSE"); return 0;
}

Pravolinijska struktura - Rjeenje3
#include<iostream>
using namespace std;
int main()
{
float A;
cout<<"Upisi zeljeni broj:";
cin>>A;
cout<<"Sadrzaj varijable A se uvecava za 5. Sada A iznosi:
"<<(A+=5)<<endl;
cout<<"Od trenutnog sadrzaja varijable A se oduzima 8. Sada A
iznosi:
"<<(A-=8)<<endl;
cout<<"Trenutni sadrzaj varijable A se mnozi sa 3.Sada A iznosi:
"<<(A*=3)<<endl;
system("PAUSE"); return 0;}
Pravolinijska struktura - Rjeenje4
#include<iostream>
using namespace std;
int main()
{
int a,b;
float kolicnik;
cout<<"Unesi prvi broj:";
cin>>a;
cout<<"unesi drugi broj:";
cin>>b;
kolicnik=a/b;
cout<<"kolicnik iznosi:"<<kolicnik<<endl;
system("PAUSE");return 0;
}

Pravolinijska struktura - Rjeenje5
#include<iostream>
using namespace std;
int main()
{
int a,kolicnik;
float b;

122
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





cout<<"Unesi prvi broj:";
cin>>a;
cout<<"unesi drugi broj:";
cin>>b;
kolicnik=a/b;
cout<<"Vrijednost izraza a/b= "<<a/b<<endl;
cout<<"Sadrzaj varijable kolicnik iznosi:"<<kolicnik<<endl;
system("PAUSE");return 0;
}

Pravolinijska struktura - Rjeenje6
#include<iostream>
using namespace std;
int main()
{
int god,god1,god2;
cout<<"Upisi godinu svog rodjenja: ";
cin>>god1;
cout<<"Koja je godina sada? ";
cin>>god2;
god=god2-god1;
cout<<endl<<"Sada imas "<<god<<" godina."<<endl;
system("PAUSE");
return 0;
}

Pravolinijska struktura - Rjeenje7
#include<iostream>
using namespace std;
int main()
{
float precnik,l,r,s,otpor;
const double PI=3.14;
const double ro=0.0175;
cout<<"Upisi precnik zice (u mm):";
cin>>precnik;
cout<<endl<<"Upisi duzinu zice (u m):";
cin>>l;
r=precnik/2;
s=r*r*PI;
otpor=ro*l/s;
cout<<endl<<"Bakrena zica duzine "<<l<<" m i presjeka " <<s<<" mm2
ima otpor";
cout<<otpor<<" oma."<<endl;
system("PAUSE");return 0;
}

123
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Pravolinijska struktura - Rjeenje8
#include<iostream>
using namespace std;
int main()
{
float m,t,v1,v2,a,F;
cout<<"Upisi masu tijela (u kg):";
cin>>m;
cout<<"Upisi vrijeme (u s):";
cin>>t;
cout<<"Upisi pocetnu brzinu (u m/s):";
cin>>v1;
cout<<"Upisi konacnu brzinu (u m/s):";
cin>>v2;
a=(v2-v1)/t;
F=m*a;
cout<<endl<<"Na tijelo je djelovala sila od "<<F<<" N."<<endl;
system("PAUSE");return 0;
}
Pravolinijska struktura - Rjeenje9
#include<iostream>
using namespace std;
int main()
{
int s, sek, min, sat, ostatak;
cout<<"Upisi vrijeme u sekundama:";
cin>>s;
sat=s/3600;
ostatak=s%3600;
min=ostatak/60;
sek=ostatak%60;
cout<<s<<" sekundi je "<<sat<<" sati, "<<min<<" minuta i "<<sek<<"
sekundi."<<endl; system("PAUSE");
return 0;
}

124
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Pravolinijska struktura - Zadatak10
#include<iostream>
using namespace std;
int main()
{
const double g=9.81;
float m,h,v,Ep,Ek,Euk;
cout<<"Upisi masu tijela (u kg):";
cin>>m;
cout<<"Upisi visinu (u m):";
cin>>h;
cout<<"Upisi brzinu (u m/s):";
cin>>v;
Ep=m*g*h;
Ek=m*v*v/2;
Euk=Ep+Ek;
cout<<endl<<"Tijelo ima "<<Ek<<" J kineticke energije i "<<Ep;
cout<<" J potencijalne energije,sto daje ukupnu energiju od "<<Euk
<<" J."<<endl;
return 0;
}

Pravolinijska struktura - Rjeenje12
#include<iostream>
using namespace std;
int main()
{
float U,R1,R2,R3,R,I;
cout<<"U (V)= ";
cin>>U;
cout<<endl<<"R1 (om)= ";
cin>>R1;
cout<<endl<<"R2 (om)= ";
cin>>R2;
cout<<endl<<"R3 (om)= ";
cin>>R3;
R=R1+R2+R3;
I=U/R;
cout<<endl<<"Ukupni otpor R iznosi "<<R<<" oma."<<endl;
cout<<endl<<"Jakost struje I iznosi "<<I<<" A."<<endl;
cout<<endl<<"Pad napona U1 je "<<I*R1<<" V."<<endl;
cout<<"Pad napona U2 je "<<I*R2<<"V."<<endl;
cout<<"Pad napona U3 je "<<I*R3<<"V."<<endl;
return 0;
}

Pravolinijska struktura - Rjeenje13

125
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





#include<iostream>
using namespace std;
int main()
{
float v1, v2, udaljenost;
float put1, put2, vrijeme;
cout<<"Upisi brzinu prvog voza (u km/h):";
cin>>v1;
cout<<"Upisi brzinu drugog voza (u km/h):";
cin>>v2;
cout<<"Upisi udaljenost izmedju dva mjesta (u km):";
cin>>udaljenost; //put1/brzina1=put2/brzina2
//udaljenost=put1+put2
put1=udaljenost*v1/(v1+v2);
put2=udaljenost-put1;
vrijeme=put1/v1;
cout<<"Susret ce se dogoditi nakon "<<put1;
cout<<" km. Preostali dio puta je "<<put2;
cout<<" km (vrijedi za prvi voz, za drugi su iznosi
obrnuti)."<<endl;
cout<<"Vozovi ce se susresti nakon "<<vrijeme<<" sati."<<endl;
system("PAUSE");return 0;}
Pravolinijska struktura - Rjeenje14
#include<iostream>
using namespace std;
int main()
{
float Mc,Ms,Gs,Gc,X,F,S,s1,p;
const double g=9.81;
cout<<"Upisi masu stolice u kg:";
cin>>Ms;
cout<<"Upisi masu covjeka u kg:";
cin>>Mc;
cout<<"Unesi iznos stranice kvadrata u cm:";
cin>>X;
Gs=Ms*g;
Gc=Mc*g; //ukupna sila koja djeluje na pod
F=Gs+Gc; //povrsina presjeka jedne noge stolice
s1=X*X; //ukupna povrsina na koju djeluje sila
S=4*s1;
S=S/10000; //pretvaranje cm2 u m2
p=F/S; //pritisak u paskalima
cout<<"Pritisak kojim covjek mase "<<Mc<<" kg, koji sjedi na stolici
mase "<<Ms;
cout<<" kg, djeluje na pod je "<<p<<"paskala";
system("PAUSE");return 0;
}


126
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Pravolinijska struktura - Rjeenje15
#include<iostream>
using namespace std;
int main()
{
float h,v, Ruk,O,vrijeme;
const double R=6370; //konstanta je izrazena u km
const double PI=3.14;
cout<<"Upisi visinu na kojoj leti avion (u km):";
cin>>h;
cout<<"Upisi brzinu kojom leti avion(u km/h):";
cin>>v; //Zbir poluprecnika zemlje i visine
Ruk=R+h; //Racunanje puta (obim kruga)
O=2*Ruk*PI; //t=s/v, jednoliko gibanje
vrijeme=O/v;
cout<<"Avion koji leti brzinom "<<v<<"km/h, na visini od "<<h;
cout<<" km obletjet ce Zemlju za"<<vrijeme<<" sati."<<endl;
system("PAUSE");return 0;
}






127
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Pravolinijska struktura - Rjeenje16
#include<iostream>
using namespace std;
int main()
{
float tmin,m,temp1,temp2,ts,DT,M,Q,P;
const double c=4186;
//konstanta je izrazena u J/(kg*K)
cout<<"Upisi vrijeme (u min):";
cin>>tmin;
cout<<"Upisi masu vode (u gr):";
cin>>m;
cout<<"Upisi pocetnu temperaturu (u C):";
cin>>temp1;
cout<<"Upisi konacnu temperaturu (u C):";
cin>>temp2;
DT=temp2-temp1; //vrijeme treba pretvoriti u sekunde
ts=tmin*60; //masu treba pretvoriti u kg
M=m/1000; //racuna se toplotna energija
Q=M*c*DT; //racuna se snaga
P=Q/ts;
cout<<"Elektricno kuhalo koje za "<<tmin<<" min moze "<<m;
cout<<" grama vode zagrijati sa "<<temp1<<"stepeni C na "<<temp2;
cout<<"stepeni C ima snagu od "<<P<<" vata."<<endl;
system("PAUSE");return 0;
}


Pravolinijska struktura - Rjeenje17
#include<iostream>
using namespace std;
int main()
{
float t,s,tz;
const double c=3e+8;
const double v=340;
cout<<"Upisi vrijeme (u sek):";
cin>>t; //racunanje puta
s=c*t;
tz=s/v;
cout<<"Svjetlost prevali razmak izmedju dva mjesta za "<<t;
cout<<" s, a zvuk je sporiji pa mu za isti razmak treba "<<tz<<"
sekundi."<<endl; system("PAUSE");
return 0;
}
Struktura grananja - Rjeenje1

128
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





#include <iostream>
#include <cmath>
using namespace std;
int main ()
{
int i,rez;
cout<<"Unesi broj:";
cin>>i;
if (i<0)
{
i=abs(i);
}
if (i%2==0)
{
rez=pow(i,3);
cout<<"Broj "<<i<<" je paran, a njegova treca potencija
iznosi"<<rez<<endl;
}
else
{
cout<<"Broj "<<i<<" je neparan."<<endl;
} system("PAUSE");
return 0;
}

Struktura grananja - Rjeenje2
#include<iostream>
#include<cmath >
using namespace std;
int main()
{
float a,b,ost,rez;
cout<<"Upisi djeljenik:";
cin>>a;
cout<<"Upisi djelitelj:";
cin>>b;
if (b==0)
cout<<"Ne moze se dijeliti sa 0. ";
else
{
rez=a/b;
rez=floor(rez);
ost=fmod(a,b);
cout<<endl<<a<<"/"<<b<<"="<<rez<<" cijelih i " <<ost<<"
ostatka.";
cout<<endl<<"Provjera: "<<rez<<"*"<<b<<"+"<<ost
<<"="<<rez*b+ost<<endl;
} system("PAUSE");

129
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





return 0;
}

Struktura grananja - Rjeeenje3
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
float a,b,c,x1,x2,pom1,xR,xi;
cout<<"Upisi koeficijent a:";
cin>>a;
cout<<"Upisi koeficijent b:";
cin>>b;
cout<<"Upisi koeficijent c:";
cin>>c;
if (a!=0)
{
pom1=b*b-4*a*c;
if (pom1>=0)
{
x1=(-b+sqrt(pom1))/(2*a);
x2=(-b-sqrt(pom1))/(2*a);
cout<<"Rjesenja su realni brojevi x1= "<<x1<<" i
x2="<<x2<<endl;
}
else
{
xR=-b/(2*a);
xi=sqrt(-pom1)/(2*a);
cout<<"Rjesenja su kompleksni brojevi:";
cout<<endl<<"z1="<<xR<<"+"<<xi<<"i, z2= "<<xR<<"-
"<<xi<<"i"<<endl;
}
}
else
{
cout<<"Ako je koeficijent a=0,jednadzba nije
kvadratna"<<endl;
} system("PAUSE");
return 0;
}


Struktura grananja - Rjeenje4

#include<iostream>

130
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





#include<cmath>
using namespace std;
int main()
{
float ugaoalfa,a,c,ugaoalfa1;
const float PI=3.14;
cout<<"Unesi vrijednost ugla alfa u stepenima: ";
cin>>ugaoalfa;
cout<<"Unesi vrijednost katete a: ";
cin>>a;
ugaoalfa1=ugaoalfa*PI/180;
c=a/sin(ugaoalfa1);
cout<<endl<<"Ako je vrijednost ugla alfa " <<ugaoalfa;
cout<<" stepeni, a vrijednost katete a="<<a;
cout<<" cm, hipotenuza ima vrijednost c="<<c<<" cm."<<endl;
system("PAUSE");return 0;
}

Struktura grananja - Rjeenje5
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
float vc,vr,v,ugao;
const double PI=3.14159265;
cout<<"Unesi brzinu camca u m/s: ";
cin>>vc;
cout<<"Unesi brzinu rijeke u m/s: ";
cin>>vr;
v=sqrt(pow(vc,2)+pow(vr,2));
ugao=atan(vr/vc);
ugao=ugao*180/PI;
cout<<endl<<"Ako je brzina rijeke "<<vr<<" m/s, a brzina camca
"<<vc;
cout<<" m/s camac se u odnosu na obalu giba brzinom "<<v<<"
m/s."<<endl;

131
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





cout<<endl<<"Camac je skrenuo sa svoje putanje za "<<ugao<<"
Stepeni."<<endl; system("PAUSE");
return 0;
}

Struktura grananja - Rjeenje6
#include<iostream>
using namespace std;
int main()
{
float a,b,c,min;
cout<<"Upisi prvi broj:";
cin>>a;
cout<<"Upisi drugi broj:";
cin>>b;
cout<<"Upisi treci broj:";
cin>>c;
min=a;
if (b<min)
{
min=b;
}
if (c<min)
{
min=c;
}
cout<<"Ako se upisu brojevi: "<<a<<", " <<b<<" i "<<c<<" najmanji
od njih je "<<min; system("PAUSE");
return 0;
}



Struktura grananja Rjeenje 7
#include<iostream>
using namespace std;
int main()
{

132
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





float a,b,c,min,mid,max;
cout<<"Upisi prvi broj:";
cin>>a;
cout<<"Upisi drugi broj:";
cin>>b;
cout<<"Upisi treci broj:";
cin>>c;
min=a;
if (b<min)
{
min=b;
}
if (c<min)
{
min=c;
}
max=a;
if (b>max)
{
max=b;
}
if (c>max)
{
max=c;
}
mid=a;
if ((b!=max)&&(b!=min))
{
mid=b;
}
if ((c!=max)&&(c!=min))
{
mid=c;
}
cout<<"Brojevi: "<<a<<", "<<b<<" i "<<c<<" poredani od
najmanjeg ka najvecem:";
cout<<endl<<min<<", "<<mid<<", "<<max<<endl;

133
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





system("PAUSE");return 0;
}

Struktura grananja - Rjeenje8

#include <iostream>
using namespace std;
int main ()
{
cout<<"Omov zakon"<<endl;
cout<<"Za racunanje jacine struje upisi 1, za racunanje napona upisi
2, a za otpor 3: ";
int i;
float U,I,R;
cin>>i;
switch (i)
{
case 1:
cout<<"U (V)=";
cin>>U;
cout<<"R (om)=";
cin>>R;
I=U/R;
cout<<"Ako je napon "<<U<<" V, a otpor "<<R<<" oma, jacina
struje iznosi ";
cout<<I<<" A."<<endl;
break;
case 2:
cout<<"I (A)=";
cin>>I;
cout<<"R (om)=";
cin>>R;
U=I*R;
cout<<"Ako je jacina struje "<<I<<" A, a otpor "<<R<<"
oma, napon iznosi ";
cout<<U<<" V."<<endl;
break;
case 3:

134
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





cout<<"U (V)=";
cin>>U;
cout<<"I (A)=";
cin>>I;
R=U/I;
cout<<"Ako je napon "<<U<<" V, a jacina struje iznosi ";
cout<<I<<" A, otpor iznosi "<<R<<" oma."<<endl;
break;
default:
cout<<"Pogresan unos. Treba upisati 1, 2 ili 3.";
}
system("PAUSE");return 0;
}

Struktura grananja - Rjeenje9
#include<iostream>
using namespace std;
int main()
{
int i;
cout<<" Program na osnovu unesenog rednog broja mjeseca
ispisuje";
cout<<" koliko taj mjesec ima dana"<<endl;
cout<<"Upisi redni broj mjeseca: ";
cin>>i;
switch (i)
{
case 4:
case 6:
case 9:
case 11:
cout<<i<<". mjesec ima 30 dana."<<endl;
break;
case 1:
case 3:
case 5:
case 7:

135
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





case 8:
case 10:
case 12:
cout<<i<<". mjesec ima 31 dan."<<endl;
break;
case 2:
cout<<i<<". mjesec ima 28 dana (ili 29 ako
je godina prestupna).";
break;
default:
cout<<"Pogresan unos.";
cout<<" Redni broj mjeseca moze biti iz raspona
od 1 do 12.";
} system("PAUSE");
return 0;
}

Struktura grananja - Rjeenje10

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
cout<<"Program na osnovu unesenih vrijednosti stranica
trougla racuna ";
cout<<" obim ili povrsinu, ovisno o zelji korisnika"<<endl;
float a,b,c,o,p,p1,pov;
int i;
cout<<"Za racunanje obima upisi 1, a za povrsinu 2:";
cin>>i;
cout<<"a = ";
cin>>a;
cout<<"b = ";
cin>>b;
cout<<"c = ";
cin>>c;
if((a<=0)||(b<=0)||(c<=0))

136
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





{
cout<<"Vrijednost stranice trougla ne moze biti
<=0 " <<endl;
goto kraj;
}
if((a+b<=c)||(b+c<=a)||(c+a<=b))
{
cout<<" Unesene vrijednosti nisu stranice
trougla." <<endl;
goto kraj;
}
switch(i)
{
case 1:
o=a+b+c;
cout<<"Obim trougla je O= "<<o<<endl;
break;
case 2:
cout<<"Povrsina se racuna po Heronovoj formuli";
p=(a+b+c)/2;
p1=p*((p-a)*(p-b)*(p-c));
pov=sqrt(p1);
cout<<" Povrsina trougla je P= "<<pov<<endl;
break;
default:
cout<<" Pogresan unos. Valja unijeti 1 ili 2! "
<<endl;
} system("PAUSE");
kraj:return 0;
}

Struktura grananja - Rjeenje11
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()

137
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





{
float p,i,b, po;
cout<<"Program na osnovu osvojenog broja bodova na testu,
ispisuje ";
cout<<" odgovarajucu ocjenu."<<endl;
upis:cout<<"Upisi maksimalni broj bodova na testu: ";
cin>>i;
if (i<=0)
goto upis;
p=i/100;
cout<<endl<<setw(35)<<"Odlican od 89% do 100%: ";
cout<<floor(89*p)<<" - "<<i<<" bodova."<<endl;
cout<<setw(35)<<"Vrlo dobar od 77% do 88%: ";
cout<<floor(77*p)<<" - "<<floor(88*p)<<" bodova."<<endl;
cout<<setw(35)<<"Dobar od 64% do 76%: ";
cout<<floor(64*p) <<" - "<<floor(76*p)<<" bodova."<<endl;
cout<<setw(35)<<"Dovoljan od 51% do 63%: ";
cout<<floor(51*p)<<" - "<<floor(63*p)<<" bodova."<<endl;
cout<<setw(35)<<"Nedovoljan za manje od 50%: ";
cout<<floor(50*p)<<" i manje bodova."<<endl;
upis2:cout<<endl<<endl<<"Upisi osvojeni broj bodova na testu: ";
cin>>b;
if (b<0 || b>i)
{
cout<<"Neispravan unos, ponovi.";
goto upis2;
}
po=b/p;
if (po>=0 && po<=50)
cout<<b<<" bodova je "<<po<<" %, ocjena
nedovoljan." <<endl;
else if (po<=63)
cout<<b<<" bodova je "<<po<<" %, ocjena

138
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





dovoljan." <<endl;
else if (po<=76)
cout<<b<<" bodova je "<<po<<" %, ocjena dobar."
<<endl;
else if (po<=88)
cout<<b<<" bodova je "<<po<<" %, ocjena vrlo
dobar. " <<endl;
else
cout<<b<<" bodova je "<<po<<" %, ocjena odlican.
" <<endl; system("PAUSE");
return 0;
}

Struktura grananja - Rjeenje12
#include<iostream>
#include <iostream>
using namespace std;
int main()
{
int br, prbr;
cout<<"Rastavljanje broja na proste faktore";
unos:cout<<"Upisi broj veci od 0:";
cin>>br;
if(br<=0)
{
cout<<"Treba unijeti broj veci od 0" <<endl;
goto unos;
}
else
{
prbr=2;
cout<<br<<" = 1";
dj2:if(br==1)

139
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





{
goto kraj;
}
else
{
dj1:if(br%prbr==0)
{
cout<<" * "<<prbr;
br=br/prbr;
goto dj2;
}
else
{
prbr=prbr+1;
goto dj1;
}
}
}
kraj:cout<<endl; system("PAUSE");
return 0;
}


Struktura petlje - Rjeenje1
#include<iostream>
using namespace std;
int main()
{ int brojac,m,n;
cout<<"ispis pocinje od broja:";
cin>>m;
cout<<"ispis zavrsava brojem:";

140
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





cin>>n;
for (brojac=m;brojac<=n;brojac++)
{
cout<<brojac<<" ";
}
cout<<endl;
system("PAUSE"); return 0;
}
Struktura petlje - Rjeenje2

#include<iostream>
using namespace std;
int main()
{ int b, brojac;
cout<<"Upisi broj sa kojim zelis mnoziti:";
cin>>b;
for (brojac=1;brojac<=10;brojac++)
cout<<b<<" * "<<brojac<<" ="<<b*brojac<<endl; system("PAUSE"); return 0;
}
Struktura petlje - Rjeenje3
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
float a,b,c,x1,x2,pom1,xR,xi;
cout<<"Upisi koeficijent a:";
cin>>a;
cout<<"Upisi koeficijent b:";
cin>>b;
cout<<"Upisi koeficijent c:";
cin>>c;
if (a!=0)
{
pom1=b*b-4*a*c;
if (pom1>=0)
{
x1=(-b+sqrt(pom1))/(2*a);

141
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





x2=(-b-sqrt(pom1))/(2*a);
cout<<"Rjesenja su realni brojevi x1="<<x1<<" i x2="<<x2<<endl;
}
else
{
xR=-b/(2*a);
xi=sqrt(-pom1)/(2*a);
cout<<"Rjesenja su kompleksni brojevi:";
cout<<endl<<"z1="<<xR<<"+"<<xi<<"i, z2="<<xR<<"-"<<xi<<"i"<<endl;
}
}
else
{
cout<<"Ako je koeficijent a=0,jednadzba nije kvadratna"<<endl;
}system("PAUSE"); return 0;}
Struktura petlje - Rjeenje4
#include<iostream>
using namespace std;
int main()
{
int brojac,zbrir;
zbir=0;
cout<<"Zbir prvih 100 prirodnih brojeva je:";
for (brojac=1;brojac<=100;brojac++)
{
zbir=zbir+brojac;
}
cout<<zbir<<endl;
system(Pause);
return 0;
}


142
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





Struktura petlje - Rjeenje5
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
float vc,vr,v,ugao;
const double PI =3.14159265;
cout<<"Unesi brzinu camca u m/s: ";
cin>>vc;
cout<<"Unesi brzinu rijeke u m/s: ";
cin>>vr;
v=sqrt(pow(vc,2)+pow(vr,2));
ugao=atan(vr/vc);
ugao=ugao*180/PI ;
cout<<endl<<"Ako je brzina rijeke "<<vr<<" m/s, a brzina camca "<<vc;
cout<<" m/s camac se u odnosu na obalu kree brzinom "<<v<<" m/s."<<endl;
cout<<endl<<"Camac je skrenuo sa svoje putanje za "<<ugao<<" stepeni."<<endl;
system("PAUSE"); return 0;
}

Struktura petlje - Rjeenje6
#include<iostream>
using namespace std;
int main()
{
int brojac,m,n,b;
cout<<"Pocetna vrijednost raspona:";
cin>>m;
cout<<"Zavrsna vrijednost rapona:";
cin>>n;
cout<<"Provjerava se djeljivost sa brojem:";
cin>>b;
cout<<"Brojevi djeljivi sa "<<b<<" iz raspona od "<<m;
cout<<" do "<<n<<" su:"<<endl;
for (brojac=m;brojac<=n;brojac++)
{
if(brojac%b==0)
cout<<brojac<<" ";
}
cout<<endl; system("PAUSE");

143
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





return 0;
}


Struktura petlje - Rjeenje7
#include<iostream>
using namespace std;
int main()
{
int brojac,zbir;
cout<<"Program sabira sve prirodne trocifrene brojeve."<<endl;
zbir=0;
for(brojac=100;brojac<=999;brojac++)
{
zbir=zbir+brojac;
}
cout<<"Zbir svih prirodnih trocifreni brojeva je "<<zbir<<endl; system("PAUSE");
return 0;
}

Struktura petlje - Rjeenje8
#include<iostream>
using namespace std;
int main()
{
int broj,brojac,zbir,N;
zbir=0;
cout<<"Upisi koliko brojeva zelis sabirati: ";
cin>>N;
for (brojac=1;brojac<=N;brojac++)
{
cout<<"Upisi broj: ";
cin>>broj;
zbir=zbir+broj;
}
cout<<"Zbir unesenih brojeva je "<<zbir<<endl; system("PAUSE");
return 0;
}

Struktura petlje - Rjeenje9

#include <iostream>
using namespace std;
int main()
{
float zbir,brojac,N;

144
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





cout<<endl<<"Upisi zeljeni broj clanova niza: ";
cin>>N;
zbir=0;
for(brojac=1;brojac<=N;brojac++)
{
zbir=zbir+1/brojac;
}
cout<<"Zbir "<<N<<" clanova ovog niza iznosi " <<zbir <<endl;
system("PAUSE"); return 0;
}

Struktura petlje - Rjeenje10
#include<iostream>
using namespace std;
int main()
{
int N,zbir,brojac;
cout<<"Upisi zavrsnu vrijednost raspona:";
cin>>N;
zbir=0;
cout<<"U intervalu od 1 do "<<N<<" brojevi djeljivi sa 3 su: " <<endl;
for(brojac=1;brojac<=N;brojac++)
{
if(brojac%3==0)
{
zbir=zbir+brojac;
cout<<brojac<<" ";
}
}
cout<<"Zbir brojeva djeljivih sa 3 iz \ intervala od 1 do "<<N<<" je"<<zbir;
system("PAUSE"); return 0;
}


Struktura petlje - Rjeenje11
#include<iostream>
using namespace std;
int main()
{
int broj,brojac,N;
broj=0;
cout<<"Upisi gornju granicu raspona: ";
cin>>N;
for(brojac=1;brojac<=N;brojac++)
{
if(brojac%2==0)
broj=broj+1;

145
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





}
cout<<"U intervalu od 1 do "<<N<<" ima "<<broj<<" parnih brojeva "<<endl;
system("PAUSE");return 0;
}

Struktura petlje - Rjeenje12
#include<iostream>
using namespace std;
int main()
{
int brojac,N;
cout<<"Upisi prirodni broj: ";
cin>>N;
for (brojac=2;brojac<=(N-1);brojac++)
{
if(N%brojac==0)
{
cout<<"Broj "<<N<<" nije prost."<<endl;
goto kraj;
}
}
cout<<"Broj "<<N<<" je prost."<<endl;
kraj:return 0;
}


Struktura petlje - Rjeenje13
#include<iostream>
using namespace std;
int main()
{
int brojac,zbir,N;
cout<<"Upisi prirodni broj: ";
cin>>N;
zbir=0;
for (brojac=1;brojac<=(N-1);brojac++)
{
if(N%brojac==0)
{
zbir=zbir+brojac;
}
}
if(zbir==N)
cout<<"Broj "<<N<<" je savrsen."<<endl;
else
cout<<"Broj "<<N<<" nije savrsen."<<endl; system("PAUSE");
return 0;

146
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





}

Struktura petlje - Rjeenje14
#include<iostream>
using namespace std;
int main()
{
int br,brojac,zbir;
cout<<"Savrseni brojevi su: ";
for(br=1;br<=3000;br++)
{
zbir=0;
for (brojac=1;brojac<=(br-1);brojac++)
{
if(br%brojac==0)
zbir=zbir+brojac;
}
if(zbir==br)
cout<<br<<" ";
}system("PAUSE");
return 0;
}


Struktura petlje - Zadatak15
#include<iostream>
using namespace std;
int main()
{
int i,pom,j,d,s,t;
cout<<"Brojevi ciji je proizvod cifara 100 su: ";
for(i=1000;i<=9999;i++)
{
pom=i;
j=pom%10;
d=(pom/10)%10;
s=(pom/100)%10;
t=(pom/1000)%10;
if(j*d*s*t==100)
cout<<endl<<i;
}system("PAUSE");
return 0;
}

Struktura petlje - Rjeenje16
#include<iostream>

147
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





using namespace std;
int main()
{
int i;
cout<<"Brojevi koji zadovoljavaju uslov su: ";
for(i=100;i<=999;i++)
{
if((i%10==7)&&(i%7==0))
{
cout<<endl<<i;
}
}system("PAUSE");
return 0;
}


Struktura petlje - Rjeenje17
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int znak,red,stupac;
znak=32;
for(red=1;red<=45;red++)
{
for(stupac=1;stupac<=5;stupac++)
{
cout<<setw(10)<<znak<<" ="<<char(znak);
znak=znak+1;
}
cout<<endl;
}system("PAUSE");
return 0;
}

Struktura petlje - Rjeenje18
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int i,s,p;
s=10;
p=40;
for(i=1;i<=10;i++)
{

148
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





cout<<setw(s)<<"***"<<setw(p)<<"***"<<endl;
s=s+2;
p=p-4;
}system("PAUSE");
return 0;
}


Struktura petlje - Rjeenje19
#include<iostream>
using namespace std;
int main()
{
int br,b;
cout<<"Upisi prirodni broj: ";
cin>>b;
br=0;
do
{
b=b/10;
br=br+1;
}
while(b>0);
cout<<"Broj cifara: "<<br<<endl; system("PAUSE");
return 0;
}

Struktura petlje - Rjeenje20
#include<iostream>
using namespace std;
int main()
{
int b,i;
upis:cout<<"Upisi prirodni broj: ";
cin>>b;
if (b<=0)
goto upis;
while(b>0)
{
i=b%10;
cout<<endl<<i;
b=b/10;
}
cout<<endl; system("PAUSE");
return 0;
}

149
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i






Struktura petlje - Rjeenje21


#include<iostream>
using namespace std;
int main()
{
int b,i,s,br;
s=0;
cout<<"Upisi prirodni broj: ";
upis:cin>>b;
if(b<0)
{
cout<<"Upisi prirodni broj"<<endl;
goto upis;
}

br=b;
while(b>0)
{
i=b%10;
s=s+i;
b=b/10;
}
cout<<"Zbir cifara broja "<<br<<" je "<<s<<endl; system("PAUSE");
return 0;
}

Struktura petlje - Rjeenje22
#include<iostream>
using namespace std;
int main()
{
int b,max;
upis:cout<<endl<<"Upisi prirodni broj: ";
cin>>b;
if (b<=0)
goto upis;
max=b;
while(b>0)
{
if(b>max)
{
max=b;
}
cout<<"Upisi prirodni broj: ";

150
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





cin>>b;
}
cout<<endl<<"Najveci broj je: "<<max<<endl; system("PAUSE");
return 0;
}

Struktura petlje - Rjeenje23

#include<iostream>
using namespace std;
int main()
{
float R,br,Ruk1,Ruk;
cout<<"Nakon posljednje vrijednosti otpora unijeti 0" <<endl;
br=0;
Ruk1=0;
upis:cout<<"Upisi vrijednost otpora u omima: ";
cin>>R;
if(R<0)
{
cout<<"Vrijednost otpora mora biti >0."<<endl;
goto upis;
}
while(R>0)
{
br=br+1;
Ruk1=Ruk1+1/R;
cout<<"Upisi vrijednost otpora u omima: ";
cin>>R;
}
Ruk=1/Ruk1;
cout<<"Ukupni otpor "<<br<<" otpora spojenih u paralelu je "<<Ruk<<" oma.";
system("PAUSE");
return 0;
}


Struktura petlje - Rjeenje24

#include<iostream>
using namespace std;
int main()
{
cout<<"Program racuna srednju ocjenu uspjeha ucenika."<<endl;
cout<<"Nakon posljednje ocjene unosi se 0."<<endl;
float b,suma,br;
suma=0;

151
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





br=0;
do
{
cout<<"Unesi ocjenu: ";
cin>>b;
if(b==1)
{
cout<<"Negativan uspjeh."<<endl;
goto kraj;
}
else if(b<0)
{
cout<<"Pogresan unos."<<endl;
goto kraj;
}
else
{
suma=suma+b;
br=br+1;
}
}
while(b>0);
br=br-1;
cout<<"Srednja ocjena uspjeha je " <<suma/br<<endl; system("PAUSE");
kraj:return 0;
}

Struktura petlje - Rjeenje25

#include<iostream>
using namespace std;
int main()
{
int prvi,drugi,treci,brojac,N;
cout<<"Program ispisuje N clanova Fibonaccijevog niza."<<endl;
prvi=1;
drugi=1;
upis:cout<<"Upisi koliko clanova niza zelis: ";
cin>>N;
if(N<2)
{
cout<<"Broj clanova niza mora biti veci ili jednak 2"<<endl;
goto upis;
}
cout<<prvi<<" "<<drugi;
for(brojac=3;brojac<=N;brojac++)
{

152
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





treci=prvi+drugi;
cout<<" "<<treci;
prvi=drugi;
drugi=treci;
}
cout<<endl; system("PAUSE");
return 0;
}

Struktura petlje - Rjeenje26
#include<iostream>
using namespace std;
int main()
{
int A,B,manji,br,mjera;
unos:cout<<"Unesi prvi broj: ";
cin>>A;
cout<<"Unesi drugi broj:";
cin>>B;
if((A<=0)||(B<=0))
{
cout<<"Treba unijeti brojeve vece od 0"<<endl;
goto unos;
}
mjera=1;
if(A<B)
{
manji=A;
}
manji=B;
for(br=2;br<=manji;br++)
{
if((A%br==0)&&(B%br==0))
mjera=br;
}
cout<<"Najveca mjera brojeva "<<A<<" i "<<B<<" je "<<mjera<<endl; system("PAUSE");
return 0;
}


Struktura petlje - Rjeenje27
#include<iostream>
using namespace std;
int main()
{
cout<<"Program na osnovu unesenih cifara Sastavlja i ispisuje prirodni broj."; <
int ci,br;

153
C
+
+

p
r
o
g
r
a
m
i
r
a
n
j
e

z
a

s
r
e
d
n
j
e

k
o
l
e

p
r
o
f
.
S
m
a
j
o

M
e
k
i





br=0;
cout<<endl<<"Upisi cifru: ";
cin>>ci;
while((ci>=0)&&(ci<=9))
{
br=br*10+ci;
cout<<"Upisi cifru: ";
cin>>ci;
}
cout<<"Broj sastavljen od zadanih cifara je " <<br<<endl; system("PAUSE");
return 0;
}


LITERATURA

Efikasno programiranje na jeziku C++/Praktini primjeri/-Andrew Koenig,Barbara E.Moo,

Predavanja sa FIT-a Mostar/Uvod u programiranje/Programiranje 1 i 2,

Osnove programiranja u C++ -Aleksandar Kara;

Uvod u programiranje dr.Senad Rahimi;

C++ za apsolutene poetnike

Motik, B. and ribar, J. Demistificirani C++. Element, Zagreb, 2. izdanje
edition, 2001.
Stroustrup, B. The C++ Programming Language. Addison-Wesley, 3.izdanje edition, 2000.
Hekmat, S. C++ Programming. Pragmatix Software Pty. Ltd., 2005.

You might also like