You are on page 1of 0

PRO - MIL

C++ programiranje za apsolutne poetnike


programiranje
za apsolutne poetnike
PRO - MIL 2

Naslov knjige: C++ programiranje za apsolutne poetnike
Autor: Jakopec Ratko, ing
Naklada: PRO-MIL d.o.o. za nakladu, informatiku i edukaciju, Varadin,
R. Bokovia 20, 42000 Varadin, tel: 042 / 203 981, 233 971,
fax: 042 / 203 991, www.pro-mil.hr
Urednik: Nenad Milija, dipl. inf.
Lektura: Ruica Greguri, dipl. uitelj
Korektura: PRO-MIL d.o.o.
Recenzija: Igor Kos, dipl. inf.
Naslovnica: Ratko Jakopec, ing., Nenad Milija, dipl. inf.
Tiskara: Tiskara Varteks, Varadin
ISBN: 953-7156-19-2
Copyright: PRO-MIL d.o.o. za nakladu, informatiku i edukaciju, Varadin
Sva prava pridrana. Nije dozvoljeno kopirati ili reproducirati ni jedan dio knjige u bilo kojem obliku bez
prethodne pismene dozvole nakladnika.

Sve o emu smo pisali u ovoj knjizi, uspjeno je primijenjeno na raunalima, stoga ne snosimo nikakvu
odgovornost za eventualnu tetu koja bi se mogla povezati s uputama iz knjige.

U ovoj knjizi objanjen je program Dev C++, autora: Colin Laplace, Mike Berg, Hongli Lai. Program se
nalazi na priloenom CD-u, slobodan je za objavljivanje i umnoavanje.

Pojmovi za koje se zna da su zatitni znakovi napisani su poetnim velikim slovom. Nakladnik ne moe
provjeriti tonost niti eli utjecati na vjerodostojnost zatitnih znakova.
C++ programiranje za apsolutne poetnike
S
a
d
r

a
j

PRO - MIL 3
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

4
Sadraj
PRO - MIL
Uvod 7
to je to program, a to programiranje?
8
Je li teko nauiti programirati?
8
Zato ba C++?
9
Zato ba Dev-C++?
10
Kako se ui programiranje?
10
Kako dalje nakon ove knjige?
10
Instaliranje Dev-C++ programskog okruenja
12
Formiranje radne mape
20
Instalacija grafike
22
Na prvi program 25
Formiranje projekta
26
Mogui problem
32
Pokretanje programa
34
Greka u programu
38
Analiza programa
40
Gruba skica programa
42
Varijacije programa
43
Distribucija programa
47
Uitavanje spremljenog projekta
49
Varijable 53
Osnovne raunske operacije
54
58
Varijable
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Generator sluajnih brojeva
Analiza programa
Varijacije programa
63
Problem dijeljenja
60
Uljepavanje programa
69
Nekoliko primjera programa
71
67
Grafika 75
Podeavanje programskog okruenja
76
Na prvi grafiki program
77
Analiza programa
78
Varijacije programa
83
Crtanje pravokutnika
86
Crtanje crte
88
Crtanje toke
95
Ispis teksta
97
Donoenje odluke 103
Funkcije
104
Donoenje odluke
108
Switch naredba
126
Petlje 129
For petlja
130
Do while petlja
168
170
179
Koritenje sluajnih brojeva
PRO - MIL
Sadraj
6
Polja 183
Jednodimenzionalna polja
184
Spremanje brojeva u datoteku
204
Dvodimenzionalna polja
212
Obrada teksta 215
String objekti
216
Polje char tipa
223
Obrada string objekata
234
Premjetanje teksta iz char polja u string
246
Premjetanje teksta iz stringa u char polje
247
Spremanje teksta u datoteku
248
Objekti 251
Jednostavan primjer klase i objekata
252
Sloeniji primjeri klasa i objekata
262
Komunikacija s metodama
265
Razdvajanje deklaracije i definicije
276
Uporaba konstruktora
278
Nasljeivanje
280
Veliki program 283
Jednostavna igra u jednoj datoteci
284
Jednostavna igra u vie datoteka
288
Saimanje koda 301
302
Primjeri saetog pisanja koda
C++ programiranje za apsolutne poetnike
U
v
o
d

PRO - MIL 7
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

8
Uvod
PRO - MIL
to je to program, a to programiranje?
Je li teko nauiti programirati?
Program je niz uputa raunalu o tome kako da napravi odreeni posao. Posao
moe bit voenje skladita, izraun plae radnicima ili pretvaranje slike u boji u
crno bijelu sliku. Programiranje je pisanje tih uputa. Za pisanje uputa odnosno
programa koriste se odreene naredbe. Skup naredbi koje ine cjelinu naziva se
programski jezik.

Budui da su naredbe pisane naim jezikom, a raunalo razumije samo nule i
jedinice, program se nakon pisanja mora prevesti u oblik razumljiv raunalu. Taj
postupak se naziva prevoenje. Na engleskom jeziku naziva se Compile. Hrvats-
ki programeri taj postupak obino nazivaju kompajliranje. U programu koji emo
mi koristiti, postupak prevoenja naredbi u oblik razumljiv raunalu naziva se
kompajlaj, a ovoj knjizi koristit emo izraz prevoenje.

Da bismo uspjeno programirali, oigledno je da nam treba program u kojem e-
mo program pisati i program koji e napisani program prevesti u oblik razumljiv
raunalu. U dananje vrijeme sve te funkcije, a i mnoge dodatne objedinjene su u
jedan program koji emo u ovoj knjizi nazivati programska okolina. On e nam
omoguiti pisanje programa, prevoenje programa u oblik razumljiv raunalu,
traenje greaka i pokretanje programa. Postoji cijeli niz takvih programa, a mi
emo koristiti Dev-C++.
Da, teko je. Ako mislimo da emo uzeti nekakav programski jezik i da emo za
par dana pisati programe, kao to moemo uzeti FrontPage pa za par dana napra-
viti WEB stranicu, od toga nee biti nita.

Neki, ako ne i veina profesionalnih uitelja programiranja, zapoet e poduku ne-
kakvim algoritmima i time kako je to sve jednostavno jer mi ionako mnoge stvari
radimo po algoritmu. Npr. ako kuhamo kavu, prvo stavljamo vodu u posudu, zatim
ekamo da zavri, pa onda stavljamo ... da sad ne kompliciramo, mi smo i do sada
stvari radili po nekakvom algoritmu, a programiranje je neto slino.

To su gluposti. Moda i jesmo do sada stvari radili po odreenom algoritmu, ali
nismo o tome na taj nain razmiljali, nemamo um posloen na taj nain. Osim to-
ga u programiranju se upotrebljavaju malo drugaiji algoritmi nego to su algoritmi
za kuhanje kave.

Programiranje je zapravo potpuno drugaiji nain razmiljanja od onog na koji smo
do sada navikli i trebat e godine rada da ponemo razmiljati na taj nain. Cijeli
problem dodatno komplicira injenica da su dananja raunala vrlo sloeni sustavi i
treba nam puno vremena da barem priblino ponemo shvaati kako raunala fun-
kcioniraju.
9
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Zbog svega toga trebat e nam dvije do tri godine svakodnevnog rada da bismo
koliko - toliko nauili programirati. Pod pojmom nauiti programirati ne mislim na
dobivanje dvojke u koli ili pisanje programa za zbrajanje dva broja. Pod poj-
mom nauiti programirati mislim na to da smo u stanju napisati program koji za-
dovoljava neije potrebe i taj netko nam je spreman za to platiti. Nema puno
smisla rei da znam programirati, ali ne znam napraviti nita za to bi netko bio
spreman platiti.

Zbog svega toga vano je da smo radini i strpljivi. Nemojmo iz injenice da prva
tri mjeseca neemo puno toga razumjeti, zakljuiti da nismo nadareni za progra-
miranje i odustati. Nakon tri mjeseca neemo puno toga razumjeti, ali nakon tri
godine sasvim sigurno hoemo.

Ovim uvodom vas nisam htio preplaiti, ve sam vas htio ohrabriti da ustrajete u
uenju programiranja, iako e vam se na poetku moda initi da nita ne razu-
mijete i da sporo napredujete.
Zato ba C++?
Zato to je to trenutno najraireniji jezik, osobito u profesionalnoj uporabi. U ra-
unalstvu se klonite ekskluzivnosti. Ako vas veseli da budete posebni, obrijte
glavu ili obojite kosu na zeleno. Imate bezbroj mogunosti, ali kad su raunala u
pitanju, najbolje je koristiti raunalo koje koristi veina i programski jezik koji ko-
risti veina.

U tom sluaju lako dolazimo do programa, lako dolazimo do literature, puno ljudi
se razumije u to pa moemo dobiti savjet. Konano, ako traimo posao u smislu
da programerska ekipa treba jo jednoga (jednu), vea je vjerojatnost da oni ve
koriste sustav s kojim znamo raditi.

Bjeite od genijalnih raunala, revolucionarnih sustava i drugaijih razmiljanja.
Zamislite koliko je ugodno ivjeti u malom gradu i biti jedini vlasnik takvog geni-
jalnog sustava. Nema literature, nema programa, nema savjeta i kad konano
savladamo rad u takvom sustavu nitko nas ne treba jer svi rade na nekim drugim
sustavima.

Iako po mom sudu C++ ima niz prednosti u odnosu na druge jezike, nemojmo se
suvie optereivati time koji emo jezik zapoeti uiti i koju inaicu tog jezika.
Glavni problem je nauiti jedan jezik, a kad nam to uspije, ako se ukae potreba,
lako emo prijei na drugi. Da bi netko tko nikad nije programirao nauio jedan
jezik, treba mu do tri godine, ali kad ve jedan jezik nauimo, da bismo nauili
drugi, dovoljno nam je do tri mjeseca. Nauivi jedan jezik, poinjemo razumije-
vati kako se programira, a to je najtee i najdulje traje. Najlake je nauiti nove
naredbe ili bolje reeno novi nain pisanja slinih naredbi u drugom jeziku.
10
Uvod
PRO - MIL
Zato ba Dev-C++?
Programsko okruenje koje emo koristiti za pisanje naih programa naziva se
Dev-C++. Zato sam odabrao upravo ovo okruenje? Zato to je besplatno, ugod-
nog izgleda, na hrvatskom jeziku i malih dimenzija. Zbog toga to je malih dimenzi-
ja, zadovoljavajue e raditi i na starijim raunalima, a nove inaice mogue je u
prihvatljivom vremenu uitati s interneta i pomou spore internetske veze.

Iako je taj program relativno malih dimenzija, posjeduje sve osobine koje su potre-
bne za uenje programiranja, a mogao bi posluiti i za manje sloeno profesional-
no programiranje.
Kako se ui programiranje?
Programiranje se ne ui tako da se naui sadraj neke knjige, a zatim se eventual-
no neto radi na raunalu. Programiranje se ui tako da se ukljui raunalo, otvori
knjiga, ita sadraj knjige i istovremeno prikazano u knjizi nastojimo napraviti na
raunalu.

Nakon to smo odreenu naredbu shvatili, nismo zavrili s uenjem. Nakon toga
treba napraviti nekoliko desetaka manjih programa u kojima emo tu naredbu kori-
stiti da bismo stekli rutinu u njenom koritenju.
Kako dalje nakon ove knjige?
Ova knjiga nije zamiljena kao knjiga iz koje emo saznati sve tajne programiranja,
nego kao knjiga koja bi ljudima koji nikad nisu programirali i nita o tome na znaju
trebala pomoi da zaponu uenje programiranja.

Postoje velike i debele knjige s puno sitnog teksta koje na 1000 stranica objanja-
vaju sve tajne pojedinih programskih jezika. Takve knjige su korisne i nabavite ih
ako vam se ukae prilika, ali takve knjige nisu pogodne za poetnike. Zbog mno-
tva detalja i turih opisa, poetnik e se u njima jako teko snai.

Nakon to prouite ovu knjigu, imat ete dovoljno predznanja da moete pratiti knji-
ge koje detaljno govore o programskom jeziku C++. (Ili nekom drugom program-
skom jeziku.)

Kakve knjige biste trebali nabaviti i s ime biste se trebali baviti nakon to prouite
ovu knjigu i elite dalje napredovati?

- Svakako neku knjigu koja na barem 800 stanica detaljno opisuje programski jezik
koji elite nauiti.

- Budete li odluili koristiti neko sloenije programsko okruenje za pisanje progra-
11
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

ma, prouite upute za njegovo koritenje. Naravno, te upute ne moraju biti u ob-
liku tiskane knjige. Najee e biti u obliku teksta na raunalu.

- Programi rade unutar nekog operacijskog sustava, najee Windowsa ili
Linuxa. Da bi mogli pisati programe za pojedine operacijske sustave, moramo
razumjeti kako ti sustavi funkcioniraju pa emo morati nabaviti knjigu koja govori
o strukturi operacijskog sustava za koji elimo pisati programe.

- Dobro je nabaviti i knjige koje govore openito o programiranju i o nainima
rjeavanja pojedinih programskih problema. elimo li napisati program koji sorti-
ra odreenu grupu podataka na odreeni nain, ne moramo ga izmiljati. Drugi
ljudi prije nas susreli su se s problemom sortiranja i o tom problemu napisali knji-
ge u kojima iznose optimalna rjeenja za pojedine probleme.

- S vremenom emo se specijalizirati za pojedine teme, npr. za pisanje igara, za
grafiku, za obradu zvuka ili neto slino, pa je dobro nabaviti knjigu koja govori o
toj problematici.

Dakle, kad se detaljno upoznamo s nekim programskim jezikom, kad upoznamo
odreeni operacijski sustav, kad se upoznamo s programerskim tehnikama i od-
reenim programerskim podrujem, tek emo onda biti sposobni pisati kvalitetne
komercijalne programe, odnosno programirati za novce.

Zbog toga sam na poetku rekao da nam treba dvije do tri godine da nauimo
programirati.

U ovom trenutku to vam moda zvui obeshrabrujue, ali ako sve to savladate,
stei ete vjetinu kojom ne vlada ba svatko i koja ima svoju trinu cijenu.
12
Uvod
PRO - MIL
Na CD-u priloenom uz knjigu
nalazi se program Dev-C++.

Ovaj izbornik trebao bi se po-
krenuti nakon umetanja CD-a
u raunalo. Ako se to ne do-
godi, pokrenite ga sami dvos-
trukim klikom na program me-
ni.exe koji se nalazi na CD-ju.

Instalaciju pokreemo klikom
na Program.
Instaliranje Dev-C++ programskog okruenja
Nakon klika na Program zapoet e instaliranje Dev-C++ programa. Program
e nas prvo upozoriti da ne smijemo instalirati program, ako je program ve in-
staliran. Ako zbog nekog razloga instalaciju elimo ponoviti, moramo deinstalira-
ti stari program, a tek nakon toga moemo ga ponovo instalirati.
Ako je Dev-C++ program ve instaliran, zaustavit emo pos-
tupak instalacije i deinstalirati staru inaicu programa.

Ako Dev-C++ nije instaliran na naem raunalu, klikom na U
redu nastavljamo instalaciju.
13
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

2 - Klikom na OK nastavljamo
instalaciju.
1 - Izaberemo jezik.
Klikom na Prihvaam izjavlju-
jemo sa se slaemo s uvjetima
koritenja programa.
14
Uvod
PRO - MIL
Ovdje bismo mogli izabrati komponente
koje emo instalirati. Mi neemo nita
mijenjati. Samo kliknemo na Dalje.
1 - Ovdje moemo izabrati ma-
pu u koju e se instalirati Dev-
C++.
2 - Instaliranje nastavljamo
klikom na Instaliraj.
15
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Nakon klika na Instaliraj zapoet
e instaliranje programa.
Kliknemo na Da.
16
Uvod
PRO - MIL
Kliknemo na Kraj.
Kliknemo na U redu.
17
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

1 - Izaberemo
hrvatski jezik.
2 - Izaberemo Use XP
Theme.
3 - Klik na Next.
Klik na Next.
18
Uvod
PRO - MIL
Klik na Next.
Nakon klika na Next zapoet e instaliranje nekih do-
datnih funkcija. Na sporijim raunalima taj proces moe
trajati i do pola sata, a na brima nekoliko minuta.
19
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Na kraju klik na OK.
Klikom ovdje ugasimo ovaj prozor.
Time je instaliranje Dev-C++ progra-
ma zavreno.
20
Uvod
PRO - MIL
Formiranje radne mape
Iako to nije nuno, dobro je formirati praznu
mapu u koju emo spremati programe.

Tu mapu moemo otvoriti na bilo kojem
disku na kojem imamo mjesta i moemo je
nazvati prema vlastitom izboru.

Ja u na C: disku otvoriti mapu koju u na-
zvati Radni.
Klik na disk na kojem elimo otvoriti novu
mapu, u mojem sluaju na C: disk.
Kliknemo na Datoteka, zatim na Novo
i konano na Mapa.
21
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Unesemo naziv mape, u
mojem sluaju Radni.
Ako je sve u redu, na C: disku trebala bi
biti formirana mapa pod nazivom Radni.
22
Uvod
PRO - MIL
Instalacija grafike
Da bi Dev-C++ mogao koristiti naredbe za rad s grafikom,
runo moramo dodati nekoliko datoteka.
Nakon instaliranja programa
Dev-C++, na disku C: u ma-
pi Dev-Cpp nalazit e se
mapa include i mapa lib.
Na CD-u priloenom uz knji-
gu u mapi Grafika nalazi se
mapa include i mapa lib.
23
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Sadraj mape include na CD-u
kopiramo u mapu include na C:
disku.
Sadraj mape lib na CD-u kopira-
mo u mapu lib na C: disku.
Bude li potekoa s instaliranjem progra-
ma, pogledajmo filmove na kojima moe-
mo vidjeti cijeli tijek instalacije, a nalaze
se na priloenom CD-u.
PRO - MIL 24
Na prvi program
C++ programiranje za apsolutne poetnike
N
a


p
r
v
i

p
r
o
g
r
a
m

PRO - MIL 25
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

26
Na prvi program
PRO - MIL
Formiranje projekta
Kliknemo ovdje da bismo
ugasili taj prozor.
Prilikom svakog pokretanja
programa pojavit e se pro-
zor sa sugestijama koje e
nam olakati koritenje prog-
rama.
Program je dio vee cjeline koja
se naziva projekt. Zbog toga
emo pisanje programa zapo-
eti formiranjem novog projek-
ta.

Pogledajmo kako emo formira-
ti novi projekt.
1 - Kliknemo na Datoteka.
2 - Izaberemo Nova.
3 - Izaberemo Projekt.
27
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Otvorit e se novi prozor koji se naziva Novi projekt i u kojem emo izab-
rati tip projekta. Najvaniji tipovi su Windows Application i Console Ap-
plication.

U emu je razlika?

Windows Application izvodi se unutar klasinog windows prozora. Pre-
dnost ovog naina pisanja jest to emo dobiti program koji e izgledati
kao svaki drugi windows program. Nedostatak mu je to je ovaj nain pisa-
nja programa neto sloeniji, pa je manje prikladan za poetnike.

Console Application ne izvodi se unutar klasinog windows prozora,
ve unutar pojednostavljene verzije s crnom pozadinom. Nedostatak ovog
naina pisanja programa jest to je program veoma ruan i to taj oblik
prozora ima manje mogunosti od klasinog prozora. Jedina prednost mu
je to je jednostavan, pa je prikladniji za poetnike.
2 - Zatim Console Application.
3 - Ovdje unosimo naziv pro-
jekta. Na poetku moemo
ostaviti naziv koje je predloilo
raunalo, a to je Projekt1.
4 - Ovdje odredimo da
e na projekt sadra-
vati C++ program.
5 - Biranje zavravamo
klikom na OK.
1 - Izaberemo Basic.
28
Na prvi program
PRO - MIL
Sada emo izabrati mapu u
koju emo spremiti na pro-
jekt.

Najbolje je da ga spremimo
u prije pripremljenu praznu
mapu.
Kliknemo ovdje.
2 - Kliknemo na Spremi.
1 - Izaberemo disk na koji emo
spremiti na projekt u prije prip-
remljenu praznu mapu.

U mojem sluaju to je disk C.
Kliknemo na njega.

(Na mojem raunalu disk C nazi-
va se Podaci. Na vaem rauna-
lu moe imati drugaije naziv.
Naziv diska nije vaan, vano je
da izaberemo onaj disk na kojem
smo prije toga pripremili prazni
prostor, kao to je opisano u uvo-
dnom poglavlju ove knjige.)
29
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

1 - Ovdje bi se trebala nalaziti oznaka diska na kojem
smo pripremili prazni prostor za smjetaj naeg projekta.
2 - Sadraj ovog prozo-
ra na vaem raunalu
bit e sasvim sigurno
drugaiji nego na mo-
jem, budui da njegov
sadraj ovisi o progra-
mima koji su instalirani
u raunalu i nainu ko-
ritenja raunala. Ne-
mojte brinuti zbog toga.
3 - Pronai emo mapu Radni i kliknuti na
nju. (Ako mapu Radni niste do sada formira-
li, formirajte je prema uputama danim u uvo-
dnom poglavlju.
4 - Klik na Otvori.
1 - Ovdje bi se trebao nalaziti naziv prostora u koji emo
spremiti na C++ projekt.
2 - Klik na Spremi.
30
Na prvi program
PRO - MIL
Raunalo e automatski
generirati jednostavan
C++ program i time je
otvaranje projekta zavr-
eno.
U programu bismo se lake snalazili kad bi
se ispred svakog reda u programu nalazio
broj reda. Pogledajmo kako emo ukljuiti tu
mogunost.
1 - Kliknemo na Alati.
2 - Kliknemo na Izgled editora.
31
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

1 - Kliknemo na karticu
Prikaz.
2 - Kliknemo na kvadrati ispred
opcije Brojevi linije.
3 - Kliknemo na OK.
Vidimo da se sada is-
pred svakog reda u pro-
gramu automatski ispi-
suje broj reda.
32
Na prvi program
PRO - MIL
Mogui problem
Prilikom isprobavanja programa moe nam se
dogoditi da pokuamo u prostor za spremanje
projekta spremiti novi projekt, iako projekt pod
tim nazivom ve postoji u tom prostoru. U
istom prostoru ne moe biti vie projekta s
istim imenom.

U tom sluaju, ako elim zadrati stari projekt,
novom projektu moramo dati neki drugi naziv,
npr. Projekt2.dev.
1 - Ovo je prije spremljeni projekt.
2 - Ovo je novi projekt. Ako elimo zadrati stari,
moramo mu promijeniti naziv. Ako stari projekt
ne elimo zadrati, ostavimo postojei naziv.
3 - Klik na Spremi.
1 - Ako novi projekt
ima isti naziv kao i
stari jer stari projekt
ne elimo zadrati,
raunalo e nas upo-
zoriti da e stari pro-
jekt biti obrisan.
2 - Klik na Yes i novi projekt bit e
formiran, a stari obrisan.
33
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Unos prvog programa
Umjesto programa
koji je generiralo
raunalo prilikom
otvaranja novog
projekta, unesemo
ovakav program.

To emo uiniti pa-
ljivo jer i najmanja
greka moe prouz-
rokovati greku u
programu.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
cout << "Ovo je moj tekst." << endl;
system("PAUSE");
return 0;
}
Na poetku e nam se esto
dogaati da umjesto toke sa
zarezom ovdje unesemo dvo-
toje to e uzrokovati greku
u programu.
Lijevu vitiastu zagradu dobit
emo tako da pritisnemo tipku
AltGr i ne putajui tu tipku,
pritisnemo tipku b.

Desnu emo dobiti tako da
pritisnemo AltGr i, ne putajui
tu tipku, pritisnemo tipku n.
Ovdje se nalazi broj nula,
a ne veliko slovo o.
34
Na prvi program
PRO - MIL
Pokretanje programa
Ve smo rekli da raunalo razumije samo nule i jedinice. Svi sadraji, muzika,
filmovi, slike itd. moraju biti prevedeni u nule i jedinice da bi ih raunalo ra-
zumjelo. Tako je i s programom.

Da bi raunalo razumjelo na program, najprije ga iz oblika koji smo upravo
napisali moramo prevesti u nule i jedinice, a tek nakon toga moemo narediti
raunalu da ga pokrene. Taj postupak prevoenja na engleskom se jeziku
naziva Compile, a prevoditelj naeg C++ programskog okruenja preveo je to
sa Kompajlaj. Mi emo u naoj knjizi za taj postupak koristiti izraz prevoe-
nje.

U naem programskom okruenju imamo tri vane naredbe vezane uz pre-
voenje i pokretanje programa.
Ovo je prevedeno kao Kompajlaj. Izaberemo li ovu opciju, na program
e se prevesti u oblik razumljiv raunalu, ali se nee pokrenuti. elite li
tako prevedeni program pokrenuti, morate izabrati opciju Pokreni.
Ovo je prevedeno kao Pokreni. Ovu opciju moe-
mo koristiti samo ako smo program ve preveli i
elimo ga jo jednom pokrenuti.
Ovo je prevedeno kao Kompajlaj i pokreni. Ve iz
naziva vidimo da je ovdje prevoenje i pokretanje
objedinjeno.

Izaberemo li ovu opciju, na program e se preves-
ti i odmah pokrenuti.

Prvi put emo odabrati ovu opciju.
35
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Mjesto na koje e raunalo spremiti na
program.
3 - Prevoenje i pokretanje naeg prog-
rama zapoet emo klikom na Spremi.
2 - Otvara se prozor u kojem nas raunalo pita kamo i
pod kojim nazivom emo spremiti na program.

Raunalo e predloiti da to bude ono isto mjesto u
koje smo spremili projekt to emo mi prihvatiti.
1 - Klikom na Kompajlaj i pokreni zapoet emo prevoenje i
pokretanje naeg programa.
Ovdje se nalazi naziv naeg programa,
main.cpp. Iako bismo taj naziv mogli
promijeniti, na poetku je najbolje da za-
drimo naziv koji je predloilo raunalo.
36
Na prvi program
PRO - MIL
Nakon klika na Kompajlaj i pokreni najpri-
je e se otvoriti prozor u kojem emo moi
pratiti tijek prevoenja naeg programa u
nule i jedinice razumljive raunalu.
Nakon prevoenja prog-
ram e se pokrenuti unu-
tar ovakvog prozora. Ovaj
na program ispisuje tekst
Ovo je moj tekst.

Tekst Press any key to
continue raunalo je ge-
neriralo automatski i njime
nas obavjetava da je
dovoljno pritisnuti bilo ko-
ju tipku na tipkovnici i pro-
zor u kojem se izvrio na
program e se zatvoriti.
37
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Mogui problem
Tijekom rada moe nam se dogoditi da nam
raunalo predloi neki naziv programa, iako ve
u tom prostoru postoji program s istim nazivom.

U tom sluaju, ako elimo zadrati stari prog-
ram, novom emo dati neki drugi naziv npr.
main2.cpp i kliknut emo na Spremi.

Ako stari program ne elimo sauvati, ostavit
emo novom programu naziv main.cpp i kliknut
emo na Spremi.
Ako ne elimo zadrati stari prog-
ram, pa smo u prethodnom koraku
kliknuli na Spremi bez da smo
mijenjali novom programu naziv,
raunalo e nas jo jednom upozo-
riti da e stari program biti obrisan.
1 - Kliknemo na Yes. Stari program e
se obrisati, novi e se spremiti, a zatim
e zapoeti prevoenje i pokretanje
novog programa. Tijek prevoenja i
pokretanja programa moemo vidjeti
na prethodnoj stranici.
main.cpp
38
Na prvi program
PRO - MIL
Greka u programu
Gotovo je nemogue unijeti program, a da
se tijekom unosa ne pojavi greka.

Pogledajmo to e se dogoditi ako pokua-
mo pokrenuti program u kojem je dolo do
greke prilikom unosa.
1 - Umjesto
toke sa zare-
zom unesemo
dvotoje.
2 - Kliknemo na Kompajlaj i pokreni.
1 - Kad raunalo naie na
greku, prevoenje prog-
rama se zaustavlja i rau-
nalo oznaava red u ko-
jem je dolo do greke.
2 - Istovremeno se otvara
prozor u kojem moemo
vidjeti dodatne informacije
o uoenoj greki.

Ovdje moemo vidjeti su-
gestiju da umjesto dvoto-
ja treba staviti toku sa
zarezom.
3 - Uoenu greku uklonimo i ponov-
no kliknemo na Kompajlaj i pokreni.
39
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Oznaavanje pozicije greke prili-
no je nepouzdano budui da rau-
nalo zapravo ne oznaava poziciju
greke, nego poziciju na kojoj je
greka primijeena. Pogledajmo
ovaj primjer.
1 - Ovdje je dolo do greke jer
nismo unijeli toku sa zarezom.
Kad takav program pokuamo prevesti i pok-
renuti, kao pogrean bit e oznaen deveti
red, jer je u njemu greka primijeena, iako
se greka zapravo nalazi u osmom redu.

Zato imajmo na umu da je oznaavanje re-
dova u kojim se pojavila greka samo gruba
orijentacija, a ne precizni pokazatelj.
1 - Program pokreemo klikom na
Kompajlaj i pokreni.
40
Na prvi program
PRO - MIL
Analiza programa
#include <cstdlib>
#include <iostream>
Ove naredbe emo pisati na poetku sva-
kog C++ programa. Zato? C++ organizi-
ran je tako da su njegove naredbe organi-
zirane u grupe ili, kako bi programeri rek-
li, biblioteke i na poetku programa mora-
mo rei raunalu koje biblioteke naredbi
namjeravamo koristiti.

#include - ovo je naredba kojom na po-
etku programa obavjetavamo raunalo
koje biblioteke naredbi elimo koristiti.

iostream - skup naredbi koje nam omo-
guuju komunikaciju s programom, npr.
ako to ne bismo ukljuili, ne bi bio mogu
ispis teksta Ovo je moj tekst. na ekran.

cstdlib - biblioteka standardnih naredbi.
using namespace std;
Postoji mnotvo biblioteka naredbi. Moglo
bi se dogoditi da se u dvije razliite bibliote-
ke nau dvije naredbe istog naziva, a razli-
ite namjene.

Ovom naredbom obavjetavamo prevodite-
lja da emo koristiti standardne nazive na-
redbi.
int main()
Naredba int main() oznaava da na ovom
mjestu poinje sam program. Ono to smo
pisali prije te naredbe ne smatra se progra-
mom, nego uputama prevoditelju kako e
prevesti program koji slijedi, npr. koje biblio-
teke naredbi e koristiti prilikom prevoenja.
41
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

{
cout << "Ovo je moj tekst." << endl;
return 0;
system("PAUSE");
}
{ } - Iako neveliki, ovo su jako vani dijelovi
programa. Oznauju prostor unutar kojeg se
nalazi program, { oznauje poetak, a } kraj
programa.
Ovaj red sadri dvije naredbe.

Prvom naredbom nareujemo
raunalu da tekst koji se nalazi
unutar navodnika ispie na
zaslonu raunala.

Drugom naredbom nareuje-
mo raunalu da prijee u novi
red.
Ovom naredbom nareujemo raunalu
da stane i eka tako dugo dok ne pritis-
nemo neku tipku.

Da bismo bolje razumjeli ovu naredbu,
obrisat emo ovaj red u programu, a za-
tim emo prevesti i pokrenuti program
klikom na Kompajlaj i pokreni.
Ova naredba oznauje kraj programa. Na-
kon te naredbe program se gasi.
Ova vitiasta zagrada oznaava kraj pros-
tora unutar kojeg se nalazi program.
42
Na prvi program
PRO - MIL
Gruba skica programa
Da bismo se lake snali u naem programu, podijelit emo ga na nekoliko veih
cjelina.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
Ovo je poetak programa. Ove naredbe
pisat emo na poeku svakog naeg prog-
rama. Kasnije emo ovdje dodati jo neke
naredbe.

Iako smo objasnili emu slue pojedine
naredbe, trenutno nije bitno da tono poz-
najemo znaenje svake od njih.

Dovoljno je da znamo da te naredbe mora-
mo napisati na poeku svakog naeg pro-
grama i da ih tono napiemo.
cout << "Ovo je moj tekst." << endl;
Ovdje se nalazi glavni dio na-
eg programa i u ovom dijelu
odreujemo to e na prog-
ram raditi.

U iduim vjebama gornji i do-
nji dio uglavnom neemo dirati,
a sve bitno zbivat e se u
ovom dijelu programa.
system("PAUSE");
return 0;
}
Ovo su naredbe koje piemo na kraju prog-
rama. Slino kao to je to sluaj s naredba-
ma na poetku programa, vrlo rijetko emo
ih mijenjati i trenutno nije bitno da u potpu-
nost razumijemo znaenje svake od tih
naredbi.

Dovoljno je da znamo da te naredbe mora-
mo napisati na kraju programa da bi prog-
ram normalno radio.
43
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Varijacije programa
Jedna od najboljih metoda koje nam pomau da bolje razumijemo funkcionira-
nje programa i pojedinih naredbi jest da u program unosimo manje izmjene, a
zatim opaamo kakve posljedice e takve izmjene izazvati.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
cout << "Ovo je moj tekst." << endl;
system("PAUSE");
return 0;
}
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
cout << "OVDJE STAVLJAMO TEKST." << endl;
system("PAUSE");
return 0;
}
Kao to smo ve vidjeli, pok-
renemo li ovaj program, na
zaslonu raunala dobit emo
ovakav rezultat.
Promijenimo li ovaj red dobit emo ovakav rezultat.

Oigledno je da je funkcija ovog reda u programu
ispis teksta koji se nalazi unutar navodnika i da taj
tekst moemo po volji mijenjati.
44
Na prvi program
PRO - MIL
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
cout << "Jaa jesm nism ghgh." << endl;
system("PAUSE");
return 0;
}
Promijenimo ponovno ovaj red i pokrenimo program.

Dobit emo ovakav rezultat.

Oigledno je da ovim redom u programa nareujemo raunalu da ispie tekst
unutar navodnika na zaslon raunala, ali da raunalo ne ulazi u to ima li taj
tekst smisla ili nema.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
cout << "Jaa jesm " nism ghgh." << endl;
system("PAUSE");
return 0;
}
Iako raunalo ne ulazi u
smisao teksta koji smo na-
pisali unutar navodnika,
ovdje ipak postoji jedno
ogranienje, a to je da unu-
tar navodnika ne smijemo
koristiti navodnik.

Navodnici oznauju poetak
i kraj teksta, pa bi raunalo
navodnik unutar teksta
smatralo krajem teksta, a
sadraj iza tog navodnika
grekom.

Preuredimo ovaj red i poku-
ajmo program pokrenuti.
Vidjet emo da e raunalo
dojaviti greku.
Navodnik koji
smo dodali.
45
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
cout << "Ovo je moj tekst." << endl ;
system("PAUSE");
return 0;
}
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
cout << "Ovo je moj tekst.";
system("PAUSE");
return 0;
}
Ovako bi trebao izgledati
rezultat izvoenja ove
inaice programa.

Program radi i bez obri-
sanog dijela, ali nakon
ispisa naeg teksta rau-
nalo nije skoilo u novi
red, nego je sljedei tekst
nastavilo pisati u istom
redu. Oigledno da je <<
endl naredba za skok u
novi red.
Vratimo na program u
prvobitno stanje, a zatim
ga pokrenimo klikom na
Kompajlaj i pokreni.
Ovako e izgledati rezul-
tat rada naeg programa.

Da bismo bolje razumjeli
njegovu funkciju, obrie-
mo ovaj dio programa.
Nova inaica programa
trebala bi ovako izgledati.

Klikom na Kompajlaj i
pokreni pokrenemo pro-
gram.
46
Na prvi program
PRO - MIL
Postavlja se pitanje ako s <<
endl nareujemo raunalu da
skoi u novi red, bi li s vie
takvih naredbi u nizu vie puta
skoilo u novi red.

Pogledajmo to e se dogoditi
ako u na program dodamo
jo jednu << endl naredbu.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
cout << "Ovo je moj tekst." << endl;
cout << endl;
system("PAUSE");
return 0;
}
Vratimo obrisanu << endl naredbu.
Vidimo da se je dogodilo
ono to smo oekivali.

Izmeu prvog i drugog
reda teksta pojavio se je
jedan prazni red.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
cout << "Ovo je moj tekst." << endl;
cout << endl;
cout << endl;
cout << endl;
system("PAUSE");
return 0;
}
Dodajmo u na program
jo nekoliko << endl nared-
bi.
Pokrenemo li takav program
vidimo da se je razmak izme-
u dva reda u programu po-
veao.
47
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
cout << "Ovo je moj tekst." << endl << endl << endl << endl;
system("PAUSE");
return 0;
}
Vie naredbi << endl moemo napisati i
unutar jednog reda.

Pokrenemo li ovu inaicu programa, uvje-
rit emo se da daje isti rezultat kao i pret-
hodna.
cout << "Ovo je moj tekst." << endl ;
Pogledajmo sada podrobnije red u kojem se nalaze naredbe za ispis teksta i
skok u novi red.
Propisana rije kojom obavjetavamo raunalo
da emo sadraj koji slijedi poslati na neku izla-
znu jedinicu, u naem sluaju na zaslon rau-
nala.

Uoimo da naredbu << endl ne moemo koris-
titi ako prije nismo stavili naredbu cout.
Ove oznake obvezno
se stavljaju ispred
sadraja koji e iz
raunala ii na neku
izlaznu jedinicu, npr.
zaslon raunala.
Iako nevelik,
ovo je JAKO
vaan dio pro-
grama.

Oznaava kraj
naredbe ili
grupe naredbi
koje ine cjeli-
nu.
Tekst unutar navod-
nika ispisat e se na
zaslon raunala.

Uoimo da ovaj dio
ini cjelinu sa <<
oznakama i da bez
tih oznaka nee fun-
kcionirati.
Ovom naredbom
nareujemo raunalu
da prilikom ispisa
skoi u novi red.

Uoimo da ova na-
redba ini cjelinu s
<< oznakama.
48
Na prvi program
PRO - MIL
Distribucija programa
Nakon to nae programersko remek djelo proradi, osjetit emo potrebu na
program podijeliti s prijateljima ili ga staviti na internet. Postavlja se pitanje
to moramo uiniti da bi na program proradio i na prijateljevom raunalu.

Prilikom prevoenja programa programsko okruenje iz naeg programa ge-
nerira prevedeni program koji sadri sve elemente koji su mu potrebni da bi
se samostalno pokrenuo u windows programskom okruenju kao i svaki dru-
gi windows program.


A gdje se nalazi prevedena inaica naeg programa?

Otvorimo Windows Explorer i u njemu otvorimo mapu u koju smo koristili tije-
kom prevoenja programa. U naem sluaju to je Radni mapa na C disku.
Datoteka s nastavkom exe sadri
na preveden program koji moe
samostalno raditi u windows okru-
enju.

Dovoljno je da tu datoteku poa-
ljemo prijatelju koji e ju pokrenuti
dvostrukim klikom mia.
49
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Uitavanje spremljenog projekta
Na projekt e se spremiti prili-
kom prevoenja programa.

Ako projekt elimo spremiti bez
da smo program preveli, kliknemo
na ikonu Spremi.
Ako pokuamo ugasiti prog-
ramsko okruenje, a da nis-
mo spremili program, rau-
nalo e nas upozoriti.

Klikom na Yes spremit emo
na program.
1 - Kliknemo na Datoteka.
2 - Zatim na Ponovno otvori.
3 - Na ovom popisu
kliknemo na projekt
koji elimo otvoriti.
Spremljeni projekt moe-
mo uitati u nae prog-
ramsko okruenje na vie
naina.

Na najjednostavniji nain
moemo uitati nekoliko
prethodnih spremanja.
50
Na prvi program
PRO - MIL
1 - Kliknemo na Datoteka.
2 - Zatim na Otvori datoteku
ili projekt.
elimo li u nae programsko okruenje
uitati program koji ne moemo uitati
na nain koji smo vidjeli na prethodnoj
stranici, uitat emo ga na neto sloe-
niji nain.
1 - Otvorit e se dodatni prozor u ko-
jem emo izabrati mapu u kojoj se
nalazi projekt i naziv projekta.
2 - Ovdje biramo mapu u kojoj
se nalazi projekt.
3 - Kliknemo na projekt koji elimo uitati.
Prepoznajemo ga po nastavku dev.
4 - Kliknemo na Otvori.
51
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Nakon to se
spremljeni projekt
uitao, mogli bismo
biti zbunjeni injeni-
com da ga ne vidi-
mo u prostoru u
kojem smo oeki-
vali da emo ga
vidjeti.
Da bismo na program vidjeli, ovdje kliknemo na
naziv programa, u naem sluaju to je main.cpp.
PRO - MIL 52
Varijable
C++ programiranje za apsolutne poetnike
V
a
r
i
j
a
b
l
e

PRO - MIL 53
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

54
Varijable
PRO - MIL
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
cout << 2+3;
cout << endl;
system("PAUSE");
return 0;
}
Sada emo raunalo iskoristiti za rauna-
nje.

Unesimo ovaj program u C++ programsko
okruenje.

Klikom na Kompajlaj i pokreni ga pokre-
nemo. Dobit emo ovakav rezultat.
Poetak i kraj progra-
ma isti su kao i do
sada, dok je srednji
dio promijenjen.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{


cout << 2+3;

cout << endl;


system("PAUSE");
return 0;
}
U ovom redu
nareujemo ra-
unalu da zbroj
broja 2 i broja 3,
a to je broj 5,
ispie na zaslon
raunala.

U ovom redu
nareujemo ra-
unalo da skoi
u novi red.
Ovaj program zbraja
broj 2 i broj 3, a re-
zultat koji je u ovom
sluaju broj 5 ispisu-
je na zaslon.

Pogledajmo sada
strukturu naeg no-
vog programa.
Osnovne raunske operacije
55
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
cout << 8+4;
cout << endl;
system("PAUSE");
return 0;
}
Pokuajmo zbrojiti neka druga dva broja,
npr. 8 i 4.

Pokrenimo program i vidjet emo da e
raunalo zbrojiti ta dva broja.
Pokuajmo neku drugu raunsku opera-
ciju, npr. oduzimanje.

U ovom programu oduzet emo od broja
12 broj 8.

Pokrenimo program i pogledajmo na
rezultat.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
cout << 12-8;
cout << endl;
system("PAUSE");
return 0;
}
56
Varijable
PRO - MIL
Dok smo za zbrajanje i oduzimanje koristili
oznake uobiajene u matematici, za mnoe-
nje emo koristiti zvjezdicu. Nalazi se iznad
broja devet s desne strane, na brojanoj tip-
kovnici.

Mnoenje broja 2 i broja 3 zapisat emo kao
2*3.

Pogledamo rezultat.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
cout << 2*3;
cout << endl;
system("PAUSE");
return 0;
}
Oznaka za dijeljenje tako-
er ima drugaiji oblik od
onog na koji smo navikli u
matematici. Kao oznaka
dijeljenje koristi se kosa
crta koja se nalazi iznad
broja 8 s desne strane,
na brojanom dijelu tip-
kovnice.

12 podijeljeno sa 4 napi-
sat emo kao 12/4.

Pokrenimo program i po-
gledamo rezultat.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
cout << 12/4;
cout << endl;
system("PAUSE");
return 0;
}
Na prvi pogled uinit e nam se
da je program za dijeljenje is-
pravan.
57
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
cout << 13/4;
cout << endl;
system("PAUSE");
return 0;
}
Pokuajmo ovdje umjesto 12/4 staviti 13/4.

Pokrenimo program i pogledajmo rezultat.

Rezultat je oigledno pogrean.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
cout << 15/3;
cout << endl;
system("PAUSE");
return 0;
}
Pokuajmo ovdje staviti
15/3 i pokrenimo program.

Rezultat je ispravan.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
cout << 17/3;
cout << endl;
system("PAUSE");
return 0;
}
Umjesto 15/3 stavimo 17/3 i
pokrenimo program.
Rezultat je pogrean. Mogli bismo
zakljuiti da e dijeljenje biti isprav-
no, ako je rezultat cjelobrojni broj.

Ako je rezultat decimalni broj, dolazi
do greke.

Kako rijeiti taj problem, vidjet emo
neto kasnije u ovom poglavlju.
58
Varijable
PRO - MIL
Varijable
Vidjeli smo da osnovne raunske ope-
racije, osim dijeljenja, funkcioniraju, ali
ne ba na nain kako smo mi zamiljali
da bi program trebao raditi.

Problem naih dosadanjih programa
jest u tome to svaki program vri ra-
unsku operaciju izmeu dva konkret-
na broja i ako elimo izvriti raunsku
operaciju izmeu druga dva broja, pro-
gram moramo iznova pisati i prevoditi.

Postavlja se pitanje bismo li mogli napi-
sati npr. program za zbrajanje koji ne bi
zbrajao dva konkretna broja, nego bi
mogao zbrojiti bilo koja dva broja.

To je, naravno, mogue. Unesimo, pre-
vedimo i pokrenimo ovaj program.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int a;
int b;
int c;
cin >> a;
cin >> b;
c = a + b;
cout << c;
cout << endl;
system("PAUSE");
return 0;
}
Nakon pokretanja programa
ugledat emo zbunjujui crni
ekran bez sadraja.
Na tipkovnici iza-
beremo prvi broj
koji elimo zbrajati,
npr. broj 3 i zatim
pritisnemo Enter
tipku na tipkovnici.
59
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Na tipkovnici izaberemo
drugi broj koji elimo
zbrajati, npr. broj 5 i
zatim pritisnemo Enter
tipku na tipkovnici.
Nakon pritiska na
Enter tipku na tip-
kovnici, a zaslonu
raunala ugledat
emo r ezul t at
zbrajanja broja 3 i
broja 5, a to je broj
8.
Pokrenimo bez ikakvih izmjena isti prog-
ram jo jednom, ali sada unesimo neke
druge brojeve, npr. broj 12 i broj 14.
Na slian nain kao i u
prethodnom primjeru,
dakle tako da nakon sva-
kog unosa broja pritisne-
mo tipku Enter na tipkov-
nici, unesimo brojeve 12 i
14.

Kao rezultat dobit emo
njihov zbroj, a to je broj
26.

Vidimo da smo uspjeli
postii ono to smo elje-
li. Pomou jednog progra-
ma moemo zbrajati razli-
ite brojeve, bez da prog-
ram moramo mijenjati.
60
Varijable
PRO - MIL
Analiza programa
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int a;
int b;
int c;
cin >> a;
cin >> b;
c = a + b;
cout << c;
cout << endl;
system("PAUSE");
return 0;
}


a

b

c

3
a
5
b

3
a
5
b
8
c = +

c
8
Poetak programa.
Naredbom int formirat
emo u raunalu pros-
tor poput posude. U taj
prostor moemo spre-
mati brojeve.

Formirat emo tri pros-
tora, prostor a, prostor
b i prostor c.
Naredbom cin u prostor a i prostor b
spremit emo broj koji smo unijeli
preko tipkovnice, npr. broj 3 i broj 5.
Kraj programa.
Skok u novi red.
Zbrojimo sadraj prostora a i prostora
b, a rezultat spremimo u prostor c.
Sadraj prostora c, a to je
rezultat zbrajanja, ispiemo
na zaslon raunala.
61
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

int a ;
Ovom naredbom formiramo prostor u raunalu u koji emo spremati brojeve.

Na poetku taj prostor moemo zamisliti kao posudice u koje moemo staviti
brojeve, iako su to zapravo rezervirana mjesta u memoriji naeg raunala.
Naredba za formiranje
prostora.
Ovdje se nalazi naziv prostora.

Zato svaki prostor ima naziv???

Zato to u jednom programu moe-
mo imati vie takvih prostora, pa
nam naziv prostora omoguuje da ih
razlikujemo.
Oznaka ; obvezno dolazi
na kraju naredbe.
int b;
int c;
Ovim naredbama se for-
miraju jo dva prostora,
prostor b i prostor c.
cin >> a ;
Nakon formiranja prostor za spremanje brojeva je prazan i bio bi nam sasvim
beskoristan kad u njega ne bismo mogli staviti neki broj.

U taj prostor broj moemo staviti na vie naina, a jedan od njih je da ga une-
semo pomou tipkovnice. Za to emo koristiti naredbu cin.
Naredba za unos.
Ova oznaka stavlja se
ispred naziva prostora u
koji emo unijeti broj.
Ovdje stavljamo oznaku prostora u
koji emo unijeti broj. Dakle, broj
emo unijeti u prostor a i ne u neki
drugi prostor, npr. b ili c.
Oznaka ; obvezno dolazi
na kraju naredbe.
62
Varijable
PRO - MIL
Osim to u te prostore moemo spremati brojeve, izmeu njih moemo izvoditi
raunske operacije na isti nain kao to smo ih izvodili izmeu brojeva.

U naem sluaju zbrojit emo sadraj prostora a i sadraj prostora b, a rezultat
tog zbrajanja spremit emo u prostor c.
cin >> b ;
Naredba slina prethodnoj, samo to e se u
ovom sluaju unijeti broj spremiti u prostor b.
c = a + b ;
Prostor c u koji e-
mo spremiti rezultat.
Znak jednakosti ima
istu funkciju kao i u
matematici.
Naziv prvog prostora. Naziv drugog prostora.
Oznaka raunske ope-
racije izmeu prostora.
Oznaka ; obvezno
dolazi na kraju na-
redbe.
Nakon to se naredba c = a + b; izvri, u prostoru c nalazit e se rezultat zbra-
janja sadraja prostora a i prostora b, ali da korisnik vidio rezultat moramo nare-
diti raunalu da sadraj prostora c ispie na zaslon raunala. To emo uiniti
ovom naredbom.
cout << c ;
Naredba za ispis.
Oznaka ispred sadr-
aja koji ispisujemo.
Prostor c u koji e-
mo spremiti rezultat.
Oznaka ; obavezno
dolazi na kraju na-
redbe.
63
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Varijacije programa
Da bismo bolje razumjeli izradu programa koji koriste prostor za spremanje
brojeva, napravit emo niz izmjena na naem programu i opaat emo kako te
izmijene utjeu na rad program.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int prvi;
int drugi;
int rezultat;
cin >> prvi;
cin >> drugi;
rezultat = prvi + drugi;
cout << rezultat;
cout << endl;
system("PAUSE");
return 0;
}
Ovaj program ima potpuno istu struktu-
ru kao prethodni, samo to ima drugai-
je nazive prostora za spremanje broje-
va.

Prvi prostor vie se ne naziva a, nego
prvi. Drugi prostor vie se ne naziva b,
nego drugi. Trei prostor vie se ne
naziva c, nego rezultat.

Prevedimo i pokrenimo ovaj program i
vidjet emo da radi jednako kao i pret-
hodni program.
Sad se postavlja pitanje po kojoj logici se biraju nazivi prostora za spre-
manje brojeva. Pogledajmo neka pravila i sugestije.

- Ne smiju se koristi naredbe; npr. int aaa; je dozvoljeno, a int cout; nije.

- Koriste se samo brojevi i slova engleske abecede, dakle bez .

- Naziv ne smije sadravati razmak; PrviBroj i prvi_broj je dozvoljeno, a
prvi broj nije.

- Ako naziv sadri brojeve, prvi znak mora biti slovo, dakle a1 je dozvolje-
no, a 1a nije.

- Pametno je da naziv prostora govori to se u prostoru nalazi. Bolje je da
prostor u koji emo spremati povrinu nazovemo povrsina nego qqy1.

- Dva razliita prostora ne mogu imati isto ime.
64
Varijable
PRO - MIL
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int A;
int B;
int c;
cin >> a;
cin >> b;
c = a + b;
cout << c;
cout << endl;
system("PAUSE");
return 0;
}
Pokuamo li pokrenuti ovaj program, ra-
unalo e dojaviti greku.

Do greke je dolo zato to smo ovdje
formirali prostor A, a ovdje smo pokuali
unijeti broj u prostor a.

Raunalo razlikuje velika i mala slova pa
njemu prostor a i prostor A nisu isto.

S njegove toke gledita mi ovdje poku-
avamo unijeti broj u prostor koji ne pos-
toji.

Zato e nas raunalo u komentaru greke
upozoriti da ne zna to je to a.
65
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace
std;

int main()
{
int a;
int b;
int c;
cin >> a;
cin >> b;
c = a + b;
cout << "c";
cout << endl;
system("PAUSE");
return 0;
}
U ovom programu ovu naredbu nismo napi-
sali u ispravnom obliku kao cout << c; nego
u obliku cout << "c"; dakle sadraj koji se
ispisuje stavili smo u navodnike kao to
smo to naviknuli prilikom ispisa teksta kori-
tenjem cout naredbe.

Pokrenemo li ovaj program, on e se izvriti
i raunalo nam nee dojaviti nikakvu gre-
ku, ali kao rezultat neemo dobiti ono to
smo oekivali.

Vidimo da smo u prostor a unijeli 8, u pros-
tor b unijeli smo 4, ali kao rezultat nismo
dobili broj 12, nego slovo c.

Zato?

cout << c; - ispisuje sadraj prostora c.

cout << "c"; - ispisuje slovo c.
Ovaj tip greke veo-
ma je teko pronai
u sloenim programi-
ma, budui da rau-
nalo nee dojaviti
greku i poziciju gre-
ke prilikom prevo-
enja.

To se dogaa zato
to je program for-
malno ispravno napi-
san; cout << "c"; je
ispravna naredba, ali
ne radi ono to smo
htjeli.
66
Varijable
PRO - MIL
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int broj1;
int broj2;
int rezultat;
cin >> broj1;
cin >> broj2;
rezultat = broj1 - broj2;
cout << rezultat;
cout << endl;
system("PAUSE");
return 0;
}
Prostore za spremanje brojeva moemo
koristiti i za druge matematike operaci-
je.

Ovdje moemo vidjeti program za oduzi-
manje.

Od sadraja prostora broj1 oduzet e se
sadraj prostora broj2, a rezultat e se
spremiti u prostor rezultat.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int broj1;
int broj2;
int rezultat;
cin >> broj1;
cin >> broj2;
rezultat = broj1 * broj2;
cout << rezultat;
cout << endl;
system("PAUSE");
return 0;
}
Na slian nain moemo napraviti program
za mnoenje sadraja dvaju prostora.
67
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Problem dijeljenja
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int broj1;
int broj2;
int rezultat;
cin >> broj1;
cin >> broj2;
rezultat = broj1 / broj2;
cout << rezultat;
cout << endl;
system("PAUSE");
return 0;
}
Ostao nam je nerijeen problem dijelje-
nja.

Sadraje prostora za spremanje broje-
va moemo dijeliti, ali e kao i proli put
kad smo pokuali dijeliti, rezultat biti
ispravan samo za brojeve iji rezultat
dijeljenja nije decimalni broj.

Ako je rezultat dijeljenja decimalni broj,
rezultat e biti pogrean.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
float broj1;
float broj2;
float rezultat;
cin >> broj1;
cin >> broj2;
rezultat = broj1 / broj2;
cout << rezultat;
cout << endl;
system("PAUSE");
return 0;
}
Problem emo rijeiti ovako napisanim
programom. Umjesto naredbom int,
prostor za spremanje brojeva formirat
emo naredbom float;

Pokrenemo li taj program, dobit emo
ispravan rezultat.
68
Varijable
PRO - MIL
float broj1 ;
Ovo je jo jedan nain na koji moemo formirati prostor za spremanje brojeva.

U emu je razlika izmeu prostora formiranog int naredbom i prostora formira-
nog float naredbom???

U prostor formiran int naredbom moemo spremati samo brojeve bez decimal-
nog zareza, a u prostore formirane float naredbom moemo spremati brojeve
s decimalnim zarezom.
Oznaka ; obvezno
dolazi na kraju na-
redbe.
Naredba za formi-
ranje prostora za
spremanje brojeva
s decimalnim zare-
zom.
Naziv prostora. Uoimo da iz-
meu broj i 1 nema razmaka.
Postavlja se pitanje bismo li mogli u na program unijeti broj s decimalnim zare-
zom. Pokrenimo jo jednom program iz prethodnog primjera i pokuajmo.
Vidimo da je mogue unijeti
decimalne brojeve u na
program.

Broj 16,25 podijelili smo
brojem 2,5 i kao rezultat
ispravno dobili 6,5.

Pri tome moramo imati u
vidu da C++ kao decimalni
zarez zapravo ne koristi
zarez, nego toku.

Dakle, ako elimo unijeti
npr. 3,14 unijet emo 3.14
koritenjem tipkovnice.
69
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Uljepavanje programa
Nai programi dodue rade, ali su tako runi da bi teko bili runiji. Korisnika
doeka crni ekran bez ikakvih uputa. Nakon to unesemo dva broja, dobit
emo trei bez ikakvog komentara to taj trei broj predstavlja.

Budui da smo mi napisali program, mi znamo da treba unijeti dva broja, da
nakon svakog unosa treba pritisnuti tipku Enter i mi znamo to predstavlja
trei broj koji smo dobili kao rezultat, ali netko drugi veoma bi teko koristio
na program. Unesite i pokrenite ovaj program.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
float broj1;
float broj2;
float rezultat;
cout << "Dijeljenje." << endl;
cout << "Unesite prvi broj." << endl;
cin >> broj1;
cout << "Unesite drugi broj." << endl;
cin >> broj2;
rezultat = broj1 / broj2;
cout << "Rezultat dijeljenja je:" << endl;
cout << rezultat;
cout << endl;
system("PAUSE");
return 0;
}
U ovom programu na
poetku programa, te
prije svakog unosa i
ispisa rezultata nared-
bom cout ispisali smo
adekvatan komentar
koji pomae korisniku
da lake shvati emu
program slui, to mora
unijeti i to je dobio kao
rezultat.

Ovakav program puno
je ugodniji za upotrebu
od programa bez ko-
mentara.
70
Varijable
PRO - MIL
Prethodni program mogli bismo jo malo uljepati dodavanjem praznih redova.
Unesimo i pokrenimo ovaj program.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
float broj1;
float broj2;
float rezultat;
cout << "Dijeljenje." << endl;
cout << endl;
cout << endl;
cout << "Unesite prvi broj." << endl;
cin >> broj1;
cout << endl;
cout << "Unesite drugi broj." << endl;
cin >> broj2;
cout << endl;
rezultat = broj1 / broj2;
cout << "Rezultat dijeljenja je:" << endl;
cout << rezultat;
cout << endl;
cout << endl;
system("PAUSE");
return 0;
}
Naslov programa.
Dva skoka u novi red.
Komentar prvog unosa.
Prvi unos.
Prazni red.
Komentar drugog unosa.
Drugi unos.
Komentar rezultata.
Ispis rezultata. Dva skoka u novi red.
71
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Nekoliko primjera programa
// *********************************
// Program za izraun povrine
// *********************************

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
float stranica_A;
float stranica_B;
float povrsina;
cout << "Povrsina." << endl;
cout << endl;
cout << endl;
cout << "Unesite prvu stranicu." << endl;
cin >> stranica_A;
cout << endl;
cout << "Unesite drugu stranicu." << endl;
cin >> stranica_B;
cout << endl;
povrsina = stranica_A * stranica_B;
cout << "Povrsina je:" << endl;
cout << povrsina;
cout << endl;
cout << endl;
system("PAUSE");
return 0;
}
Ovo je program za
izraun povrine
pravokutnika. Uni-
jet emo ga u ra-
unalo i pokrenuti.

Struktura je ista
kao i struktura
prethodnog prog-
rama, ali su prila-
goeni komentari i
nazivi prostora za
spremanje broje-
va.

Jedina novost je
komentar na po-
etku programa
koji se nalazi iza //
oznaka i opisuje
namjenu progra-
ma.

Komentar zapoinje // ozna-
kom i pomae nam da se
lake snaemo ako program
elimo kasnije koristiti.

Komentirati moemo namje-
nu programa ili pojedine
segmente programa.
Prilikom prevoenja programa, kad prevo-
ditelj naie na // oznaku, skae u novi red
ne prevodei ostatak reda.
72
Varijable
PRO - MIL
// ******************************
// Program za izraun brzine
// ******************************

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
float put; // prostor za put
float vrijeme; // prostor za vrijeme
float brzina; // prostor za brzinu
cout << "Brzina." << endl;
cout << endl;
cout << endl;
cout << "Unesite prevaljeni put." << endl;
cin >> put;
cout << endl;
cout << "Unesite vrijeme." << endl;
cin >> vrijeme;
cout << endl;
brzina = put / vrijeme;
cout << "Brzina je:" << endl;
cout << brzina;
cout << endl;
cout << endl;
system("PAUSE");
return 0;
}
Osim to komentare
moemo pisati u zase-
bnom redu, moemo ih
pisati i na kraju nared-
bi.

Pri tome imajmo na
umu da je

float put; // komentar

ispravno, ali

// komentar float put;

ili

float // komentar put;

nije. Dakle, ako ko-
mentar unosimo u red
s naredbom, komentar
mora biti na kraju reda.
Postavlja se pitanje emu
takvi komentari slue. Ako
smo upravo napisali prog-
ram, a program ima deset
redova, onda nam komen-
tari ne trebaju.

Ako napiemo vei prog-
ram, a elimo ga korigirati
nakon dvije godine, onda e
nam komentari pojedinih
dijelova programa uvelike
pomoi pri snalaenju u
programu.

Komentari su korisni i ako
moramo korigirati program
koji je netko drugi pisao.
73
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

// *********************************************
// Program za izraun volumena kvadrata
// *********************************************

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
float stranica_A;
float stranica_B;
float stranica_C;
float volumen;
cout << "Izracun volumena." << endl;
cout << endl;
cout << "Unesite stranicu a." << endl;
cin >> stranica_A;
cout << "Unesite stranicu b." << endl;
cin >> stranica_B;
cout << "Unesite stranicu c." << endl;
cin >> stranica_C;
cout << endl;
volumen = stranica_A * stranica_B * stranica_C;
cout << "Volumen je:" << endl;
cout << volumen;
cout << endl;
cout << endl;
system("PAUSE");
return 0;
}
Ovo je primjer programa za izraun volu-
mena kvadrata.

Pokuajmo za vjebu sami smisliti neko-
liko slinih programa.
PRO - MIL 74
Grafika
C++ programiranje za apsolutne poetnike
G
r
a
f
i
k
a

PRO - MIL 75
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

76
Grafika
PRO - MIL
Podeavanje programskog okruenja
Da bi grafika funkcionirala,
prilikom instalacije progra-
ma moramo instalirati do-
datke kojim programskom
okruenju omoguuje pri-
kaz grafike.

Ako to nismo uinili, vrati-
mo se na uvodno poglavlje
i instalirajmo potrebne do-
datke.

Nakon toga podesit emo
programsko okruenje.
1 - Kliknemo na Projekt.
2 - Zatim na Postavke projekta.
1 - Kliknemo na Parametes.
2 - Ovdje unesemo -lbgi -lgdi32
Kliknemo na Ok.
77
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Na prvi grafiki program
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle(320,240,180);
getch();
closegraph();
return 0;
}
Unesimo i pokrenimo ovaj prog-
ram. Uoimo da su poetak i kraj
programa izmijenjeni.

Na poetku dodan je ovaj red, a
na kraju je izbaena naredba:
system("PAUSE");
Klikom na Kompajlaj i pokreni pokrenemo
program.

Otvorit e se dva prozora:

- tekstualni koji smo do sada koristili

- grafiki u kojem e raunalo nacrtati krug.
78
Grafika
PRO - MIL
Analiza programa
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle(320,240,180);
Poetak programa. Za razliku od dosa-
danjih programa, u ovom smo korigi-
rali poetak dodavi mu jo jednu na-
redbu.

Ovom naredbom u program ukljuuje-
mo grafike naredbe.
Ovdje odreujemo veliinu grafikog
prozora i broj boja.
Otvaranje grafikog prozora.
Odreivanje boje pozadine.
Odreivanje boje crte.
Brie stari sadraj zaslona i stare pos-
tavke boja. Pokuajmo pokrenuti prog-
ram bez ove naredbe.
Naredba za crtanje kruga.
79
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

getch();
closegraph();
return 0;
}
Ovom naredbom zaustavljamo izvoe-
nje programa do trenutka dok ne priti-
snemo neku tipku na tipkovnici. Ima
istu namjenu kao i system(PAUSE)
u normalnim programima.

Da bismo bolje razumjeli ovu naredbu,
izbacimo je iz programa i pokuajmo
pokrenuti program bez nje.
Zatvaranje grafikog prozora.
Kraj programa. Uoimo da ovdje vie
nema naredbe system(PAUSE); Njenu
funkciju sada ima getch(); naredba.
Pogledajmo sada poblie odreene naredbe. Ovom naredbom odreujemo tip
grafikog prozora.
int gdriver = 9 ;
Ovaj broj moe biti izmeu 1 i
10. Ako je 9, dobit emo VGA
prozor ija maksimalna veliina
moe biti 640 X 480 toaka i 16
boja.

Ako umjesto broja 9 stavimo
broj 6, dobit emo IBM 8514
prozor ija maksimalna veliina
moe biti 1024 X 768 toaka i
256 boja.

Upotrijebimo li druge brojeve,
dobit emo manje prozore s ma-
njim brojem boja.
80
Grafika
PRO - MIL
Znaenje ovog broja ovisi o tipu grafikog pro-
zora koji smo odabrali.

Ako smo naredbom int gdriver = 9; odabrali
VGA prozor, stavimo li ovdje broj 0, dobit emo
prozor veliine 640 X 200 toaka. Stavimo li 1,
dobit emo prozor veliine 640 X 350 toaka, a
stavimo li broj 2 koji smo mi odabrali, dobit e-
mo prozor veliine 640 X 480 toaka.

Ako smo naredbom int gdriver = 6 ; odabrali
IBM 8514 prozor, stavimo li ovdje broj 0, dobit
emo prozor veliine 640 X 480 toaka, a sta-
vimo li broj 1, dobit emo prozor veliine 1024
X 768 toaka.
Nakon to smo naredbom int gdriver = 9; odabrali tip grafikog prozora, ovom
naredbom biramo rezoluciju grafikog prozora.
int gmode = 2 ;
setbkcolor( WHITE );
Ovom naredbom odreuje se boja po-
zadine. U naem sluaju bit e bijela.
Ovdje unosimo naziv bo-
je. Naziv boje moe biti:

BLACK,
BLUE,
GREEN,
CYAN,
RED,
MAGENTA,
BROWN,
LIGHTGRAY,
DARKGRAY,
LIGHTBLUE,
LIGHTGREEN,
LIGHTCYAN,
LIGHTRED,
LIGHTMAGENTA,
YELLOW,
WHITE.
81
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Osim navoenja imena boja, boje moemo odrediti i navoenjem njihove broj-
ane vrijednosti.
setbkcolor(COLOR( 255, 255, 255 ));
Crvena. Zelena.
Plava.
Dodat emo naredbu COLOR iza koje se nalaze tri broja ija vrijednost mo-
e biti izmeu 0 i 255.

Boje u raunalu sastoje se od tri boje; crvene, zelene i plave. Sve ostale
boje nastaju mijeanjem tih boja.

Prvim brojem odreujemo intenzitet crvene boje, drugim intenzitet zelene i
treim intenzitet plave boje.

Naredbom setbkcolor(COLOR(255,255,255)); dobit emo bijelu boju, a na-
redbom setbkcolor(COLOR(0,0,0)); dobit emo crnu boju.
setcolor(BLACK);
setcolor(COLOR (0,0,0));
Ovom naredbom odreuje se boja kojom crtamo. Koristimo iste nazive boja
kao i u prethodnoj naredbi.
Kao i u prethodnoj naredbi,
boje moemo odrediti navo-
enjem njihovog naziva, a
moemo i pomou brojeva
upotrebom naredbe COLOR.
82
Grafika
PRO - MIL
Ovo je naredba za crtanje kruga.
circle( 320, 240, 180 ) ;
480
180
320
240
640
Udaljenost sredita od
lijevog ruba prozora
Udaljenost sredita od
gornjeg ruba prozora
Polumjer kruga.
irina prozora,
u naem slu-
aju 640 toa-
ka.
Visina prozora, u naem
sluaju 480 toaka.
83
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Varijacije programa
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle(320,240,220);
circle(320,240,165);
circle(320,240,110);
circle(320,240,55);
getch();
closegraph();
return 0;
}
Napravit emo nekoliko prim-
jera da bismo lake razumjeli
kako radi naredba za crtanje
kruga.

Ovaj program slian je pretho-
dnom. Razlika je u tome to je
prethodni crtao samo jedan
krug, a ovaj e nacrtati nekoli-
ko krugova razliitog polumje-
ra, ali sa sreditem u istoj to-
ki.

Ovdje se nalaze etiri nared-
be za crtanje etiri kruga.

Pokrenemo li ovaj program,
trebali bismo dobiti ovakav
rezultat.
Pokuajmo program pro-
mijeniti tako da poveamo
ili smanjimo broj krugova.

Pokuajmo promijeniti
brojeve koji odreuju po-
lumjer kruga i poloaj sre-
dita kruga.
84
Grafika
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle(160,140,80);
circle(320,140,80);
circle(480,140,80);
getch();
closegraph();
return 0;
}
U ovom primjeru napravit
emo tri jednaka kruga, je-
dan pored drugoga, to emo
postii promjenom udaljenos-
ti sredita krugova od lijevog
ruba prozora.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle (320, 60, 60);
circle (320, 180, 60);
circle (320, 300, 60);
getch();
closegraph();
return 0;
}
Pogledajmo jo nekoliko mogunosti.
U ovom sluaju promjenom udalje-
nosti od gornjeg ruba prozora dobili
smo tri kruga, jedan iznad drugoga.
85
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle (60, 60, 60);
circle (180, 180, 60);
circle (300, 300, 60);
getch();
closegraph();
return 0;
}
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle(320,240,220);
circle(220,140,50);
circle(420,140,50);
circle(320,240,30);
getch();
closegraph();
return 0;
}
86
Grafika
PRO - MIL
380
480
160
100
Crtanje pravokutnika
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
rectangle (160, 100, 480, 380);
getch();
closegraph();
return 0;
}
Osim krunice moemo nacrtati
i druge oblike, npr. pravokutnik.

Ovdje u program unesemo na-
redbu za crtanje pravokutnika,
a na zaslonu raunala dobit
emo ovakav rezultat.
rectangle ( 160, 100, 480, 380 );
480
640
Naredba za crtanje
pravokutnika.
Naredbom rectan-
gle crtamo pravo-
kutnik, a sa etiri
broja koji se nala-
ze iza naredbe
rectangle odreu-
jemo poloaj gor-
njeg lijevog i do-
njeg desnog ugla
pravokutnika.

Funkciju pojedinih
brojeva moemo
vidjeti na crteu.
87
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
rectangle (160, 100, 480, 380);
rectangle (190, 130, 450, 350);
rectangle (220, 160, 420, 320);
rectangle (250, 190, 390, 290);
getch();
closegraph();
return 0;
}
Meusobno moemo kombinirati
vie pravokutnika.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle (320, 240, 220);
circle (220, 140, 50);
circle (420, 140, 50);
circle (320, 240, 30);
rectangle (260, 342, 380, 338);
getch();
closegraph();
return 0;
}
Pravokutnik moemo kombini-
rati s drugim oblicima.

Pokuajmo za vjebu sami iz-
misliti nekoliko primjera, npr.
deblo stabla nacrtamo kao pra-
vokutnik, a kronju kao krug.
88
Grafika
PRO - MIL
Crtanje crte
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
line (120, 100, 500, 380);
getch();
closegraph();
return 0;
}
Crtu moemo nacrtati na vie
naina, a uporaba naredbe line
jedan je od njih.
380
500
120
100
line ( 160, 100, 480, 380 );
480
640
Naredba za crtanje
crte.
Naredbom line
crtamo crtu, a sa
etiri broja koji se
nalaze iza nared-
be line odreuje-
mo poetak i kraj
crte.

Funkciju pojedinih
brojeva moemo
vidjeti na crteu.
89
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
line (100, 240, 540, 240);
line (320, 20, 320, 460);
getch();
closegraph();
return 0;
}
Napravimo nekoliko crtea upo-
rabom naredbe za crtanje crte.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle (320, 240, 220);
circle (320, 240, 165);
circle (320, 240, 110);
circle (320, 240, 55);
line (100, 240, 540, 240);
line (320, 20, 320, 460);
getch();
closegraph();
return 0;
}
90
Grafika
PRO - MIL
lineto ( 500, 380 );
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto (120, 100);
lineto (500, 380);
getch();
closegraph();
return 0;
}
Osim uporabom naredbe line,
crtu moemo nacrtati i upora-
bom naredbi moveto i lineto.

Naredbom moveto odreuje-
mo poetak crte, a naredbom
lineto odreujemo kraj crte.
380
500
120
100
moveto ( 120, 100 );
480
640
Ovom naredbom odreujemo
poetak crte.
Ovom naredbom odre-
ujemo kraj crte.
91
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto(160, 240);
lineto(160, 450);
lineto(480, 450);
lineto(480, 240);
lineto(160, 240);
lineto(320, 120);
lineto(480, 240);
getch();
closegraph();
return 0;
}
Ovaj nain crtanja pogodan
je za crtanje vie crta u nep-
rekinutom nizu.

Pogledajmo ovaj primjer.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto(160, 240);
lineto(160, 450);
getch();
closegraph();
return 0;
}
Pogledajmo, korak po korak,
kako je nastao ovaj crte.
92
Grafika
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto(160, 240);
lineto(160, 450);
lineto(480, 450);
getch();
closegraph();
return 0;
}
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto(160, 240);
lineto(160, 450);
lineto(480, 450);
lineto(480, 240);
getch();
closegraph();
return 0;
}
93
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto(160, 240);
lineto(160, 450);
lineto(480, 450);
lineto(480, 240);
lineto(160, 240);
getch();
closegraph();
return 0;
}
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto(160, 240);
lineto(160, 450);
lineto(480, 450);
lineto(480, 240);
lineto(160, 240);
lineto(320, 120);
getch();
closegraph();
return 0;
}
94
Grafika
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto(160, 240);
lineto(160, 450);
lineto(480, 450);
lineto(480, 240);
lineto(160, 240);
lineto(320, 120);
lineto(480, 240);
rectangle(400, 320, 480, 450);
rectangle(200, 260, 250, 340);
rectangle(300, 260, 350, 340);
circle (550, 90, 80);
line (0, 450, 640, 450);
getch();
closegraph();
return 0;
}
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto(160, 240);
lineto(160, 450);
lineto(480, 450);
lineto(480, 240);
lineto(160, 240);
lineto(320, 120);
lineto(480, 240);
getch();
closegraph();
return 0;
}
95
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

380
500
Crtanje toke
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle (320, 240, 220);
putpixel (320, 240, BLACK);
getch();
closegraph();
return 0;
}
Ponekad nam je potrebna samo
jedna toka, kao u ovom primje-
ru gdje smo tokom oznaili
sredite kruga.
putpixel ( 320, 240, BLACK );
480
640
Ovdje unosimo boju
toke koju odreuje-
mo na isti nain kao i
boju pozadine ili boju
crte.
Naredba za crtanje
toke.
96
Grafika
PRO - MIL
Ispis teksta
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
cout << "Ovo je krug." << endl;
circle (320, 240, 220);
getch();
closegraph();
return 0;
}
Moemo li unutar grafikog
prozora staviti tekst? Moe-
mo, ali naalost, ne na nain
na koji smo to do sada navikli
raditi.

Ako prije naredbe za crtanje
kruga stavimo naredbu i za
ispis teksta, tekst e se ispisa-
ti, ali ne unutar grafikog pro-
zora, ve unutar tekstualnog
prozora.
97
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
outtext ("Ovo je krug.");
circle (320, 240, 220);
getch();
closegraph();
return 0;
}
Upotrijebimo li ovu naredbu,
tekst e se ispisati unutar
grafikog prozora.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto (320, 240);
outtext ("Ovo je krug.");
circle (320, 240, 220);
getch();
closegraph();
return 0;
}
Naredbu za odreivanje pozici-
je poetka crte moemo iskori-
stiti za odreivanje poetka
teksta.
98
Grafika
PRO - MIL
320
240
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
outtextxy (320, 240, "Ovo je krug.");
circle (320, 240, 220);
getch();
closegraph();
return 0;
}
Naredba outtextxy objedi-
njuje naredbu za odreivanje
pozicije teksta i naredbu za
ispis teksta.
outtextxy ( 320, 240, "Ovo je krug." );
480
640
Brojevima odreujemo
poziciju ispisa.
Ovo je krug.
Unutar navodnika je
tekst koji ispisujemo.
99
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
settextstyle (9, HORIZ_DIR, 1);
outtextxy (320, 240, "Ovo je krug.");
circle (320, 240, 220);
getch();
closegraph();
return 0;
}
Naredbom settextstyle mo-
emo mijenjati oblik i veliinu
slova te smjer ispisa teksta.
Stavljamo je prije naredbe za
ispis teksta.
settextstyle ( 9, HORIZ_DIR, 1 );
Smjer teksta:

HORIZ_DIR - vodoravni tekst.

VERT_DIR - uspravni tekst od dolje prema gore.

-VERT_DIR - uspravni tekst od gore prema dolje.
Naredba za odreivanje veliine i oblika slova te smjera ispisa.
Ovaj broj odreuje
oblik slova. Njego-
va vrijednost moe
biti izmeu 0 i 10.
Veliina slova.
100
Grafika
PRO - MIL
Pogledajmo primjer prom-
jene veliine slova.
Pogledajmo primjer prom-
jene smjera ispisa teksta.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle (320, 240, 220);
settextstyle(9, HORIZ_DIR, 1);
outtextxy(320, 200, "Ovo je krug.");
settextstyle(9, HORIZ_DIR, 2);
outtextxy(320, 240, "Ovo je krug.");
settextstyle(9, HORIZ_DIR, 3);
outtextxy(320, 280, "Ovo je krug.");
settextstyle(9, HORIZ_DIR, 4);
outtextxy(320, 320, "Ovo je krug.");
getch();
closegraph();
return 0;
}
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle (320, 240, 220);
settextstyle(9, HORIZ_DIR, 1);
outtextxy(320, 240, "Ovo je krug.");
settextstyle(9, VERT_DIR, 1);
outtextxy(300, 240, "Ovo je krug.");
settextstyle(9, -VERT_DIR, 1);
outtextxy(500, 240, "Ovo je krug.");
getch();
closegraph();
return 0;
}
101
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle (320, 240, 220);
settextstyle(0, HORIZ_DIR, 3);
outtextxy(320, 40, "Ovo je krug.");
settextstyle(1, HORIZ_DIR, 3);
outtextxy(320, 80, "Ovo je krug.");
settextstyle(2, HORIZ_DIR, 3);
outtextxy(320, 120, "Ovo je krug.");
settextstyle(3, HORIZ_DIR, 3);
outtextxy(320, 160, "Ovo je krug.");
settextstyle(4, HORIZ_DIR, 3);
outtextxy(320, 200, "Ovo je krug.");
settextstyle(5, HORIZ_DIR, 3);
outtextxy(320, 240, "Ovo je krug.");
settextstyle(6, HORIZ_DIR, 3);
outtextxy(320, 280, "Ovo je krug.");
settextstyle(7, HORIZ_DIR, 3);
outtextxy(320, 320, "Ovo je krug.");
settextstyle(8, HORIZ_DIR, 3);
outtextxy(320, 360, "Ovo je krug.");
settextstyle(9, HORIZ_DIR, 3);
outtextxy(320, 400, "Ovo je krug.");
settextstyle(10, HORIZ_DIR, 3);
outtextxy(320, 440, "Ovo je krug.");
getch();
closegraph();
return 0;
}
Pogledajmo primjer promjene
oblika slova.
PRO - MIL 102
Donoenje odluke
C++ programiranje za apsolutne poetnike
D
o
n
o

e
n
j
e

o
d
l
u
k
e

PRO - MIL 103
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

104
Donoenje odluke
PRO - MIL
Funkcije
#include <cstdlib>
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
float broj;
float potencija;
float rezultat;
cout << "Unesite broj:" << endl;
cin >> broj;
cout << endl;
cout << "Unesite potenciju:" << endl;
cin >> potencija;
cout << endl;
rezultat = pow(broj,potencija);
cout << "Rezultat je:" << endl;
cout << rezultat << endl;
cout << endl;
system("PAUSE");
return 0;
}
Pojam funkcije zvui jako
pametno, ali iza tog naziva
kriju se uglavnom jednos-
tavne stvari, matematike
operacije poput potencira-
nja ili vaenja kvadratnog
korijena.

Pogledajmo program za
potenciranje.

Da bismo u programu mogli
koristiti matematike funkci-
je, moramo u program uk-
ljuiti biblioteku matemati-
kih funkcija.
rezultat = pow ( broj, potencija );
Varijabla u koju sprema-
mo rezultat potenciranja.
Naredba za potenciranje. Broj koji potenciramo.
Potencija na koju
potenciramo.
105
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
float kut;
float rezultat;
cout << "Kut u radijanima:" << endl;
cin >> kut;
cout << endl;
rezultat = sin(kut);
cout << "Sinus kuta je:" << endl;
cout << rezultat << endl;
cout << endl;
system("PAUSE");
return 0;
}
Ovo je program za izra-
un sinusa.

Ako ne znate to je to
sinus, nemojte se time
optereivati. To nije bitno
za razumijevanje C++
programskog jezika.

Vano je uoiti da ova
funkcija veliinu kuta ne
izraava stupnjevima ne-
go radijanima.
rezultat = sin ( kut );
Varijabla u koju sprema-
mo rezultat.
Naredba za izraun sinusa kuta.
Varijabla u koju spremamo veliinu
kuta kojem emo raunati sinus. Kut
mora biti izraen u radijanima, a ne u
stupnjevima.
106
Donoenje odluke
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
float broj;
float rezultat;
cout << "Unesite negativni broj:" << endl;
cin >> broj;
cout << endl;
rezultat = abs(broj);
cout << "Broj bez minusa:" << endl;
cout << rezultat << endl;
cout << endl;
system("PAUSE");
return 0;
}
Ponekad je u programu
potrebno negativan broj
pretvoriti u pozitivan.
rezultat = abs ( broj );
Naredba za pretvaranje
negativnog broja u poziti-
van broj.
Varijabla u koju spremamo broj koji
emo iz negativnog pretvoriti u poziti-
van.
Varijabla u koju sprema-
mo rezultat.
107
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
float broj;
float rezultat;
cout << "Unesite broj:" << endl;
cin >> broj;
cout << endl;
rezultat = sqrt(broj);
cout << "Kvadratni korijen je:" << endl;
cout << rezultat << endl;
cout << endl;
system("PAUSE");
return 0;
}
Pogledajmo program
za vaenje kvadratnog
korijena.

to je to uope kvadrati
korijen?

Ako je 4 puta 4, odnos-
no 4 na kvadrat, jedna-
ko 16, onda je kvadrat-
ni korijen od 16 jedak
4.
rezultat = sqrt ( broj );
Varijabla u koju spre-
mamo rezultat.
Naredba za izraun kvadra-
tnog korijena.
Varijabla u koju spremamo
broj iji kvadratni korijen
elimo izraunati.
Iako se nam na prvi
pogled moe uiniti
da je program ispra-
van, to na alost nije
tako. Pokuamo li
kvadratni korijen iz-
raunati iz negativ-
nog broja dobit emo
besmisleni rezultat.
Do toga dolazi zato
to nije mogue izra-
unati kvadratni kori-
jen iz negativnog
broja.
108
Donoenje odluke
PRO - MIL
Donoenje odluke
#include <cstdlib>
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
float broj;
float rezultat;
cout << "Unesite pozitivan broj." << endl;
cin >> broj;
cout << endl;
if (broj < 0)
{
cout << "Broj je negativan!" << endl;
}
else
{
rezultat = sqrt(broj);
cout << "Kvadratni korijen je:" << endl;
cout << rezultat;
cout << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
Pokuajmo kvadrati korijen izra-
unati pomou ovakvog progra-
ma.
Ova inaica programa
izraunava kvadratni
korijen ako smo unijeli
pozitivan broj ili nas
obavjetava da je une-
sen negativan broj ako
unesemo negativan
broj.
109
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Naredbom if ispitujemo
je li sadraj varijable ma-
nji od nule.
Ovaj dio programa izvo-
di se samo ako je sadr-
aj varijable broj manji
od nule.
Naredbom else zapoi-
nje dio programa koji
se izvodi samo ako
sadraj varijable broj
nije manji od nule.
Uobiajeni kraj progra-
ma. Izvodi se prilikom
svakog pokretanja prog-
rama.
Pogledajmo bitne dijelo-
ve naeg programa.
#include <cstdlib>
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
float broj;
float rezultat;
cout << "Unesite pozitivan broj." << endl;
cin >> broj;
cout << endl;
if (broj < 0)
Broj nula.
{
cout << "Broj je negativan!" << endl;
}
else
{
rezultat = sqrt(broj);
cout << "Kvadratni korijen je:" << endl;
cout << rezultat;
cout << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
Formiranje varijabli i
unos broja iz kojeg e-
mo vaditi kvadratni kori-
jen.
Izvodi se prilikom sva-
kog pokretanja progra-
ma.
Uobiajen poetak prog-
rama. Izvodi se prilikom
svakog pokretanja prog-
rama
110
Donoenje odluke
PRO - MIL
Svi programi koje smo do sada vidjeli izvodili su se redom od prve do posljed-
nje naredbe. U sluaju programa za vaenje kvadratnog korijena to nam ne
odgovara jer elimo da program na jedan nain reagira ako unesemo poziti-
van broj, a na drugi nain ako unesemo negativan.

Ako unesemo pozitivan broj, izraunat emo kvadratni korijen i neemo ispisi-
vati obavijest da je broj negativan, a ako unesemo negativan broj, ispisat e-
mo obavijest da je broj negativan i neemo raunati kvadratni korijen, budui
da iz negativnog broja nije mogue izraunati kvadratni korijen.

Za razliku od dosadanjih naredbi koje su se nalazile u jednom redu, naredba
koja nam omoguuje izvoenje jednog ili drugog dijela programa proteu se
kroz vie redova. Pogledajmo strukturu tog sustava.
if ( broj < 0 )

{

sadraj a

}

else

{

sadraj b

}
Sadraj a i sa-
draj b nalaze
se unutar vitia-
stih zagrada.

U poetku esto
e nam se dea-
vati da izostavi-
mo vitiaste za-
grade ili da ih
krivo napiemo.
Naredbom if za-
poinje donoe-
nje odluke.
Uvjet na temelju kojeg
e raunalo odluiti hoe
li se izvoditi sadraj a ili
sadraj b.
U naem sluaju ispituje se je li sadraj
varijable broj manji od broja nula.
Ovaj dio programa
unutar vitiastih zag-
rada izvrit e se ako
je uvjet zadovoljen,
tj. ako je sadraj vari-
jable broj manji od
nula.
Naredbom else za-
poinje dio programa
koji se izvrava ako
uvjet iza if naredbe
nije zadovoljen, tj.
ako sadraj varijable
broj nije manji od
nule.

U tom sluaju izvodi
se sadraj b, a ne
izvodi se sadraj a.
111
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Da bismo lake shvatili nain koritenja if ... else naredbi, napravit emo niz
programa. Ti programi nee raditi nita osobito korisno, ve e im jedina svrha
biti uvjebavanje pisanja programa unutar kojih raunalo donosi odluku.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
float broj;
cout << "Unesite broj." << endl;
cin >> broj;
cout << endl;
if (broj > 0)
{
cout << "Broj je veci od nule." << endl;
}
else
{
cout << "Broj nije veci od nule." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
Ovaj program samo
ispituje je li unesen
broj vei od nule.

Ako je broj vei od
nule, izvodi se dio
programa koji ispisu-
je tekst Broj je vei
od nule.

Ako broj nije vei od
nule, izvodi se dio
programa koji ispisu-
je tekst Broj nije
vei od nule.
112
Donoenje odluke
PRO - MIL
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
float broj;
cout << "Unesite broj." << endl;
cin >> broj;
cout << endl;

if (broj == 0)
{
cout << "Broj je jednak nuli." << endl;
}
else
{
cout << "Broj nije jednak nuli." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
U ovom programu ispitivat e-
mo je li unesen broj jednak nuli.

Za to ispitivanje koristit emo
dvostruki znak jednakosti.
Ako je odgovor na pitanje
je li sadraj varijable broj
jednak nuli DA, izvrit e
se ovaj dio programa.
Ispisat e se poruka Broj
je jednak nuli.

Ako je odgovor na pitanje
je li sadraj varijable broj
jednak nuli NE, izvrit e
se ovaj dio programa.
Ispisat e se poruka Broj
nije jednak nuli.
Da smo umjesto broj == 0 napi-
sali broj = 0 program ne bi ispi-
tivao je li sadraj varijable broj
jednak nuli, nego bi broj nula
stavio u varijablu broj.
113
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
float broj;
cout << "Unesite broj." << endl;
cin >> broj;
cout << endl;
if (broj < 100)
{
cout << "Broj je manji od sto." << endl;
}
else
{
cout << "Broj nije manji od sto." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
Vidjeli smo da moemo
ispitivati je li varijabla
vea, manja ili jednaka
nekom broju.
U dosadanjim primje-
rima to je bio broj nula,
ali to moe biti bilo koji
broj, npr. broj 100 kao
to je to sluaj u ovom
primjeru.
114
Donoenje odluke
PRO - MIL
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
float prvi;
float drugi;
cout << "Unesite prvi broj." << endl;
cin >> prvi;
cout << endl;
cout << "Unesite drugi broj." << endl;
cin >> drugi;
cout << endl;
if (prvi == drugi)
{
cout << "Brojevi su jednaki." << endl;
}
else
{
cout << "Brojevi su razliciti." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
Osim varijable i broja, if nared-
bom moemo usporeivati dvije
varijable.
Ovdje ispitujemo jesu li sa-
draji dviju varijabli u koje
smo prethodno unijeli broje-
ve jednaki.

Ako unesemo jednake bro-
jeve ispisat, e se obavijest
Brojevi su jednaki.

Ako unesemo razliite, ispi-
sat e se obavijest Brojevi
su razliiti.
115
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
float prvi;
float drugi;
cout << "Unesite prvi broj." << endl;
cin >> prvi;
cout << endl;
cout << "Unesite drugi broj." << endl;
cin >> drugi;
cout << endl;
if (prvi < drugi)
{
cout << "Prvi broj je manji." << endl;
}
else
{
cout << "Prvi broj nije manji." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
U ovom primjeru ispitujemo je
li sadraj varijable prvi manji
od sadraja varijable drugi.
116
Donoenje odluke
PRO - MIL
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
float prvi;
float drugi;
cout << "Unesite prvi broj." << endl;
cin >> prvi;
cout << endl;
cout << "Unesite drugi broj." << endl;
cin >> drugi;
cout << endl;
if ((prvi < 5) && (drugi < 5))
{
cout << "Oba broja su manja od pet." << endl;
}
else
{
cout << "Oba broja nisu manja od pet." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
Osim jednos-
tavnih ispitiva-
nja if nared-
bom, mogua
su i sloenija
ispitivanja.
117
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

if ( (prvi < 5) && (drugi < 5) )

{

sadraj a

}

else

{

sadraj b

}
Ovdje imamo dva uvjeta, prvi uvjet i drugi
uvjet. Svaki od ta dva uvjeta moe biti zado-
voljen ili nezadovoljen.

Mogue je da je sadraj varijable prvi manji
od 5, a mogue je i da nije. Isto tako, mogu-
e je da je sadraj varijable drugi manji od
5, a mogue je i da nije.

Postavlja se pitanje u kojem sluaju e se
izvravati sadraj a, a u kojem sluaju sadr-
aj b.

Ovim oznakama nareujemo raunalu da
e se sadraj a izvoditi samo onda kad su
zadovoljena oba uvjeta; u naem sluaju
kad je sadraj varijable prvi manji od 5 i kad
je sadraj varijable drugi manji od 5.

U svim ostalim sluajevima izvrit e se
sadraj b.
Prilikom formiranja sloenih uvjeta moramo paziti na raspored zagrada. Svaki
uvjet, prvi i drugi nalaze se unutar svojih zagrada, a svi zajedno nalaze se
unutar jo jednog para zagrada.
118
Donoenje odluke
PRO - MIL
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
float prvi;
float drugi;
cout << "Unesite prvi broj." << endl;
cin >> prvi;
cout << endl;
cout << "Unesite drugi broj." << endl;
cin >> drugi;
cout << endl;
if ((prvi < 5) || (drugi < 5))
{
cout << "Barem jedan je manji od 5." << endl;
}
else
{
cout << "Niti jedan nije manji od 5." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
Ako umjesto ozna-
ka && stavimo
oznake || ukupni
uvjet bit e zado-
voljen ako je ba-
rem jedan od dva
uvjeta zadovoljen.
Oznaku | dobijemo tako da dri-
mo lijevu AltGr tipku, a zatim
pritisnemo W tipku.
119
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

if (broj < 0) Ispitujemo je li sadraj varijable broj manji od broja nula.
if (broj > 0) Ispitujemo je li sadraj varijable broj vei od broja nula.
if (broj == 0) Ispitujemo je li sadraj varijable broj jednak broju nula.
if (broj < 50)
Ispitujemo je li sadraj varijable broj manji od broja pede-
set.
if (broj > 50) Ispitujemo je li sadraj varijable broj vei od broja pedeset.
if (broj != 50)
Ispitujemo je li sadraj varijable broj razliit od broja pede-
set.
if (prvi > drugi)
Ispitujemo je li sadraj varijable prvi vei od sadraja vari-
jable drugi.
if (prvi < drugi)
Ispitujemo je li sadraj varijable prvi manji od sadraja
varijable drugi.
if (prvi == drugi)
Ispitujemo je li sadraj varijable prvi jednak sadraju vari-
jable drugi.
Primjeri jednostavnih ispitivanja
if (broj == 50) Ispitujemo je li sadraj varijable broj jednak broju pedeset.
Ovdje moemo vidjeti primjere jednostavnih ispitivanja na temelju kojih rau-
nalo donosi odluku koji dio programa e se izvoditi, a koji preskoiti.

Ovo su samo neki primjeri, dok je broj moguih kombinacija praktiki neog-
ranien. Bilo koju varijablu koju koristimo u programu moemo usporediti s
bilo kojim brojem.

Isto tako bilo koje dvije varijable koje se koriste u programu moemo meu-
sobno usporeivati.
120
Donoenje odluke
PRO - MIL
Primjeri sloenih ispitivanja
if ((prvi < 5) && (drugi < 5))
Uvjet je zadovoljen ako je sadraj vari-
jable prvi manji od 5 i ako je sadraj
varijable drugi manji od 5.
if (((prvi < 5) || (drugi < 5)) && (treci < 5))
Uvjet je zadovoljen ako je sadraj vari-
jable prvi ili sadraj varijable drugi ili
sadraj obiju varijabli manji od 5 i ako
je sadraj varijable treci manji od 5.
if ((prvi < 5) || (drugi < 5) || (treci < 5))
Uvjet je zadovoljen ako je barem jedna
od triju varijabli manja od pet, ili ako su
dvije manje od 5, ili ako su sve tri ma-
nje od 5.
if ((prvi < 5) && (drugi < 5) && (treci < 5))
Uvjet je zadovoljen ako su sve tri vari-
jable manje od pet. Dovoljno je da jed-
na varijabla nije manja od 5 i uvjet nije
ispunjen.
if ((prvi < 5) || (drugi < 5))
Uvjet je zadovoljen ako je ili sadraj
varijable prvi manji od 5, ili ako je sa-
draj varijable drugi manji od 5, ili ako
su obje varijable manje od 5.
Osim jednostavnih ispitivanja if naredbom, u programu moemo imati i veoma
sloena ispitivanja.

Sloena ispitivanja formiraju se koritenjem zagrada po logici slinoj logici u
matematici i uporabom simbola || i &&.

Simbol && izmeu dva uvjeta znai da oba uvjeta moraju biti zadovoljena da
bi bio zadovoljen ukupni uvjet.

Simbol || izmeu dva uvjeta oznauje da je dovoljno da je barem jedan od
uvjeta zadovoljen da bi bio zadovoljen ukupni uvjet.

Broj moguih kombinacija praktiki je neogranien, a koju kombinaciju emo
upotrijebiti ovisi o cilju koji programom elimo postii.
121
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
float prvi;
float drugi;
float treci;
cout << "Unesite prvi broj." <<
endl;
cin >> prvi;
cout << "Unesite drugi broj." << endl;
cin >> drugi;
cout << "Unesite treci broj." << endl;
cin >> treci;
if (((prvi < 5) || (drugi < 5)) && (treci < 5))
{
cout << "DA" << endl;
}
else
{
cout << "NE" << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
Ovdje vidimo primjer pro-
grama koji moemo isko-
ristiti za isprobavanje
kombinacija s prethodne
stranice.

U ovom sluaju ukupni
uvjet je ispunjen ako je
prvi broj manji od 5 ili ako
je drugi broj manji od 5 ili
ako su oba manja od 5 i
ako je trei broj manji od
5.

Ako je ukupni uvjet zado-
voljen, izvest e se ovaj
dio programa.

Ako ukupni uvjet nije
zadovoljen, izvest e se
ovaj dio programa.
122
Donoenje odluke
PRO - MIL
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
float broj;
cout << "Unesite broj." << endl;
cin >> broj;
if (broj < 0)
{
cout << "Broj je manji od 0." << endl;
}
else
{
if (broj > 0)
{
cout << "Broj je veci od 0." << endl;
}
else
{
cout << "Broj je 0." << endl;
}
}
cout << endl;
system("PAUSE");
return 0;
}
Osim to moemo u pro-
gramu imati veoma sloe-
na ispitivanja unutar if
naredbe, mogue je jed-
nu if naredbu staviti unu-
tar druge if naredbe.

To je nuno ako elimo
ispitati vie stvari, npr. je
li neki broj vei od nule ili
jednak nuli ili je manji od
nule. Takvo ispitivanje ne
moemo napraviti s jed-
nom if naredbom, nego
su nune dvije if naredbe.

Pogledajmo ovaj prog-
ram.
123
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
float broj;
cout << "Unesite broj." << endl;
cin >> broj;


if (broj < 0)

{
cout << "Broj je manji od 0." << endl;
}

else

{
if (broj > 0)

{
cout << "Broj je veci od 0." << endl;
}

else

{
cout << "Broj je 0." << endl;
}

}


cout << endl;
system("PAUSE");
return 0;
}
Pogledamo strukturu
programa.
Poetak programa.
Prva if naredba. Ispitu-
je je li broj manji od 0.
Ako je uneseni broj
manji od 0, izvodi se
ovaj dio.
Ako uneseni broj nije
manji od 0, izvodi se
ovaj dio. Unutar ovog
dijela nalazi se druga
if naredba.
Ako je uneseni broj
vei od 0, izvodi se
ovaj dio.
Ako uneseni broj nije
vei od 0, izvodi se
ovaj dio.

Ako uneseni broj nije
ni vei ni manji od
nule, onda znamo da
je nula.
Kraj programa.
124
Donoenje odluke
PRO - MIL
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
float broj;
cout << "Unesite broj." << endl;
cin >> broj;
if (broj < 0)
{
cout << "Broj je manji od 0." << endl;
}
else
{
if (broj > 0)
{
cout << "Broj je veci od 0." << endl;
}
else
{
cout << "Broj je 0." << endl;
}
}
cout << endl;
system("PAUSE");
return 0;
}
Pogledamo li paljivo ovaj
program, vidjet emo da je
potpuno identian programu s
prethodne stranice. Razlika je
jedino u tome to pojedini re-
dovi nisu uvueni.

Pokuamo li pokrenuti ovaj
program, vidjet emo da radi
potpuno jednako kao i inaica
s uvuenim redovima.

U emu je onda razlika? Za-
to bismo uope uvlaili redove
kad program oigledno radi i
bez toga?

Razlika je u preglednosti. Pro-
gram s uvuenim redovima
daleko je pregledniji.

Usporedimo li program s uvu-
enim redovima na prethodnoj
stranici i ovaj bez uvuenih
redova, vidjet emo da je na
inaici s uvuenim redovima
daleko lake uoiti gdje zapo-
inju, a gdje zavravaju poje-
dine if naredbe; koje vitiaste
zagrade ine par i sl.

Preglednost programa s uvla-
enjima redova osobito dolazi
do izraaja kod veih i sloe-
nijih programa.
Ne postoje vrsta pravila na koji nain
treba uvlaiti redove. Na poetku je
najbolje da u vlastitim programima
uvlaenja izvodimo slino kao u prim-
jerima danima u knjizi.

Osnovna ideja je u tome da se uvue
svaka cjelina za koju bi moglo biti
nejasno gdje poinje, a gdje zavra-
va.
125
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{

float broj;
cout << "Unesite broj." << endl;
cin >> broj;


if (broj < 0)

{
cout << "Broj je manji od 0." << endl;
}

else

{
if (broj > 0)

{
cout << "Broj je veci od 0." << endl;
}

else

{
cout << "Broj je 0." << endl;
}

}


cout << endl;
system("PAUSE");
return 0;
}
Pogledajmo strukturu
uvlaenja redova.
Bez uvlaenja pie se
poetak programa i dvije
glavne vitiaste zagrade.
Sadraj unutar glavnih
vitiastih zagrada uvlai
se u desnu stranu.

Na toj razini pie se
veina jednostavnih
naredbi.
Sadraji unutar if na-
redbe dodatno se pomi-
u u desnu stranu.

To nam pomae da
lake uoimo gdje poi-
nje, a gdje zavrava if
naredba.
Ako se unutar jedne if
naredbe nalazi druga if
naredba, njen sadraj
dodatno se pomie u
desnu stranu.

To nam pomae da
lake uoimo gdje poi-
nje i gdje zavrava dru-
ga if naredba te poma-
e da njen sadraj lak-
e razlikujemo od sadr-
aja prve if naredbe.
126
Donoenje odluke
PRO - MIL
Switch naredba
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
float a;
float b;
int od;
cout << "Unesite 1. broj:" << endl;
cin >> a;
cout << "Unesite 2. broj:" << endl;
cin >> b;
cout << "Brojeve cemo:" << endl;
cout << "1 - zbrojiti" << endl;
cout << "2 - oduzeti" << endl;
cout << "3 - mnoziti" << endl;
cout << "4 - dijeliti" << endl;
cin >> od;
switch (od)
{
case 1:
cout << a << " + " << b << " = " << a + b << endl;
break;
case 2:
cout << a << " - " << b << " = " << a - b << endl;
break;
case 3:
cout << a << " x " << b << " = " << a * b << endl;
break;
case 4:
cout << a << " : " << b << " = " << a / b << endl;
break;
default:
cout << "Morate unijeti 1,2,3 ili 4." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
If naredba nam
omoguuje gra-
nanje na dvije
grane. Jedna e
se izvriti ako je
uvjet zadovo-
ljen, a druga ako
uvjet nije zado-
voljen.

Primjena nared-
be if nije elegan-
tna ako se u
programu javi
potreba za gra-
nanjem u vie
od dvije grane.
U ovom progra-
mu biramo jed-
nu od etiri ra-
unske operaci-
je.

Program bismo
mogli realizirati i
uporabom vie
if naredbi, ali
daleko je ele-
gantniji ako upo-
trijebimo switch
naredbu.
127
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

switch (od)

{

case 1:

cout << "Prvi izbor." << endl;

break;

case 2:
cout << "Drugi izbor." << endl;
break;

case 3:
cout << "Treci izbor." << endl;
break;

case 4:
cout << "Cetvrti izbor." << endl;
break;

default:

cout << "Greska!!!" << endl;

}
Poetak switch naredbe.
Ovdje se nalazi int varijabla. Grana-
nje se vri na temelju broja koji se
nalazi u varijabli. Int tip je obvezan.
Naredbom case 1: zapoinje dio programa koji
e se izvriti ako se u varijabli od nalazi broj 1.
Naredbom break
zavrava case 1:
naredba.

Pokuajmo je obri-
sati. Pokrenimo
program i promat-
rajmo posljedice.
Naredbom case 2:
zapoinje dio pro-
grama koji e se
izvriti ako je sadr-
aj varijable od
broj 2.

Na temelju sline
logike biraju se
ostali case dijelovi
kojih moe biti pro-
izvoljni broj.

(U naem sluaju
imamo jo case 3:
i case 4:.)
Ovaj dio izvrava se ako ni jedan case uvjet
nije zadovoljen, dakle ako u varijabli od nije bio
ni broj 1, ni broj 2, ni broj 3, ni broj 4.
Kraj switch naredbe.
PRO - MIL 128
Petlje
C++ programiranje za apsolutne poetnike
P
e
t
l
j
e

PRO - MIL 129
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

130
Petlje
PRO - MIL
For petlja
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
circle(260,240,60);
circle(265,240,60);
circle(270,240,60);
circle(275,240,60);
circle(280,240,60);
circle(285,240,60);
circle(290,240,60);
circle(295,240,60);
circle(300,240,60);
circle(305,240,60);
circle(310,240,60);
circle(315,240,60);
circle(320,240,60);
circle(325,240,60);
circle(330,240,60);
circle(335,240,60);
circle(340,240,60);
circle(345,240,60);
circle(350,240,60);
circle(355,240,60);
circle(360,240,60);
getch();
closegraph();
return 0;
}
Ovaj program crta niz krugova jedna-
kog promjera. Svakome je sredite
pomaknuto za pet toaka u desnu
stranu u odnosu na sredite prethod-
nog.

Vidimo da program funkcionira, ali nije
ba elegantan budui da moramo pu-
no puta ponoviti slinu naredbu.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 260; x < 365; x = x + 5 )
{
circle(x,240,60);
}
getch();
closegraph();
return 0;
}
Ovaj program radi isti
posao, ali je oigledno
daleko elegantniji.
131
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Kljuna naredba u novoj inaici programa je for naredba. Omoguuje nam
izvravanje dijela programa vie puta. To viestruko ponavljanje dijela prog-
rama naziva se programska petlja. Slino kao if naredba, i for naredba je
veoma sloena i protee se kroz vie redova programa.

Pogledajmo sastavne elemente for naredbe.
for ( x = 260 ; x < 365 ; x = x + 5 )

{

circle ( x, 240, 60 );

}
Ovdje se definira poetna
vrijednost varijable koju
koristi for naredba i koju
prije for naredbe moramo
formirati.

U naem sluaju poetna
vrijednost varijable x je
260.
Petlja e se vrtjeti, odnosno petlja e po-
navljati dio programa, tako dugo dok je
ovaj uvjet zadovoljen; u naem sluaju,
tako dugo dok je sadraj varijable x manji
od 365.

Kad uvjet vie nije zadovoljen; tj. kad x vie
ne bude manji od 365, program e nastavit
izvoenje od prve naredbe nakon druge
vitiaste zagrade.
Ovdje odreujemo na-
in na koji e se vrijed-
nost varijable x mije-
njati.

U naem sluaju nakon
svakog ponavljanja for
naredbe, vrijednost
varijable x uveat e se
za 5, a rezultat e se
spremiti u varijablu x.
Sadraj unutar navodni-
ka ponavlja se svaki put
kad for naredba uvea
vrijednost varijable x i
provjeri je li x manji od
365.
Udaljenost sredita kruga od lije-
vog ruba nije odreena brojem,
nego vrijednou varijable x.

Budui da se pri svakom ponov-
nom izvoenju sadraj varijable x
mijenja, jednako e se mijenjati i
udaljenost sredita kruga od lije-
vog ruba.
132
Petlje
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
getch();
closegraph();
return 0;
}
for (x = 260; x < 365; x = x + 5 )
{
circle(x,240,60);
}
Pogledajmo dijelove naeg programa.
Uobiajeni poetak programa.
Naredbe za otvaranje grafikog pro-
zora, odreivanje svojstava grafike i
formiranje varijable x koju koristimo u
for naredbi.
Uobiajeni kraj programa.
Ovdje definiramo petlju. Poetna
vrijednost varijable petlje x je 260,
uveavat e se za 5, a izvravat e
se tako dugo dok je sadraj varijable
x manji od 365.
Pri svakom ponavljanju petlje po-
navlja se sadraj unutar vitiastih
zagrada.

U naem sluaju na grafikom ek-
ranu e se crtati krug.

Udaljenost sredita kruga od lije-
vog ruba nije odreena brojem,
nego vrijednou varijable x.

Budui da vrijednost varijable x pri
svakom ponavljanju raste za 5,
sredie novog kruga bit e za pet
toaka pomaknuto u desnu stranu.
133
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int x;
cout << "Prije for naredbe." << endl;
for (x = 0; x < 9; x = x + 1 )
{
cout << x << endl;
}
cout << "Nakon for naredbe." << endl;
cout << endl;
system("PAUSE");
return 0;
}
Nemojmo se obeshrabriti ako nam trenutno nije previe jasno ni kako for
naredba radi, ni emu bi to trebalo sluiti. Na poetku su takve nedoumice
normalne i nipoto nisu dokaz da nismo talentirani za programiranje.

Takve nedoumice prevladavaju se tako da napiemo odreenu koliinu pro-
grama jer emo jedino na taj nain do kraja shvatiti kako for naredba radi i
emu slui.

Drugaiji je problem ako nam se ne da pisati programe. Onda bismo doista
mogli konstatirati da programiranje nije za nas i trebali bismo se pokuati
baviti neim intelektualno manje zahtjevnim, npr. nogometom ili politikom.
Ovaj e nam program po-
moi da lake shvatimo
funkcioniranje if naredbe.
Vrijednost varijable x mije-
njat e se od 0 do 9 po 1.

Jedino to ovaj program
radi jest ispisivanje sadraj
varijable x.

To nam omoguuje lako
opaanje kako se sadraj
varijable x mijenja, te koji
dio programa se ponavlja i
koliko puta.

Unoenjem varijacija u taj
program najlake emo
shvatiti for naredbu.
Vidimo da se ponavlja
sadraj unutar vitiastih
zagrada for naredbe.

Sadraj prije i sadraj pos-
lije for naredbe ne ponav-
lja se.
134
Petlje
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int x;
cout << "Prije for naredbe." << endl;
for (x = 0; x < 9; x = x + 2 )
{
cout << x << endl;
}
cout << "Nakon for naredbe." << endl;
cout << endl;
system("PAUSE");
return 0;
}
U prolom primjeru vrijed-
nost varijable x uveavali
smo za 1, a u primjeru prije
toga za 5.

Vrijednost varijable x u for
naredbi moemo uveavati
za bilo koju vrijednost koja
nam u programu treba, npr.
za 2.

U ovom sluaju vrijednost
varijable x raste od 0 do 9
po 2.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int x;
cout << "Prije for naredbe." << endl;
for (x = 10; x < 29; x = x + 2 )
{
cout << x << endl;
}
cout << "Nakon for naredbe." << endl;
cout << endl;
system("PAUSE");
return 0;
}
Mijenjati moemo poetnu i
krajnju vrijednost petlje.

U ovom sluaju x e se mijenja-
ti od 10 do 29.
135
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int x;
cout << "Prije for naredbe." << endl;
for (x = 28; x > 9; x = x - 2 )
{
cout << x << endl;
}
cout << "Nakon for naredbe." << endl;
cout << endl;
system("PAUSE");
return 0;
}
For naredba moe brojiti i
unatrag.

U ovom sluaju vrijednost
varijable x mijenja se od 28
do 9 po 2.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int x;
cout << "Prije for naredbe." << endl;
for (x = 18; x > -9; x = x - 2 )
{
cout << x << endl;
}
cout << "Nakon for naredbe." << endl;
cout << endl;
system("PAUSE");
return 0;
}
U for naredbi mogu se koristi-
ti i negativni brojevi.
136
Petlje
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int x;
cout << "Prije for naredbe." << endl;
for (x = 18; x > -9; x = x + 2 )
{
cout << x << endl;
}
cout << "Nakon for naredbe." << endl;
cout << endl;
system("PAUSE");
return 0;
}
Prilikom formiranja for nared-
be mogue je napraviti greku
koja se naziva mrtva petlja.

Do te greke dolazi kad uvjete
za kraj petlje tako formuliramo
da se oni nikad nee ispuniti,
pa e se petlja vjeno izvoditi.

U ovom primjeru poetna vri-
jednost je 18. Ta poetna vri-
jednost uveava se za 2, a
petlja e se ponavljati tako
dugo dok je x vei od 9.

Ako 18 uveavamo za 2, x e
uvijek biti vei od 9 i petlja se
nikad nee prekinuti.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int x;
cout << "Prije for naredbe." << endl;
for (x = 0; x < 9; x = x - 1 )
{
cout << x << endl;
}
cout << "Nakon for naredbe." << endl;
cout << endl;
system("PAUSE");
return 0;
}
Pogledajmo jo jedan primjer
mrtve petlje.
137
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 60; x < 580; x = x + 5 )
{
circle(x,240,60);
}
getch();
closegraph();
return 0;
}
Naredba for ne postoji zato da bi se niz brojeva ispisao na zaslon raunala,
nego zato da bi se u programu postigli odreeni efekti.

Iako to nije uvijek sluaj, najee se za postizanje eljenih ciljeva koristi va-
rijabla petlje. Pogledajmo nekoliko primjera.
Ovaj primjer slian je primjeru
na poetku ovog poglavlja.

Razlika je u tome to su u ovom
sluaju drugaije poetna i kraj-
nja vrijednost x varijable, pa
smo dobili drugaiji niz krugova.

U ovom sluaju vrijednost varija-
ble x mijenja se od 60 do 580 po
5.

Pokuamo sami mijenjati vrijed-
nosti unutar for naredbe i pro-
matrajmo kakve efekte e izaz-
vati te promjene.
138
Petlje
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 60; x < 390; x = x + 5 )
{
circle(320,x,60);
}
getch();
closegraph();
return 0;
}
Varijablu x moemo staviti umjesto
broja koji odreuje udaljenost sredi-
ta od gornjeg ruba, pa e se krugovi
crtati od gore prema dolje.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{

int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 60; x < 390; x = x + 15 )
{
circle(320,x,60);
}
getch();
closegraph();
return 0;
}
Uveavamo li varijablu x za 15 um-
jesto za 5, pomak sredita krugova
bit e vei.

Umjesto broja 15 pokuajmo staviti
10, a zatim 20.
139
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 20; x < 210; x = x + 10 )
{
circle(320,240,x);
}
getch();
closegraph();
return 0;
}
Osim pozicije sredita kruga,
varijablom x moemo mijenjati
polumjer kruga.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 10; x < 640; x = x + 10 )
{
line (x, 20, x, 400);
}
getch();
closegraph();
return 0;
}
Na slian nain moemo crtati ni-
zove drugih geometrijskih oblika,
npr. crta.
140
Petlje
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 10; x < 640; x = x + 30 )
{
rectangle (x, 20, x+20, 380);
}
getch();
closegraph();
return 0;
}
Ovo je primjer programa koji crta
niz pravokutnika.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
int r;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
r = 20;
for (x = 20; x < 475; x = x + 15 )
{
circle(x,240,r);
r = r + 5;
}
getch();
closegraph();
return 0;
}
U dosadanjim programima koris-
tili smo jednu varijablu.

U ovom primjeru koristima dvije,
jednom pomiemo udaljenost sre-
dita od lijevog ruba, a drugom
mijenjamo promjer.
141
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x;

int r;

initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();

r = 20;

for (x = 20; x < 475; x = x + 15 )
{

circle(x,240,r);

r = r + 5;

}
getch();
closegraph();
return 0;
}
Pogledajmo bitne dijelove ovog programa.
Za razliku od dosadanjih primje-
ra, u ovom formiramo jo jednu
varijablu koju smo nazvali r.
Prije for naredbe u varijablu r spre-
mimo poetnu vrijednost polumje-
ra kruga. U naem sluaju spremili
smo broj 20.
For naredba mijenja vrijednost
varijable x o 20 do 475 po 15.
U naredbi za crtanje kruga upotri-
jebili smo dvije varijable.

Varijablom x odreujemo udalje-
nost sredita kruga od lijevog ru-
ba, a varijablom r polumjer kruga.
Da bi kod svakog ponavljanja
polumjer kruga bio vei, nakon
to smo nacrtali krug, unutar viti-
astih zagrada for naredbe, broj
u varijabli r poveavamo za 5.

Zbog toga e pri svakom ponav-
ljaju polumjer kruga biti vei.
I u ovom sluaju promjena pojedinih
elemenata i opaanje rezultata po-
moi e nam da bolje razumijemo
program; npr umjesto r = r + 5 poku-
ajmo staviti r = r + 10; umjesto x = x
+ 15 pokuajmo staviti x = x + 5.
142
Petlje
PRO - MIL
Animacija
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 10; x < 620; x = x + 30 )
{
rectangle (x, 20, x+20, 60);
}
getch();
closegraph();
return 0;
}
Animaciju moemo napraviti
veoma jednostavno.

Ovaj program crta niz pravo-
kutnika.

Dovoljno je da pravokutnik
prije crtanja na novoj poziciji
obriemo na staroj i dobit e-
mo iluziju kretanja.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 10; x < 620; x = x + 1 )
{
cleardevice();
rectangle (x, 20, x+20, 60);
}
getch();
closegraph();
return 0;
}
Ovom inaicom programa dobit
emo privid kretanja pravokutnika.
Ovom naredbom briemo ekran, a
time i pravokutnik na staroj poziciji.
Pravokutnik koji se kree
na zaslonu raunala.
143
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 10; x < 200; x = x + 1 )
{
cleardevice();
circle (320, 240, x);
}
getch();
closegraph();
return 0;
}
Sve grafike elemente koje smo
do sada mijenjali moemo ani-
mirati.
U ovom programu animiramo
irenje kruga.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 10; x < 465; x = x + 1 )
{
cleardevice();
circle (320, x, 10);
}
getch();
closegraph();
return 0;
}
U ovom primjeru animiramo krug
koji pada od gornjeg prema do-
njem rubu .
Pokuajmo sami smi-
sliti sline programe.
144
Petlje
PRO - MIL
Petlja u petlji
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
int r;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 30; x < 610; x = x + 60 )
{
for (r = 5; r < 31; r = r + 5)
{
delay(100);
cleardevice();
circle (x, 240, r);
}
}
getch();
closegraph();
return 0;
}
Slino kao to moemo unutar if
naredbe staviti drugu if naredbu
tako unutar for petlje moemo stavi-
ti drugu for petlju.

Kod ovakvih programa veoma je
vano pravilno uvlaiti redove, jer
tako lake uoavamo poetak i kraj
pojedinih for naredbi.
Ovom naredbom nareujemo ra-
unalu da na ovom mjestu stoji
onoliko milisekundi koliki broj smo
stavili u zagradu.

U naem sluaju raunalo e sta-
jati 100 milisekundi.

Ovom naredbom usporavamo iz-
voenje animacije, ako je animaci-
ja suvie brza.

Na vaem raunalu taj broj moete
promijeniti i tako izvoenje anima-
cije prilagoditi brzini svog rauna-
la. (Ako imamo sporo raunalo,
ovu naredbu moemo izbaciti.)
Ovdje vidimo tijek cijele anima-
cije, iako e se tijekom anima-
cije istovremeno vidjeti samo
jedan krug.

Vanjskom petljom pomiemo
sredite kruga u lijevu stranu,
a unutranjom petljom mijenja-
mo polumjer kruga.
145
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int x;
int r;
cout << "Prije petlje." << endl;
for (x = 0; x < 2; x = x + 1 )
{
cout << "Vanjska petlja. x = " << x << endl;
for (r = 0; r < 3; r = r + 1)
{
cout << "Nutarnja petlja. r = " << r << endl;
}
}
cout << "Nakon petlje." << endl;
cout << endl;
system("PAUSE");
return 0;
}
Analiziranje ovog
programa pomoi
e nam da u pot-
punosti razumije-
mo nain funkcio-
niranja petlje unu-
tar petlje.

Pri tome nismo
ogranieni na to
da moemo staviti
jednu petlju unutar
petlje. Mogue je
unutar petlje staviti
petlju, a unutar te
petlje jo jednu
petlju i tako petlje
dodavati u skladu
s ciljevima koje
elimo postii.
cout << "Vanjska petlja. x = " << x << endl;
Da bi rezultat rada programa
bio bolje vidljiv, ovdje smo
naredbu cout koristili na na-
in na koji je do sada nismo
koristili. U ovoj inaici sadri
tri dijela.
Tekst unutar navodnika
ispisuje se na zaslon rau-
nala.
Sadraj varijable x ispisu-
je se na zaslon raunala.
Skok u novi
red.
146
Petlje
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
int r;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 465; x > 100; x = x - 1 )
{
cleardevice();
circle (320, x, 10);
}
for (r = 10; r < 91; r = r + 1)
{
cleardevice();
circle (320, x, r);
}
getch();
closegraph();
return 0;
}
Niz petlji
Osim to petlju moemo staviti unutar
druge petlje, petlje moemo staviti
jednu iza druge.

U ovom sluaju prva petlja mali krug
pomie od dolje prema gore, a zatim
druga petlja mali krug iri tako da sve
zajedno tvori jednostavan prikaz vatro-
meta.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int x;
int r;
cout << "Prije petlji." << endl;
for (x = 2; x > 0; x = x - 1 )
{
cout << "Prva petlja. x = " << x << endl;
}
for (r = 0; r < 3; r = r + 1)
{
cout << "Druga petlja. r = " << r << endl;
}
cout << "Nakon petlji." << endl;
cout << endl;
system("PAUSE");
return 0;
}
Analiza ovog prog-
rama pomoi e
nam da lake razu-
mijemo funkcionira-
nje niza petlji.
147
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Dozvoljene i nedozvoljene kombinacije petlji
for (x = 30; x < 610; x = x + 60)
{
for (r = 5; r < 31; r = r + 5)
{
circle (x, 240, r);
}
}
for (x = 465; x < 100; x = x - 1)
{
circle (320, x, 10);
}

for (r = 10; r < 91; y = y + 1)
{
circle (320, x, r);
}
for (x = 465; x < 100; x = x - 1)
{
circle (320, x, 10);
for (r = 10; r < 91; y = y + 1)
}

{
circle (320, x, r);
}
Petlje se mogu na-
laziti jedna unutar
druge.
Petlje se mogu na-
laziti jedna iza dru-
ge
U ovom sluaju
druga for naredba
nalazi se unutar
prve for naredbe.

Ovakva ispreplete-
nost dviju for na-
redbi nije dozvolje-
na.
148
Petlje
PRO - MIL
While petlja
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int broj;
int kvadrat;
int odgovor;
odgovor = 1;
while (odgovor == 1)
{
cout << "Unesite broj" << endl;
cin >> broj;
kvadrat = broj * broj;
cout << "Kvadrat unesenog broja je:" << endl;
cout << kvadrat;
cout << endl;
cout << "Ponovo = unesite 1." << endl;
cout << "Kraj = unesite 2." << endl;
cin >> odgovor;
}
cout << endl;
system("PAUSE");
return 0;
}
Do sada smo za svaki novi proraun
programe morali iznova pokretati.

Daleko elegantnije bilo bi kad bi nas
program nakon prorauna pitao eli-
mo li proraun ponoviti ili elimo pre-
kinuti izvoenje programa.

Ovaj program radi upravo tako. Une-
semo li nakon prorauna broj 1, pro-
raun emo moi ponoviti, a unese-
mo li 2, odnosno bilo koji broj razliit
od 1 program e se zaustaviti.
U ovom programu koristi se
petlja, budui da se dio pro-
grama moe ponoviti vie
puta. Ova petlje nije realizi-
rana for naredbom, nego
while naredbom.

U emu je razlika?

Naredba for pogodnija je za
tono odreen broj ponav-
ljanja, a naredba while on-
da kad unaprijed ne moe-
mo znati broj ponavljanja.

(U ovom sluaju mi ne mo-
emo unaprijed znati koliko
puta e korisnik htjeti kvad-
rirati neki broj.)
149
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

a = 1;

while (a == 1)

{

cin >> a;

}
Prije naredbe while mo-
ramo varijabli koju e
while naredba koristiti
dati neku poetnu vrije-
dnost.
Ovdje se unutar zagrada nalazi uvjet koji
while naredba ispituje. Uvjeti se formiraju
po istoj logici kao i kod for naredbe.

Ako je uvjet zadovoljen, izvrit e se na-
redbe unutar vitiastih zagrada, a nakon
toga se raunalo vraa na while naredbu i
ponovo ispituje je li uvjet zadovoljen.

Ako jest, ponovo se izvode naredbe unu-
tar vitiastih zagrada.

Ako nije, izvodi se prva naredba poslije
druge vitiaste zagrade.

U naem sluaju ispituje se je li sadraj
varijable a jednak broju 1. Zato prije while
naredbe moramo u varijablu a staviti broj
jedan. Kad bi u varijabli a bio neki drugi
broj, raunalo bi skoilo na prvi red nakon
druge vitiaste zagrade.
Da bi se ponavljanje u
nekom trenutku preki-
nulo, unutar vitiastih
zagrada varijabli koju
while naredba ispituje
treba promijeniti vrijed-
nost.
Kljuna naredba u novoj inaici programa je while naredba. Logika uporabe
te naredbe slina je logici uporabe for naredbe i ako bismo se potrudili svaki
program realiziran for naredbom mogli bismo realizirati while naredbom i
svaki program realiziran while naredbom mogli bismo realizirati for nared-
bom.

Zato imamo dvije naredbe ako rade isti posao?

Zato to se neke stvari mogu lake realizirati for naredbom, a neke while
naredbom. Pogledajmo elemente while naredbe.
150
Petlje
PRO - MIL
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int broj;
int kvadrat;
int odgovor;
{
cout << "Unesite broj" << endl;
cin >> broj;
kvadrat = broj * broj;
cout << "Kvadrat unesenog broja je:" << endl;
cout << kvadrat;
cout << endl;

cout << "Ponovo = unesite 1." << endl;
cout << "Kraj = unesite 2." << endl;
cin >> odgovor;
}
cout << endl;
system("PAUSE");
return 0;
}
odgovor = 1;
Pogledajmo dijelove naeg programa.
Uobiajeni poetak programa i formi-
ranje varijabli.
U varijablu odgovor stavljamo broj 1.
To moramo uiniti jer naredba while
ispituje je li u varijabli odgovor broj
1.
U ovom djelu izra-
unava se kvadrat
unesenog broja.

U ovom dijelu u
varijablu odgovor
unosi se broj na
temelju kojeg e
while naredba od-
luiti treba li nared-
be unutar vitiastih
zagrada ponoviti.
while (odgovor == 1)
Naredba while ispituje je li sadraj
varijable odgovor jednak broju 1.

Ako jest, izvode se ove naredbe.
Kraj programa. Izvodit e se kad
while naredba ustanovi da sadraj
varijable odgovor nije broj 1.
151
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int odgovor;
odgovor = 1;
cout << "Prije while naredbe." << endl;
while (odgovor == 1)
{
cout << "Prvi red bloka ponavljanja" << endl;
cout << "1 = nastavak ili 2 = kraj." << endl;
cin >> odgovor;
cout << "Zadnji red bloka ponavljanja" << endl;
}
cout << "Nakon while naredbe." << endl;
cout << endl;
system("PAUSE");
return 0;
}
Ovdje naredbom cin pre-
ko tipkovnice unosimo
novu vrijednost varijable
odgovor i time biramo ho-
emo li petlju ponoviti ili
emo izai iz programa.
Varijablu koju e koristiti while naredba moramo prije while naredbe
formirati i moramo joj dati odgovarajuu poetnu vrijednost.

Zato je u naem sluaju odgovarajua poetna vrijednost 1?

Zato to while naredba ispituje je li vrijednost varijable odgovor 1.

Ako bi vrijednost varijable odgovor bila npr. 2, nakon while naredbe
program bi skoio na ovu naredbu i sadraj unutar navodnika ne bi se
izvravao.
152
Petlje
PRO - MIL
U prethodnim programima korisnik je mogao izabrati hoe li program izvoditi
ponovo, ali biranje je funkcioniralo na vrlo neprirodan nain. Nije ba logino
unijeti broj 1 za ponavljanje prorauna ili broj 2 za prekid programa.

Ova inaica programa to biranje izvodi na elegantniji nain. Umjesto unoenja
brojeva kao odgovora, u ovom programu unosimo slova.

Da bi to bilo mogue, upotrijebili smo novi tip varijable, varijablu char tipa u
koju moemo spremiti jedno slovo.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int broj;
int kvadrat;
char odgovor;
odgovor = 'd';
while (odgovor != 'n')
{
cout << "Unesite broj" << endl;
cin >> broj;
kvadrat = broj * broj;
cout << "Kvadrat unesenog broja je:" << endl;
cout << kvadrat;
cout << endl;
cout << "Zelite li ponovo (d/n)?" << endl;
cin >> odgovor;
}
cout << endl;
system("PAUSE");
return 0;
}
153
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{

int broj;
int kvadrat;

char odgovor;
odgovor = 'd';

while (odgovor != 'n')

{

cout << "Unesite broj" << endl;
cin >> broj;
kvadrat = broj * broj;
cout << "Kvadrat unesenog broja je:" << endl;
cout << kvadrat;
cout << endl;

cout << "Zelite li ponovo (d/n)?" << endl;
cin >> odgovor;

}


cout << endl;
system("PAUSE");
return 0;
}
Pogledajmo poblie dijelove programa. Uobiajeni poetak programa.
Formiranje varijabli koje emo koristiti
u programu.
Formiranje varijable tipa char u koju
moemo spremiti jedno slovo.

Nakon formiranja u varijablu odgo-
vor spremamo slovo d.
while nared-
bom ispituje-
mo je li sadr-
aj varijable
odgovor razli-
it od slova n.

Ako jest, izvo-
di se sadraj
unutar vitias-
tih zagrada.
Kraj programa.
Ovdje se izra-
unava kvad-
rat unesenog
broja.
Ovdje se unosi slovo d ili slovo n na te-
melju ega e while naredba ponovo iz-
vesti naredbe unutar vitiastih zagrada
ako smo unijeli slovo d ili e izvesti na-
redbe nakon vitiastih zagrada ako smo
unijeli slovo n.
154
Petlje
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
char odgovor;
odgovor = 'd';
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
while (odgovor != 'n')
{
cleardevice();
for (x = 10; x < 465; x = x + 1 )
{
cleardevice();
circle (320, x, 10);
}
settextstyle(9, HORIZ_DIR, 1);
outtextxy(20, 20, "elite li ponovo (d/n)?");
odgovor = getch();
}
closegraph();
return 0;
}
While naredbu moemo iskoris-
titi i za viestruko pokretanje
grafikih programa.

Mali krug kree se od gore pre-
ma dolje, a zatim nas raunalo
pita elimo li ponoviti animaciju.

U ovom programu koristimo dvi-
je razliite vrste petlji.

While naredbom ponavlja se
animacija, a for naredbom, koja
se nalazi unutar while petlje,
animira se kretanje kruga.
U grafikom prozoru
za unos slova u vari-
jablu odgovor ne
koristi se cin nared-
ba, nego getch() na-
redba.
Ako koristimo getch() na-
redbu, nakon unosa ne
koristima Enter tipku.

Dovoljno je pritisnuti slovo
d ili slovo n.
155
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i


#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{

int gdriver = 9;
int gmode = 2;
int x;

char odgovor;
odgovor = 'd';

initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);

while (odgovor != 'n')

{

cleardevice();

for (x = 10; x < 465; x = x + 1 )
{
cleardevice();
circle (320, x, 10);
}

settextstyle(9, HORIZ_DIR, 1);
outtextxy(20, 20, "elite li ponovo (d/n)?");
odgovor = getch();

}

closegraph();
return 0;
}
Pogledajmo dijelove naeg programa.
Uobiajeni poetak programa.
Formiranje varijabli.
Formiranje varijable odgovor. Ta
varijabla je char tipa i koristit e je
while petlja unutar koje se nalazi
program za animaciju.

Slui nam za biranje ponavljanja
animacije ili kraja programa. U vari-
jablu odgovor sprema se slovo d.
Otvaranje grafikog
prozora.
Vanjska while petlja.
For petlja slui za izvo-
enje animacije.
Nakon izvoenja ani-
macije unosi se odgo-
vor na pitanje elimo li
ponoviti animaciju.
Kraj programa. Ovaj dio izvodi se kad
while naredba ustanovi da sadraj
varijable odgovor nije razliit od n.
156
Petlje
PRO - MIL

#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x = 290;
char odgovor = 'd';
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
while (odgovor != 'k')
{
rectangle(x, 432, x+60, 438);
odgovor = getch();
if (odgovor == 75)
{
x = x - 5;
}
if (odgovor == 77)
{
x = x + 5;
}
cleardevice();
}
closegraph();
return 0;
}
Ovaj program omoguit e nam da lijevom i desnom strelicom na tipkovnici
kontroliramo kretanje pravokutnika u lijevu ili desnu stranu.

Program naputamo pritiskom na tipku k.

Ovaj program ve bismo mogli smatrati jednim elementom primitivne igrice.
Dovoljno bi bilo dodati kretanje malih krugova od gore prema dolje i broja koji
bi brojio koliko krugova smo ovim pravokutnikom uspjeli uhvatiti.
Umjesto:
int x;
x =290;

moemo napisati
int x = 290;
Umjesto:
char odgovor;
odgovor = d;

moemo napisati
char odgovor = 'd';
Pravokutnik koji moe-
mo pomicati u lijevu i
desnu stranu.
157
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x = 290;
char odgovor = 'd';
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();

while (odgovor != 'k')
{

rectangle(x, 432, x+60, 438);

odgovor = getch();

if (odgovor == 75)
{
x = x - 5;
}

if (odgovor == 77)
{
x = x + 5;
}

cleardevice();

}

closegraph();
return 0;
}
Uobiajeni poetak programa,
formiranje varijabli i otvaranje
grafikog prozora.
Pogledajmo dijelove naeg programa.
Cijelo vrijeme dok naa pri-
mitivna igrica radi, vrtjet e
se u ovoj while petlji.

Ako pritisnemo tipku k prog-
ram e izai iz petlje i naa
igrica e se ugasiti.
Ovdje se crta pravokutnik koji
pomiemo.
Ovdje program ispituje koja
tipka je pritisnuta, a rezultat
sprema u varijablu odgovor.
Ako pritisnemo lijevu strelicu, varija-
bla x, koja odreuje udaljenost pra-
vokutnika od lijeve strane, umanjit
e se za 5, pa e se pravokutnik
drugi put crtati pomaknut 5 toaka u
lijevu stranu.
Ako pritisnemo desnu strelicu, varija-
bla x e se uveati za 5, pa e se
pravokutnik drugi put crtati pomaknut
5 toaka u desnu stranu.
Naredbom za brisanje ekrana bri-
emo pravokutnik na staroj poziciji
da bismo ga nacrtali na novoj.
(Pokuajmo ovu naredbu izbaciti.)
Kraj programa.
158
Petlje
PRO - MIL

#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x = 290;
int y = 220;
char odgovor = 'd';
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
while (odgovor != 'k')
{
rectangle(x, y, x+60, y+5);
odgovor = getch();
if (odgovor == 75)
{
x = x - 5;
}
if (odgovor == 77)
{
x = x + 5;
}
if (odgovor == 72)
{
y = y - 5;
}
if (odgovor == 80)
{
y = y + 5;
}
cleardevice();
}
closegraph();
return 0;

}
Dodamo li u prethodni program ispitivanje je li pritisnuta
strelica prema gore ili strelica prema dolje, na pravo-
kutnik moi e se pomicati u sva etiri smjera.
Varijablom x odreujemo udaljenost
gornjeg lijevog ugla pravokutnika od
lijevog ruba grafikog prozora, a
varijablom y od gornjeg ruba grafi-
kog prozora. Brojevi 290 i 220 odre-
uju poetnu poziciju pravokutnika.
(Pokuajmo mijenjati te brojeve.)
I u ovom sluaju program e se izvo-
diti dok korisnik ne pritisne tipku k,
odnosno dok je pritisnuta tipaka razli-
ita od k.
Ovdje smo dodali dio programa u kojem ispi-
tujemo je li pritisnuta strelica prema gore ili
strelica prema dolje.

Zato ovdje koristimo broj 72, a ne strelicu
prema gore?

Zato to strelicu prema gore ne moemo uni-
jeti u program preko tipkovnice, a broj 72 je
ifra za strelicu prema gore. (75 za lijevo, 77
za desno i 80 za dolje.)
159
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i


#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x = 290;
int y = 220;
char odgovor = 'd';
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
while (odgovor != 'k')
{
rectangle(x, y, x+60, y+5);
odgovor = getch();
if (odgovor == 75)
{
x = x - 5;
}
if (odgovor == 77)
{
x = x + 5;
}
if (odgovor == 72)
{
y = y - 5;
}
if (odgovor == 80)
{
y = y + 5;
}
cleardevice();
}
closegraph();
return 0;

}
Da bismo dobili primitivni program za crtanje, dovoljno je da u prethod-
nom programu maknemo naredbu za brisanje zaslona raunala.
Ako ovu naredbu obriemo, pra-
vokutnik e se crtati na novoj po-
ziciji, ali e ostati i na staroj pa e
rezultat kretanja pravokutnika biti
trag na zaslonu raunala.

Obriimo ovu naredbu i pokreni-
mo program.
Varijablama x i y odreena je
pozicija gornjeg lijevog ugla pra-
vokutnika. Varijabla x odreuje
udaljenost od lijevog ruba, a
varijabla y od gornjeg ruba.

Udaljenost donjeg desnog ugla
pravokutnika od lijevog ruba
odreena je sa x + 60, a udalje-
nost donjeg desnog ugla od gor-
njeg ruba odreena je sa y+5.

irina naeg pravokutnika je 60,
a visina 5. (Pokuajmo promije-
niti te brojeve.)
160
Petlje
PRO - MIL

#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x = 290;
int y = 220;
char odgovor = 'd';
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
while (odgovor != 'k')
{
putpixel(x, y, BLACK);
odgovor = getch();
if (odgovor == 75)
{
x = x - 1;
}
if (odgovor == 77)
{
x = x + 1;
}
if (odgovor == 72)
{
y = y - 1;
}
if (odgovor == 80)
{
y = y + 1;
}
}
closegraph();
return 0;
}
elimo li napraviti program za crtanje, pogodnije je za
crtanje koristiti toku umjesto pravokutnika.
Ovom naredbom ispisujemo jednu
toku na zaslon raunala. Varijabla
x odreuje udaljenost toke od lije-
vog ruba, varijabla y od gornjeg ruba,
a BLACK odreuje boju toke.
elimo li dobiti punu crtu, toku mo-
ramo pomicati za 1.

Pokuajmo umjesto 1 staviti 2 ili 5.
161
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i


#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x = 290;
int y = 220;
char odgovor = 'd';
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
while (odgovor != 'k')
{
circle(x, y, 20);
odgovor = getch();
if (odgovor == 75)
{
x = x - 5;
}
if (odgovor == 77)
{
x = x + 5;
}
if (odgovor == 72)
{
y = y - 5;
}
if (odgovor == 80)
{
y = y + 5;
}
}
closegraph();
return 0;
}
Za crtanje moemo koristiti i krug.
Ovom naredbom ispisujemo krug.
Varijabla x odreuje udaljenost
sredita kruga od lijevog ruba,
varijabla y udaljenost sredita od
gornjeg ruba, a 20 je polumjer
kruga.
Broj 5 odreuje pomak novog sre-
dita u odnosu na staro.

Pokuajmo mijenjati taj broj.
Imajmo stalno na umu da emo
razumijevanje programa i vjeti-
nu pisanja vlastitih programa
stei jedino tako da svaki primjer
programa koji je dat u ovoj knjizi
mijenjamo na sve naine koji
nam padnu na pamet i onda pro-
matramo kakve posljedice izazi-
va odreena promjena.
162
Petlje
PRO - MIL

#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
while (!kbhit())
{
rectangle(mousex(),mousey(),mousex()+80,mousey()+80 );
}
closegraph();
return 0;
}
Objekte na zaslonu raunala osim tipkovnicom mo-
emo pomicati i miem.
Naredbom kbhit ispituje se je li bilo
koja tipka na tipkovnici pritisnuta.

Naredbom while (!kbhit) nareujemo
raunalu da petlju izvodi tako dugo
dok ni jedna tipka nije pritisnuta.

Pritisnemo li bilo koju tipku na tipkov-
nici, zaustavlja se izvoenje petlje i
prekida se program.
Naredbom mousex() oitava se
udaljenost pokazivaa mia od
lijevog ruba grafikog prozora.
Naredbom mousey() oitava se
udaljenost pokazivaa mia od
gornjeg ruba grafikog prozora.
Gornji lijevi ugao pravokutnika
odreen je poloajem pokazi-
vaa mia, a donji desni tako
da se udaljenost pokazivaa
mia od desnog ruba uveava
za 80, a udaljenost pokaziva-
a mia od gornjeg ruba uve-
ava isto tako za 80.

Dimenzije naeg pravokutnika
su 80 puta 80.
163
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i


#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{

int gdriver = 9;
int gmode = 2;

initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();

while (!kbhit())
{
circle(mousex(),mousey(),100);
}

closegraph();
return 0;
}
Miem moemo pokretati bilo koji grafiki ob-
jekt, npr. krug.
Poetak programa.
Varijable kojima odreujemo tip
grafikog prozora.
Otvaranje grafikog prozora.
Unutar while petlje stalno se
oitava pozicija pokazivaa
mia i crta se krug ije sredite
odreuje poloaj pokazivaa
mia, a polumjer je 100.

Petlja se izvodi tako dugo dok
niti jedna tipka na tipkovnici
nije pritisnuta.
Kraj programa.
Jasno je da osim postojeih
dimenzija kruga i pravokut-
nika moemo koristi pravo-
kutnike i krugove drugih
dimenzija.

Isto tako moemo koristiti i
druge grafike elemente,
npr. toke ili crte.

Pokuajmo sami smisliti
varijacije ovakvih programa.
164
Petlje
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
while (!kbhit())
{
cleardevice();
line (mousex()+40, mousey(), mousex()-40, mousey());
line (mousex(), mousey()-40, mousex(), mousey()+40);
}
closegraph();
return 0;
}
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
while (!kbhit())
{
cleardevice();
circle(mousex(),mousey(),100);
}
closegraph();
return 0;
}
Na slian nain moemo miem
pomicati neto drugo, npr. dvije
crte koje bi u igri mogle biti nian.
Ako u prethodne programe doda-
mo naredbu za brisanje sadraja
grafikog prozora, dobit emo pro-
gram koji nam omoguuje pomica-
nje objekta miem.
165
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i


#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
while (!kbhit())
{
if (ismouseclick(WM_MOUSEMOVE))

{
cleardevice();
circle(mousex(),mousey(),100);
}

clearmouseclick(WM_MOUSEMOVE);

}
closegraph();
return 0;
}
Nedostatak prethodnih programa bio je to se
ekran brie i objekt ponovo crta, bez obzira je li
to potrebno ili nije, odnosno bez obzira je li
dolo do pomaka mia ili nije.

Ako nije dolo do pomaka mia, nema potrebe
objekt brisati i ponovo crtati.

Neprestano brisanje i crtanje moe na sporijim
raunalima izazvati treperenje slike, to je veo-
ma neugodno.

Ovaj program ispituje je li dolo do pomaka
mia ili nije. Ekran se brie i objekt crta na no-
voj poziciji jedino ako je dolo do pomicanja
mia.
Ovom naredbom ispituje-
mo je li dolo do pomaka
mia.

Sadraj unutar vitiastih
zagrada izvrit e se jedi-
no ako je dolo do poma-
ka mia.

U tom sluaju obrisat e
se sadraj grafikog pro-
zora i objekt e se nacrta-
ti na novoj poziciji.
Da bi bilo mogue novo
oitavanje mia, rezultat
starog oitavanja ovom
se naredbom mora obri-
sati.

Kad ovu naredbu ne bis-
mo upotrijebili, u progra-
mu bi bilo mogue samo
jedno oitavanje mia.
166
Petlje
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
while (!kbhit())
{
if (ismouseclick(WM_LBUTTONDOWN))
{
cleardevice();
circle(mousex(),mousey(),100);
}
clearmouseclick(WM_LBUTTONDOWN);
}
closegraph();
return 0;
}
Osim to moemo oitati je li dolo do pomaka mia, moemo isto tako oitati je
li pritisnuta neka tipka na miu. Ovaj program e nam omoguiti da pritiskom na
lijevu tipku mia nacrtamo objekt u grafikom prozoru.
Ovom naredbom ispituje-
mo je li pritisnuta lijeva
tipka mia.

Ako jest izvodi se sadraj
unutar vitiastih zagrada.
Ovom naredbom briemo
rezultat oitavanja lijeve
tipke na miu.

Novo oitavanje je mogu-
e jedino nakon brisanja
starog oitavanja.
Uoimo, ako smo oitavali ismouseclick(WM_MOUSEMOVE), briemo
clearmouseclick(WM_MOUSEMOVE),

a ako smo oitavali ismouseclick(WM_LBUTTONDOWN), briemo
clearmouseclick(WM_LBUTTONDOWN).
167
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

OITAVANJE MIA
ismouseclick(WM_LBUTTONDOWN) Oitavanje lijevog klika
clearmouseclick(WM_LBUTTONDOWN); Brisanje oitavanja lijevog klika.
ismouseclick(WM_LBUTTONDBLCLK) Oitavanje duplog lijevog klika.
clearmouseclick(WM_LBUTTONDBLCLK)
Brisanje oitavanja duplog lijevog
klika.
ismouseclick(WM_RBUTTONDOWN) Oitavanje desnog klika.
clearmouseclick(WM_RBUTTONDOWN) Brisanje oitavanja desnog klika.
ismouseclick(WM_RBUTTONDBLCLK) Oitavanje duplog desnog klika.
clearmouseclick(WM_RBUTTONDBLCLK)
Brisanje oitavanja duplog des-
nog klika.
ismouseclick(WM_MBUTTONDOWN) Oitavanje srednjeg klika.
clearmouseclick(WM_MBUTTONDOWN)
Brisanje oitavanja srednjeg kli-
ka.
ismouseclick(WM_MBUTTONDBLCLK) Oitavanje duplog srednjeg klika.
clearmouseclick(WM_MBUTTONDBLCLK)
Brisanje oitavanja duplog sred-
njeg klika.
clearmouseclick(WM_MOUSEMOVE) Brisanje oitavanja kretanja mia.
ismouseclick(WM_MOUSEMOVE) Oitavanje kretanja mia.
168
Petlje
PRO - MIL
Do while petlja
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
do
{
if (ismouseclick(WM_LBUTTONDOWN))
{
circle(mousex(),mousey(),100);
}
clearmouseclick(WM_LBUTTONDOWN);
}
while (!kbhit());
closegraph();
return 0;
}
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
while (!kbhit())
{
if (ismouseclick(WM_LBUTTONDOWN))
{
circle(mousex(),mousey(),100);
}
clearmouseclick(WM_LBUTTONDOWN);
}
closegraph();
return 0;
}
Pokrenemo li ova dva
programa, vidjet emo
da je rezultat njihovog
rada potpuno jednak,
iako prvi koristi while
naredbu, a drugi do
while naredbu.
169
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

a = 1;

while (a == 1)

{

cin >> a;

}
a = 1;

do

{

cin >> a;

}

while (a == 1);
Usporedimo strukture while petlje i do while petlje.
Odreivanje vrijednosti varijable koju e koristiti
while naredba.
Ispitivanje je li uvjet zadovoljen, u naem slua-
ju, je li sadraj varijable a jednak broju 1.
Ovaj dio unutar vitiastih zagrada ponavlja se
dok je uvjet zadovoljen, u naem sluaju dok je
sadraj varijable a jednak broju 1.
Petlja do while zapoinje odreivanjem vrijed-
nosti varijable koju e koristiti while naredba.
Ovaj tip petlje zapoinje naredbom do nakon
koje slijede vitiaste zagrade unutar kojih se
nalazi dio programa koji se ponavlja dok je uv-
jet zadovoljen
Dio koji se ponavlja i u kojem mora postojati
mogunost promjene vrijednosti varijable a.
Ovdje se ispituje je li zadovoljen uvjet po istoj
logici po kojoj se ispituje i u while naredbi.

Uoimo da se ovdje na kraju while naredbe
obavezno pie ; oznaka.
U emu je razlika izmeu ovih dviju petlji, osim oigledne razlike u nainu
pisanja? Razlika je u tome to se sadraj while petlje nee izvesti niti jednom
ako uvjet nije zadovoljen jer se ispitivanje nalazi prije djela koji se ponavlja.
Sadraj do while petlje e se bez obzira na uvjet izvesti barem jednom jer se
najprije izvodi dio koji se ponavlja, a tek nakon toga ispituje se je li uvjet za-
dovoljen.
170
Petlje
PRO - MIL
Generator sluajnih brojeva
Ponekad, osobito u igricama, htjeli bismo da se neki dijelovi u programu pri
svakom pokretanju programa odvijaju drugaije. Ako piemo igricu u kojoj igra
gaa letee tanjure, htjeli bismo da se pri svakom pokretanju igre oni pojave
na drugom mjestu i da se svaki put kreu drugaijim putanjama. Igrica e nam
brzo dosaditi ako se objekt koji trebamo gaati pri svakom pokretanju igrice
pojavljuje na istom mjestu i kree istom putanjom.

Takve varijacije u odvijanju programa postiemo generatorom sluajnih broje-
va. Pogledajmo kako emo formirati program za generiranje sluajnih brojeva.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int x;
for (x = 0; x < 11; x = x + 1)
{
cout << rand() << endl;
}
system("PAUSE");
return 0;
}
Sluajne brojeve generirat
emo naredbom rand().

Problem je u tome to e
ovako napisani program pri
svakom pokretanju generi-
rati iste sluajne brojeve.

Jasno, od takvih sluajnih
brojeva ne moemo imati
puno koristi.

Pokuajmo napisati prog-
ram koji nee svaki put ge-
nerirati isti niz brojeva.
171
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int x;
srand(1);
for (x = 0; x < 11; x = x + 1)
{
cout << rand() << endl;
}
system("PAUSE");
return 0;
}
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int x;
srand(2);
for (x = 0; x < 11; x = x + 1)
{
cout << rand() << endl;
}
system("PAUSE");
return 0;
}
Stavimo li naredbu srand(1) prije na-
redbe rand() postii emo da naredba
rand() generira neki niz brojeva.

Ako umjesto srand(1); stavimo srand
(2); dobit emo neki drugi niz brojeva.
Pokuajmo i vidjet emo da emo za
srand(3); dobit neki trei niz brojeva, a
za srand(4); neki etvrti.

Problem je u tome to emo za isti broj
unutar zagrade dobivati uvijek isti niz.
Dakle srand(6) davat e pri svakom
pokretanju isti niz brojeva, ali drugaiji
nego npr. srand(5). Oito bi bilo dobro
kad bismo na neki nain broj unutar
zagrade mogli mijenjati.
Problem koji se sastoji u tome
da naredba rand(); uvijek gene-
rira isti niz brojeva rijeit emo
naredbom srand(1);.
172
Petlje
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <ctime>

using namespace std;

int main()
{
cout << time(NULL) << endl;
system("PAUSE");
return 0;
}
Da bi naredba time(NULL) funkcionirala,
moramo naredbom #include <ctime> uk-
ljuiti odgovarajuu biblioteku.
Budui da program ne moemo
vie puta pokrenuti u istom tre-
nutku, pri svakom pokretanju
ove naredbe dobit emo drugi
broj.
Razliite brojeve dobit emo naredbom
time(NULL). Iako se ini loginim da na-
redba time(NULL) pokazuje trenutno vrije-
me, ona to ne ini, nego prikazuje trenut-
no sistemsko vrijeme. To je vrijeme koje
je proteklo od 1. sijenja 1970. godine.
173
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <ctime>

using namespace std;

int main()
{
int x;
srand(time(NULL));
for (x = 0; x < 11; x = x + 1)
{
cout << rand() << endl;
}
system("PAUSE");
return 0;
}
Stavimo li u naredbu srand(1); umjesto
konkretnog broja jedan naredbu time
(NULL) koja e u svakom trenutku gene-
rirati drugaiji broj, naredba rand() pri
svakom e pokretanju generirati drugaiji
brojani niz. Sada smo ve blizu onome
to smo eljeli, a to je generator sluajnih
brojeva.
U ovom rjeenju problemati-
no je to to su esto poetni
brojevi veoma slini. Prvi put
smo dobili 6089, drugi put
6132, a trei put 6171.
Taj problem moemo najjed-
nostavnije eliminirati tako da
prvi broj koji generira genera-
tor sluajnih brojeva ne koris-
timo u programu.
174
Petlje
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <ctime>

using namespace std;

int main()
{
int x;
srand(time(NULL));
rand();
for (x = 0; x < 11; x = x + 1)
{
cout << rand() << endl;
}
system("PAUSE");
return 0;
}
Problem koji bi mogla stvarati pojava da
na generator sluajnih brojeva generira
niz brojeva u kojem prvi broj u nizu ima
slinu vrijednost prilikom vie pokretanja
rijeit emo tako da prvi put pozovemo
naredbu rand(); i tako generirani broj ne-
emo ni za to koristiti.
Koristit emo sluajne brojeve koji e se
generirati prilikom sljedeih pozivanja
naredbe rand();.

Na taj nain postii emo da e pri nizu
uzastopnih pokretanja i prvi broj u sva-
kom od nizova bit razliit.
Vidimo da smo uspjeli dobiti vie
doista razliitih nizova.
175
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Sad kad smo konano dobili niz sluajnih brojeva, postavlja se pitanje kako
postii da ti sluajni brojevi budu unutar unaprijed odreenih granica. Ako
elim da se objekt pojavi na sluajnoj poziciji unutar prozora irokog 640 to-
aka, bilo bi zgodno da generator sluajnih brojeva generira sluajni broj iz-
meu 0 i 640.
#include <cstdlib>
#include <iostream>
#include <ctime>

using namespace std;

int main()
{
int x;
float sb;
srand(time(NULL));
rand();
for (x = 0; x < 11; x = x + 1)
{
sb = rand() / RAND_MAX;
cout << sb << endl;
}
system("PAUSE");
return 0;
}
Najprije emo program preurediti
tako da generira brojeve izmeu 0 i
1. To emo postii tako da generi-
rani broj podijelimo maksimalnom
moguom vrijednou sluajnog
broja. U tom sluaju, ako je generi-
rani sluajni broj nula, rezultat e
biti nula, a ako je jednak maksimal-
noj moguoj vrijednosti bit e 1. Za
sve ostale vrijednosti dobit emo
broj izmeu nula i jedan.
Pokrenemo li takav program kao
rezultat dobit emo samo nule, i
moda ponekad broj 1.

Zato?

Zato to je rezultat rada naredbe
rand() i naredbe RAND_MAX int
tipa, tj. broj bez decimalnog zare-
za. Rezultat, dodue, spremamo u
varijablu sb koja je float tipa, ali
raunalo radi tako da izrauna re-
zultat u int formatu, a tek onda broj
pretvara u float.

Prvo podijeli dva int broja, makne
sadraj desno od zareza, jer int tip
nema zarez, i tek onda rezultat
sprema u varijablu float tipa.
Maksimalnu moguu vrijednost gene-
riranog sluajnog broja dobit emo
naredbom RAND_MAX.
176
Petlje
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <ctime>

using namespace std;

int main()
{
int x;
float sb;
srand(time(NULL));
rand();
for (x = 0; x < 11; x = x + 1)
{
sb = static_cast <float> (rand()) / RAND_MAX;
cout << sb << endl;
}
system("PAUSE");
return 0;
}
Problem koji se javio u prethodnom pro-
gramu rijeit emo tako da raunalu
naredimo da broj koji e generirati na-
redba rand() i koji je int tipa, prije dijelje-
nja s RAND_MAX pretvori u float tip. To
emo uiniti naredbom:

static_cast <float> (rand())

Nakon primjene te naredbe program e
generirati sluajne brojeve izmeu broja
0 i broja 1.
static_cast <float> ( rand() )
Ovom naredbom nareujemo
raunalu da jedan tip podatka
npr. int pretvori u neki drugi tip,
npr. float.
Ovdje navedemo tip u koji neki drugi tip elimo
pretvoriti. Mi elimo int tip pretvoriti u float, pa
smo zato ovdje napisali float.
Unutar navodnika nave-
demo varijablu ili izraz
iji tip elimo mijenjati.
Mi emo mijenjati tip
rezultatu izvoenja rand
() naredbe.
177
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <ctime>

using namespace std;

int main()
{
int x;
float sb;
srand(time(NULL));
rand();
for (x = 0; x < 11; x = x + 1)
{
sb = (static_cast <float> (rand()) / RAND_MAX) * 640;
cout << sb << endl;
}
system("PAUSE");
return 0;
}
Kako emo postii da program ne generi-
ra brojeve izmeu 0 i 1, nego izmeu 0 i
640? Tako da sluajni broj koji raunalo
generira izmeu 0 i 1 pomnoimo sa 640.

Ako je sluajni broj imao minimalnu mogu-
u vrijednost 0, rezultat e biti nula.

Ako je sluajni broj imao maksimalnu mo-
guu vrijednost 1, rezultat e biti 640.

Za sve ostale vrijednosti rezultat e biti
izmeu 0 i 640, a to je ono to smo htjeli
postii.
sb = ( static_cast <float> ( rand() ) / RAND_MAX ) * 640;
Pogledajmo dio programa
kojim generiramo sluajni
broj izmeu 0 i 640.
Ovaj dio pretvara int sluaj-
ni broj u float tip.
Generira sluajne
brojeve.
Maksimalna vrijednost
koju rand() generira.
Dijeljenjem sluajnog broja maksimalnom moguom vrije-
dnou dobivamo broj izmeu broja 0 i broja 1.
Mnoimo li
broj izmeu
0 i 1 brojem
640, dobit
emo broje-
ve izmeu 0
i 640.
178
Petlje
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <ctime>

using namespace std;

int main()
{
int x;
int sb;
srand(time(NULL));
rand();
for (x = 0; x < 11; x = x + 1)
{
sb = (static_cast <float> (rand()) / RAND_MAX) * 640;
cout << sb << endl;
}
system("PAUSE");
return 0;
}
Ako elimo da raunalo generira broj iz-
meu 0 i 640 bez decimalnog zareza, slu-
ajni broj emo spremiti u int varijablu.

Budui da je generirani sluajni broj float
tipa, raunalo e nas pri prvom pokretanju
programa upozoriti da je dolo do pretva-
ranja float tipa u int tip.

Kad float tip broja spremimo u int varijablu,
raunalo e ga automatski pretvoriti u int
tip tako da e mu maknuti sve brojeve de-
sno od decimalnog zareza.
Raunalo nas upozorava
da je dolo do pretvaranja
float tipa u int tip.

Budui da je to upravo
ono to smo eljeli, ovo
upozorenje emo zane-
mariti.
179
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Koritenje sluajnih brojeva
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
#include <ctime>

using namespace std;

int main()
{
int x;
int sx;
int sy;
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
srand(time(NULL));
rand();
for (x = 1; x < 60; x = x + 1 )
{
sx = (static_cast <float> (rand()) / RAND_MAX) * 640;
sy = (static_cast <float> (rand()) / RAND_MAX) * 480;
circle(sx,sy,20);
}
getch();
closegraph();
return 0;
}
Poloaj kruga ovisit e o sluajno generiranim brojevima.

Ispis kruga nalazi se unutar petlje pa e se generirati
onoliko krugova koliko puta e se petlja izvesti.
Budui da poloaj kruga odreuju
dva broja, jedan koji odreuje uda-
ljenost sredita od desnog ruba i
drugi koji odreuje udaljenost sre-
dita od gornjeg ruba generirat
emo dva sluajna broja.

Prvi emo spremiti u int varijablu
sx i bit e izmeu 0 i 640. Drugi
emo spremiti u sy i bit e izmeu
0 i 480.

(Dimenzije grafikog prozora su
640x480).
Ovaj program e generirati
krugove na sluajno odabra-
nim pozicijama.

Na taj nain u igrama moe-
mo generirati objekte na slu-
ajno odabranim mjestima.
180
Petlje
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <ctime>

using namespace std;

int main()
{
int odgovor;
int slucajni_br;
int brojcanik = 0;
srand(time(NULL));
rand();
slucajni_br = (static_cast <float> (rand()) / RAND_MAX) * 100;
cout << "Zamislio sam broj od 0 do 100." << endl;
cout << "Pogodite koji je to broj" << endl;
do
{
cout << "Unestite odgovor." << endl;
cin >> odgovor;
brojcanik = brojcanik + 1;
if (slucajni_br > odgovor)
{
cout << "Zamislio sam veci broj." << endl;
}
if (slucajni_br < odgovor)
{
cout << "Zamislio sam manji broj." << endl;
}
}
while (slucajni_br != odgovor);
cout << "Pogodili ste " << brojcanik << ". put." << endl;
system("PAUSE");
return 0;
}
Pogledajmo primjer sasvim jednostavne igrice. Raunalo e generirati sluajni
broj izmeu 0 i 100, a mi emo pokuati pogoditi koji je to broj. Ako ne pogodi-
mo, raunalo e nas obavijestiti je li zamislilo vei ili manji broj, pa emo poga-
ati ponovo, dok ne pogodimo. Na kraju nas raunalo obavjetava koliko poku-
aja nam je trebalo da pogodimo zamiljeni broj.
181
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <ctime>

using namespace std;

int main()
{
int odgovor;
int slucajni_br;

int brojcanik = 0;

srand(time(NULL));
rand();

slucajni_br = (static_cast <float> (rand()) / RAND_MAX) * 100;

cout << "Zamislio sam broj od 0 do 100." << endl;
cout << "Pogodite koji je to broj" << endl;

do
{
cout << "Unestite odgovor." << endl;
cin >> odgovor;

brojcanik = brojcanik + 1;

if (slucajni_br > odgovor)
{
cout << "Zamislio sam veci broj." << endl;
}

if (slucajni_br < odgovor)
{
cout << "Zamislio sam manji broj." << endl;
}
}
while (slucajni_br != odgovor);

cout << "Pogodili ste " << brojcanik << ". put." << endl;
system("PAUSE");
return 0;
}
Varijablu brojcanik na poetku emo posta-
viti za nulu, a nakon svakog pogaanja uve-
at emo je za jedan i tako emo znati koliko
nam je pokuaja trebalo za pogaanje zami-
ljenog broja.
Ovdje se generira sluaj-
ni broj izmeu 0 i 100.
Ovdje unosimo odgovor.
Pri svakom unosu odgovora
brojanik poveavamo za 1.
Izvodi se ako je
zamiljeni broj vei
od unesenog.
Izvodi se ako je
zamiljeni broj ma-
nji od unesenog.
Ispitivanje se
ponavlja dok
uneseni broj
nije jednak
zamiljenom.
PRO - MIL 182
Polja
C++ programiranje za apsolutne poetnike
P
o
l
j
a

PRO - MIL 183
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

184
Polja
PRO - MIL
Jednodimenzionalna polja
Zamislimo da kao pozadinu neke
jednostavne igrice elimo nacrtati
neto to bi moglo asocirati na
nebodere.

To moemo uiniti nizom lineto
naredbi i to rjeenje funkcionira, ali
i sami vidimo da nije ba osobito
elegantno.

Zamislimo koliko bi to rjeenje bilo
nepraktino ako bismo htjeli nacr-
tati crte s vie detalja, npr. prozo-
rima.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
moveto (0, 200);
lineto (10, 200);
lineto (10, 50);
lineto (100, 50);
lineto (100, 200);
lineto (120, 200);
lineto (120, 150);
lineto (300, 150);
lineto (300, 200);
lineto (350, 200);
lineto (350, 30);
lineto (400, 30);
lineto (400, 200);
lineto (450, 200);
lineto (450, 20);
lineto (550, 20);
lineto (550, 200);
lineto (560, 200);
lineto (560, 40);
lineto (600, 40);
lineto (600, 200);
lineto (620, 200);
lineto (620, 20);
lineto (635, 20);
lineto (635, 200);
lineto (640, 200);
getch();
closegraph();
return 0;
}
185
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i


#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();

int polje[54] =
{
0, 200, 10, 200, 10, 50, 100, 50, 100, 200,
120, 200, 120, 150, 300, 150, 300, 200, 350, 200,
350, 30, 400, 30, 400, 200, 450, 200, 450, 20,
550, 20, 550, 200, 550, 200, 560, 200, 560, 40,
600, 40, 600, 200, 620, 200, 620, 20, 635, 20,
635, 200, 640, 200
};
moveto (polje[0], polje[1]);
for (x = 2; x < 54; x = x + 2 )
{
lineto(polje[x], polje[x+1]);
}
getch();
closegraph();
return 0;
}
Ovaj program radi isti posao kao i
prethodni, ali je daleko elegantniji
od njega.

Pogledamo li paljivo program,
vidjet emo da su nam svi elemen-
ti poznati od prije, osim neobino
definirane varijable polje.

Dok smo u dosadanje varijable
mogli spremiti jedno slovo ili broj,
ini se da u ovu varijablu moemo
spremiti mnotvo brojeva.

Paljivi analitiar moda bi uoio
da broj u uglatoj zagradi odgovara
koliini brojeva u vitiastim zagra-
dama.
U ovom programu pojavljuju se
uglate zagrade.

Dobit emo ih tako da drimo pri-
tisnutu AltGr tipku, a zatim klikne-
mo slovo f ili slovo g.
186
Polja
PRO - MIL
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int polje[5] = {10, 20, 30, 40, 50};
cout << polje[0] << endl;
cout << polje[1] << endl;
cout << polje[2] << endl;
cout << polje[3] << endl;
cout << polje[4] << endl;
system("PAUSE");
return 0;
}
Detaljno objanjenje funkcionira-
nja programa s prethodne strani-
ce vidjet emo kasnije, a sada
emo pogledati kako funkcionira-
ju neobine varijable koje smo
uoili u prethodnom programu.

Ovaj program pomoi e nam da
lake shvatimo ovaj novi tip vari-
jable.

12
a
int a = 12;
Naredbom int a = 12; u raunalu formi-
ramo prostor odnosno varijablu kojoj
smo dali naziv a i u koju smo spremili
broj 12;
int polje[5] = {10, 20, 30, 40, 50};
Ovom naredbom kao i prethod-
nom formiramo varijablu, ali dok
smo u prethodnu varijablu mogli
spremiti samo jedan broj, ova
varijabla sadri 5 pretinaca koji se
razlikuju po brojevima i u svaki od
tih pretinaca moemo spremiti
jedan broj.

10
0
20
1
30
2
40
3
50
4
polje
187
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Novi tip varijable ima poseban naziv, naziva se polje. elije polja meusobno
razlikujemo po brojevima, a problem donekle komplicira injenica da prvo
polje nije polje 1 nego polje 0, pa onda polje sa 5 elemenata ne sadri polja
od 1 do 5 nego od 0 do 4. U poetku e nas ta injenica esto zbunjivati.
int polje[5] = {10, 20, 30, 40, 50};
Za razliku od obine varijable prilikom
formiranja polja u uglatim zagradama
moramo navesti koliko elija sadri po-
lje. U naem sluaju polje koje smo
nazvali polje sadri 5 elija.
U vitiastim zagrada-
ma navest emo vri-
jednosti pojedinih
elija.

Vrijednosti emo me-
usobno odvojiti za-
rezima.
cout << polje[1] << endl;
Sadraj polja ispisuje se na sli-
an nain kao i sadraj varijable.
Razlika je u tome da je pri koritenju varijable dovoljno navesti naziv, a ovdje
osim naziva u uglatim zagradama moramo navesti broj elije koju elimo ispi-
sati. U gornjem primjeru imajmo na umu da emo ispisati sadraj druge elije,
a ne sadraj prve. Prvu bismo ispisali naredbom cout << polje[0] << endl;.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int polje[5] = {10, 20, 30, 40, 50};
cout << polje[1] << endl;
system("PAUSE");
return 0;
}
Vidimo da

cout << polje[1] << endl;

ispisuje sadraj druge elije.
Pokuajmo na slian nain ispi-
sati sadraj neke druge npr. sa:

cout << polje[0] << endl;

sadraj prve elije. (U uglatoj
zagradi nalazi se broj nula, a ne
veliko slovo o.)
188
Polja
PRO - MIL
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{

int polje[5] = {10, 20, 30, 40, 50};

cout << polje[0] << endl;
cout << polje[1] << endl;
cout << polje[2] << endl;
cout << polje[3] << endl;
cout << polje[4] << endl;

system("PAUSE");
return 0;
}
Pogledajmo bitne dijelove ovog
programa.
Ovdje formiramo polje koje se sa-
stoji od 5 elija. U prvu eliju spre-
mamo broj 10, u drugu 20, u treu
30, u etvrtu 40 i u petu 50.
Sadraj polja ispisujemo tako da
uz naziv polja u uglatim zagrada-
ma navodimo i broj elije koji eli-
mo ispisati.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int polje[5] = {10, 20, 30, 40, 50};
cout << polje[3] << endl;
cout << polje[0] << endl;
cout << polje[2] << endl;
cout << polje[4] << endl;
cout << polje[1] << endl;
system("PAUSE");
return 0;
}
Sadraj polja ne mora se ispisivati
po redu, nego se moe ispisivati
bilo kojim redoslijedom.
189
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
float polje[5] = {10.12, 20.14, 30.16, 40.18, 50.19};
cout << polje[0] << endl;
cout << polje[1] << endl;
cout << polje[2] << endl;
cout << polje[3] << endl;
cout << polje[4] << endl;
system("PAUSE");
return 0;
}
Polja mogu biti float tipa.

(Uoimo da zarezom odvaja-
mo brojeve, a toka ima fun-
kciju decimalnog zareza.)
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
char polje[5] = {'P', 'O', 'L', 'J', 'A'};
cout << polje[0] << endl;
cout << polje[1] << endl;
cout << polje[2] << endl;
cout << polje[3] << endl;
cout << polje[4] << endl;
system("PAUSE");
return 0;
}
Polja mogu biti i char tipa.

Pokuajmo iz ispisa izbaciti endl
naredbe:

cout << polje[0] << endl;

napiimo u obliku

cout << polje[0];

Samo cout << polje[4] << endl;
nemojmo mijenjati.
190
Polja
PRO - MIL
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int a[3] = {2, 3, 0};
a[2] = a[0] + a[1];
cout << a[2] << endl;
system("PAUSE");
return 0;
}
Polja moemo koristiti na isti nain kao i
varijable, npr. za izraune.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int b[3];
cin >> b[0];
cin >> b[1];
b[2] = b[0] + b[1];
cout << b[2] << endl;
system("PAUSE");
return 0;
}
Kao to je sluaj i kod varijabli, sadraj po-
lja ne moramo definirati prilikom formiranja
polja.
U ovom sluaju sadraj prve i druge elije
polja unosimo cin naredbom, a u treu eli-
ju spremamo rezultat zbrajanja.
191
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int polje[5] = {10, 20, 30, 40, 50};
int x;
for (x = 0; x < 5; x = x + 1)
{
cout << polje[x] << endl;
}
system("PAUSE");
return 0;
}
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int polje[5] = {10, 20, 30, 40, 50};
cout << polje[0] << endl;
cout << polje[1] << endl;
cout << polje[2] << endl;
cout << polje[3] << endl;
cout << polje[4] << endl;
system("PAUSE");
return 0;
}
Sadraj polja moemo ispi-
sati na ovaj nain. Takav
nain funkcionira, ali je nee-
legantan. Osobito je neprikla-
dan ako bismo htjeli ispisati
vee polje.
Ovaj nain ispisa sadraja
polja daleko je elegantniji.

Formirali smo petlju koja e
se vrtjeti onoliko puta koliko
elija petlje elimo ispisati.

Varijabla petlje mijenja se od
poetnog broja elije koju eli-
mo ispisati, u naem sluaju
od 0, do broja krajnje elije
koju elimo ispisati, u naem
sluaju to je 4.

Pri ispisu umjesto polje[1] ko-
ristimo polje[x] to znai da se
ispisuje ono polje iji broj je
jednak trenutnoj vrijednosti
varijable x.
192
Polja
PRO - MIL
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int polje[5] = {10, 20, 30, 40, 50};
int x;
for (x = 1; x < 4; x = x + 1)
{
cout << polje[x] << endl;
}
system("PAUSE");
return 0;
}
Moemo ispisati dio elija
polja, npr. prvu, drugu i tre-
u.
To emo postii tako da vari-
jablu petlje x mijenjamo od
jedan do tri po jedan.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int polje[5] = {10, 20, 30, 40, 50};
int x;
for (x = 4; x > -1; x = x - 1)
{
cout << polje[x] << endl;
}
system("PAUSE");
return 0;
}
Sadraj polja moemo ispisivati i
unatrag. To emo postii tako da
varijablu petlje x mijenjamo unat-
rag od etiri do nula po jedan.
193
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int polje[5];
int x;
cout << "Unos polja." << endl;

for (x = 0; x < 5; x = x + 1)
{
cin >> polje[x];
}

cout << "Ispis polja." << endl;

for (x = 0; x < 5; x = x + 1)
{
cout << polje[x] << endl;
}

system("PAUSE");
return 0;
}
Na slian nain pomou petlje mo-
emo uporabom tipkovnice unijeti
brojeve u pojedine elije.
Ovu petlju koristimo za unos
brojeva u polje.

Opet umjesto cin >> polje [0]
imamo cin >> polje[x], a varijab-
lu x petlja mijenja od nula do
etiri i tako e se unijeti sadraj
cijelog polja.

Kao i do sada nakon svakog
unosa broja pritisnemo Enter
tipku.
Koristei isti trik ovdje ispisujemo
sadraj polja.
Umjesto cout << polje[0] stavili
smo cout << polje[x], a x for pet-
lja mijenja od nula do etiri i tako
e se ispisati sadraj cijelog po-
lja.
Kao to je to vrijedilo za sve elemente programa koje
smo vidjeli do sada, i za polja vrijedi da emo ih najbolje
shvatiti i usvojiti ako napravimo to vei broj varijacija
primjera koje smo vidjeli do sada.

Pokuajmo sami smisliti to vie slinih primjera.
194
Polja
PRO - MIL

#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();

int polje[54] =
{
0, 200, 10, 200, 10, 50, 100, 50, 100, 200,
120, 200, 120, 150, 300, 150, 300, 200, 350, 200,
350, 30, 400, 30, 400, 200, 450, 200, 450, 20,
550, 20, 550, 200, 550, 200, 560, 200, 560, 40,
600, 40, 600, 200, 620, 200, 620, 20, 635, 20,
635, 200, 640, 200
};

moveto (polje[0], polje[1]);

for (x = 2; x < 54; x = x + 2 )

{
lineto(polje[x], polje[x+1]);
}

getch();
closegraph();
return 0;
}
Pogledajmo program koji smo vidjeli na poetku ovog poglavlja.
Ovdje se formira polje u kojem se nalazi poloaj
toaka ijim emo spajanjem dobiti crte.

Na prvi pogled moe nam se uiniti da smo to
ovdje uinili drugaije nego do sada. Paljivom
analizom vidjet emo da nismo.

Najprije imamo int polje[54] =, a zatim u vitias-
tim zagradama vrijednosti pojedinih elija.
Ovom naredbom
odreuje se po-
etak niza crta.
Ovom petljom crta se
ostatak crtea.
195
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

int polje[5] = {10, 20, 30, 40, 50};
Pogledajmo podrobnije neke detalje programa.
int polje[5] =
{
10, 20, 30, 40, 50
};
Ovu naredbu
moemo napi-
sati i ovako.
Ovaj oblik pogodniji je za
koritenje kad u veliko po-
lje elimo unijeti veliku koli-
inu brojeva.
moveto (polje[0], polje[1]);
Ova naredba odreuje poetak niza crta.
Udaljenost od lijevog ruba odreena je
sadrajem elije polje[0], tj. prve elije, a
udaljenost od gornjeg ruba sa polje[1], tj.
sadrajem druge elije.
for (x = 2; x < 54; x = x + 2 )
{
lineto(polje[x], polje[x+1]);
}
Poetna vrijednost
varijable x je 2.
Petlja e se izvoditi dok je x manji od 54. Budui
da se x uveava za 2 vrijednost varijable x e rasti
od 2 do 52.
Varijabla x uveava se za 2. To nam
odgovara zato to je kraj svake crte
odreen s dva broja, pa kad elimo
oitati poziciju novog kraja crte, mo-
ramo se u polju pomaknuti za dva
lana polja unaprijed.
Udaljenost kraja
crte od lijevog ruba
grafikog prozora.
Udaljenost kraja crte od gornjeg
ruba grafikog prozora.
196
Polja
PRO - MIL
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int polje[5] = {10, 20, 30, 40, 50};
cout << polje[0] << endl;
cout << polje[1] << endl;
cout << polje[2] << endl;
cout << polje[3] << endl;
cout << polje[4] << endl;
system("PAUSE");
return 0;
}
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int polje1 = 10;
int polje2 = 20;
int polje3 = 30;
int polje4 = 40;
int polje5 = 50;
cout << polje1 << endl;
cout << polje2 << endl;
cout << polje3 << endl;
cout << polje4 << endl;
cout << polje5 << endl;
system("PAUSE");
return 0;
}
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int polje[5] = {10, 20, 30, 40, 50};
int x;
for (x = 0; x < 5; x = x +1)
{
cout << polje[x] << endl;
}
system("PAUSE");
return 0;
}
Mogli bismo postaviti pitanje trebaju
li nam uope polja, budui da bismo
ovaj program mogli i ovako realizira-
ti, obinim varijablama.
Vidimo da ovakav pro-
gram moemo realizi-
rati obinim varijabla-
ma, ali ovakav, koji
koristi for naredbu, ne
moemo realizirati sa-
mo varijablama.
197
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Ne samo da uporabom polja moemo pisati elegantnije programe, nego nam
polja omoguuju realizaciju programa koje bi bilo veoma teko realizirati na
neki drugi nain. Pogledajmo nekoliko primjera takvih programa.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int polje[5];
int x;
int r;

cout << "Unos polja." << endl;
for (x = 0; x < 5; x = x + 1)
{
cin >> polje[x];
}

r = polje[0];
for (x = 1; x < 5; x = x +1)
{
if (r < polje[x])
{
r = polje[x];
}
}

cout << "Najveci je." << endl;
cout << r << endl;

system("PAUSE");
return 0;
}
Polja nam omoguuju operacije sa elijama polja.

Ovo je primjer programa koji pretrauje uneseno
polje i ispisuje najvei broj u polju.
Unos polja.
U ovom dijelu programa pretrauje
se uneseno polje i najvei broj na-
en u polju sprema se u varijablu
r.
U ovom dijelu ispisuje se sadraj
varijable r, odnosno najvei broj
unesen u polje.
198
Polja
PRO - MIL
r = polje[0];

for (x = 1; x < 5; x = x +1)

{

if (r < polje[x])
{
r = polje[x];
}

}
Pogledajmo detaljnije najzanimljiviji dio prethodnog program, dio u kojem se
pretrauje polje i najvei pronaeni broj sprema u r varijablu.
Prvi lan polja, dakle polje[0]
sprema se u varijablu r.
Pretraivanje se nastavlja unutar for
petlje, ija se varijabla x mijenja od
1 do 5 po 1.

Zato petlja ne poinje s nula?

Zato to smo prvu eliju (polje[0])
ve proitali pa je neemo itati
unutar for petlje.
Unutar for petlje za svaku vrijed-
nost varijable x ispituje se je li sa-
draj varijable r manji od polje[x].

Ako jest, znai da je u eliji polje[x]
vei broj od onog u varijabli r, pa
e se sadraj elije polje[r] spremiti
u varijablu r.

Ako nije, znai da je broj u polje[x]
manji i u tom sluaju nee se izvo-
diti sadraj unutar vitiastih zagra-
da.

Na kraju, u varijabli r ostaje najve-
a vrijednost naena u polju.
Ova if naredbe je neobina.
Nema else dijela. To je doz-
voljeno. Ako nam else dio
ne treba, moemo ga izos-
taviti.

U tom sluaju, ako je uvjet
zadovoljen, izvodi se sadr-
aj u vitiastim zagradama,
a ako nije, nastavlja se iz-
voenje programa.
199
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int polje[5];
int x;
int r;
cout << "Unos polja." << endl;
for (x = 0; x < 5; x = x + 1)
{
cin >> polje[x];
}
r = polje[0];
for (x = 1; x < 5; x = x +1)
{
if (r > polje[x])
{
r = polje[x];
}
}
cout << "Najmanji je." << endl;
cout << r << endl;
system("PAUSE");
return 0;
}
Jednostavnim promjenama pro-
gram koji pretrauje polje sa
ciljem da nae najvei broj u
polju moemo preurediti u prog-
ram koji trai najmanji broj.

emu slue takvi programski
postupci?

Na slian nain bismo u progra-
mu za voenje videoteke mogli
pronai korisnike koji nisu vratili
film dulje od npr. tjedan dana ili
korisnike koji su u proloj godini
posudili najvie filmova.
Dovoljno je da umjesto ispitivanja
je li r < polje[x] stavimo ispitivanje
je li r > polje[x].
Odgovarajue preuredimo ispis
obavijesti.
Pokuajmo sami korigirati
program tako da pretrau-
je je li u polje unesen od-
reen broj ili koliko puta
se pojavljuje odreen
broj.

Pokuajmo napraviti sli-
na pretraivanja slova.
200
Polja
PRO - MIL
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int p[5];
int zamjena;
int privremeni;
int x;

cout << "Unos polja." << endl;
for (x = 0; x < 5; x = x + 1)
{
cin >> p[x];
}

do
{
zamjena = 0;
for (x = 0; x < 4; x = x + 1)
{
if (p[x] < p[x+1])
{
privremeni = p[x];
p[x] = p[x+1];
p[x+1] = privremeni;
zamjena = 1;
}
}
}
while (zamjena ==1);

cout << "Sortirano polje." << endl;
for (x = 0; x < 5; x = x +1)
{
cout << p[x] << endl;
}

system("PAUSE");
return 0;
}
Ovo je sasvim sigurno najslo-
eniji program koji smo do sa-
da vidjeli u ovoj knjizi.

Slui za sortiranje polja. Une-
semo razliite brojeve u polje,
a program e ih sortirati tako
da e u prvom polju biti najvei
broj, a u posljednjem najmanji.
U ovom dijelu programa unosi-
mo brojeve u polje.
U ovom dijelu vri se sortiranje
polja.
U ovom dijelu sortirano polje
ispisuje se na zaslon raunala.
201
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

do

{
zamjena = 0;

for (x = 0; x < 4; x = x + 1)
{

if (p[x] < p[x+1])

{
privremeni = p[x];
p[x] = p[x+1];
p[x+1] = privremeni;
zamjena = 1;
}

}

}

while (zamjena ==1);
Pogledamo podrobnije dio programa u kojem se vri sortiranje.
Sortiranje se odvija u do ... while pet-
lji. Petlja se ponavlja tako dugo dok je
varijabla zamjena jednaka broju 1.
Na poetku ispitivanja u varija-
blu zamjena stavlja se broj 0.
Ako ne bude potrebno vriti
nikakve zamjene u polju, varija-
bla zamjena ostat e jednaka
nuli i izvoenje do ... while pet-
lje e se zaustaviti.
U for petlji ita se cijelo polje, s
time da se varijabla petlje mije-
nja za jedan manje od veliine
petlje; dakle u naem sluaju ne
ide do 4 nego, do 3.
If naredbom ispitujemo je li broj
u nekoj eliji polja (p[x]) manji
od broja u sljedeoj eliji (p
[x+1]. Ako nije, znai da imamo
prvo vei broj, a zatim manji.
To je ono to elimo i petlja se
vrti dalje.
Ako jest, znai da imamo prvo
manji, a zatim vei broj, pa ih
treba zamijeniti.

U tom sluaju u ovom dijelu e
se izvriti zamjena.
Na kraju zamjene u varijablu zamjena stavit e se broj 1.

Zbog toga do ... while petlja e cijeli postupak ponavljati tako dugo dok vie
ne bude obavljena ni jedna zamjena i varijabla zamjena ostane jednaka nuli.

To znai da nije pronaen ni jedan sluaj da je neki broj manji od sljedeeg
tj. da je sortiranje od veeg prema manjem zavreno.
202
Polja
PRO - MIL
privremeni = p[x];
p[x] = p[x+1];
p[x+1] = privremeni;
zamjena = 1;
Za zamjenu sadraja dviju susjednih elija
u polju treba nam pomona varijabla; u
naem sluaju to je varijabla privremeni.

Zato?

Da smo odmah napravili drugu naredbu,
naredbu p[x] = p[x+1]; onda bi se broj koji
se nalazi u p[x+1]; nalazio i u p[x], a broj
koji se je do tada nalazio u p[x] bi nestao.

Da broj koji se nalazi u p[x] ne bi nestao,
privremeno ga spremamo u varijabli priv-
remeni.
Nakon to smo u prethodnom koraku sadr-
aj elije p[x] spremili u varijablu privremeni,
sadraj elije p[x+1] spremamo u eliju p[x].

Budui da p[x] usporeujemo sa p[x+1], x
mora bit za jedan manji od broja elija.
Sadraj varijable privremeni sada vraam u
polje, ali ne u eliju p[x] u kojoj se taj sadr-
aj do sada nalazio, nego u sljedeu eliju,
u eliju p[x+1].

Time smo sadraje elija p[x] i p[x+1] zami-
jenili.
Na kraju zamjene u varijablu zamjena stav-
ljamo broj jedan.

Time smo obavijestili raunalo da je bilo
potrebno vriti zamjene u polju, tj. da polje
nije bilo sortirano po redu, te da do ... while
petlja mora jo jednom provjeriti je li polje
sortirano. Kad se ni u jednom sluaju nee
dogoditi da je neka elija manja od sljede-
e, sortiranje je zavreno.
Pogledajmo kako funkcioni-
ra zamjena sadraja elija.
203
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int po1[5] = {10, 15, 20, 25, 30};
int po2[5] = {35, 40, 35, 50, 55};
int po3[5];
int a;
for (a = 0; a < 5; a = a +1)
{
po3[a] = po1[a] + po2[a];
cout << po1[a] << " + " << po2[a] << " = " << po3[a] << endl;
}
system("PAUSE");
return 0;
}
Izmeu polja mogu se vriti matematike ope-
racije kao i izmeu varijabli.

Ovaj program e zbrojiti sadraje polja po1 i
polja po2, a rezultat spremiti u polje po3 i zatim
ga ispisati na zaslon raunala.
Pokuajmo napisati sline programe koji e vriti neke operacije izmeu po-
lje; npr. programe koji e mnoiti ili dijeliti lanove dvaju polja i rezultat spre-
mati u tree polje.

Program koji e usporeivati pojedine elije dvaju polja, a zatim e u tree
polje spremiti vrijednost one elije koja sadri vei broj ili manji broj.

Program koji e brojiti koliko puta se neki broj pojavljuje u nekom polju.
204
Polja
PRO - MIL
Spremanje brojeva u datoteku
Postavlja se pitanje na
koji nain bismo mogli
podatke umjesto preko
tipkovnice unijeti u po-
lje iz neke datoteke. U
tu svrhu otvorit emo
Nopetad (u hrvatskoj
inaici Blok za pisanje)
i unijet emo osam raz-
liitih brojeva koji e biti
odvojeni praznim mjes-
tima.

Vano je napomenuti
da to moramo uiniti
tim programom, a nipo-
to Wordom ili nekim
slinim programom.
Te brojeve, odnosno taj tekst spre-
mit emo pod imenom podaci.txt u
onu istu mapu u kojoj se nalazi
na program.

U naem sluaju to je mapa Radni
na C: disku.

Ako smo program spremili u neku
drugu mapu, u tu istu mapu spre-
mimo i ovaj tekst.
205
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Ako je sve u redu, u onom istom
prostoru u kojem se nalazi na
projekt i na program morala bi se
nalaziti i datoteka podaci.txt.
Int tip u sluaju da koristimo
Dev-C++ moe biti od
2147483648 do 2147483647.

Float tip moe imati najveu
vrijednost od 3.40282 * 10
-38
. To
se u programu pie kao
3.40285e-38.

Mogu li se u programima koristiti
i vei brojevi? Naravno, ali taj
problem nadilazi potrebe naeg
uvodnog prirunika.

Za sada je bitno imati na umu
da u int ili float varijablu ne mo-
emo staviti neogranieno velik
broj.
Jasno je da moemo staviti i
neke druge brojeve, a moemo
ih staviti vie ili manje nego u
naem primjeru.

Ako mijenjamo koliinu brojeva,
onda u programu koji e ih itati
moramo na isti nain promijeniti
veliinu polja i for petlju.

Moramo imati na umu i da broj
koji unosimo ne moe biti neog-
ranieno velik. Koliki broj moe-
mo unijeti u polje, odnosno u
varijablu, ovisi o svojstvima pro-
gramskog okruenja koje koristi-
mo.
206
Polja
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

int main()
{

int x;
int polje[8];
ifstream ulaz("podaci.txt");

for (x = 0; x < 8; x = x + 1)
{
ulaz >> polje[x];
}

for (x = 0; x < 8; x = x +1)
{
cout << polje[x] << endl;
}

system("PAUSE");
return 0;
}
Ovim programom proitat emo brojeve koji su sprem-
ljeni u datoteku podaci.txt, spremit emo ih u polje i na
kraju ispisati na zaslon raunala.
Ovdje formiramo neto s ime se do sada
nismo sretali, a to je objekt. Trenutno nije
vano to je to tono objekt. Za sada e-
mo rei da je to element programa pomo-
u kojeg emo itati sadraj datoteke.
Ova petlja mora se vrtjeti onoliko puta
koliko brojeva elimo proitati, odnosno
koliko nae polje ima elija. U naem
sluaju to je osam puta.
Ovom naredbom sadraj datoteke
unosi se u polje.

Da smo ovdje napisali:

cin >> polje[x];

brojevi bi se u polje unosili pomo-
u tipkovnice.

ulaz >> polje[x];

je varijacija te naredbe i znai da
se brojevi nee u polje unositi po-
mou tipkovnice nego pomou
objekta ulaz, a prije smo definirali
da objekt ulaz ita iz datoteke po-
daci.txt.
Dodat emo novu biblioteku.
Ispis sadraja polja.
207
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

ifstream ulaz ("podaci.txt");
Naredba za formiranje objekta pomo-
u kojeg emo itati sadraj datoteke.
Naziv objekta. Bira se po istoj logi-
ci po kojoj biramo nazive varijabli.
Naziv datoteke koju emo itati
pomou objekta ulaz.
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
int x;
int polje[8];
float a = 0;
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{
ulaz >> polje[x];
}
for (x = 0; x < 8; x = x +1)
{
a = a + polje[x];
}
a = a / 8;
cout << "Prosjek je " << a << endl;
cout << endl;
system("PAUSE");
return 0;
}
Kada uitamo brojeve u polje,
s tim brojevima moemo raditi
sve ono to moemo raditi i s
brojevima koje smo unijeli
preko tipkovnice.

U ovom programu izraunat
emo prosjenu vrijednost
unesenih brojeva.

Budemo li eksperimentirali s
drugim brojevima, imajmo na
umu da njihova ukupna suma
ne smije biti vea od maksi-
malne dozvoljene vrijednosti
varijable.
208
Polja
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
int x;
int polje[8];
ofstream izlaz("podaci.txt");

for (x = 0; x < 8; x = x + 1)
{
cin >> polje[x];
}

for (x = 0; x < 8; x = x + 1)
{
izlaz << polje[x];
izlaz << " ";
}

cout << "Spremanje je gotovo." << endl;
cout << endl;
system("PAUSE");
return 0;
}
Ovaj program omoguuje nam da sadraj polja koji
smo unijeli preko tipkovnice spremimo u datoteku.
I u ovom sluaju moramo imati ukljuenu
fstream biblioteku.
Ovdje formiramo objekt izlaz pomou
kojeg emo brojeve iz polja spremiti
u datoteku podaci.txt.
Na uobiajeni nain unosimo brojeve
u polje.
Ovdje sadraj polja sprema-
mo u datoteku podaci.txt.

Naredbom:

izlaz << polje[x];

brojeve iz polja pomou
objekta izlaz aljemo u da-
toteku.

Ova naredba slina je na-
redbi:

cout << polje[x];

kojom brojeve aljemo na
zaslon raunala.

Naredbom izlaz << " "; iz-
meu dva broja unosimo
prazno mjesto.
209
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

ofstream izlaz ("podaci.txt");
Naredba za formiranje objekta pomo-
u kojeg emo spremati sadraj dato-
teke.
Naziv objekta. Bira se po istoj logi-
ci po kojoj biramo nazive varijabli.
Naziv datoteke u koju emo
spremati pomou objekta ulaz.
to smo spremili moemo pogledati editorom, a moemo i programom koji
sadraj datoteke ispisuje na zaslon raunala.
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
int x;
int polje[8];
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{
ulaz >> polje[x];
}
for (x = 0; x < 8; x = x +1)
{
cout << polje[x] << endl;
}
system("PAUSE");
return 0;
}
210
Polja
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
int x;
int p[8];
int zamjena;
int privremeni;
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{
ulaz >> p[x];
}
cout << "Zapocinje sortiranje." << endl;
do
{
zamjena = 0;
for (x = 0; x < 7; x = x + 1)
{
if (p[x] < p[x+1])
{
privremeni = p[x];
p[x] = p[x+1];
p[x+1] = privremeni;
zamjena = 1;
}
}
}
while (zamjena ==1);
ofstream izlaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{
izlaz << p[x];
izlaz << " ";
}
cout << "Sortiranje je zavrsilo" << endl;
system("PAUSE");
return 0;
}
U ovom programu nema nieg novog. Samo smo
kao lego kocke sloili elemente koje smo do sada
upoznali.

Ovaj program uitava datoteku u polje, sortira polje
i zatim sortirano polje sprema natrag u datoteku.
Ovdje vidimo i jedan jako va-
an element programiranja.
Ne moramo svaku stvar svaki
put kad nam treba iznova pro-
gramirati. Segment programa
koji dobro radi obilno proko-
mentiramo i spremimo, a za-
tim ga ubacujemo u programe
kad nam zatreba, kao to smo
ovdje ubacili segment progra-
ma koji sortira sadraj polja.
U ovom djelu programa itamo
sadraj datoteke i spremamo ga
u polje.
Doslovno sa Copy Paste kopi-
ran dio programa koji sortira
sadraj polja od najveeg prema
najmanjem.
U ovom djelu programa sadraj
polja sprema se u datoteku.
211
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
int x;
int polje[8];
ofstream izlaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{
cin >> polje[x];
}
for (x = 0; x < 8; x = x + 1)
{
izlaz << polje[x];
izlaz << " ";
}
cout << "Spremanje je gotovo." << endl;
cout << endl;
system("PAUSE");
return 0;
}
Da bismo provjerili funkcio-
nira li na program, najpri-
je emo programom koji
smo malo prije obradili
unijeti brojeve u datoteku.
Nakon to smo brojeve
unijeli u datoteku, pokrene-
mo program za sortiranje
datoteke koji vidimo na
lijevoj stranici.
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
int x;
int polje[8];
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{
ulaz >> polje[x];
}
for (x = 0; x < 8; x = x +1)
{
cout << polje[x] << endl;
}
system("PAUSE");
return 0;
}
Programom za itanje sadraja datoteke pog-
ledat emo rezultat sortiranja.
212
Polja
PRO - MIL
Dvodimenzionalna polja
Ako postoje jednodimenzionalna polja, moraju postojati i dvodimenzionalna. (U
suprotnom bismo imali situaciju kao kad je jedan novinar govorio o lokalnim sta-
novnicima nekog mjesta, iako nam vjerojatno ne bi mogao objasniti kako izgle-
daju globalni stanovnici istog mjesta.)
2. stupac 3. stupac 4. stupac
2. red 22 23 24
1.stupac
21
1. red 11 12 13 14
Dvodimenzionalne
matrice pogodne su
za spremanje sadr-
aja tabela.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int polje[2] [4] = {{11, 12, 13, 14}, {21, 22, 23, 24}};
int x;

cout << "Prvi red." << endl;
for (x = 0; x < 4; x = x + 1)
{
cout << polje[0] [x] << endl;
}
cout << endl;

cout << "Drugi red." << endl;
for (x = 0; x < 4; x = x + 1)
{
cout << polje[1] [x] << endl;
}
cout << endl;

system("PAUSE");
return 0;
}
U ovom programu emo gornju tabelu
spremiti u dvodimenzionalnu matricu, a
zatim emo prvi i drugi red ispisati.
Ispis prvog reda.
Ispis drugog reda.
213
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

int polje [2] [4] = { {11, 12, 13, 14} , {21, 22, 23, 24} };
Tip polja u naem sluaju je int,
a moglo je biti npr. float ili char.
Naziv polja.
Broj redova polja. Broj stupaca polja.
Prvi red polja. Nalazi se
unutar vitiastih zagrada.
Drugi red polja. Nalazi se
unutar vitiastih zagrada.
Cjelokupni sadraj polja
nalazi se unutar poseb-
nih vitiastih zagrada.
cout << polje [0] [x]
Budui da su u ovom tipu polja podaci rasporeeni u redove i stupce, prilino
logino je da kad elimo pristupiti nekoj eliji takvog polja moramo navesti u
uglatim zagradama broj reda i broj stupca elije kojoj elimo pristupiti.
Broj stupca kojem pristupamo, u naem
sluaju je to sadraj varijable x.
Broj reda kojem pristupamo, u naem sluaju je to prvi red koji se oznaava
brojem nula. Dakle prvi red oznaava broj nula, a drugi broj jedan.
Dvodimenzionalna polja koriste se
na slian nain kao jednodimenzio-
nalna. Osobito su korisna u progra-
mima u kojima se odvijaju sloeni
prorauni.
Osim dvodimenzionalnih postoje i
trodimenzionalna polja. Funkcioni-
raju slino kao dvodimenzionalna,
samo to imaju jo i dubinu.
PRO - MIL 214
Obrada teksta
C++ programiranje za apsolutne poetnike
O
b
r
a
d
a

t
e
k
s
t
a

PRO - MIL 215
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

216
Obrada teksta
PRO - MIL
elimo li napisati program za voenje telefonskog imenika ili program za voe-
nje videoteke, osim obrade brojeva i grafike sasvim sigurno e nam trebati obra-
da teksta. Iako smo i do sada koristili tekstove za ispisivanje raznih obavijesti,
ostalo je nejasno na koji nain bismo mogli tekstove pretraivati ili sortirati.
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
string odgovor;
cout << "Unesite vase ime." << endl;
cin >> odgovor;
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}
Pogledamo li ovaj pro-
gram, uinit e nam se
da smo za lake bara-
tanje tekstom upotrije-
bili novi tip varijable,
string tip; te da smo u
programu koristili vari-
jablu koju smo nazvali
odgovor.
Pogledajmo nove elemente u ovom programu.
string odgovor;
Iako ovaj red izgleda kao da formiramo varijablu
string tipa koju smo nazivali odgovor, string nije tip
varijable nego klasa, a odgovor nije varijabla nego
objekt.

Time se trenutno ne moramo optereivati i moemo
objekt odgovor koristiti kao da smo formirali varijablu
string tipa pod nazivom odgovor.

Tek neto vee mogunosti koje e nam string prui-
ti dat e nam naslutiti da se iza toga naziva krije
kompleksnija struktura od obine varijable.
String objekti
217
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <string>
Da bi program mogao koristiti string objekte,
ovu naredbu moramo staviti na poetak prog-
rama.

U naem programskom okruenju program e
raditi i bez ovog reda, ali je mogue da u ne-
kom drugom programskom okruenju nee.

Zbog toga emo stavljati tu naredbu
cout << odgovor << ", dobar dan!" << endl;
Vidimo da objekt odgovor
u naredbi cout koristimo
kao da koristimo varijab-
lu.

Najprije e se ispisati
sadraj objekta odgovor,
zatim tekst unutar navod-
nika i konano skok u
novi red.
cin >> odgovor;
U naredbi cin koju koristimo za unos preko tipkovni-
ce objekt odgovor koristimo kao to bismo koristili
varijablu.

Dok smo u varijablu char tipa mogli spremiti jedno
slovo, u objekt klase string moemo spremati vei
tekst.
218
Obrada teksta
PRO - MIL
Oigledno je da u string objekt moemo spremiti tekst i postavlja se pitanje
koliko najvie znakova smije sadravati taj tekst.

U naelu raunalo bi se samo trebalo brinuti da osigura dovoljno mjesta za
spremanje bilo kojeg teksta. U sluaju koritenja kraih tekstova, poput imena,
naziva gradova i slino o tome ne moramo voditi brigu.

elimo li u string objekt unijeti veu koliinu teksta, da bismo bili sigurni da e
sve biti u redu, moemo unaprijed naredbom reserve rezervirati potreban pro-
stor.
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
cin >> odgovor;
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}
Program radi jednako
kao i prethodni, osim
to smo u ovom sluaju
za spremanje imena
osigurali veliki prostor.
odgovor.reserve(256)
Objekt na koji se naredba
odnosi, u naem sluaju je
to objekt odgovor.
Operacija koja se vri nad objektom.
Ovom naredbom se za objekt odgovor
rezervira 256 mjesta za spremanje znako-
va.
Obratimo panju na toku koja se obvezno
nalazi izmeu oznake objekta i oznake
operacije koja se nad njim vri.
219
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
cin >> odgovor;
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
cout << "Imamo " << odgovor.size() << " slova." << endl;
cout << endl;
cout << "Imamo " << odgovor.capacity() << " prostora." << endl;
cout << endl;
system("PAUSE");
return 0;
}
odgovor.size()
Objekt na koji se na-
redba odnosi.
Naredba size() oigledno slui za odreivanje
broja znakova unesenog teksta. Rije Stjepan
sastoji se od sedam slova.
odgovor.capacity()
Objekt na koji se na-
redba odnosi.
Naredba capacity() slui za odreivanje
broja mjesta koja nam stoje na raspola-
ganju za unos znakova u objekt odgo-
vor.

Zato ih je na raspolaganju 355, ako
smo naredbom odgovor.reserve(256)
rezervirali 256 mjesta? Zato to je 256
mjesta samo polazite na temelju kojeg
prevoditelj rezervira neto vei prostor.
220
Obrada teksta
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
cin >> odgovor;
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
getline(cin, odgovor);
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}
Naredbom cin nije mo-
gue u objekt odgovor
unijeti vie odvojenih
rijei.

Iako smo napisali prezi-
me i ime, uspjeli smo
unijeti samo prezime.
Ako umjesto cin nared-
be upotrijebimo ovu na-
redbu, moi emo unijeti
vie rijei u objekt odgo-
vor.
221
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

getline(cin, odgovor);
Naredba koja nam omoguuje
unos vie rijei u string objekt.
String objekt u koji emo unositi tekst.
U naem sluaju to je objekt odgovor.
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
cin >> odgovor;
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}
Jedan od problema
pri izradi programa
javlja se kad korisnik
unese neodgovara-
juu vrijednost.

U ovom sluaju, um-
jesto da unesemo
ime, samo smo priti-
snuli tipku enter.
U ovom sluaju, na
mjestu gdje se oekiva-
lo da emo unijeti tekst,
mi smo unijeli brojeve.

Postavlja se pitanje na
koji bismo nain mogli
sprijeiti ili barem sma-
njiti mogunost unoe-
nja besmislenih odgo-
vora.
222
Obrada teksta
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
string odgovor;

do
{
cout << "Unesite vase ime." << endl;
getline(cin, odgovor);
}
while (odgovor.size() == 0);

cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}
Ova inaica programa
e zahtijevati da pono-
vimo unos ako pritisne-
mo tipku Enter, a da
prije toga nismo nita
unijeli.
do
{
cout << "Unesite vase ime." << endl;
getline(cin, odgovor);
}
while (odgovor.size() == 0);
Naredbu za unos teks-
ta u objekt odgovor
stavili smo u do ...
while petlju koja se
izvodi tako dugo dok je
broj slova koja smo
unijeli jednak nuli.

Kad je taj broj razliit
od nule, nastavlja se
izvoenje programa.
223
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
char niz[255];
cout << "Unesite vase ime." << endl;
cin.getline(niz,255);
cout << endl;
cout << niz << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}
Tekst se moe unijeti u prog-
ram i obraivati i na drugi
nain; uporabom polja char
tipa.
Formiranje niza ije elije su char tipa. U svaku moemo staviti jedno slovo.
Naredbe za
unos tekst u
char niz.
char niz[255];
Tip niza. U
naem sluaju
niz je char
tipa.
Broj elija niza. U
naem sluaju niz
sadri 255 elija
to znai da u taj
niz moemo spre-
miti 255 slova.
Naziv niza, u naem sluaju na-
ziv niza je niz.
cin.getline( niz, 255);
Naziv niza.
Broj elija niza.
Ovom naredbom preko tipkovni-
ce unosimo tekst u niz char tipa.
Polje char tipa
224
Obrada teksta
PRO - MIL
cout << niz << ", dobar dan!" << endl;
Sadraj niza char
tipa ispisuje se na
isti nain na koji se
ispisuje sadraj
varijable.
Naziv niza char tipa
koji ispisujemo.
Ispisujem tekst
unutar navod-
nika.
Skok u
novi red.
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
char niz[255];
cout << "Unesite vase ime." << endl;
cin >> niz;
cout << endl;
cout << niz << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}
Umjesto naredbe:

cin.getline(niz,255);

moemo staviti naredbu:

cin >> niz;

ali u tom sluaju moi
emo unijeti samo jednu
rije. Nakon pritiska raz-
maknice unos e se pre-
kinuti pa, kao to moe-
mo vidjeti na donjoj slici,
iako smo napisali Bunic
Stjepan, uneseno je sa-
mo prezime. Jasno, ako
ba elimo unijeti samo
jednu rije onda emo
upotrijebiti ovu naredbu
jer je jednostavnija.
cin >> niz;
Naredba za unos
teksta tipkovnicom.
Naziv char polja u
koje unosimo tekst.
225
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
char niz[255];
int x;
int p;

do
{
cout << "Unesite vase ime." << endl;
cout << endl;
cin.getline(niz,255);
x = 0;
p = 1;
while (niz[x] != '\0')
{
if (isdigit(niz[x]))
{
p = 0;
}
x = x + 1;
}
}
while (p == 0);

cout << endl;
cout << niz << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}
U ovu inaicu programa nije mogue unijeti broj na mjestu na kojem oekuje-
mo tekst. U sluaju da unesemo brojeve, raunalo e zahtijevati da ponovimo
upis.
Zavrni dio programa,
ime se spaja s pozdra-
vom i gasi se program.
Ovo je glavni dio prog-
rama. Ovdje se unosi
tekst i ispituje jesu li
unesena slova ili broje-
vi.

Ako su uneseni brojevi,
unos se ponavlja.

Oznaku \ dobit emo
pritiskom na AltGr i Q.
Poetni dio programa i
formiranje potrebnih vari-
jabli.
226
Obrada teksta
PRO - MIL
do
{

cout << "Unesite vase ime." << endl;

cout << endl;

cin.getline(niz,255);

x = 0;
p = 1;

while (niz[x] != '\0')

{
if (isdigit(niz[x]))

{
p = 0;
}

x = x + 1;

}

}
while (p == 0);
Pogledajmo podrobnije glavni dio prethodnog programa u kojem se unosi tekst i
ispituje jesu li unesena slova ili brojevi.
Cijeli ovaj dio nalazi se unutar do ... while petlji koja e se ponavljati ako korisnik
umjesto slova unese brojeve.
Unos teksta.
Postavljanje odgo-
varajuih vrijed-
nosti varijabli.
While petlja ita niz, slovo
po slovo, dok ne doe do
kraja niza.

Oznaka \0 nalazi se na
kraju niza pa niz[x] != '\0'
ispituje je li element niza
niz[1] jednak znaku za
kraj, odnosno jesmo li
doli do kraja niza.

To radi tako da je na po-
etku vrijednost varijable
x nula, a zatim se uvea-
va po jedan
If naredbom ispitujemo je
li znak u nizu broj.

Ako jest, u p varijablu se
sprema broj nula to e
imati za posljedicu da e
se ponoviti do ... while
petlja, odnosno unos.

Ako ni jedan lan niza
nije broj, u varijabli p e
ostati broj jedan i do ...
while petlja se nee po-
navljati, odnosno upis se
nee ponavljati.
Ovdje se ispituje je li
vrijednost varijable p
nula i ako jest, do ...
while petlja se ponavlja.
Varijabla x uve-
ava se za jedan
da bi se pri sva-
kom ponavljanju
naredbom niz[x]
itao slijedei
lan niza.
227
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

do
{
cout << "Unesite vase ime." << endl;
cout << endl;
cin.getline(niz,255);
x = 0;
p = 1;
while (niz[x] != '\0')
{
if (isdigit(niz[x]))
{
p = 0;
}
x = x + 1;
}
}
while (p == 0);
Ovaj program je veoma sloen pa emo odvojeno pogledati vanije elemente
programa. Pogledajmo prvo glavnu do ... while petlju.
Ovdje poinje petlja.
Ovdje se u varijablu p
sprema broj jedan. To je
varijabla o kojoj ovisi
hoe li se do ... while
petlja ponoviti ili ne.
Ovdje se ispituje je li sadraj varijable p jednak
nuli. Ako jest do ... while petlja e se ponoviti, a
to znai da e se upis ponoviti.
Ovdje e se varijabla p postaviti na nula ako je
jedan od znakova u nizu broj. To e imati za
posljedicu da e se do ... while petlja ponoviti,
odnosno da e se unos teksta ponoviti.
x = 0;
p = 1;
while (niz[x] != '\0')
{
if (isdigit(niz[x]))
{
p = 0;
}
x = x + 1;
}
Na poetku se x postavlja na nulu, to znai da e se prvi
put sa niz[x] ispitivati niz[0] odnosno prva elija niza.
While petlja ponavlja se tako dugo dok elija niz[x]
nije jednaka oznaci za kraj. Prvi put se ispituje
prva elija odnosno elija niz[0].
Nakon to smo while naredbom ispitali jesmo li
doli do kraja niza, if naredbom ispitujemo je li
elija koju trenutno ispitujemo jednaka nuli. Ako
jest, varijabla p postavlja se na nulu, to znai da
e se ponoviti glavna do ... while petlja.
Ovdje se varijabla x uveava za jedan. To znai da e pri sljedeem izvoenju
while petlje x biti 1, pa e se sa niz[x] ispitivati niz[1], zatim pri sljedeem izvo-
enju while petlje niz[2] i tako do kraja niza.
228
Obrada teksta
PRO - MIL
if ( isdigit ( niz [x] ) )
Ovom naredbom ispitujemo je li jedan znak
broj. Moe se ispitivati varijabla char tipa ili
jedna elija niza char tipa.
Ispitujemo eliju niza char tipa. Broj elije
odreen je vrijednou varijable x.
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
char slovo;
cin >> slovo;
if (isdigit(slovo))
{
cout << "Ovo je broj " << slovo <<
endl;
}
else
{
cout << slovo << " nije broj." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
U ovom jednostavnom
programu moemo vidjeti
kako funkcionira ispitiva-
nje je li unesen znak broj
ili nije.

Osim ispitivanje je li uni-
jeti znak broj, mogua su
i druga ispitivanja.

U tablici s desne strane
moemo vidjeti druge
mogunosti.
Pokuajmo u gornji program
staviti ostala ispitivanja koja
moemo vidjeti u tablici.

U tom sluaju morat emo mo-
dificirati obavijesti koje daje pro-
gram.
229
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

ISPITIVANJE ZNAKOVA
if (isdigit(slovo)) Ispituje je li sadraj varijable slovo neki broj.
if (isalnum(slovo))
Ispituje je li sadraj varijable slovo broj ili slovo. Odgovor
je negativan ako unesemo upitnik, toku ili neto slino.
if (isalpha(slovo)) Ispituje je li sadraj varijable slovo neko slovo.
if (iscntrl(slovo))
Ispituje je li sadraj varijable slovo kontrolni znak. To je
znak koji se dobiva ako drimo tipku Ctrl i onda pritis-
nem npr. slovo v.
if (isgraph(slovo))
Je li sadraj varijable slovo neto to se ispisuje na zas-
lon raunala, dakle slovo, broj ili interpunkcija. U ovu
grupu ne pripada prazno mjesto izmeu dviju rijei.
if (islower(slovo)) Je li sadraj varijable slovo malo slovo.
if (isprint(slovo))
Je li sadraj varijable neto to se ispisuje. Za razliku od
sline naredbe if (isgraph(slovo)) ovdje pripada i prazno
mjesto izmeu dviju rijei.
if (isupper(slovo)) Je li sadraj varijable slovo veliko slovo.
if (ispunct(slovo)) Je li sadraj varijable slovo neka interpunkcija.
Osim to moemo ispitivati je li sadraj varijable broj, ispitivati moemo i druga
svojstva sadraja varijable char tipa.
230
Obrada teksta
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
char slovo[9] = {'8','?','b','\v','*','a',' ','A','#'};
if (isdigit(slovo[0]))
{
cout << "Prvi znak je broj." << endl;
}
if (isalnum(slovo[1]))
{
cout << "Drugi je slovo ili broj." << endl;
}
else
{
cout << "Drugi nije ni slovo ni broj." << endl;
}
if (isalpha(slovo[2]))
{
cout << "Treci je slovo." << endl;
}
if (iscntrl(slovo[3]))
{
cout << "Cetvrti je kontrolni znak." << endl;
}
if (isgraph(slovo[4]))
{
cout << "Peti nesto sto se ispisuje." << endl;
}
if (islower(slovo[5]))
{
cout << "Sesti je malo slovo." << endl;
}

231
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

if (isprint(slovo[6]))
{
cout << "Sedmi moze biti prazno mjesto." << endl;
}
if (isupper(slovo[7]))
{
cout << "Osmi je veliko slovo." << endl;
}
if (ispunct(slovo[8]))
{
cout << "Deveti je neka interpunkcija." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
Ovaj malo vei program morali smo staviti na dvije
stranice.

Moemo vidjeti uporabu naredbi za ispitivanje znako-
va primijenjenu na polje char tipa.

Vidimo da ne moemo odjednom ispitivati cijelo po-
lje, nego da ispitujemo pojedine elije u polju.

Program moemo korigirati mijenjanjem sadraj polja
ili tako da, umjesto stalnog sadraja polja, sadraj
polja unosimo preko tipkovnice.

Uvijek imajmo u vidu da emo odreenu naredbu
usvojiti tek kad napravimo mnotvo primjera u kojima
se ta naredba koristi. Odreenu naredbu nismo usvo-
jili kad smo je shvatili. Shvaanje naredbe je samo
uvjet da bismo uope mogli poeti uiti. Naredbu
smo usvojili tek kad smo je puno puta uspjeno pri-
mijenili u raznim programima i na razne naine.
232
Obrada teksta
PRO - MIL
Pogledajmo jo nekoliko detalja vezanih uz char varijable i char polja.
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
char slovo1;
char slovo2;
cout << "Unesite prvo slovo." << endl;
cin >> slovo1;
cout << "Unesite drugo slovo." << endl;
cin >> slovo2;

if (slovo1 < slovo2)
{
cout << "Prvo slovo je prije po abecedi." << endl;
}
else
{
cout << "Drugo slovo je prije po abecedi." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
Iako to na prvi pogled nema
smisla, znakovi se mogu us-
poreivati kao i brojevi.

Na prvi pogled izgleda da se
usporeuju na temelju abece-
de, ali to nije ba tako.

Ovaj program dobro radi ako
usporeujemo samo velika ili
samo mala slova.
Zato na taj nain ne moemo usporeivati velika i mala slova?

Zato to raunalo smatra da velika slova dolaze prije malih. Ako eli-
mo napisati program koji sva slova rasporeuje po abecedi, morali
bismo najprije ustanoviti je li neko slovo veliko ili malo, odnosno prog-
ram bi morao biti neto sloeniji. (Pokuajmo ga napisati.)
233
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
char slovo = 'A';
char NizSlova[18] = "Ovo je niz slova.";
cout << "Jedno slovo je " << slovo << endl;
cout << "Tekst je: " << NizSlova << endl;
cout << endl;
system("PAUSE");
return 0;
}
Mogla bi nas zbuniti
uporaba znaka " i zna-
ka '.

Pravilo je jednostavno,
jedno slovo pie se u
obliku 'a', a vie slova u
obliku "Ovo je tekst.".
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
char slovo;
cout << "Unesite slovo." << endl;
cin >> slovo;
slovo = slovo - 1;
cout << "Prethodni znak je " << slovo << endl;
slovo = slovo + 2;
cout << "slijedeci znak je " << slovo << endl;
cout << endl;
system("PAUSE");
return 0;
}
Slovima moemo do-
davati ili oduzimati
brojeve.
234
Obrada teksta
PRO - MIL
Do sada smo uglavnom vidjeli operacije koje se mogu provoditi nad jednim slo-
vom spremljenim u char varijablu ili char polje. Pogledajmo sada operacije nad
veim tekstom spremljenim u objekt string klase.
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
string tekst1 = "Ovo je prvi tekst.";
string tekst2 = " Ovo je drugi tekst.";
string tekst3;
tekst3 = tekst1 + tekst2;
cout << tekst3 << endl;
cout << endl;
system("PAUSE");
return 0;
}
Objekte string klase moemo jed-
nostavno zbrojiti i rezultat zbraja-
nja spremiti u trei objekt.
Obrada string objekata
235
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
string tekst1;
string tekst2;
cout << "Unesite prvu rijec." << endl;
cin >> tekst1;
cout << endl;
cout << "Unesite drugu rijec." << endl;
cin >> tekst2;
cout << endl;
if (tekst1 == tekst2)
{
cout << "Rijeci su jednake." << endl;
}
else
{
cout << "Rijeci nisu jednake." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
Objekti klase string
mogu se meusobno
usporeivati.

U ovom programu us-
poreujemo jesu li jed-
naki.
236
Obrada teksta
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
string tekst1;
string tekst2;
cout << "Unesite prvu rijec." << endl;
cin >> tekst1;
cout << endl;
cout << "Unesite drugu rijec." << endl;
cin >> tekst2;
cout << endl;
if (tekst1 < tekst2)
{
cout << "Prva je manja." << endl;
}
else
{
cout << "Prva nije manja." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
Dva objekta klase string mo-
emo usporeivati i tako da
ispitujemo je li prvi manji od
drugog.

Ostaje nejasno u kojem smis-
lu se ispituje je li prvi manji od
drugog.

Oito se ne ispituje koliina
slova, nego se objekti rangira-
ju po abecedi, ab je po abece-
di nakon aaaaa, pa u tome
smislu ab nije manje nego je
vee od aaaaa.
Kao i kod char polja, sustav je
prilino primitivan i dobro radi
jedino ako se ne mijeaju veli-
ka i mala slova, budui da ra-
unalo smatra da su sva velika
slova prije malih, pa su u tom
smislu manja od malih.

Zato raunalo smatra da je AB
manje od aaaaa.
237
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
string odgovor;
getline(cin, odgovor);
cout << "Tekst sadrzi " << odgovor.size() << " znakova." << endl;
cout << endl;
system("PAUSE");
return 0;
}
Naredba size().
Mogue su i sloenije manipulacije nad tekstom. Ponovno pogledajmo nared-
bu size() koju smo vidjeli na poetku ovog poglavlja. Omoguuje nam odrei-
vanje broja znakova koje sadri tekst. Pri tome imajmo na umu da raunalo i
prazno mjesto izmeu rijei smatra jednim znakom.
238
Obrada teksta
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
string tekst;
string trazi;
int pozicija;
cout << "Unesite tekst." << endl;
getline(cin, tekst);
cout << endl;
cout << "Sto trazim?" << endl;
getline(cin, trazi);
cout << endl;
pozicija = tekst.find(trazi);
if (pozicija != string::npos)
{
cout << "Pocetak je na " << pozicija << ". poziciji." << endl;
}
else
{
cout << "Nema trazene rijeci." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
Ovaj program pretrauje sadraj objekta tekst i trai pojavljuje li se u tom objektu
sadraj objekta trazi. Ako se pojavljuje, obavjetava nas na kojoj poziciji zapoi-
nje traeni tekst. (Prva pozicija nema broj jedan nego broj nula.)
239
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

pozicija = tekst.find(trazi);
Ovom naredbom utvrujemo poziciju traenog teksta, a rezultat spremamo u
varijablu pozicija.
Varijabla u koju spre-
mamo rezultat.
Naziv objekta u kojem se nalazi
tekst koji pretraujemo.
Naredba za
pretraivanja.
Objekt koji pre-
traujemo.
if (pozicija != string::npos)
Ovom naredbom provjeravamo je li traena rije naena u pretraivanom ob-
jektu.
U varijabli pozicija nalazi se re-
zultat pretraivanja objekta.
Ovom naredbom dobivamo
oznaku koja oznaava da tra-
ena rije nije naena.

Usporeujemo rezultat pretra-
ivanja u pozicija varijabli i
obavijest da traena rije nije
naena.
Problem ovog programa,
odnosno ove naredbe, je u
tome to e pronai samo
prvo pojavljivanje neke rije-
i, ako se ista rije vie puta
pojavljuje u tekstu.

elimo li ispitati sva pojavlji-
vanja neke rijei, morat e-
mo napisati malo sloeniji
program.
240
Obrada teksta
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
string tekst;
string trazi;
int pozicija;
cout << "Unesite tekst." << endl;
getline(cin, tekst);
cout << endl;
cout << "Sto trazim?" << endl;
getline(cin, trazi);
cout << endl;
pozicija = tekst.rfind(trazi);
if (pozicija != string::npos)
{
cout << "Pocetak je na " << pozicija << ". poziciji." << endl;
}
else
{
cout << "Nema trazene rijeci." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
Ovaj program radi slian posao kao i prethodni, ali pretraivanje zapoinje od
kraja teksta. Ako traimo rije koja se pojavljuje vie puta, ovaj program nai e
posljednje pojavljivanje.
Program je u potpunosti identi-
an prethodnome, samo to
ovdje umjesto naredbe find
imamo naredbu rfind.

Time smo raunalu naredili da
pretraivanje zapone od kraja
teksta koji se nalazi u objektu
tekst.
241
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
string tekst;
string trazi;
int pozicija;
cout << "Unesite tekst." << endl;
getline(cin, tekst);
cout << endl;
cout << "Sto trazim?" << endl;
getline(cin, trazi);
cout << endl;
pozicija = tekst.find(trazi,6);
if (pozicija != string::npos)
{
cout << "Pocetak je na " << pozicija << ". poziciji." << endl;
}
else
{
cout << "Nema trazene rijeci." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
Ovaj program smo tako korigirali da
smo, iako s naredbom find zapoi-
njemo pretraivanje s lijeve strane,
pronali drugo pojavljivanje traene
rijei.
pozicija = tekst.find(trazi,6);
U ve poznatu naredbu find dodali smo broj 6 ime smo naredili raunalu da
pretraivanje objekta tekst zapone od znaka na poziciji 6.

Budui da prva rije radi poinje na 5, raunalo je nalo drugo pojavljivanje
rijei radi.

Pomou ove naredbe napravit emo program koji e pronai sva pojavljiva-
nja neke rijei, a ne samo prvo ili posljednje.
242
Obrada teksta
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
string tekst;
string trazi;
int duljina;
int trenutno = 0;
int polozaj;
cout << "Unesite tekst." << endl;
getline(cin, tekst);
cout << endl;
cout << "Sto trazim?" << endl;
getline(cin, trazi);
cout << endl;
duljina = tekst.size();
while (trenutno < (duljina + 1))
{
polozaj = tekst.find(trazi,trenutno);
if (polozaj != string::npos)
{
cout << "Nalazi se na " << polozaj << ". mjestu." << endl;
trenutno = polozaj + 1;
}
else
{
trenutno = duljina + 1;
}
}
cout << endl;
system("PAUSE");
return 0;
}
Ovaj program moe pronai svako pojavljivanje neke rijei u nekom tekstu.
U ovom programu koristimo nared-
bu find, a pozicija poetka pretrai-
vanja nije odreena brojem, nego
sadrajem varijable trenutno.

Varijabla trenutno je na poetku 0,
da bi prvo pretraivanje poelo od
poetka teksta. Ako na nekoj pozi-
ciji pronaemo traenu rije, vari-
jablu trenutno uveavamo za tu
poziciju + 1, da bi novo pretraiva-
nje poelo nakon poetka ve na-
ene rijei i da bi se eventualno
pronala nova rije, a ne ponovo
ista.
Budui da smo doavi do ove toe ve
prilino napredovali u vjetini programira-
nja, ovaj put je objanjenje funkcioniranja
programa neto skromnije.

Pokuajmo shvatiti kako funkcionira prog-
ram i pokuajmo ga korigirati tako da ispie
adekvatnu obavijest, ako se traena rije
uope ne pojavljuje. Pokuajmo isti prog-
ram napisati koritenjem rfind naredbe.
243
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
string tekst = "Ovo je tekst.";
string umetak = " moj";
tekst.insert(6,umetak);
cout << tekst << endl;
cout << endl;
system("PAUSE");
return 0;
}
Na neku poziciju unutar teks-
ta moemo dodati tekst.
tekst.insert(6,umetak);
Objekt u koji dodajemo tekst.
Naredba za dodavanje teksta.
Pozicija na koju dodajemo tekst.
Sadraj koji dodajemo.
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
string tekst = "Ovo je tekst.";
tekst.insert(6," dobar");
cout << tekst << endl;
cout << endl;
system("PAUSE");
return 0;
}
Naredba insert moe se napisati
i na ovaj nain.
244
Obrada teksta
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
string tekst = "Ovo je dobar tekst.";
tekst.erase(7,6);
cout << tekst << endl;
cout << endl;
system("PAUSE");
return 0;
}
tekst.erase(7,6);
Objekt u kojem briemo.
Naredba za brisanje.
Pozicija od kojem po-
inje brisanje.
Broj znakova koje e-
mo obrisati.
Dio teksta spremljenog u objekt klase string moemo obrisati erase naredbom.
245
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
string tekst = "Ovo je dobar tekst.";
string drugi = "dodatan";
tekst.replace(7,5,drugi);
cout << tekst << endl;
cout << endl;
system("PAUSE");
return 0;
}
Naredbom replace moemo dio teksta koji se nalazi u objektu klase string
zamijeniti nekim drugim tekstom.
tekst.replace(7,5,drugi);
Objekt u kojem mijenja-
mo dio teksta.
Naredba za zamjenu teksta.
Pozicija od koje zapo-
inje zamjena teksta.
Koliko emo znakova
zamijeniti.
Sadraj kojim emo zamijeniti tekst u objektu tekst. Zamijenit emo 5 znako-
va, poevi od sedmog sa sadrajem objekta drugi. Umjesto objekta drugi
mogli bismo staviti i tekst unutar navodnika.
246
Obrada teksta
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{
char niz[255];
string tekst;
tekst.reserve(256);
int x;
int p;
do
{
cout << "Unesite vase ime." << endl;
cout << endl;
cin >> niz;
x = 0;
p = 1;
while (niz[x] != '\0')
{
if (isdigit(niz[x]))
{
p = 0;
}
x = x + 1;
}
}
while (p == 0);
cout << endl;
tekst = niz;
cout << "Ime " << tekst << " sadrzi " << tekst.size() << " slova." << endl;
cout << endl;
system("PAUSE");
return 0;
}
Postavlja se pitanje bismo li mo-
gli tekst iz jednog oblika pretvoriti
u drugi, ovisno o tome koji oblik
nam je pogodniji za obradu.
Ovdje, na nain koji smo ve vidjeli u ovom pog-
lavlju, ime unosimo u char polje i provjeravamo
jesu li uneseni brojevi ili slova. Ako su uneseni
brojevi, unos se ponavlja. Naredba isdigit ne bi
radila da smo koristili objekt klase string.
Ovdje tekst iz polja tipa
char premjetamo u ob-
jekt klase string koji smo
nazvali tekst.

To smo uinili da bismo
mogli koristiti size nared-
bu.
Naredba niz.size nije dozvoljena. Naredba
size radi jedino s objektima, ali ne i s poljima.
Premjetanje teksta iz char polja u string
247
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <string>


using namespace std;

int main()
{
string tekst = "Tekst.";

char *polje = (char*)tekst.c_str();

cout << polje[0] << endl;
cout << polje[1] << endl;
cout << polje[2] << endl;
cout << polje[3] << endl;
cout << polje[4] << endl;
cout << polje[5] << endl;

cout << endl;
system("PAUSE");
return 0;
}
Mogue je i tekst iz objekta klase string premjestiti u polje char tipa, ali je na-
redba kojom to izvodimo neto sloenija.
Formiramo objekt klase string i u
njega spremamo tekst Tekst.
Tekst iz objekta selimo u char
polje koje smo nazvali polje.
Ispisujemo sadraj polja da bis-
mo vidjeli nalazi li se u njemu
doista Tekst.
char *polje = (char*)tekst.c_str();
Naziv char polja u koje emo
spremiti tekst iz objekta. U na-
em sluaju naziv je polje.
Naziv objekta iz kojeg tekst seli-
mo u char polje. U naem slua-
ju naziv objekta je tekst.
Premjetanje teksta iz stringa u char polje
248
Obrada teksta
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{
int x;
string tekst[8];
ofstream izlaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{
getline(cin, tekst[x]);
}
for (x = 0; x < 8; x = x + 1)
{
izlaz << tekst[x];
izlaz << " # ";
}
cout << endl;
cout << "Spremanje je gotovo." << endl;
cout << endl;
system("PAUSE");
return 0;
}
Pomou objekata klase string moemo formirati liste i te liste moemo spremati u
datoteke na slian nain na koji smo spremali brojane liste
Umjesto praznih mjesta, iz-
meu sadraja pojedinih e-
lija stavljamo #

Ta oznaka e nam pomoi
prilikom itanja datoteke.
Kad smo spremali brojeve, izmeu
brojeva stavljali smo prazno mjesto
da bismo znali gdje zavrava jedan
broj, a poinje drugi.

U ovom programu prazna mjesta
nisu prikladna za razlikovanje sadr-
aja pojedinih elija jer se prazna
mjesta nalaze izmeu rijei.

Na ovoj slici vidi se samo
dio datoteke podaci.txt.
Spremanje teksta u datoteku
249
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{
int x;
string tekst[8];
string privremeni;
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{
do
{
ulaz >> privremeni;
if (privremeni != "#")
{
tekst[x] = tekst[x] + privremeni + " ";
}
}
while (privremeni != "#");
}
for (x = 0; x < 8; x = x +1)
{
cout << tekst[x] << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
Programom slinim programu za itanje datoteka u kojima se nalaze brojevi
itat emo sadraj datoteke u kojoj se nalaze tekstovi.
Oznaku # koristit emo
da bismo utvrdili jesmo
li doli do kraja sadra-
ja jedne elije polja.

Ovo rjeenje je jednos-
tavno, ali je manjkavo.
Ako bi netko prilikom
unosa teksta unio #
oznaku, poremetio bi
ispravno funkcioniranje
programa.

Zbog toga bi program
za unos teksta trebalo
tako modificirati da ne
dozvoljava unos # oz-
nake.
PRO - MIL 250
Objekti
C++ programiranje za apsolutne poetnike
O
b
j
e
k
t
i

PRO - MIL 251
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

252
Objekti
PRO - MIL
U ovom trenutku mogla bi se
javiti dva pitanja koja su meu-
sobno povezana. Jedno pitanje
je imamo li na raspolaganju sa-
mo one klase koje su napisali
autor C++ jezika ili bismo mogli
napisati svoje vlastite klase.

Pitanje zato bismo to uope
radili usko je povezano s drugim
pitanjem, a to je na koji nain se
piu veliki programi. Mi smo do
sada pisali male programe. Piu
li se na isti nain programi koji
sadre nekoliko stotina tisua
redova? Piu li se oni na nain
da ponemo s #include
<cstdlib> napiemo nekoliko
stotina tisua redova, na kraju
napiemo } i program je gotov.

Naravno da ne. To bi bilo nep-
raktino iz niza razloga. U slua-
ju da program piemo na taj na-
in (to je tehniki mogue), ja-
ko teko bismo pisanje progra-
ma raspodijelili na vie osoba i u
tako velikom programu jako te-
ko bismo pronalazili greke.

Postoji jo jedan problem. U
veim programima esto se isti
posao mora obaviti na vie
mjesta u programu. Npr. ako u
telefonski imenik elimo unijeti
ime, prezime, ulicu, grad, zani-
manje i tome slino, istu provje-
ru, npr. provjeru je li umjesto
slova netko unio brojeve morali
bismo ponoviti prilikom svakog
od nabrojenih unosa.

Svi navedeni problemi rjeavaju
se tako da se program razdijeli u
Jednostavan primjer klase i objekata
manje cjeline. U tom sluaju
lake se posao podijeli na vie
programera. Svaki radi svoju
manju cjelinu. Manje cjeline lak-
e se piu i u njima se lake
pronalaze greke.

Ako dio programa koji se esto
ponavlja izdvojimo u manju cjeli-
nu, koju pozivamo kad nam je
potrebna, dobit emo manji pro-
gram u kojem se lake vre
izmjene. Lake je izmjenu unijeti
u jedan dio koji se poziva na
vie mjesta, nego u sluaju kad
se isti dio programa ponavlja na
desetak mjesta. U tom sluaju
trebali bi pronai svih desetak
mjesta i na svima promijeniti
program na isti nain, to je ve-
lik posao, a postoji i velika vjero-
jatnost da e doi do greke.

Vidimo da bi bilo dobro podijeliti
program na manje dijelove pa
se postavlja pitanje kako emo
to uiniti. To emo uiniti kreira-
njem vlastitih objekata ili preciz-
nije reeno, kreiranjem vlastitih
klasa na temelju kojih emo for-
mirati objekte.

Postoji jo jedan razlog zato je
dobro poznavati uporabu klasa i
objekata. elimo li pisati progra-
ma koji e se umjesto u pojed-
nostavljenom crnom prozoru
odvijati u normalnom windows
prozoru, apsolutno je nuno ra-
zumjeti uporabu klasa i objeka-
ta.
253
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Imajmo u vidu da prednost uporabe objekata dolazi do izraaja u veim prog-
ramima. Manji programi koje emo vidjeti u ovom poglavlju mogu se elegan-
tnije napraviti bez uporabe objekata. Unato tome, mi emo vidjeti primjere
uporabe objekata u malim programima jer emo na primjerima malih progra-
ma lake shvatiti princip uporabe objekata.
#include <cstdlib>
#include <iostream>

using namespace std;

class tekst
{
public:
void pisi()
{
cout << "Ovo je nas tekst." << endl;
}
};

int main()
{
tekst t;
t.pisi();
cout << endl;
system("PAUSE");
return 0;
}
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
cout << "Ovo je nas tekst." << endl;
cout << endl;
system("PAUSE");
return 0;
}
Unesimo u program-
sku okolinu i pokreni-
mo na prvi program
koji koristi klase i ob-
jekte.
Uoimo da taj program radi
potpuno isti posao kao ovaj.
Oito je da se u malim progra-
mima ne isplati koristiti klase i
objekte. Njihove prednosti do-
laze do izraaja u veim prog-
ramima.
254
Objekti
PRO - MIL
Najprije emo pogledati zanimljive dijelove naeg programa, a zatim funkcionira-
nje programa kao cjeline.
tekst t;
t.pisi();
string tekst;
tekst.reserve(256);
Ovaj dio programa izrazito je slian ovom dijelu programa iz prolog poglavlja.
U prvom redu formira se objekt
klase tekst koji smo nazvali t.

U drugom redu nad objektom t vri
se operacija pisi(). Unutar zagrada
nema sadraja, jer se nita ne uno-
si u objekt t, ali su zagrade svejed-
no obvezne.

Oblik t.pisi bez zagrada nije ispra-
van.
U prvom redu formirali smo objekt
klase string koji smo nazvali tekst.

U drugom redu nad objektom tekst
izvrili smo operaciju reserve(250)
kojom smo osigurali prostor za spre-
manje teksta. Izmeu naziva objekta
i naziva operacije nalazi se toka.
tekst t ;
Naziv klase na temelju
koje emo formirati ob-
jekt. U naem sluaju
naziv klase je tekst.
Naziv objekta koji formira-
mo na temelju klase. U
naem sluaju formiramo
objekt t klase tekst.
t . pisi() ;
Naziv objekta iju meto-
du emo koristiti. U na-
em sluaju koristit e-
mo metodu t.
Naziv metode koju sadri
objekt t. U naem sluaju
koristimo metodu pisi().
Obvezna toka.
255
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

class tekst
{
public:
void pisi()
{
cout << "Ovo je nas tekst." << endl;
}
};

int main()
{
tekst reci;
reci.pisi();
cout << endl;
system("PAUSE");
return 0;
}
Ovdje vidimo da objekt
moemo nazvati i dru-
gaije, npr. reci.

Ako smo formirali ob-
jekt reci, onda naredba
koja je do sada imala
oblik:

t.pisi();

dobiva oblik:

reci.pisi();

Dakle, sad se operacija
pisi vri nad objektom
reci.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int a;
a = 12;
cout << a << endl;
cout << endl;
system("PAUSE");
return 0;
}
Uoimo da postoji slinost izmeu
formiranja objekta reci klase tekst i
varijable a tipa int.
I ovdje se najprije navodi tip varija-
ble, a zatim naziv a.
Nad varijablom moemo vriti raz-
ne operacije. U naem sluaju u
varijablu a spremamo broj 12.
256
Objekti
PRO - MIL
#include <cstdlib>
#include <iostream>

using namespace std;

class tekst
{
public:
void pisi()
{
cout << "Ovo je nas tekst." << endl;
}
};

int main()
{
tekst prvi;
tekst drugi;
tekst treci;
prvi.pisi();
drugi.pisi();
treci.pisi();
cout << endl;
system("PAUSE");
return 0;
}
Kao to moemo formirati
vie varijabli int tipa, tako
moemo formirati vie
objekata klase tekst.

U ovom primjeru formirali
smo tri objekta, objekt
prvi, objekt drugi i objekt
trei.

Za biranje naziva objeka-
ta vrijede slina pravila
kao i za biranje naziva
varijabli.
class tekst
{
public:
void pisi()
{
cout << "Ovo je nas tekst." << endl;
}
};
Za razliku od klase string
koju je ve netko prije na-
pisao, a mi je samo koris-
timo, klasu tekst morali
smo sami napisati.

U ovom dijelu programa
formira se klasa tekst.
257
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

class tekst
Formiranje klase za-
poinje naredbom
class. To je naredba
C++ jezika i ne moe
se mijenjati.
Nakon naredbe class
slijedi naziv klase. U
naem sluaju klasu
smo nazvali tekst, ali
mogli smo i drugaije.
#include <cstdlib>
#include <iostream>

using namespace std;

class BrdaIDoline
{
public:
void pisi()
{
cout << "Ovo je nas tekst." << endl;
}
};

int main()
{
BrdaIDoline t;
t.pisi();
cout << endl;
system("PAUSE");
return 0;
}
U ovoj inaici programa
klasu smo nazvali BrdaI-
Doline.

To je dozvoljeno, samo
to sad naredbu koja je
prije imala oblik:

tekst t;

moramo napisati u obliku:

BrdaIDoline t;

Dakle, formiramo objekt t
klase BrdaIDoline.

(Drugo je to je pametno
da nam naziv klase govo-
ri emu klasa slui, pa je
loginije da se klasa za
ispis teksta zove tekst, a
ne BrdaIDoline.)
Vidimo da je rezultat rada
takvog programa potpuno
jednak kao i rezultat rada
programa u kojem smo
formirali klasu tekst.
258
Objekti
PRO - MIL
public:
void pisi()
{
cout << "Ovo je nas tekst." << endl;
}
U ovom djelu nalazi se
popis varijabli i metoda
koje posjeduje neka kla-
sa. Metode su mudar na-
ziv za operacije koje neka
klasa moe izvriti.

U naem sluaju klasa ne
sadri varijable. Ima sa-
mo jednu metodu koju
smo nazivali pisi().

Popis metoda poinje
naredbom public: Pobli-
e znaenje te naredbe
vidjet emo kasnije.
void pisi()
{
cout << "Ovo je nas tekst." << endl;
}
Ova naa mala klasa ne
sadri varijable i sadri
samo jednu metodu od-
nosno moe napraviti
samo jednu operaciju. Tu
metodu nazvali smo pisi
().

Ispred naziva metode
nalazi se naredba void.
Njeno znaenje poblie
emo objasniti kasnije.
{
cout << "Ovo je nas tekst." << endl;
}
Unutar vitiastih zagrada
nalaze se naredbe koje
pojedina metoda izvrava.

Naa jednostavna metoda
samo naredbom cout ispi-
suje tekst unutar navodni-
ka na zaslon raunala.
259
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

class tekst
{
public:
void Pero()
{
cout << "Ovo je nas tekst." << endl;
}
};

int main()
{
tekst t;
t.Pero();
cout << endl;
system("PAUSE");
return 0;
}
Kao to smo klasu mogli
nazvati drugaije, mogli
smo i metodu.

U ovom primjeru metodu
smo nazvali Pero().

To je dozvoljeno, samo
to emo naredbu koju
smo do sada pisali u obli-
ku:

t.pisi();

pisati u obliku:

t.Pero();

Kao i kod biranja naziva
varijabli i klasa, i ovdje je
pametno da nam naziv
metode govori to meto-
da radi. Zato je naziv pisi
za metodu koja ispisuje
tekst bolji od naziva Pero.
void pisi ()
Void naredba ispred
naziva metode ozna-
uje da metoda ne
vraa nikakvu vrijed-
nost.

U kojem smislu ne
vraa vrijednost vid-
jet emo kasnije kad
ovakvu metodu us-
poredimo s onima
koje vraaju vrijed-
nost.
Naziv metode biramo po volji, pazei na ogra-
nienja o kojima smo govorili kad smo govorili
o biranju naziva varijabli.

Pametno je da naziv metode tako izaberemo
da nam govori emu metoda slui.
Dok naziv metode uz
odreena ogranienja
moemo birati po volji,
ove dvije zagrade se
ovdje moraju obavezno
nalaziti.
260
Objekti
PRO - MIL
U ovom dijelu nalaze se klase
koje program koristi. U naem
sluaju imamo samo jednu
klasu, klasu pisi().
#include <cstdlib>
#include <iostream>

using namespace std;

class tekst
{
public:
void pisi()
{
cout << "Ovo je nas tekst." << endl;
}
};

int main()
{
tekst t;
t.pisi();
cout << endl;
system("PAUSE");
return 0;
}
Pogledajmo strukturu naeg programa.
Glavni dio programa. Sada moemo vidjeti zato
smo program zapoinjali s int main() oznakom,
odnosno oznakom da je to glavni dio.

Kad raunalo pokrene program, najprije e se
pokrenuti ovaj dio, a ostali dijelovi e se koristiti
po potrebi.
class tekst
{
public:
void pisi()
{
cout << "Ovo je nas tekst." << endl;
}


};
Sadra klase nalazi se
unutar vitiastih zagrada.
Klasa se moe sastojati od vie tipova sadra-
ja. Jedan od njih je public. Kasnije emo pod-
robnije vidjeti to oznaka public oznaava.
U klasi se mogu nalazi-
ti varijable i metode. U
naem sluaju varijable
ne koristimo, a imamo
jednu metodu koju smo
nazvali pisi().

Metode su zapravo
programi koji odreuju
koje operacije neka
klasa moe izvesti .
Poetni dio programa.
261
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

class tekst
{
public:
void pisi()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle(320,240,180);
getch();
closegraph();
}
};

int main()
{
tekst t;
t.pisi();
cout << endl;
system("PAUSE");
return 0;
}
Unutar metode ne mora se
nalaziti program za ispis. Mo-
e se nalaziti bilo to, npr.
program za crtanje kruga.
Iako program i ovako radi,
malo emo ga preurediti.

Umjesto class tekst stavit
emo class slika.
Umjesto void pisi() stavit e-
mo void krug().
Umjesto tekst t; tj. umjesto
naredbe formiranja objekta t
klase tekst stavimo slika cr-
taj. Time emo formirati ob-
jekt crtaj klase slika.
Umjesto t.pisi(); tj. umjesto
pozivanja metode pisi() u klasi
tekst stavit emo crtaj.krug();
Izbacimo naredbu cout << endl; i naredbu system("PAUSE");.
Iako program radi i s tim naredbama, bez njih e raditi neto elegantnije. Ovaj
se program odvija u grafikom prozoru pa su nepotrebni razmak i pauza u
tekstualnom prozoru.
262
Objekti
PRO - MIL
#include <cstdlib>
#include <iostream>

using namespace std;

class tekst
{
public:
void prva()
{
cout << "Ovo je prva metoda." << endl;
}

void druga()
{
cout << "Ovo je druga metoda." << endl;
}

void treca()
{
cout << "Ovo je treca metoda." << endl;
}
};

int main()
{
tekst t;
t.prva();
t.druga();
t.treca();
cout << endl;
system("PAUSE");
return 0;
}
Klasa moe sadravati vie
metoda, npr. u ovom sluaju
sadri tri metode.
Prva metoda koju smo
nazvali prva().
Druga metoda koju smo
nazvali druga().
Trea metoda koju smo
nazvali treca().
Objekt formiramo jed-
nom, a zatim pozivamo
metode po logici da
najprije navedemo na-
ziv objekta, zatim stavi-
mo toku i konano
naziv metoda. Zagrade
na kraju te ; oznaka su
obvezne.
Sloeniji primjeri klasa i objekata
263
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

class tekst1
{
public:
void pisi()
{
cout << "Ovo je klasa tekst1." << endl;
}
};

class tekst2
{
public:
void pisi()
{
cout << "Ovo je klasa tekst2." << endl;
}
};

int main()
{
cout << "Zovemo metodu klase tekst1." << endl;
tekst1 t1;
t1.pisi();
cout << endl;
cout << "Zovemo metodu klase tekst2." << endl;
tekst2 t2;
t2.pisi();
cout << endl;
system("PAUSE");
return 0;
}
Program moe sadravati
vie klasa, npr. u ovom
sluaju klasu tekst1 i klasu
tekst2.
Prva klasa koju smo
nazvali tekst1.
Druga klasa koju
smo nazvali tekst2.
Ovdje na temelju
svake klase formi-
ramo objekt, a za-
tim pozivamo me-
todu od svake kla-
se odnosno opera-
ciju koju objekt
moe izvriti

Uoimo da je doz-
voljeno da se me-
toda pod istim na-
zivom pisi() nalazi
u obje klase.
264
Objekti
PRO - MIL
#include <cstdlib>
#include <iostream>

using namespace std;

class tekst
{
public:
void pisi()
{
cout << "Upravo koristimo objekt." << endl;
}
};

int main()
{
tekst t;
cout << "Objekt koristimo 1. put." << endl;
t.pisi();
cout << endl;
cout << "Objekt koristimo 2. put." << endl;
t.pisi();
cout << endl;
cout << "Objekt koristimo 3. put." << endl;
t.pisi();
cout << endl;
system("PAUSE");
return 0;
}
Jednom formirani
objekt moemo proi-
zvoljni broj puta kori-
stiti u programu.

To je jedna od pred-
nosti koritenja klasa
i objekata.

Operaciju koja se u
programu esto po-
navlja stavimo u kla-
su, u programu for-
miramo objekt i pozi-
vamo odreenu ope-
raciju kad god nam
zatreba, bez potrebe
da je ponovo pie-
mo.
Sve klase koje smo do sada formirali bile su veoma
jednostavne budui da nisu komunicirale s ostat-
kom programa na nain da bi bilo mogue u klasu
unijeti neke podatke ili iz klase iitati neke podat-
ke, npr. brojeve ili tekst.

U nastavku ovog poglavlja vidjet emo na koji na-
in moemo u klase unositi ili iz klasa iitavati po-
datke.
Uporaba klasa i obje-
kata veoma je sloe-
na ideja, i kao uvijek
do sada, imajmo na
umu da emo te pro-
gramske tehnike us-
vojiti tek kad napravi-
mo velik broj primje-
ra.
265
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

class pravokutnik
{
private:
int c;

public:
void naslov()
{
cout << "Povrsina pravokutnika." << endl;
cout << endl;
}

int povrsina (int a, int b)
{
c = a * b;
return (c);
}
};

int main()
{
pravokutnik p;
p.naslov();
cout << "Povrsina je ";
cout << p.povrsina(2,3);
cout << endl << endl;
system("PAUSE");
return 0;
}
Pogledajmo sada program
koji sadri klasu u koju je mo-
gue unijeti podatke iz drugih
dijelova programa.
Klasa pravokutnik
sadri jednu varija-
blu. To je varijabla
c int tipa, a nalazi
se u private grupi.
Osim varijable u
private grupi, kla-
sa sadri i dvije
metode u public
grupi. To su meto-
da naslov() i me-
toda povrsina (int
a, int b).
U glavnom progra-
mu formiramo ob-
jekt p klase pravo-
kutnik i koristimo
ga.
Komunikacija s metodama
266
Objekti
PRO - MIL
#include <cstdlib>
#include <iostream>

using namespace std;

class pravokutnik
{
private:
int c;

public:
int pov;
void naslov()
{
cout << "Povrsina pravokutnika." << endl;
cout << endl;
}

int povrsina (int a, int b)
{
c = a * b;
pov = c;
return (c);
}
};

int main()
{
pravokutnik p;
p.naslov();
cout << "Povrsina je ";
cout << p.povrsina(2,3);
cout << endl;

cout << "p.pov je " << p.pov << endl;
// cout << "p.c je " << p.c << endl;

cout << endl << endl;
system("PAUSE");
return 0;
}
Prethodni program malo smo modificirali da bi
lake mogli shvatiti razliku izmeu naredbe
private i naredbe public.
U public podruju dodali smo
varijablu koju smo nazvali pov.
Sadraj varijable c koja je formirana u
private podruju i u kojoj se nalazi re-
zultat izrauna povrine spremili smo u
varijablu pov koja je formirana u public
podruju.
Ovdje vidimo da sadraju varija-
ble pov moemo pristupiti u
glavnom programu, iako je for-
mirana u objektu. Pristupamo joj
tako da prvo napiemo naziv
objekta zatim toku i na kraju
varijablu, dakle u p.pov obliku.

Pokuamo li na isti nain pristu-
piti varijabli c, doi e do greke.
(elimo li probati, maknimo //
oznaku na poetku reda.)

Ve iz ovog primjera bismo mo-
gli zakljuiti u kojem smislu je c
varijabla private, a kojem smislu
je pov varijabla public.
267
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Naredba private oznaava podruje u kojem se nalaze varijable i metode
koje se mogu koristiti unutar klase odnosno unutar objekta, ali se njima ne
moe pristupiti iz glavnog programa, odnosno izvan objekta. U ovom progra-
mu u private podruju imamo samo varijablu c. Mogli bismo imati i procedure.
Za razliku od private
podruja, svemu to
formiramo u public
podruju moemo
pristupiti i izvan kla-
se, odnosno izvan
objekta.

To ne moemo uini-
ti tako da samo na-
vedemo naziv varija-
ble ili procedure ne-
go tako da prvo na-
vedemo naziv objek-
ta, zatim toku i na
kraju naziv varijable
ili procedure. Ako
pristupamo procedu-
ri, moramo navesti i
zagrade.
class pravokutnik
{
private:
int c;

public:
int pov;
void naslov()
{
cout << "Povrsina pravokutnika." << endl;
cout << endl;
}

int povrsina (int a, int b)
{
c = a * b;
pov = c;
return (c);
}
};
Ovdje su formirane jo dvije varijable, varijabla a i varijabla b. Iako bi bilo
logino da tim varijablama moemo pristupiti izvan klase odnosno izvan ob-
jekta, jer su formirane u public podruju, to ipak nije sluaj. Pokuamo li im
pristupiti izvan objekta doi e do greke.

Dakle izvana moemo pristupiti samo onim varijablama koje su u public po-
druju formirane samostalno kao pov varijabla, a ne moemo onima koje su
formirane unutar neke metode.
268
Objekti
PRO - MIL
private:
int c;
Unutar private podruja u ovom sluaju formirali smo sa-
mo varijablu c. Mogli bismo staviti i procedure, ali u tom
sluaju bismo tim procedurama mogli pristupiti samo
unutar klase odnosno samo unutar objekta. Nain pisa-
nja bio bi isti kao i unutar public podruja.
public:
int pov;

void naslov()
{
cout << "Povrsina pravokutnika." << endl;
cout << endl;
}

int povrsina (int a, int b)
{
c = a * b;
pov = c;
return (c);
}
Ovdje formiramo pov varijablu int tipa. Varijable unutar klase formiramo na pot-
puno jednak nain kao i unutar glavnog programa.
Ovdje formiramo meto-
du za ispis teksta na
zaslon raunala. Takav
tip procedure ve smo
vidjeli u prethodnim
primjerima.
Ovdje formiramo meto-
du za izraun povrine
pravokutnika. Vidimo
da joj je oblik drugaiji
od oblika naslov() me-
tode pa emo je poblie
pogledati.
int povrsina ( int a, int b )
Do sada smo formiranje
metode zapoinjali s void.
Ova metoda zapoinje s int.

to to znai?

To znai da e ova metoda
biti int tipa, odnosno da e
rezultat njenog rada biti broj
int tipa.

Naredbom:
cout << p.povrsina(2,3);
ispisat emo rezultat rada
metode povrsina na zaslon,
a rezultat je broj int tipa.
Naziv metode.
Ovdje je popis varijabli koje moemo uni-
jeti u metodu.

U ovu metodu moemo unijeti dva broja.
Prvi e biti spremljen u varijablu a, drugi u
varijablu b, a oba su int tipa.
Ulazne varijable su
unutar zagrada.
269
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

void naslov ()
Pogledajmo jo jednom naredbu za formiranje metode koja zapoinje void
naredbom.
Void naredba znai da metoda
naslov nee vraati nikakav re-
zultat rada.

Sad e netko upitati, kako ne
vraa kad ispisuje tekst na zas-
lon.

Ispisuje, ali se ispisivanje zbiva
unutar metode.

U glavnom programu mogue je
napisati:

cout << p.povrsina(2,3);

ali nije mogue napisati:

cout << p.naslov();

Mogue je jedino s:

p.naslov();

pozvati metodu naslov koja on-
da unutar sebe ispisuje tekst na
zaslon raunala.
Prazne zagrade znae da u ovu
metodu nita nije mogue unijeti
na nain da se napie:

p.naslov(2,3);

Mogue je unutar metode staviti
cin naredbu pa neto unijeti npr.
preko tipkovnice, ali nije mogue
nita unijeti na gore opisan na-
in.
c = a * b;
pov = c;
Unutar metode mogu se koristiti varijable koje smo
koristili za unos, varijabla a i varijabla b, te se mogu
koristiti sve one varijable koje su formirane u public
ili private podruju, dakle varijabla c i varijabla pov.
return (c);
Ovom naredbom odreujemo koju vrijednost e pro-
cedura vraati u glavni program, odnosno to e
naredba cout << p.povrsina(2,3); ispisati.
270
Objekti
PRO - MIL
#include <cstdlib>
#include <iostream>

using namespace std;

class racunaj
{
private:
int c;
public:
int metoda1(int a, int b)
{
c = a + b;
return (c);
}

int metoda2(int a, int b)
{
c = a + b;
return (a);
}

int metoda3(int a, int b)
{
c = a + b;
return (b);
}
};

int main()
{
racunaj r;

cout << "return(c) daje " << r.metoda1(2,4) << endl;
cout << "return(a) daje " << r.metoda2(2,4) << endl;
cout << "return(b) daje " << r.metoda3(2,4) << endl;

system("PAUSE");
return 0;
}
U ovom programu moemo
lijepo vidjeti kako o naredbi
return ovisi to e se naredbom
r.metoda1(2,4) ispisati na zas-
lon raunala.
Ako smo u me-
todi upotrijebili
naredbu return
(c), naredbom
r.metoda1(2,4)
ispisat e se
sadraj varijable
c.

Naredbom re-
turn(a) ispisat
e se sadraj
varijable a, a
naredbom re-
turn(b) ispisat
e se sadraj
varijable b.
271
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

class racunaj
{
private:
int a;
int b;
int c;
public:
void unesi(void)
{
cout << "Unesite stranicu a." << endl;
cin >> a;
cout << "Unesite stranicu b." << endl;
cin >> b;
}
void povrsina(void)
{
c = a * b;
cout << "Povrsina je " << c << endl;
}
};

int main()
{
racunaj p;
p.unesi();
p.povrsina();
cout << endl;
system("PAUSE");
return 0;
}
U ovom programu imamo
dvije void metode. Meto-
dom unesi unose se bro-
jevi u varijablu a i varijab-
lu b. To se vri unutar
metode. Nije mogue
napisati naredbu:

p.povrsina(2,3);

Mogue je jedino nared-
bom:

p.unesi();

pozvati metodu za unos
brojeva.
Metodom povrsina izra-
unava se povrina i ispi-
suje rezultat.

Rezultat se ispisuje unu-
tar metode. Nije mogua
naredba:

cout << p.povrsina();
272
Objekti
PRO - MIL
#include <cstdlib>
#include <iostream>

using namespace std;

class racunaj
{
private:
int a;
int b;
int c;

public:
void unesi(void)
{
cout << "Unesite stranicu a." << endl;
cin >> a;
cout << "Unesite stranicu b." << endl;
cin >> b;
}
int povrsina(void)
{
c = a * b;
return (c);
}
};

int main()
{
int c;
int u;
racunaj p;
p.unesi();
cout << "Cijena kvadratnog metra." << endl;
cin >> c;
u = c * p.povrsina();
cout << "Cijena poda je " << u << endl;
cout << endl;
system("PAUSE");
return 0;
}
Vidjeli smo da rezultat
izrauna unutar meto-
de moemo ispisati na
dva naina. Ako je me-
toda tipa void onda se
rezultat ispisuje unutar
metode. Tada naredba
tipa:

cout << povrsina();

nije mogua.

Ako metoda nije void
tipa, nego int ili float ili
char, onda je mogue
napisati gore navedenu
naredbu.

Postavlja se pitanje u
emu je razlika u fun-
kcionalnosti tih dvaju
naina ispisa.

Razlika je u tome da
ako metoda nije void
tipa, onda metodu mo-
emo koristiti unutar
izraza poput:

u = c * p.povrsina();
U ovom programu najprije raunamo povrinu, a
zatim dobiveni rezultat mnoimo sa cijenom kvad-
ratnog metra povrine da bismo dobili cijenu povr-
ine.
Obratimo panju na
injenicu da unutar
glavnog programa smi-
jemo koristiti c varijab-
lu, iako c varijabla pos-
toji u klasi racunaj.
273
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

class racunaj
{
private:
int a;
int b;
int c;
int p;
int u;
public:
void unesi(void)
{
cout << "Unesite stranicu a." << endl;
cin >> a;
cout << "Unesite stranicu b." << endl;
cin >> b;
cout << "Cijena kvadratnog metra." << endl;
cin >> c;
}
void cijena(void)
{
p = a * b;
cout << "Povrsina je " << p << endl;
u = p * c;
cout << "Cijena je " << u << endl;
}
};

int main()
{
racunaj p;
p.unesi();
p.cijena();

cout << endl;
system("PAUSE");
return 0;
}
Ako za ispis koris-
timo void metodu
pa uporaba nared-
be return nije mo-
gua, ispisom re-
zultata unutar me-
tode moemo ispi-
sati vie vrijednos-
ti.

U ovom sluaju u
metodi cijena mi
ispisujemo povri-
nu i cijenu.

Da je to int meto-
da i da rezultat
vraamo return
naredbom, mogli
bi napisati ili return
(p) ili return(u), ali
ne bismo mogli
vratiti obje vrijed-
nosti.

Ukratko, koju od
metoda ispisa e-
mo upotrijebiti ovi-
si o potrebama
koje moramo za-
dovoljiti.
274
Objekti
PRO - MIL
Naredba cout << p.povrsina(2,3); zbunjujua je izmeu ostalog i zato to istov-
remeno slui za unos broja 2 i broja 3 u metodu i za ispis rezultata mnoenja,
odnosno rezultata rada metode.
cout << p.povrsina( 2, 3 );
int povrsina ( int a, int b )

{

c = a * b;

return ( c );

}
cout << p.povrsina(2,3) ;
Kad raunalo naie na ovak-
vu naredbu, najprije e broj
dva i broj tri proslijediti u vari-
jablu a i varijablu b koje se
nalaze u metodi povrsina.
Unutar metode povr-
sina raunalo e sa-
draj varijable a i va-
rijable b pomnoiti, a
rezultat spremiti u
varijablu c.
Kad raunalo naie na
naredbu return(c),
sadraj varijable c ispi-
sat e na zaslon rau-
nala.

Ova naredba tada e
funkcionirati kao da
smo u programu koji
ne sadri klase i objek-
te napisali:

cout << c;
275
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

class pravokutnik
{
private:
float c;
public:
void naslov()
{
cout << "Povrsina pravokutnika." << endl;
cout << endl;
}
float povrsina (float a, float b)
{
c = a * b;
return (c);
}
};

int main()
{
float a1;
float b1;
pravokutnik p;
p.naslov();
cout << "Unesite stranicu a." << endl;
cin >> a1;
cout << "Unesite stranicu b." << endl;
cin >> b1;
cout << "Povrsina je ";
cout << p.povrsina(a1,b1);
cout << endl << endl;
system("PAUSE");
return 0;
}
Kao to smo ve
rekli, metode ne
moraju biti int tipa.
Mogu biti i nekog
drugog tipa. U
ovom programu
imamo metodu
float tipa.
Vidimo da nared-
bu:

p.povrsina(a1,b1)

moemo pisati i
tako da unutar
zagrada umjesto
konkretnih brojeva
stavimo varijable.
276
Objekti
PRO - MIL
Razdvajanje deklaracije i definicije
#include <cstdlib>
#include <iostream>

using namespace std;

class pravokutnik
{
private:
int c;
public:
int povrsina (int a, int b);
};

int pravokutnik :: povrsina (int a, int b)
{
c = a * b;
return (c);
};

int main()
{
cout << "Povrsina pravokutnika" << endl;
cout << endl;
pravokutnik p;
cout << "Povrsina je = " << p.povrsina(2,3) << endl;
cout << endl;
system("PAUSE");
return 0;
}
Do sada su se metode nalazile
unutar klase. U sloenijim pro-
gramima najee je deklaraci-
ja klase odvojena od definicija
metoda.

U deklaraciji klase metode se
samo nabroje, a definicije me-
toda se nalaze drugdje.
U deklaraciji klase samo su
nabrojeni elementi klase i po-
dijeljeni u private i public pod-
ruje.

Ovdje se nalazi samo zaglav-
lje metode pravokutnik u ko-
jem su odreena ulazna i izla-
zna svojstva metode, ali ovdje
nema sadraja metode.
Sadraj metode pravokut-
nik, odnosno dio programa
kojim odreujemo to e
metoda pravokutnik raditi
nalazi se ovdje.
Ovako napisanu
klasu koristimo
na isti nain kao
i klase koje smo
do sada koristili.
277
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

int pravokutnik :: povrsina (int a, int b)
Tip vrijednosti koju e metoda
vraati kao rezultat. U ovom
sluaju je int, a mogao bi biti i
neki drugi npr. float.
Pogledajmo kako su povezane deklaracija metode i definicije metode.
int povrsina (int a, int b) ;
Definicija me-
tode. Ovdje
se nalazi pro-
gram koji od-
reuje to ta
metoda radi,
odnosno svoj-
stva metode.
Obvezna ; ozna-
ka
Deklaracija metode u dek-
laraciji klase. Ovdje je na-
veden naziv metode i ulaz-
no-izlazna svojstva meto-
de, ali ne i program meto-
de.
Naziv metode.
Popis varijabli preko
kojih se brojevi mogu
unijeti u metodu.
Naziv klase.
Obvezna :: oznaka izmeu naziva klase i
naziva metode.
U veini sluajeva do sada noviji nain izrade programa bio je elegantniji
od starog. U ovom sluaju to ba ne izgleda tako. Ovakav nain pisanja
klase oigledno je manje elegantan od prethodnog. Postoji vea vjerojat-
nost da e doi do greke budui da treba uskladiti deklaraciju metode i
definiciju metode.

Ovaj nain pisanja klasa doista je manje elegantan od naina koji smo kori-
stili u prethodnim programima i ima ga smisla upotrebljavati samo kad eli-
mo vei program razdijeliti u vie datoteka. Ako klase piemo na ovaj na-
in, tada moemo u jednu datoteku staviti sve deklaracije klasa, a u druge
datoteke definicije metoda. Ako se program nalazi u jednoj datoteci, bolje je
definiciju metode napisati unutar deklaracije metode kao to smo to inili u
prethodnim programima.
278
Objekti
PRO - MIL
Uporaba konstruktora
#include <cstdlib>
#include <iostream>

using namespace std;

class pravokutnik
{
private:
int a;
int b;
public:
pravokutnik(void)
{
cout << "Stranica a:" << endl;
cin >> a;
cout << "Stranica b:" << endl;
cin >> b;
}
int povrsina(void)
{
return (a * b);
}
};

int main()
{
pravokutnik p;
cout << "Povrsina je " << p.povrsina() << "." << endl;
cout << endl;
system("PAUSE");
return 0;
}
U ovom programu nalazi se nekoli-
ko neobinosti.

Prva neobinost jest ova metoda.
Neobino je to to ima isti naziv
kao i klasa. Klasu smo nazvali pra-
vokutnik i ova metoda zove se pra-
vokutnik.

Druga neobinost jest to ova me-
toda nema nikakvu oznaku povrat-
ne vrijednosti, nije ni void pravoku-
tnik(), ni int pravokutnik().
Neobino je i to
to je nigdje ne
pozivamo.

U ovom redu
formiramo objekt
p klase pravoku-
tnik, a ve u slje-
deem redu po-
zivamo metodu
povrsina.
Iako nigdje u programu nije vidljivo pozivanje metode pravokutnik, njen sadraj
se oigledno izvrava. Oigledno je da prije izvoenja metode povrina rauna-
lo unosi stranicu a i stranicu b. Takva metoda naziva se konstruktor, a izvrava
se u trenutku formiranja objekta. Dakle, ova metoda izvrila se u trenutku kad
smo naredbom pravokutnik.p formirali objekt p klase pravokutnik.
279
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

class pravokutnik
{
private:
int a;
int b;
public:
pravokutnik(void)
{
cout << "Stranica a:" << endl;
cin >> a;
cout << "Stranica b:" << endl;
cin >> b;
}
pravokutnik(int a1, int b1)
{
a = a1;
b = b1;
}
int povrsina(void)
{
return (a * b);
}
};

int main()
{
pravokutnik p1;
cout << "Povrsina je " << p1.povrsina() << "." << endl;
cout << endl;
pravokutnik p2(3,4);
cout << "Za p2(3,4) povrsina je " << p2.povrsina() << "." << endl;
cout << endl;
system("PAUSE");
return 0;
}
U ovom programu imamo
dva konstruktora.

Jednome je ulazni dio void
tipa, to znai da se u njega
ne moe unositi vrijednost
tako da napiemo:

pravokutnik p2(3,4);
Drugome je ulazni dio (int a1,
int b1), to znai da se u nje-
ga moe vrijednost unositi
tako da napiemo:

pravokutnik p2(3,4);
Ovdje formiramo objekt klase pravokutnik bez
vrijednosti u zagradi. U tom sluaju primijenit
e se pravokutnik(void) konstruktor.
Objekt p2(3,4); u zagradi ima dva broja, pa e se u
tom sluaju primijeniti pravokutnik(int a1, int b1) kon-
struktor. U tom sluaju povrina e se izraunati
mnoenjem brojeva 3 i 4, bez unosa tipkovnicom.
280
Objekti
PRO - MIL
Nasljeivanje
#include <cstdlib>
#include <iostream>

using namespace std;

class kvadrat
{
protected:
int br;
public:
void unos (void)
{
cout << "Unesite broj:" << endl;
cin >> br;
}
int izracun (void)
{
return (br * br);
}
};
class kub : public kvadrat
{
public:
int izracun(void)
{
return (br * br * br);
}
};

int main()
{
kvadrat objekt1;
objekt1.unos();
cout << "Kvadrat je " << objekt1.izracun() << endl;
cout << endl;
kub objekt2;
objekt2.unos();
cout << "Kub je " << objekt2.izracun() << endl;
cout << endl;
system("PAUSE");
return 0;
}
Klasa kub napisana je na nain koji
do sada nismo koristili.

Naredbom:

class kub : public kvadrat

formiramo klasu kub koja nasljeuje
varijable i metode klase kvadrat. Dak-
le klasa kub moe koristiti metodu
unos, iako je ona definirana u klasi
unos.
Objekt objekt2 klase kub moe koristiti meto-
du unos koja se nalazi u klasi kvadrat kao da
je njezina klasa. To je mogue jer je klasa
kub naslijedila klasu kvadrat.
Metodu izracun
posjeduj u obje
klase. U tom slu-
aju klasa kub ko-
ristit e svoju inai-
cu objekta izracun.
Inaica u klasi kub
prekrila je inaicu
u klasi kvadrat.
Klasa kvadrat napisana je na
uobiajeni nain.
281
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

class kvadrat
void unos (void)
int izracun (void)
class kub : public kvadrat
int izracun (void)
objekt2.izracun()
objekt2.unos();
kub objekt2;
Pogledajmo meusobnu povezanost bitnih dijelova programa u kojem je primi-
jenjena tehnika nasljeivanja klasa.
U klasi kvadrat definirane su
dvije metode, metoda unos i
metoda izraun.

Klasu kvadrat moemo koristiti
na nain koji smo koristili u do-
sadanjim primjerima.
Ovako deklarirana klasa kub
nasljeuje sve varijable i me-
tode klase kvadrat.

Klasa sadri metodu izracun,
iako metodu izraun posjeduje
i klasa kvadrat koju nasljeuje.

U tom sluaju klasa kub koris-
tit e vlastitu inaicu metode
izracun.
Iako metodu izracun posjeduje i klasa kva-
drat, objekt2 koristit e vlastitu inaicu me-
tode izraun.
Ovdje koristimo metodu unos, iako je kla-
sa kub ne posjeduje. To je mogue jer
klasa kub nasljeuje klasu kvadrat, a kla-
sa kvadrat sadri klasu unos.
Naredba za nas-
ljeivanje klase.
Naziv nove klase.
Klasa koju klasa kub nasljeuje.
PRO - MIL 282
Veliki programi
C++ programiranje za apsolutne poetnike
V
e
l
i
k
i

p
r
o
g
r
a
m
i

PRO - MIL 283
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

284
Veliki programi
PRO - MIL
Jednostavna igra u jednoj datoteci
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
#include <ctime>

using namespace std;

class objekt
{
private:
int x;
char kretanje;
public:
objekt()
{
x = 290;
}
void pomak(char);
void crtaj();
};
void objekt :: pomak(char tipka)
{
kretanje = tipka;
if (kretanje == 75)
{
setcolor (WHITE);
rectangle(x, 432, x+60, 438);
setcolor (BLACK);
x = x - 5;
}
if (kretanje == 77)
{
setcolor (WHITE);
rectangle(x, 432, x+60, 438);
setcolor (BLACK);
x = x + 5;
}
}
void objekt :: crtaj()
{
rectangle(x, 432, x+60, 438);
}
Ovdje se nalazi deklaracija klase
objekt. Sastoji se od dvije varijab-
le, x i kretanje; te od dvije metode,
pomak i crtaj.
Unutar deklaracije klase nalazi se
konstruktor koji varijabli x daje
poetnu vrijednost 290.

Ta varijabla odreuje poziciju ob-
jekta koji pomiemo pomou tip-
kovnice.
Ovdje je sadraj metode pomak.

U metodu se unosi podatak o
tome koja tipka je pritisnuta.

Metoda ispituje je li pritisnuta
strelica u lijevu ili strelica u des-
nu stranu. Ako je neka od tih
tipki pritisnuta, vrijednost varijab-
le x koja odreuje poloaj objek-
ta koji pomiemo adekvatno e
se poveati ili smanjiti.
Ovdje je sadraj metode crtaj. Ona
crta objekt koji pomiemo pomou
strelica na tipkovnici.
Ovaj program neto je vei od pro-
grama koje smo do sada pisali, pa
e se zato protezati kroz nekoliko
stranica.
285
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

class bomba
{
private:
int x, y;
public:
bomba()
{
x = (static_cast <float> (rand()) / RAND_MAX) * 620;
y = -((static_cast <float> (rand()) / RAND_MAX) * 480);
}
void crtanje();
void brisanje();
};
void bomba :: crtanje()
{
rectangle (x,y,(x+20),(y+5));
}
void bomba :: brisanje()
{
setcolor(WHITE);
rectangle (x,y,(x+20),(y+5));
setcolor(BLACK);
y = y + 5;
if (y > 490)
{
y = -((static_cast <float> (rand()) / RAND_MAX) * 480);
x = (static_cast <float> (rand()) / RAND_MAX) * 620;
}
}
Male programe moemo smjestiti u jednu datoteku. Za vee programe to nije
praktino rjeenje. Ako je veliki program u jednoj velikoj datoteci tee je pro-
nai greku, tee je napraviti izmjenu programa i tee je podijeliti posao iz-
meu vie programera.

U ovom poglavlju vidjet emo kako podijeliti jedan neto vei program u vie
datoteka. Najprije emo program napisati u jednoj velikoj datoteci, a zatim ga
podijeliti u vie manjih datoteka.
Ovdje se nalazi deklaracija klase bomba. Sastoji
se od varijabli x i y koje odreuju poloaj bombe na
zaslonu te metode crtanje koja crta bombu i od
metode brisanje koja brie bombu da bi se dobila
iluzija kretanje bombe.

Deklaracija sadri konstruktor koji odreuje poet-
nu poziciju bombe.
Sadraj metode crtanje.
Sadraj metode brisanje.
286
Veliki programi
PRO - MIL
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();



char odgovor = 'd';



srand(time(NULL));



bomba bomba1, bomba2, bomba3;



objekt brod;



brod.crtaj();



do
{
bomba1.brisanje();
bomba2.brisanje();
bomba3.brisanje();
Ovdje se nalazi glavni dio programa koji e koristi-
ti prije formirane klase.
Odreivanja svojstva grafike, velii-
ne grafikog prozora, boje pozadi-
ne i boje objekata.
Formiranje varijable odgovor u ko-
joj e se nalaziti podatak o trenutno
pritisnutoj tipki.
Formiranje generatora sluajnih
brojeva kojim emo odreivati
mjesto pojavljivanja bombi, odnos-
no objekata koji se kreu odozgo
prema dolje.
Formiranje triju objekta klase bom-
ba, bomba1, bomba2 i bomba3.
To su objekti koji se kreu odozgo
prema dolje.
Formiranje objekata brod klase
objekt. To je objekt koji mi pomie-
mo pomou tipkovnice, koristei
strelicu u lijevo i strelicu u desno.
Ovdje se u svakom objektu klase
bomba poziva metoda brisanje
bombe na staroj poziciji.
Crtanje objekta koji pomiemo na
poetnoj poziciji koritenjem meto-
de crtaj.
287
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Naredba koja zaustavlja program odre-
eno vrijeme. Slui za regulaciju brzine
igre.
Ovdje se u svakom objektu klase
bomba poziva metoda za crtanje bom-
be na novoj poziciji.

Neprestanim brisanjem bombe na sta-
roj poziciji i crtanjem na novoj stvara
se iluzija kretanja, odnosno padanja
bombi. bomba1.crtanje();
bomba2.crtanje();
bomba3.crtanje();



delay(1);



if (kbhit())
{



odgovor = getch();



brod.pomak(odgovor);
}



brod.crtaj();



}



while (odgovor != 'k');



return 0;
}
Ovdje ispitujemo je li pritisnuta neka
tipka na tipkovnici.
Ako je pritisnuta neka tipka na tipkovni-
ci, ovdje se kod pritisnute tipke sprema
u varijablu odgovor.
Ovdje se poziva metoda pomak koja e
obrisati objekt na staroj poziciji.
Ovdje se poziva metoda crtaj koja e
nacrtati objekt na novoj poziciji.
Izvoenje igre prekida se pritiskom na
tipku k.

Ovdje se ispituje je li pritisnuta tipka k i,
ako je pritisnuta, izvoenje igre se zau-
stavlja.
Nemojmo zaboraviti da sva etiri dijela
programa moraju biti unijeta u nau pro-
gramsku okolinu da bismo mogli pokre-
nuti program.
288
Veliki programi
PRO - MIL
Jednostavna igra u vie datoteka
Pogledajmo sada kako emo prethodni program
raspodijeliti u vie datoteka.

Otvorimo novi projekt na uobiajen nain.

Prije toga otvorimo praznu mapu u koju emo
spremiti novi projekt.
Izaberemo Console Application.
289
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

Izaberemo Postavke projekta.
U Parameters unesemo -lbgi -lgdi32
290
Veliki programi
PRO - MIL
1 - Desni klik na naziv pro-
jekta. U naem sluaju je
to Projekt1.
2 - Klik na Novo.
Otvorit e se nova datoteka
pod nazivom Neimenovano1.
291
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

1 - Desni klik na Neimenovano1.
2 - Klik na Preimenuj datoteku.
Datoteku preimenujemo u bom-
ba.cpp i kliknemo na OK.
292
Veliki programi
PRO - MIL
Na taj nain formirali smo
datoteku bomba.cpp.
Na slian nain formirat emo datoteke:

- bomba.h
- objekt.cpp
- objekt.h
293
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <winbgim.h>
#include "bomba.h"

void bomba :: crtanje()
{
rectangle (x,y,(x+20),(y+5));
}
void bomba :: brisanje()
{
setcolor(WHITE);
rectangle (x,y,(x+20),(y+5));
setcolor(BLACK);
y = y + 5;
if (y > 490)
{
y = -((static_cast <float> (rand()) / RAND_MAX) * 480);
x = (static_cast <float> (rand()) / RAND_MAX) * 620;
}
}
Ovaj dio isti je kao u programu koji
se nalazi u jednoj datoteci.

Razlika je u tome to su dodane
dvije include naredbe.
Ovom naredbom ukljuuje se
biblioteka grafikih naredbi.
Ovom naredbom ukljuuje se
datoteka bomba.h u kojoj se
nalazi deklaracija klase bom-
ba.

Ovdje ukljuujmo datoteku u
kojoj se nalazi deklaracija kla-
se ije metode ovdje definira-
mo.
Ovaj dio programa isti je kao i u
prethodnoj inaici.
U datoteku bomba.cpp spremimo me-
tode klase bomba; metodu crtanje i
metodu brisanje.
294
Veliki programi
PRO - MIL
#ifndef BOMBA_H
#define BOMBA_H

class bomba
{
private:
int x, y;
public:
bomba()
{
x = (static_cast <float> (rand()) / RAND_MAX) * 620;
y = -((static_cast <float> (rand()) / RAND_MAX) * 480);
}
void crtanje();
void brisanje();
};

#endif
Ovo je dio programa koji se u ovoj inaici razli-
kuje od inaice sa samo jednom datotekom.

Ako je naziv datoteke bomba.h, ovaj dio imat
e oblik:

#ifndef BOMBA_H
#define BOMBA_H

Kad bi se datoteka zvala npr. datoteka.h, ovaj
dio imao bi oblik:

#ifndef DATOTEKA_H
#define DATOTEKA_H
U datoteku bomba.h spremimo
deklaraciju klase bomba.
Naredbu #endif pisat emo na kraju
svake datoteke koja poinje nared-
bom #ifndef.
295
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <winbgim.h>
#include "objekt.h"

void objekt :: pomak(char tipka)
{
kretanje = tipka;
if (kretanje == 75)
{
setcolor (WHITE);
rectangle(x, 432, x+60, 438);
setcolor (BLACK);
x = x - 5;
}
if (kretanje == 77)
{
setcolor (WHITE);
rectangle(x, 432, x+60, 438);
setcolor (BLACK);
x = x + 5;
}
}
void objekt :: crtaj()
{
rectangle(x, 432, x+60, 438);
}
U datoteku objekt.cpp spremimo
metode klase bomba; metodu
pomak i metodu crtaj.
Naredbama #include
ukljuimo grafiku biblio-
teku winbgim.h i dato-
teku objekt.h u kojoj se
nalazi deklaracija klase
objekt.
Kad bi se deklaracija klase
nalazila u drugaije nazvanoj
datoteci, npr. datoteci naziv.h,
morali bismo napisati:

#include "naziv.h"

Naziv datoteka moemo birati,
a nastavak h je obvezan. Na
program naredbom:

#include <winbgim.h>

ukljuuje samo grafiku biblio-
teku jer druge biblioteke ne
koristimo. Da npr. neto rau-
namo morali bismo nared-
bom:

#include <cmath>

ukljuiti i matematiku biblio-
teku.
296
Veliki programi
PRO - MIL
#ifndef OBJEKT_H
#define OBJEKT_H

class objekt
{
private:
int x;
char kretanje;
public:
objekt()
{
x = 290;
}
void pomak(char);
void crtaj();
};

#endif
U datoteku objekt.h unosimo
deklaraciju klase objekt.
I ova deklaracija klase zapoinje naredbom
#ifndef i naredbom #define iza kojih se nalazi
naziv datoteke u kojoj je deklaracija klase.

Budui da se deklaracija klase objekt nalazi
u datoteci objekt.h iza naredbe #ifndef i na-
redbe #define, pie se OBJEKT_H.

Kad bi se deklaracija klase nalazila npr. u
datoteci klasa.h, ovaj dio imao bi oblik:

#ifndef KLASA_H
#define KLASA_H
Naredbu #endif pisat emo na kraju svake
datoteke koja poinje naredbom #ifndef.
297
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>
#include <winbgim.h>
#include <ctime>


using namespace std;

#include "objekt.h"
#include "bomba.h"

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
char odgovor = 'd';
srand(time(NULL));
bomba bomba1, bomba2, bomba3;
objekt brod;
brod.crtaj();
do
{
bomba1.brisanje();
bomba2.brisanje();
bomba3.brisanje();
bomba1.crtanje();
bomba2.crtanje();
bomba3.crtanje();
delay(2);
if (kbhit())
{
odgovor = getch();
brod.pomak(odgovor);
}
brod.crtaj();
}
while (odgovor != 'k');
return 0;
}
Glavni program nalazi se
u datoteci mani.cpp.
Glavni program se u ovoj
inaici razlikuje od inaice
koja se cijela nalazi u jednoj
datoteci po tome to u ovoj
inaici moramo osim:

#include <cstdlib>
#include <iostream>
#include <winbgim.h>

dodati i naredbe:

#include "objekt.h"
#include "bomba.h"

kojima se u program uklju-
uju datoteke koje sadre
deklaracije klase objekt i
klase bomba.
298
Veliki programi
PRO - MIL
Rezultat izvoenja
naeg programa iz-
gledat e otprilike
ovako.

Ovo su bombe koje
se kreu odozgo pre-
ma dolje.

Ovo je brod koji
strelicom lijevo mo-
emo pomicati u lije-
vu stranu i strelicom
desno u desnu stra-
nu.
Prilikom prvog prevoenja i pok-
retanja ovog programa program-
ska okolina e nas upozoriti da
je dolo do pretvaranja varijable
float tipa u varijablu int tipa.

Upozorenje emo zanemariti,
budui da to nije greka, ve
smo to uinili namjerno prilikom
generiranja sluajnog broja.

Prilikom sljedeeg prevoenja i
pokretanja programa ovo upozo-
renje se vie nee pojavljivati.
299
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#ifndef OBJEKT_H
#define OBJEKT_H

class objekt
{

DEKLARACIJA KLASE;

};

#endif
#include "objekt.h"

void objekt :: pomak(char tipka)
{
SADRAJ OBJEKTA;
}

void objekt :: crtaj()
{
SADRAJ OBJEKTA;
}
#ifndef BOMBA_H
#define BOMBA_H

class bomba
{

DEKLARACIJA KLASE;

};

#endif
#include "bomba.h"

void bomba :: crtanje()
{
SADRAJ OBJEKTA;
}

void bomba :: brisanje()
{
SADRAJ OBJEKTA;
}
using namespace std;

#include "objekt.h"

#include "bomba.h"

int main()
{
GLAVNI PROGRAM;
}
objekt.h bomba.h
objekt.cpp bomba.cpp
main.cpp
U ovom shematskom prika-
zu naeg programa moe-
mo vidjeti logiku po kojoj se
program podijeljen u vie
datoteka povezuje u jednu
cjelinu.

Koristei ovu logiku, moe-
mo daleko vei program
razdijeliti na vei broj dato-
teka.
PRO - MIL 300
Saimanje koda
C++ programiranje za apsolutne poetnike
S
a

i
m
a
n
j
e

k
o
d
a

PRO - MIL 301
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

302
Saimanje koda
PRO - MIL
Primjeri saetog pisanja koda
Do sada smo, osim u nekoliko izuzetaka, programe pisali na kolski nain
trudei se da naredbe prije svega budu to razumljivije.

Mnoge naredbe mogu se, osim na nain koji smo do sada vidjeli, pisati na na-
in koji skrauje pisanje, ponekad ak ubrzava rad programa, ali koji je poet-
nicima moda neto manje razumljiv.

Doavi do kraja knjige, vie nismo poetnici i vrijeme je da se upoznamo s
nekim nainima skraenog pisanja programa.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int a, b, c;
cin >> a;
cin >> b;
c = a + b;
cout << c << endl;
system("PAUSE");
return 0;
}
U sluaju da formi-
ramo vie varijabli
istog tipa, ne mo-
ramo svaku staviti
u zasebni red, ne-
go ih moemo for-
mirati u jednom
redu.

Dakle umjesto:

int a;
int b;
int c;

moemo napisati:

int a, b, c;
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int a;
int b;
int c;
cin >> a;
cin >> b;
c = a + b;
cout << c << endl;
system("PAUSE");
return 0;
}
Obje inaice progra-
ma radit e potpuno
isti pisao, zbrojit e
dva broja.
303
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int a;
a = 12;
cout << a << endl;
system("PAUSE");
return 0;
}
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int a = 12;
cout << a << endl;
system("PAUSE");
return 0;
}
Umjesto:

int a;
a = 12;

moemo napisa-
ti:

int a = 12;
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int a;
cin >> a;
if (a > 12)
cout << "Broj je veci od 12." << endl;
else
cout << "Broj nije veci od 12." << endl;
cout << a << endl;
system("PAUSE");
return 0;
}
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int a;
cin >> a;
if (a > 12)
{
cout << "Broj je veci od 12." << endl;
}
else
{
cout << "Broj nije veci od 12." << endl;
}
cout << a << endl;
system("PAUSE");
return 0;
}
U if naredbi mogu se
izbaciti vitiaste zagra-
de, ako se unutar viti-
astih zagrada nalazi
jedan red.

Ako se nalazi vie re-
dova, uporaba vitias-
tih zagrada je obvezna.
Ova inaica prog-
rama radit e jed-
nako kao i gornja
inaica s vitiastim
zagradama.
304
Saimanje koda
PRO - MIL
#include <cstdlib>
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
float a, b;
cin >> a;
if (a < 0)
{
cout << "Broj je negativan." << endl;
}
else
{
b = sqrt(a);
cout << b << endl;
}
system("PAUSE");
return 0;
}
#include <cstdlib>
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
float a, b;
cin >> a;
if (a < 0)
cout << "Broj je negativan." << endl;
else
b = sqrt(a);
cout << b << endl;
system("PAUSE");
return 0;
}
Ovo je program za vae-
nje kvadratnog korijena.
Ako je broj pozitivan, izra-
unat e kvadratni kori-
jen, a ako je negativan,
ispisat e obavijest da je
broj negativan.

U ovom dijelu programa
vitiaste zagrade moe-
mo izbaciti jer se unutar
vitiastih zagrada nalazi
samo jedan red.

U ovom dijelu programa
vitiaste zagrade ne mo-
emo izbaciti jer se unu-
tar vitiastih zagrada na-
lazi vie od jednog reda.
Ako bismo ovom djelu vitiaste
zagrade izbacili, ne bismo dobili
obavijest o greki, ali program
ne bi ispravno radio, ako bismo
pokuali izraunati kvadratni
korijen iz negativnog broja.
305
C++ programiranje za apsolutne poetnike
PRO - MIL
S
a

i
m
a
n
j
e

k
o
d
a

S
a
d
r

a
j

N
a


p
r
v
i

p
r
o
g
r
a
m

V
a
r
i
j
a
b
l
e

G
r
a
f
i
k
a

P
o
l
j
a

U
v
o
d

D
o
n
o

e
n
j
e

o
d
l
u
k
e

P
e
t
l
j
e

O
b
j
e
k
t
i

O
b
r
a
d
a

t
e
k
s
t
a

V
e
l
i
k
i

p
r
o
-
g
r
a
m
i

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int x;
for (x=10; x<17; x=x+1)
{
cout << x << endl;
}
system("PAUSE");
return 0;
}
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int x;
for (x=10; x<17; x=x+1)
cout << x << endl;
system("PAUSE");
return 0;
}
I u petljama se moe izostaviti vitiasta zag-
rada ako se unutar vitiaste zagrade nalazi
samo jedan red.
U ovoj inaici programa
unutar for petlje ne koriste
se vitiaste zagrade.
Umjesto x=x+1 moemo
napisati:

x++

Pokrenemo li bilo koju od
ove tri inaice programa,
dobit emo jednak rezultat.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int x;
for (x=10; x<17; x++)
cout << x << endl;
system("PAUSE");
return 0;
}
Na slian nain moemo
umjesto:

x = x - 1;

napisati:

x-- (Dva minusa, bez raz-
maka.)
306
Saimanje koda
PRO - MIL
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int x;
for (x=5; x<51; x=x+5)
cout << x << endl;
system("PAUSE");
return 0;
}
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{

int x;
for (x=5; x<51; x+=5)
cout << x << endl;
system("PAUSE");
return 0;
}
Umjesto x=x+5; moemo napisati x+=5;
Umjesto x=x-5 moemo napisati x-=5.
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int x;
cin >> x;
if (x != 0)
cout << "Broje nije nula." << endl;
else
cout << "Broje je nula." << endl;
system("PAUSE");
return 0;
}
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int x;
cin >> x;
if (x)
cout << "Broje nije nula." << endl;
else
cout << "Broje je nula." << endl;
system("PAUSE");
return 0;
}
Umjesto

if (x != 0)

moemo napisati

if (x)
Korisnost nekih od navedenih kra-
enja prilino je dvojbena jer u
nekim sluajevima zbog utede
jednog znaka naruavamo itlji-
vost programa.

You might also like