Professional Documents
Culture Documents
programiranje
za apsolutne početnike
PRO - MIL
JAKOPEC, Ratko
C++ programiranje za apsolutne po četnike / Ratko Jakopec. – Varaždin :
Pro-mil, 2006.
ISBN 953-7156-19-2
460125024
Sva prava pridržana. 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, uspješno je primijenjeno na ra č unalima, stoga ne snosimo nikakvu
odgovornost za eventualnu štetu koja bi se mogla povezati s uputama iz knjige.
U ovoj knjizi objašnjen je program Dev C++, autora: Colin Laplace, Mike Berg, Hongli Lai. Program se
nalazi na priloženom CD-u, slobodan je za objavljivanje i umnožavanje.
Pojmovi za koje se zna da su zaštitni znakovi napisani su po četnim velikim slovom. Nakladnik ne može
provjeriti točnost niti želi utjecati na vjerodostojnost zaštitnih znakova.
2 PRO - MIL
j
a
ž
r
d
a
S
d
o
v
U
i
v
r m
p a
r
š g
a o
r
N p
j
e
l
b
a
j
i
r
a
a
V
a
k
i
f
ž
a
r
G
r
e
j
n e
e k
š l
u
o d
n o
d
o
D
e
j
l
t
a
e
P
a
j
l
S
o
P
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
PRO - MIL 3
Sadržaj
Uvod 7
Što je to program, a što programiranje? 8
Je li teško naučiti programirati? 8
Zašto baš C++? 9
Zašto baš Dev-C++? 10
Kako se uči programiranje? 10
Kako dalje nakon ove knjige? 10
Instaliranje Dev-C++ programskog okruženja 12
Formiranje radne mape 20
Instalacija grafike 22
Naš prvi program 25
Formiranje projekta 26
Mogući problem 32
Pokretanje programa 34
Greška u programu 38
Analiza programa 40
Gruba skica programa 42
Varijacije programa 43
Distribucija programa 47
Učitavanje spremljenog projekta 49
Varijable 53
Osnovne računske operacije 54
Varijable 58
4 PRO - MIL
j
a
ž
r
d
Analiza programa 60 a
S
e
Grafika 75 l
b
a
j
i
r
Podešavanje programskog okruženja 76 a
V
i
Switch naredba 126 t
k
e
j
b
Petlje 129 O
-
o i
For petlja 130 r
p
i m
a
k
i r
l
Do while petlja 168 e g
V
e
j
Generator slučajnih brojeva 170 n
a a
m d
i o
ž k
Korištenje slučajnih brojeva 179 a
S
PRO - MIL 5
Sadržaj
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
Premještanje teksta iz char polja u string 246
Premještanje teksta iz stringa u char polje 247
Spremanje teksta u datoteku 248
Objekti 251
Jednostavan primjer klase i objekata 252
Složeniji primjeri klasa i objekata 262
Komunikacija s metodama 265
Razdvajanje deklaracije i definicije 276
Uporaba konstruktora 278
Nasljeđivanje 280
Veliki program 283
Jednostavna igra u jednoj datoteci 284
Jednostavna igra u više datoteka 288
Sažimanje koda 301
Primjeri sažetog pisanja koda 302
6 PRO - MIL
j
a
ž
r
d
a
S
d
o
v
U
i
v
r m
p a
r
š g
a o
r
N p
e
l
b
a
j
i
r
a
V
d
a
k
i
f
a
r
G
o
e
j
n e
e k
š l
u
o d
n o
v
o
D
e
j
l
t
e
P
U a
j
l
o
P
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
PRO - MIL 7
Uvod
Program je niz uputa računalu o tome kako da napravi određeni posao. Posao
može bit vođenje skladišta, izračun plaće radnicima ili pretvaranje slike u boji u
crno bijelu sliku. Programiranje je pisanje tih uputa. Za pisanje uputa odnosno
programa koriste se određene naredbe. Skup naredbi koje čine cjelinu naziva se
programski jezik.
To su gluposti. Možda i jesmo do sada stvari radili po odre đenom algoritmu, ali
nismo o tome na taj način razmišljali, nemamo um posložen na taj način. Osim to-
ga u programiranju se upotrebljavaju malo druga čiji algoritmi nego što su algoritmi
za kuhanje kave.
Programiranje je zapravo potpuno druga čiji način razmišljanja od onog na koji smo
do sada navikli i trebat će godine rada da po čnemo razmišljati na taj način. Cijeli
problem dodatno komplicira činjenica da su današnja računala vrlo složeni sustavi i
treba nam puno vremena da barem približno po čnemo shvaćati kako računala fun-
kcioniraju.
8 PRO - MIL
j
a
ž
r
Zbog svega toga trebat će nam dvije do tri godine svakodnevnog rada da bismo d
a
koliko - toliko naučili programirati. Pod pojmom naučiti programirati ne mislim na S
dobivanje dvojke u školi ili pisanje programa za zbrajanje dva broja. Pod poj-
mom naučiti programirati mislim na to da smo u stanju napisati program koji za- d
o
dovoljava nečije potrebe i taj netko nam je spreman za to platiti. Nema puno v
U
smisla reći da znam programirati, ali ne znam napraviti ništa za što bi netko bio
spreman platiti. i
v
r m
p a
r
Zbog svega toga važno je da smo radišni i strpljivi. Nemojmo iz činjenice da prva š g
tri mjeseca nećemo puno toga razumjeti, zaključiti da nismo nadareni za progra- a o
r
N p
miranje i odustati. Nakon tri mjeseca nećemo puno toga razumjeti, ali nakon tri
godine sasvim sigurno hoćemo. e
l
b
a
j
i
r
Ovim uvodom vas nisam htio preplašiti, već sam vas htio ohrabriti da ustrajete u a
učenju programiranja, iako će vam se na početku možda činiti da ništa ne razu- V
mijete i da sporo napredujete. a
k
i
f
a
r
G
Zašto baš C++? e
j
n e
e k
š l
u
Zato što je to trenutno najrašireniji jezik, osobito u profesionalnoj uporabi. U ra- o d
n o
čunalstvu se klonite ekskluzivnosti. Ako vas veseli da budete posebni, obrijte o
D
glavu ili obojite kosu na zeleno. Imate bezbroj mogućnosti, ali kad su računala u
pitanju, najbolje je koristiti računalo koje koristi većina i programski jezik koji ko- e
j
l
t
risti većina. e
P
U tom slučaju lako dolazimo do programa, lako dolazimo do literature, puno ljudi
se razumije u to pa možemo dobiti savjet. Kona čno, ako tražimo posao u smislu a
j
l
da programerska ekipa treba još jednoga (jednu), ve ća je vjerojatnost da oni već o
koriste sustav s kojim znamo raditi. P
PRO - MIL 9
Uvod
Iako je taj program relativno malih dimenzija, posjeduje sve osobine koje su potre-
bne za učenje programiranja, a mogao bi poslužiti i za manje složeno profesional-
no programiranje.
Nakon što smo određenu naredbu shvatili, nismo završili s učenjem. Nakon toga
treba napraviti nekoliko desetaka manjih programa u kojima ćemo tu naredbu kori-
stiti da bismo stekli rutinu u njenom korištenju.
Postoje velike i debele knjige s puno sitnog teksta koje na 1000 stranica objašnja-
vaju sve tajne pojedinih programskih jezika. Takve knjige su korisne i nabavite ih
ako vam se ukaže prilika, ali takve knjige nisu pogodne za početnike. Zbog mnoš-
tva detalja i šturih opisa, početnik će se u njima jako teško snaći.
Nakon što proučite ovu knjigu, imat ćete dovoljno predznanja da možete 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 prou čite
ovu knjigu i želite dalje napredovati?
- Svakako neku knjigu koja na barem 800 stanica detaljno opisuje programski jezik
koji želite naučiti.
10 PRO - MIL
Uvod
12 PRO - MIL
j
a
ž
r
d
a
S
i
v
r m
p a
r
š g
a o
r
N p
e
l
b
a
j
i
r
a
V
a
k
i
f
a
r
G
e
j
2 - Klikom na OK nastavljamo n e
e k
instalaciju. š l
u
o d
n o
o
D
e
j
l
t
e
P
a
j
l
o
P
a a
d t
Klikom na Prihvaćam izjavlju- a
r s
b k
e
jemo sa se slažemo s uvjetima O t
korištenja programa.
i
t
k
e
j
b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
PRO - MIL 13
Uvod
14 PRO - MIL
j
a
ž
r
d
a
S
Nakon klika na Instaliraj započet
će instaliranje programa. d
o
v
U
i
v
r m
p a
r
š g
a o
r
N p
e
l
b
a
j
i
r
a
V
a
k
i
f
a
r
G
e
j
n e
e k
š l
u
o d
n o
o
D
e
j
l
t
e
P
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
PRO - MIL 15
Uvod
Kliknemo na Kraj.
Kliknemo na U redu.
16 PRO - MIL
j
a
ž
r
d
a
S
1 - Izaberemo
hrvatski jezik. d
o
v
U
i
v
r m
p a
r
š g
a o
r
2 - Izaberemo Use XP N p
Theme. e
l
b
a
j
i
r
a
V
a
k
i
f
a
r
G
e
j
3 - Klik na Next. n e
e k
š l
u
o d
n o
o
D
e
j
l
t
e
P
a
j
l
o
P
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
Klik na Next. n
a a
m d
i o
ž k
a
S
PRO - MIL 17
Uvod
Klik na Next.
18 PRO - MIL
j
a
ž
r
d
a
S
d
o
v
U
i
v
r m
p a
r
š g
a o
r
N p
e
l
b
a
j
i
r
a
V
a
k
i
f
a
r
G
e
j
n e
Na kraju klik na OK. e k
š l
u
o d
n o
o
D
e
j
l
t
e
P
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
PRO - MIL 19
Uvod
20 PRO - MIL
j
a
ž
r
d
a
S
d
o
v
U
i
v
r m
p a
r
š g
a o
r
N p
e
l
b
a
j
i
r
a
V
a
k
i
f
a
r
G
Unesemo naziv mape, u
mojem slučaju Radni. e
j
n e
e k
š l
u
o d
n o
o
D
e
j
l
t
e
P
a
j
l
o
P
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
Ako je sve u redu, na C: disku trebala bi e
j
biti formirana mapa pod nazivom Radni. n
a a
m d
i o
ž k
a
S
PRO - MIL 21
Uvod
Instalacija grafike
pi Dev-Cpp nalazit će se
22 PRO - MIL
j
a
ž
r
d
a
S
d
o
v
U
i
v
r m
p a
r
š g
a o
r
N p
e
l
b
Sadržaj mape include na CD-u a
j
i
r
a
kopiramo u mapu include na C: V
a
disku. k
i
f
a
r
G
e
j
n e
e k
š l
u
o d
n o
o
D
e
j
l
t
e
P
a
j
l
o
P
a a
d t
a
r s
b k
e
O t
Sadržaj mape lib na CD-u kopi-
i
t
ramo u mapu lib na C: disku. k
e
j
b
O
-
o i
r
Bude li poteškoća s instaliranjem progra- p
i m
a
k
i r
ma, pogledajmo filmove na kojima može- l
e g
mo vidjeti cijeli tijek instalacije, a nalaze V
se na priloženom CD-u. e
j
n
a a
m d
i o
ž k
a
S
PRO - MIL 23
24 PRO - MIL
j
a
ž
r
d
m
a
S
d
o
a
v
U
r
i
v
r m
p a
r
š g
a o
r
g
N p
e
l
b
a
j
i
r
o
a
V
r
a
k
i
f
a
r
G
p
e
j
n e
e k
š l
u
o d
i
n o
o
D
e
v
j
l
t
e
P
r a
j
l
o
p
P
a a
d t
a
r s
b k
e
t
š
O
i
t
k
e
j
a
b
O
-
o i
r
p
i m
a
k
i r
N
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
PRO - MIL 25
Formiranje projekta
3 - Izaberemo Projekt.
26 PRO - MIL
j
a
ž
r
d
a
Otvorit će se novi prozor koji se naziva Novi projekt i u kojem ćemo izab- S
rati tip projekta. Najvažniji tipovi su Windows Application i Console Ap-
plication . d
o
v
U
U čemu je razlika?
i
Windows Application – izvodi se unutar klasičnog windows prozora. Pre- v
r m
p a
r
dnost ovog načina pisanja jest što ćemo dobiti program koji će izgledati š g
a o
r
kao svaki drugi windows program. Nedostatak mu je što je ovaj način pisa- N p
nja programa nešto složeniji, pa je manje prikladan za početnike.
e
l
b
Console Application – ne izvodi se unutar klasičnog windows prozora, a
j
i
r
već unutar pojednostavljene verzije s crnom pozadinom. Nedostatak ovog a
V
načina pisanja programa jest što je program veoma ružan i što taj oblik
prozora ima manje mogu ćnosti od klasičnog prozora. Jedina prednost mu a
je što je jednostavan, pa je prikladniji za početnike. k
i
f
a
r
G
e
j
n e
e k
1 - Izaberemo Basic. š l
u
o d
n o
o
D
e
j
2 - Zatim Console Application. l
t
e
P
a
j
l
o
P
3 - Ovdje unosimo naziv pro-
jekta. Na početku možemo a a
ostaviti naziv koje je predložilo d t
a
r s
računalo, a to je Projekt1 . b k
e
O t
i
t
k
e
j
b
O
-
o i
r
p
4 - Ovdje odredimo da i m
a
k
i r
5 - Biranje završavamo l
će naš projekt sadrža- e g
klikom na OK. V
vati C++ program. e
j
n
a a
m d
i o
ž k
a
S
PRO - MIL 27
Najbolje je da ga spremimo
u prije pripremljenu praznu
mapu.
Kliknemo ovdje.
28 PRO - MIL
j
a
ž
r
d
1 - Ovdje bi se trebala nalaziti oznaka diska na kojem a
S
smo pripremili prazni prostor za smještaj našeg projekta.
d
o
v
U
2 - Sadržaj ovog prozo-
i
ra na vašem računalu v
r m
bit će sasvim sigurno p a
r
š g
drugačiji nego na mo- a o
r
N p
jem, budući da njegov
sadržaj ovisi o progra- e
l
mima koji su instalirani b
a
j
u računalu i načinu ko- i
r
a
rištenja računala. Ne- V
mojte brinuti zbog toga.
a
k
i
f
a
r
G
e
j
n e
e k
3 - Pronaći ćemo mapu Radni i kliknuti na š l
u
o d
nju. (Ako mapu Radni niste do sada formira- 4 - Klik na Otvori . n o
o
li, formirajte je prema uputama danim u uvo- D
dnom poglavlju.
e
j
l
t
e
P
a
j
l
o
P
1 - Ovdje bi se trebao nalaziti naziv prostora u koji ćemo a a
spremiti naš C++ projekt. d t
a
r s
b k
e
O t
i
t
k
2 - Klik na Spremi. e
j
b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
PRO - MIL 29
Računalo će automatski
generirati jednostavan
C++ program i time je
otvaranje projekta zavr-
šeno.
30 PRO - MIL
j
a
ž
r
1 - Kliknemo na karticu d
a
Prikaz . S
d
o
v
U
2 - Kliknemo na kvadrati ć ispred
opcije Brojevi linije. i
v
r m
p a
r
š g
a o
r
N p
e
l
b
a
j
i
r
a
V
e
j
l
t
e
P
a
j
l
o
P
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
Vidimo da se sada is-
pred svakog reda u pro- -
o i
r
gramu automatski ispi- p
i m
k a
suje broj reda. i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
PRO - MIL 31
Mogući problem
32 PRO - MIL
j
a
Unos prvog programa ž
r
d
a
S
d
o
v
U
e
j
l
t
e
P
Na početku će nam se često
događati da umjesto točke sa
zarezom ovdje unesemo dvo- a
j
l
#include <cstdlib> toč je što će uzrokovati grešku o
#include <iostream> u programu. P
PRO - MIL 33
Pokretanje programa
Već smo rekli da računalo razumije samo nule i jedinice. Svi sadržaji, muzika,
filmovi, slike itd. moraju biti prevedeni u nule i jedinice da bi ih računalo ra-
zumjelo. Tako je i s programom.
34 PRO - MIL
j
a
ž
r
d
a
1 - Klikom na Kompajlaj i pokreni započet ćemo prevođenje i S
pokretanje našeg programa.
d
o
v
U
i
v
r m
2 - Otvara se prozor u kojem nas računalo pita kamo i p a
r
š g
pod kojim nazivom ćemo spremiti naš program. a o
r
N p
Računalo će predložiti da to bude ono isto mjesto u e
l
koje smo spremili projekt što ćemo mi prihvatiti. b
a
j
i
r
a
V
a
k
i
f
a
r
G
e
j
n e
e k
š l
u
o d
n o
o
D
a
j
l
o
3 - Prevođenje i pokretanje našeg prog- P
rama započet ćemo klikom na Spremi.
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
-
o i
r
p
i m
a
k
i r
Ovdje se nalazi naziv našeg programa, l
e g
main.cpp. Iako bismo taj naziv mogli V
promijeniti, na početku je najbolje da za- e
j
n
držimo naziv koji je predložilo računalo. a a
d
m
i o
ž k
a
S
PRO - MIL 35
36 PRO - MIL
j
a
Mogući problem ž
r
Tijekom rada može nam se dogoditi da nam d
a
S
računalo predloži neki naziv programa, iako ve ć
u tom prostoru postoji program s istim nazivom. d
o
v
U
e
l
b
Ako stari program ne želimo sačuvati, ostavit a
j
i
r
a
ćemo novom programu naziv main.cpp i kliknut V
e
j
l
t
e
P
Ako ne želimo zadržati stari prog-
ram, pa smo u prethodnom koraku
kliknuli na Spremi bez da smo a
j
l
mijenjali novom programu naziv, o
P
računalo će nas još jednom upozo-
riti da će stari program biti obrisan.
a a
d t
a
r s
b k
e
O t
i
t
k
1 - Kliknemo na Yes. Stari program će e
j
b
se obrisati, novi će se spremiti, a zatim O
će započeti prevođenje i pokretanje -
novog programa. Tijek prevođenja i o i
r
p
pokretanja programa možemo vidjeti i m
a
k
i r
na prethodnoj stranici. l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
PRO - MIL 37
Greška u programu
Gotovo je nemoguće unijeti program, a da
se tijekom unosa ne pojavi greška.
1 - Umjesto
2 - Kliknemo na Kompajlaj i pokreni. točke sa zare-
zom unesemo
dvotoč je.
2 - Istovremeno se otvara
prozor u kojem možemo
vidjeti dodatne informacije
o uočenoj greški.
38 PRO - MIL
j
a
ž
r
d
a
S
e
l
b
a
j
i
r
a
V
a
1 - Ovdje je došlo do greške jer k
i
f
nismo unijeli točku sa zarezom. a
r
G
e
j
n e
e k
š l
u
o d
n o
o
D
1 - Kad takav program pokušamo prevesti i e
j
l
pokrenuti, kao pogrešan bit će označen de- t
e
veti red, jer je u njemu greška primije ćena, P
iako se greška zapravo nalazi u osmom re-
du.
a
j
l
o
Zato imajmo na umu da je označavanje re- P
dova u kojim se pojavila greška samo gruba
orijentacija, a ne precizni pokazatelj.
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
-
2 - Program pokrećemo klikom na o i
r
p
Kompajlaj i pokreni. i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
PRO - MIL 39
Analiza programa
#include <cstdlib>
#include <iostream> Ove naredbe ćemo pisati na početku sva-
kog C++ programa. Zašto? C++ organizi-
ran je tako da su njegove naredbe organi-
zirane u grupe ili, kako bi programeri rek-
li, biblioteke i na početku programa mora-
mo reći računalu koje biblioteke naredbi
namjeravamo koristiti.
40 PRO - MIL
j
a
ž
r
d
{ } - Iako neveliki, ovo su jako važni dijelovi a
S
programa. Označuju prostor unutar kojeg se
{ nalazi program, { označuje početak, a } kraj d
programa. o
v
U
i
v
r m
p a
r
š g
a o
r
N p
e
l
Ovaj red sadrži dvije naredbe. b
a
j
i
r
a
Prvom naredbom naređujemo V
računalu da tekst koji se nalazi
unutar navodnika ispiše na a
cout << "Ovo je moj tekst." << endl; k
i
zaslonu računala. f
a
r
G
Drugom naredbom nare đuje- e
mo računalu da prijeđe u novi j
n e
e k
red. š l
u
o d
n o
o
D
e
j
l
t
e
P
PRO - MIL 41
42 PRO - MIL
j
a
Varijacije programa ž
r
d
a
S
Jedna od najboljih metoda koje nam pomažu da bolje razumijemo funkcionira- d
nje programa i pojedinih naredbi jest da u program unosimo manje izmjene, a o
v
zatim opažamo kakve posljedice će takve izmjene izazvati. U
i
v
r m
p a
r
Kao što smo već vidjeli, pok- š g
#include <cstdlib> a o
r
N p
#include <iostream> renemo li ovaj program, na
e
l
using namespace std; zaslonu računala dobit ćemo b
a
j
i
ovakav rezultat. r
a
int main() V
{ a
cout << "Ovo je moj tekst." << endl; k
i
f
system("PAUSE"); a
r
return 0; G
} e
j
n e
e k
š l
u
o d
n o
o
D
e
j
l
t
#include <cstdlib> e
#include <iostream> P
i
t
k
e
j
b
O
-
o i
r
Promijenimo li ovaj red dobit ćemo ovakav rezultat. p
i m
a
k
i r
l
e g
Očigledno je da je funkcija ovog reda u programu V
ispis teksta koji se nalazi unutar navodnika i da taj e
j
n
tekst možemo po volji mijenjati. a a
d
m
i o
ž k
a
S
PRO - MIL 43
#include <cstdlib>
#include <iostream>
int main()
{
cout << "Jaa jesm nism ghgh." << endl;
system("PAUSE");
return 0;
}
44 PRO - MIL
j
a
ž
r
d
a
S
d
o
v
#include <cstdlib> U
#include <iostream>
i
v
r m
using namespace std; p a
r
š g
a o
r
int main() N p
{ e
l
cout << "Ovo je moj tekst." << endl ; b
a
j
system("PAUSE"); i
r
a
return 0; V
}
Vratimo naš program u a
k
i
prvobitno stanje, a zatim f
a
ga pokrenimo klikom na r
G
Kompajlaj i pokreni.
Ovako će izgledati rezul- e
j
n e
#include <cstdlib> tat rada našeg programa. e k
š l
u
o d
#include <iostream> n o
Da bismo bolje razumjeli o
D
using namespace std; njegovu funkciju, obriše-
mo ovaj dio programa. e
j
l
t
int main() Nova inačica programa e
trebala bi ovako izgledati. P
{
cout << "Ovo je moj tekst.";
system("PAUSE"); Klikom na Kompajlaj i a
pokreni pokrenemo pro- j
l
return 0; o
} gram. P
a a
d t
a
r s
Ovako bi trebao izgledati b k
e
O t
rezultat izvođenja ove
inačice programa. i
t
k
e
j
Program radi i bez obri- b
sanog dijela, ali nakon O
ispisa našeg teksta raču- -
nalo nije skočilo u novi o i
r
p
red, nego je sljedeći tekst i m
a
k
i r
nastavilo pisati u istom l
e g
redu. Očigledno da je << V
endl naredba za skok u e
j
n
novi red. a a
m d
i o
ž k
a
S
PRO - MIL 45
Vidimo da se je dogodilo
ono što smo očekivali.
46 PRO - MIL
j
a
ž
r
d
Više naredbi << endl možemo napisati i a
#include <cstdlib> S
unutar jednog reda.
#include <iostream> d
Pokrenemo li ovu inačicu programa, uvje- o
v
using namespace std; rit ćemo se da daje isti rezultat kao i pret- U
hodna.
int main() i
v
r m
{ p a
r
cout << "Ovo je moj tekst." << endl << endl << endl << endl; š g
a o
r
system("PAUSE"); N p
return 0; e
l
} b
a
j
i
r
a
V
Pogledajmo sada podrobnije red u kojem se nalaze naredbe za ispis teksta i a
k
i
skok u novi red. f
a
r
G
e
j
n e
e k
š l
u
Propisana riječ kojom obavještavamo računalo o d
Ove oznake obvezno n o
da ćemo sadržaj koji slijedi poslati na neku izla- o
se stavljaju ispred D
znu jedinicu, u našem slučaju na zaslon raču-
sadržaja koji će iz
nala. e
j
računala ići na neku l
t
izlaznu jedinicu, npr. e
Uočimo da naredbu << endl ne možemo koris- P
titi ako prije nismo stavili naredbu cout. zaslon računala.
a
j
l
o
P
PRO - MIL 47
Distribucija programa
Nakon što naše programersko remek djelo proradi, osjetit ćemo potrebu naš
program podijeliti s prijateljima ili ga staviti na internet. Postavlja se pitanje
što moramo učiniti da bi naš program proradio i na prijateljevom ra čunalu.
Otvorimo Windows Explorer i u njemu otvorimo mapu u koju smo koristili tije-
kom prevođenja programa. U našem slučaju to je Radni mapa na C disku.
48 PRO - MIL
j
a
Učitavanje spremljenog projekta ž
r
d
a
S
d
o
v
U
i
v
r m
p a
r
š g
a o
r
N p
e
l
b
a
j
i
r
a
V
Ako pokušamo ugasiti prog-
ramsko okruženje, a da nis- a
k
i
mo spremili program, raču- f
a
r
Naš projekt će se spremiti prili- nalo će nas upozoriti. G
kom prevođenja programa.
e
j
Klikom na Yes spremit ćemo n e
Ako projekt želimo spremiti bez naš program. e k
š l
u
da smo program preveli, kliknemo o d
n o
na ikonu Spremi. o
D
e
j
l
t
e
P
PRO - MIL 49
50 PRO - MIL
j
a
ž
r
d
a
S
Nakon što se
d
spremljeni projekt o
v
učitao, mogli bismo U
biti zbunjeni činjeni-
com da ga ne vidi- i
v
r m
mo u prostoru u p a
r
kojem smo očeki- š g
a o
r
vali da ćemo ga N p
vidjeti.
e
l
b
a
j
i
r
a
V
a
k
i
f
a
r
G
e
j
n e
e k
š l
u
o d
n o
o
D
e
j
l
t
e
P
a
j
l
o
P
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
-
o i
r
Da bismo naš program vidjeli, ovdje kliknemo na p
naziv programa, u našem slučaju to je main.cpp. i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
PRO - MIL 51
Varijable
52 PRO - MIL
j
a
ž
r
d
a
S
d
o
v
U
i
v
r m
p a
r
š g
a o
r
N p
e
e
l
b
l
a
j
i
r
a
V
b
a
k
i
f
a
r
G
a
e
j
n e
j
e k
š l
u
o d
i
n o
o
D
r
e
j
l
t
e
P
a a
j
l
o
P
i
t
k
e
j
e
t
b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
PRO - MIL 53
Varijable
#include <cstdlib>
#include <iostream> Sada ćemo računalo iskoristiti za računa-
nje.
using namespace std;
Unesimo ovaj program u C++ programsko
int main() okruženje.
{
cout << 2+3; Klikom na Kompajlaj i pokreni ga pokre-
cout << endl; nemo. Dobit ćemo ovakav rezultat.
system("PAUSE");
return 0;
}
54 PRO - MIL
j
a
ž
r
d
a
Pokušajmo zbrojiti neka druga dva broja, #include <cstdlib> S
npr. 8 i 4. #include <iostream>
d
o
Pokrenimo program i vidjet ćemo da će using namespace std; v
U
računalo zbrojiti ta dva broja.
int main() i
{ v
r m
p a
r
cout << 8+4; š g
cout << endl; a o
r
N p
system("PAUSE");
return 0; e
l
b
} a
j
i
r
a
V
a
k
i
f
a
r
G
e
j
n e
e k
š l
u
o d
n o
o
D
i
t
k
e
j
b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
PRO - MIL 55
Varijable
12 podijeljeno sa 4 napi-
sat ćemo kao 12/4.
#include <cstdlib>
#include <iostream> Pokrenimo program i po-
gledamo rezultat.
using namespace std;
int main()
{
cout << 12/4;
cout << endl;
system("PAUSE");
return 0;
}
56 PRO - MIL
j
a
ž
r
d
#include <cstdlib> Pokušajmo ovdje umjesto 12/4 staviti 13/4. a
S
#include <iostream>
Pokrenimo program i pogledajmo rezultat. d
o
using namespace std; v
Rezultat je očigledno pogrešan. U
a
#include <cstdlib> k
i
f
#include <iostream> a
r
G
using namespace std; e
j
n e
e k
int main() š l
u
o d
{ Pokušajmo ovdje staviti n o
o
cout << 15/3; 15/3 i pokrenimo program. D
cout << endl; e
system("PAUSE"); Rezultat je ispravan. j
l
t
e
return 0; P
}
a
j
l
o
P
Umjesto 15/3 stavimo 17/3 i
pokrenimo program.
a a
d t
a
r s
b k
e
O t
#include <cstdlib>
#include <iostream> i
t
k
using namespace std; Rezultat je pogrešan. Mogli bismo e
j
b
zaključiti da će dijeljenje biti isprav- O
int main() no, ako je rezultat cjelobrojni broj.
-
{ o i
r
Ako je rezultat decimalni broj, dolazi p
cout << 17/3; i m
a
do greške. k
i r
cout << endl; l
e g
system("PAUSE"); V
return 0; Kako riješiti taj problem, vidjet ćemo e
j
nešto kasnije u ovom poglavlju. n
} a a
m d
i o
ž k
a
S
PRO - MIL 57
Varijable
Varijable
Na tipkovnici iza-
beremo prvi broj
koji želimo zbrajati,
npr. broj 3 i zatim
pritisnemo Enter
tipku na tipkovnici.
58 PRO - MIL
j
a
ž
r
d
a
Na tipkovnici izaberemo S
drugi broj koji želimo
zbrajati, npr. broj 5 i d
o
zatim pritisnemo Enter v
U
tipku na tipkovnici.
i
v
r m
p a
r
š g
a o
r
N p
Nakon pritiska na e
l
Enter tipku na tip- b
a
j
kovnici, a zaslonu i
r
računala ugledat a
V
ć emo rezultat
zbrajanja broja 3 i a
k
i
f
broja 5, a to je broj a
r
8. G
e
j
n e
e k
š l
u
o d
n o
o
D
e
j
l
t
e
P
Pokrenimo bez ikakvih izmjena isti prog- Na sličan način kao i u a
j
l
o
ram još jednom, ali sada unesimo neke prethodnom primjeru, P
druge brojeve, npr. broj 12 i broj 14. dakle tako da nakon sva-
kog unosa broja pritisne- a a
mo tipku Enter na tipkov- d t
a
r s
nici, unesimo brojeve 12 i b k
e
t
14. O
i
t
Kao rezultat dobit ćemo k
njihov zbroj, a to je broj e
j
b
26. O
-
Vidimo da smo uspjeli o i
r
p
postići ono što smo želje- i m
a
k
i r
li. Pomoću jednog progra- l
e g
ma možemo zbrajati razli- V
čite brojeve, bez da prog- e
j
n
ram moramo mijenjati. a a
m d
i o
ž k
a
S
PRO - MIL 59
Varijable
Analiza programa
5
Zbrojimo sadržaj prostora a i prostora
c = a + b; b, a rezultat spremimo u prostor c. b
8 3 5
cout << c;
c = a + b
Sadržaj prostora c, a to je c
cout << endl; rezultat zbrajanja, ispišemo
na zaslon računala. 8
60 PRO - MIL
j
a
ž
r
d
Ovom naredbom formiramo prostor u računalu u koji ćemo spremati brojeve. a
S
Na početku taj prostor možemo zamisliti kao posudice u koje možemo staviti d
brojeve, iako su to zapravo rezervirana mjesta u memoriji našeg računala. o
v
U
i
v
r m
p a
r
Naredba za formiranje Oznaka ; obvezno dolazi š g
prostora. int a ; na kraju naredbe. a o
r
N p
e
l
b
a
j
i
r
int b; Ovdje se nalazi naziv prostora.
a
V
int c; a
Zašto svaki prostor ima naziv??? k
i
f
a
r
Zato što u jednom programu može- G
Ovim naredbama se for- mo imati više takvih prostora, pa e
j
miraju još dva prostora, nam naziv prostora omogućuje da ih n e
e k
prostor b i prostor c. razlikujemo. š l
u
o d
n o
o
D
e
j
l
t
e
P
Nakon formiranja prostor za spremanje brojeva je prazan i bio bi nam sasvim
beskoristan kad u njega ne bismo mogli staviti neki broj.
a
j
U taj prostor broj možemo staviti na više načina, a jedan od njih je da ga une- l
o
semo pomoću tipkovnice. Za to ćemo koristiti naredbu cin. P
a a
d t
a
r s
b k
e
O t
Oznaka ; obvezno dolazi
Naredba za unos. cin >> a ; na kraju naredbe. i
t
k
e
j
b
O
-
o i
r
p
i m
Ovdje stavljamo oznaku prostora u k a
i r
l
koji ćemo unijeti broj. Dakle, broj e g
V
Ova oznaka stavlja se ćemo unijeti u prostor a i ne u neki e
j
ispred naziva prostora u drugi prostor, npr. b ili c. n
a a
koji ćemo unijeti broj. m d
i o
ž k
a
S
PRO - MIL 61
Varijable
Osim što u te prostore možemo spremati brojeve, izme đu njih možemo izvoditi
računske operacije na isti način kao što smo ih izvodili između brojeva.
U našem slučaju zbrojit ćemo sadržaj prostora a i sadržaj prostora b, a rezultat
tog zbrajanja spremit ćemo u prostor c.
Oznaka ; obvezno
Prostor c u koji će-
mo spremiti rezultat. c = a + b ; dolazi na kraju na-
redbe.
Oznaka ; obavezno
Naredba za ispis. cout << c ; dolazi na kraju na-
redbe.
62 PRO - MIL
j
a
Varijacije programa ž
r
d
a
S
Da bismo bolje razumjeli izradu programa koji koriste prostor za spremanje d
brojeva, napravit ćemo niz izmjena na našem programu i opažat ćemo kako te o
v
izmijene utječu na rad program. U
i
v
r m
p a
r
Ovaj program ima potpuno istu struktu- š g
#include <cstdlib> a o
r
#include <iostream> ru kao prethodni, samo što ima drugači- N p
je nazive prostora za spremanje broje- e
l
using namespace std; va. b
a
j
i
r
Prvi prostor više se ne naziva a, nego a
int main() V
{ prvi. Drugi prostor više se ne naziva b,
int prvi; nego drugi. Treći prostor više se ne a
k
i
f
int drugi; naziva c, nego rezultat. a
r
int rezultat; G
cin >> prvi; Prevedimo i pokrenimo ovaj program i
e
j
cin >> drugi; vidjet ćemo da radi jednako kao i pret- n e
hodni program. e k
rezultat = prvi + drugi; š l
u
o d
cout << rezultat; n o
o
cout << endl; D
system("PAUSE");
e
j
return 0; l
t
} e
P
a
j
l
o
Sad se postavlja pitanje po kojoj logici se biraju nazivi prostora za spre- P
manje brojeva. Pogledajmo neka pravila i sugestije.
a a
- Ne smiju se koristi naredbe; npr. int aaa; je dozvoljeno, a int cout; nije. d t
a
r s
b k
e
O t
- Koriste se samo brojevi i slova engleske abecede, dakle bez čžš.
i
t
- Naziv ne smije sadržavati razmak; PrviBroj i prvi_broj je dozvoljeno, a k
prvi broj nije. e
j
b
O
- Ako naziv sadrži brojeve, prvi znak mora biti slovo, dakle a1 je dozvolje- -
no, a 1a nije. o i
r
p
i m
a
k
i r
- Pametno je da naziv prostora govori što se u prostoru nalazi. Bolje je da l
e g
prostor u koji ćemo spremati površinu nazovemo povrsina nego qqy1. V
e
j
n
- Dva različita prostora ne mogu imati isto ime. a a
m d
i o
ž k
a
S
PRO - MIL 63
Varijable
#include <cstdlib>
#include <iostream> Pokušamo li pokrenuti ovaj program, ra-
čunalo će dojaviti grešku.
using namespace std;
Do greške je došlo zato što smo ovdje
int main() formirali prostor A, a ovdje smo pokušali
{ unijeti broj u prostor a.
int A;
int B; Računalo razlikuje velika i mala slova pa
int c; njemu prostor a i prostor A nisu isto.
cin >> a;
cin >> b; S njegove točke gledišta mi ovdje poku-
c = a + b; šavamo unijeti broj u prostor koji ne pos-
cout << c; toji.
cout << endl;
system("PAUSE"); Zato će nas računalo u komentaru greške
return 0; upozoriti da ne zna što je to a.
}
64 PRO - MIL
j
a
ž
r
d
#include <cstdlib> a
S
#include <iostream> U ovom programu ovu naredbu nismo napi-
sali u ispravnom obliku kao cout << c; nego
u obliku cout << "c"; dakle sadržaj koji se d
using namespace o
v
std; ispisuje stavili smo u navodnike kao što U
smo to naviknuli prilikom ispisa teksta koriš-
int main() tenjem cout naredbe. i
v
r m
{ p a
r
Pokrenemo li ovaj program, on će se izvršiti š g
int a; a o
r
int b; i računalo nam neće dojaviti nikakvu greš- N p
int c; ku, ali kao rezultat nećemo dobiti ono što
e
l
cin >> a; smo očekivali. b
a
j
cin >> b; i
r
Vidimo da smo u prostor a unijeli 8, u pros- a
c = a + b; V
cout << "c"; tor b unijeli smo 4, ali kao rezultat nismo
cout << endl; dobili broj 12, nego slovo c. a
k
i
f
system("PAUSE"); a
r
return 0; Zašto? G
} e
cout << c; - ispisuje sadržaj prostora c. j
n e
e k
š l
u
cout << "c"; - ispisuje slovo c. o d
n o
o
D
e
j
l
t
e
P
a
j
l
o
P
PRO - MIL 65
Varijable
#include <cstdlib>
#include <iostream> Na sličan način možemo napraviti program
za množenje sadržaja dvaju prostora.
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;
}
66 PRO - MIL
j
a
Problem dijeljenja ž
r
d
a
S
e
j
Problem ćemo riješiti ovako napisanim l
t
e
programom. Umjesto naredbom int, P
prostor za spremanje brojeva formirat
ćemo naredbom float;
#include <cstdlib> a
j
l
Pokrenemo li taj program, dobit ćemo o
#include <iostream> P
ispravan rezultat.
using namespace std; a a
d t
a
r s
int main() b k
e
t
{ O
float broj1;
i
t
float broj2; k
float rezultat; e
j
b
cin >> broj1; O
cin >> broj2; -
rezultat = broj1 / broj2; o i
r
p
cout << rezultat; i m
a
k
i r
cout << endl; l
e g
system("PAUSE"); V
return 0; e
j
n
} a a
m d
i o
ž k
a
S
PRO - MIL 67
Varijable
Ovo je još jedan način na koji možemo formirati prostor za spremanje brojeva.
Oznaka ; obvezno
Naredba za formi-
ranje prostora za
float broj1 ; dolazi na kraju na-
redbe.
spremanje brojeva
s decimalnim zare-
zom.
Postavlja se pitanje bismo li mogli u naš program unijeti broj s decimalnim zare-
zom. Pokrenimo još jednom program iz prethodnog primjera i pokušajmo.
68 PRO - MIL
j
a
Uljepšavanje programa ž
r
d
a
S
Naši programi doduše rade, ali su tako ružni da bi teško bili ružniji. Korisnika d
o
dočeka crni ekran bez ikakvih uputa. Nakon što unesemo dva broja, dobit v
U
ćemo treći bez ikakvog komentara što taj treći broj predstavlja.
i
Budući da smo mi napisali program, mi znamo da treba unijeti dva broja, da v
r m
nakon svakog unosa treba pritisnuti tipku Enter i mi znamo što predstavlja p a
r
š g
treći broj koji smo dobili kao rezultat, ali netko drugi veoma bi teško koristio a o
r
N p
naš program. Unesite i pokrenite ovaj program.
e
l
b
a
j
i
r
a
V
PRO - MIL 69
Varijable
Prethodni program mogli bismo još malo uljepšati dodavanjem praznih redova.
Unesimo i pokrenimo ovaj program.
int main()
{ Komentar prvog unosa.
float broj1;
float broj2;
float rezultat;
cout << "Dijeljenje." << endl;
cout << endl;
Prvi unos.
cout << endl;
cout << "Unesite prvi broj." << endl;
cin >> broj1;
cout << endl; Prazni red.
cout << "Unesite drugi broj." << endl;
cin >> broj2;
cout << endl; Komentar drugog unosa.
rezultat = broj1 / broj2;
cout << "Rezultat dijeljenja je:" << endl;
cout << rezultat; Drugi unos.
cout << endl;
cout << endl;
system("PAUSE"); Komentar rezultata.
return 0;
}
Dva skoka u novi red. Ispis rezultata.
70 PRO - MIL
j
a
Nekoliko primjera programa ž
r
d
a
S
i
t
k
e
j
b
Komentar započinje // ozna- O
kom i pomaže nam da se
-
lakše snađemo ako program o i
r
želimo kasnije koristiti. p
i m
a
k
i r
l
e g
Komentirati možemo namje- V
nu programa ili pojedine Prilikom prevođenja programa, kad prevo- e
j
segmente programa. ditelj naiđe na // oznaku, skače u novi red n
a a
ne prevodeći ostatak reda. m d
i o
ž k
a
S
PRO - MIL 71
Varijable
72 PRO - MIL
j
a
ž
r
d
a
// ******************************************* S
// Program za izračun volumena kvadra
// ******************************************* d
o
v
U
#include <cstdlib>
#include <iostream> Ovo je primjer programa za izra čun volu- i
mena kvadra. v
r m
p a
r
using namespace std; š g
Pokušajmo za vježbu sami smisliti neko- a o
r
N p
int main() liko sličnih programa.
{ e
l
b
float stranica_A; a
j
i
r
float stranica_B; a
float stranica_C; V
float volumen; a
cout << "Izracun volumena." << endl; k
i
f
cout << endl; a
r
cout << "Unesite stranicu a." << endl; G
cin >> stranica_A; e
j
cout << "Unesite stranicu b." << endl; n e
e k
š l
u
cin >> stranica_B; o d
n o
cout << "Unesite stranicu c." << endl; o
cin >> stranica_C; D
cout << endl; e
j
volumen = stranica_A * stranica_B * stranica_C; l
t
e
cout << "Volumen je:" << endl; P
cout << volumen;
cout << endl;
cout << endl; a
j
l
o
system("PAUSE"); P
return 0;
}
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
PRO - MIL 73
Grafika
74 PRO - MIL
j
a
ž
r
d
a
S
d
o
v
U
i
v
r m
p a
r
š g
a o
r
N p
e
l
b
a
j
a
i
r
a
V
a
k
k
i
f
a
i
r
G
f
e
j
n e
e k
š l
u
o d
n o
a
o
D
r
e
j
l
t
e
P
a
j
G
l
o
P
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
PRO - MIL 75
Grafika
Da bi grafika funkcionirala,
prilikom instalacije progra-
ma moramo instalirati do-
datke kojim programskom
okruženju omogućuje pri-
kaz grafike.
1 - Kliknemo na Projekt . Ako to nismo učinili, vrati-
mo se na uvodno poglavlje
i instalirajmo potrebne do-
datke.
2 - Zatim na Postavke projekta .
Nakon toga podesit ćemo
programsko okruženje.
Kliknemo na Ok.
76 PRO - MIL
j
a
Naš prvi grafički program ž
r
d
a
S
e
j
l
t
e
P
a
j
l
o
P
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
PRO - MIL 77
Grafika
Analiza programa
78 PRO - MIL
j
a
ž
r
d
Ovom naredbom zaustavljamo izvođe- a
S
nje programa do trenutka dok ne priti-
getch(); snemo neku tipku na tipkovnici. Ima d
o
istu namjenu kao i system(“PAUSE”) v
u “normalnim” programima. U
i
Da bismo bolje razumjeli ovu naredbu, v
r m
izbacimo je iz programa i pokušajmo p a
r
š g
pokrenuti program bez nje. a o
r
N p
e
l
b
a
j
i
r
closegraph(); Zatvaranje grafičkog prozora. a
V
a
k
i
f
a
r
Kraj programa. Uočimo da ovdje više G
return 0; nema naredbe system(“PAUSE”); Nje-
} e
j
nu funkciju sada ima getch(); naredba. n e
e k
š l
u
o d
n o
o
D
Pogledajmo sada pobliže odre đene naredbe. Ovom naredbom odre đujemo tip e
j
l
t
grafi čkog prozora. e
P
a
j
l
o
P
PRO - MIL 79
Grafika
Nakon što smo naredbom int gdriver = 9; odabrali tip grafi čkog prozora, ovom
naredbom biramo rezoluciju grafi čkog prozora.
int gmode = 2 ; Značenje ovog broja ovisi o tipu grafi čkog pro-
zora koji smo odabrali.
BLACK,
BLUE,
GREEN,
CYAN,
RED,
setbkcolor( WHITE ); MAGENTA,
BROWN,
LIGHTGRAY,
DARKGRAY,
LIGHTBLUE,
LIGHTGREEN,
LIGHTCYAN,
LIGHTRED,
LIGHTMAGENTA,
YELLOW,
WHITE.
80 PRO - MIL
j
a
ž
r
d
Osim navođenja imena boja, boje možemo odrediti i navo đenjem njihove broj- a
S
čane vrijednosti.
d
o
v
U
i
v
r m
setbkcolor(COLOR( 255, 255, 255 )); Plava.
p a
r
š g
a o
r
N p
e
l
b
a
j
Crvena. Zelena. i
r
a
V
a
k
i
f
a
r
Dodat ćemo naredbu COLOR iza koje se nalaze tri broja čija vrijednost mo- G
že biti između 0 i 255. e
j
n e
e k
š l
u
Boje u računalu sastoje se od tri boje; crvene, zelene i plave. Sve ostale o d
n o
boje nastaju miješanjem tih boja. o
D
Prvim brojem određujemo intenzitet crvene boje, drugim intenzitet zelene i e
j
l
t
trećim intenzitet plave boje. e
P
Naredbom setbkcolor(COLOR(255,255,255)); dobit ćemo bijelu boju, a
naredbom setbkcolor(COLOR(0,0,0)); dobit ćemo crnu boju.
a
j
l
o
P
a a
d t
Ovom naredbom određuje se boja kojom crtamo. Koristimo iste nazive boja a
r s
b k
e
kao i u prethodnoj naredbi. O t
i
t
k
e
j
b
O
setcolor(BLACK); -
o i
r
Kao i u prethodnoj naredbi, p
boje možemo odrediti navo- i m
a
k
i r
l
đenjem njihovog naziva, a e g
V
možemo i pomoću brojeva
setcolor(COLOR (0,0,0)); upotrebom naredbe COLOR.
e
j
n
a a
m d
i o
ž k
a
S
PRO - MIL 81
Grafika
640
240
480
82 PRO - MIL
j
a
Varijacije programa ž
r
d
a
S
a
j
l
o
P
PRO - MIL 83
Grafika
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;
}
84 PRO - MIL
j
a
ž
r
d
a
#include <cstdlib> S
#include <iostream>
d
#include <winbgim.h> o
v
U
using namespace std;
i
v
r m
int main() p a
r
{ š g
a o
r
int gdriver = 9; N p
int gmode = 2;
e
l
initgraph(&gdriver, &gmode, ""); b
setbkcolor(WHITE); a
j
i
r
setcolor(BLACK); a
V
cleardevice();
circle (60, 60, 60); a
k
i
circle (180, 180, 60); f
a
circle (300, 300, 60); r
G
getch();
closegraph(); e
j
n e
return 0; e k
š l
u
} o d
n o
o
D
e
j
l
t
#include <cstdlib> e
P
#include <iostream>
#include <winbgim.h>
a
j
using namespace std; l
o
P
int main()
{ a a
d t
int gdriver = 9; a
r s
int gmode = 2; b k
e
O t
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE); i
t
setcolor(BLACK); k
e
j
cleardevice(); b
circle(320,240,220); O
circle(220,140,50); -
o i
circle(420,140,50); r
p
circle(320,240,30); i m
a
k
i r
l
getch(); e g
V
closegraph(); e
j
return 0; n
a a
} m d
o
i
ž k
a
S
PRO - MIL 85
Grafika
Crtanje pravokutnika
Naredba za crtanje
rectangle ( 160, 100, 480, 380 ); pravokutnika.
86 PRO - MIL
j
a
ž
r
d
#include <cstdlib> Međusobno možemo kombinirati a
S
#include <iostream> više pravokutnika.
#include <winbgim.h> d
o
v
using namespace std; U
i
int main() v
r m
{ p a
r
š g
int gdriver = 9; a o
r
N p
int gmode = 2;
initgraph(&gdriver, &gmode, ""); e
l
setbkcolor(WHITE); b
a
j
i
setcolor(BLACK); r
a
cleardevice(); V
rectangle (160, 100, 480, 380);
a
rectangle (190, 130, 450, 350); k
i
f
rectangle (220, 160, 420, 320); a
r
rectangle (250, 190, 390, 290); G
getch(); e
j
closegraph(); n e
e k
return 0; š l
u
o d
} n o
o
D
e
j
l
t
Pravokutnik možemo kombini- #include <cstdlib> e
P
rati s drugim oblicima. #include <iostream>
#include <winbgim.h>
Pokušajmo za vježbu sami izmi- a
j
l
sliti nekoliko primjera, npr. deb- using namespace std; o
lo stabla nacrtamo kao pravoku- P
tnik, a krošnju kao kružnicu. int main()
{ a a
int gdriver = 9; d t
a
r s
int gmode = 2; b k
e
O t
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE); i
t
setcolor(BLACK); k
e
j
cleardevice(); b
circle (320, 240, 220); O
circle (220, 140, 50); -
o i
r
circle (420, 140, 50); p
circle (320, 240, 30); i m
a
k
i r
l
rectangle (260, 342, 380, 338); e g
getch(); V
e
j
closegraph(); n
a a
return 0; m d
i o
} ž k
a
S
PRO - MIL 87
Grafika
Crtanje crte
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;
}
Naredba za crtanje
line ( 120, 100, 500, 380 ); crte.
640
100
Funkciju pojedinih
480 brojeva možemo
vidjeti na crtežu.
88 PRO - MIL
j
a
ž
r
d
Napravimo nekoliko crteža upo- a
#include <cstdlib> rabom naredbe za crtanje crte. S
#include <iostream>
#include <winbgim.h> d
o
v
U
using namespace std;
i
v
r m
int main() p a
r
{ š g
a o
r
int gdriver = 9; N p
int gmode = 2;
e
l
initgraph(&gdriver, &gmode, ""); b
setbkcolor(WHITE); a
j
i
r
setcolor(BLACK); a
V
cleardevice();
line (100, 240, 540, 240); a
k
i
line (320, 20, 320, 460); f
a
r
getch();
G
closegraph();
return 0; e
j
n e
} e k
š l
u
o d
n o
o
D
PRO - MIL 89
Grafika
120 380
480
90 PRO - MIL
j
a
ž
r
d
#include <cstdlib> Ovaj način crtanja pogodan a
S
#include <iostream> je za crtanje više crta u nep-
#include <winbgim.h> rekinutom nizu. d
o
v
using namespace std; Pogledajmo ovaj primjer. U
i
int main() v
r m
{ p a
r
š g
int gdriver = 9; a o
r
N p
int gmode = 2;
initgraph(&gdriver, &gmode, ""); e
l
setbkcolor(WHITE); b
a
j
setcolor(BLACK); i
r
a
cleardevice(); V
moveto(160, 240);
lineto(160, 450); a
k
i
f
lineto(480, 450); a
r
lineto(480, 240); G
lineto(160, 240); e
j
lineto(320, 120); n e
e k
lineto(480, 240); š l
u
o d
getch(); n o
o
closegraph(); D
return 0;
e
j
} l
t
e
P
#include <cstdlib>
#include <iostream> a
j
l
Pogledajmo, korak po korak, #include <winbgim.h> o
kako je nastao ovaj crtež. P
PRO - MIL 91
Grafika
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
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>
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;
}
92 PRO - MIL
j
a
ž
r
d
#include <cstdlib> a
S
#include <iostream>
#include <winbgim.h> d
o
v
using namespace std; U
i
int main() v
r m
{ p a
r
š g
int gdriver = 9; a o
r
N p
int gmode = 2;
initgraph(&gdriver, &gmode, ""); e
l
setbkcolor(WHITE); b
a
j
setcolor(BLACK); i
r
a
cleardevice(); V
moveto(160, 240);
lineto(160, 450); a
k
i
f
lineto(480, 450); a
r
lineto(480, 240); G
lineto(160, 240); e
j
getch(); n e
e k
closegraph(); š l
u
o d
return 0; n o
o
} D
#include <cstdlib>
#include <iostream> e
j
l
t
#include <winbgim.h> e
P
using namespace std;
a
j
int main() l
o
{ P
int gdriver = 9;
int gmode = 2; a a
initgraph(&gdriver, &gmode, ""); d t
a
r s
setbkcolor(WHITE); b k
e
O t
setcolor(BLACK);
cleardevice(); i
t
moveto(160, 240); k
e
j
lineto(160, 450); b
lineto(480, 450); O
lineto(480, 240); -
o i
r
lineto(160, 240); p
lineto(320, 120); i m
a
k
i r
l
getch(); e g
closegraph(); V
e
j
return 0; n
a a
} m d
i o
ž k
a
S
PRO - MIL 93
Grafika
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto(160, 240);
lineto(160, 450);
#include <cstdlib> lineto(480, 450);
#include <iostream> lineto(480, 240);
#include <winbgim.h> lineto(160, 240);
lineto(320, 120);
using namespace std; lineto(480, 240);
getch();
int main() closegraph();
{ return 0;
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;
}
94 PRO - MIL
j
a
Crtanje točke ž
r
d
a
S
e
j
l
t
e
P
Naredba za crtanje
putpixel ( 320, 240, BLACK ); točke.
a
j
l
o
P
a a
640 d t
a
r s
Ovdje unosimo boju b k
e
t
točke koju određuje- O
240 mo na isti način kao i
boju pozadine ili boju i
t
k
crte. e
j
b
O
320
-
o i
r
p
i m
a
k
i r
l
e g
V
480 e
j
n
a a
m d
i o
ž k
a
S
PRO - MIL 95
Grafika
Ispis teksta
96 PRO - MIL
j
a
ž
r
d
a
Upotrijebimo li ovu naredbu, #include <cstdlib> S
e
j
l
t
e
#include <cstdlib> Naredbu za određivanje pozici- P
#include <iostream>
#include <winbgim.h> je početka crte možemo iskori-
a
j
stiti za određivanje početka l
o
using namespace std; P
teksta.
int main()
a a
{ d t
a
r s
int gdriver = 9; b k
e
int gmode = 2; O t
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE); i
t
k
setcolor(BLACK); e
j
b
cleardevice(); O
moveto (320, 240); -
outtext ("Ovo je krug."); o i
r
circle (320, 240, 220); p
i m
a
k
i r
getch(); l
e g
closegraph(); V
return 0; e
j
n
} a a
d
m
i o
ž k
a
S
PRO - MIL 97
Grafika
#include <cstdlib>
#include <iostream>
#include <winbgim.h> Naredba outtextxy objedi-
njuje naredbu za određivanje
using namespace std; pozicije teksta i naredbu za
ispis teksta.
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;
}
640
240
480
98 PRO - MIL
j
a
ž
r
d
a
#include <cstdlib> S
#include <iostream> Naredbom settextstyle mo-
d
#include <winbgim.h> žemo mijenjati oblik i veličinu o
v
slova te smjer ispisa teksta. U
using namespace std;
Stavljamo je prije naredbe za i
v
r m
int main() p a
r
{ ispis teksta. š g
a o
r
int gdriver = 9; N p
int gmode = 2;
e
l
initgraph(&gdriver, &gmode, ""); b
setbkcolor(WHITE); a
j
i
r
setcolor(BLACK); a
V
cleardevice();
settextstyle (9, HORIZ_DIR, 1); a
k
i
outtextxy (320, 240, "Ovo je krug."); f
a
circle (320, 240, 220); r
G
getch();
closegraph(); e
j
n e
return 0; e k
š l
u
} o d
n o
o
D
e
j
l
t
e
Naredba za određivanje veličine i oblika slova te smjera ispisa. P
a
j
l
o
P
settextstyle ( 9, HORIZ_DIR, 1 );
a a
d t
a
r s
b k
e
Ovaj broj određuje Veličina slova. O t
oblik slova. Njego-
i
t
va vrijednost može k
biti između 0 i 10. e
j
b
O
Smjer teksta:
-
o i
r
HORIZ_DIR - vodoravni tekst. p
i m
a
k
i r
l
e g
VERT_DIR - uspravni tekst od dolje prema gore. V
e
j
n
-VERT_DIR - uspravni tekst od gore prema dolje. a a
m d
i o
ž k
a
S
PRO - MIL 99
Grafika
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
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); Pogledajmo primjer prom-
outtextxy(320, 200, "Ovo je krug."); jene veličine slova.
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); #include <cstdlib>
outtextxy(320, 320, "Ovo je krug."); #include <iostream>
getch(); #include <winbgim.h>
closegraph();
return 0; using namespace std;
}
int main()
{
int gdriver = 9;
Pogledajmo primjer prom- int gmode = 2;
jene smjera ispisa teksta. 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;
}
j
a
ž
r
d
Pogledajmo primjer promjene a
#include <cstdlib> S
oblika slova.
#include <iostream> d
#include <winbgim.h> o
v
U
using namespace std;
i
v
r m
int main() p a
r
{ š g
a o
r
int gdriver = 9; N p
int gmode = 2; e
l
initgraph(&gdriver, &gmode, ""); b
a
setbkcolor(WHITE); j
i
r
setcolor(BLACK); a
V
cleardevice();
circle (320, 240, 220); a
k
i
f
settextstyle(0, HORIZ_DIR, 3); a
r
outtextxy(320, 40, "Ovo je krug."); G
settextstyle(1, HORIZ_DIR, 3);
e
j
outtextxy(320, 80, "Ovo je krug."); n e
settextstyle(2, HORIZ_DIR, 3); e k
š l
u
outtextxy(320, 120, "Ovo je krug."); o d
n o
o
settextstyle(3, HORIZ_DIR, 3); D
outtextxy(320, 160, "Ovo je krug.");
settextstyle(4, HORIZ_DIR, 3); e
j
l
t
outtextxy(320, 200, "Ovo je krug."); e
P
settextstyle(5, HORIZ_DIR, 3);
outtextxy(320, 240, "Ovo je krug.");
settextstyle(6, HORIZ_DIR, 3); a
j
outtextxy(320, 280, "Ovo je krug."); l
o
settextstyle(7, HORIZ_DIR, 3); P
outtextxy(320, 320, "Ovo je krug.");
settextstyle(8, HORIZ_DIR, 3); a a
d t
outtextxy(320, 360, "Ovo je krug."); a
r s
settextstyle(9, HORIZ_DIR, 3); b k
e
O t
outtextxy(320, 400, "Ovo je krug.");
settextstyle(10, HORIZ_DIR, 3); i
t
outtextxy(320, 440, "Ovo je krug."); k
e
j
getch(); b
closegraph(); O
return 0; -
o i
} r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
Donošenje odluke
e
j
a
ž
r
d
k
a
S
d
o
v
u
U
l
i
v
r m
p a
r
š g
a o
d
r
N p
e
l
b
a
j
o
i
r
a
V
a
k
i
f
a
r
e
G
j
e
j
n e
e k
š l
u
o d
n o
o
n
D
e
j
l
t
e
e
P
a
j
š
l
o
P
o
a a
d t
a
r s
b k
e
O t
n
i
t
k
e
j
b
O
o
-
o i
r
p
i m
a
k
i r
l
e g
D
V
e
j
n
a a
m d
i o
ž k
a
S
Donošenje odluke
Funkcije
Potencija na koju
rezultat = pow ( broj, potencija ); potenciramo.
j
a
ž
r
d
a
Ovo je program za izra- S
#include <cstdlib> čun sinusa.
#include <iostream> d
o
#include <cmath> Ako ne znate što je to v
U
sinus, nemojte se time
using namespace std; opterećivati. To nije bitno i
za razumijevanje C++ v
r m
int main() p a
r
programskog jezika. š g
{ a o
r
N p
float kut; Važno je uočiti da ova
float rezultat; funkcija veličinu kuta ne e
l
cout << "Kut u radijanima:" << endl; b
izražava stupnjevima ne- a
j
i
cin >> kut; go radijanima. r
a
cout << endl; V
rezultat = sin(kut);
a
cout << "Sinus kuta je:" << endl; k
i
f
cout << rezultat << endl; a
r
cout << endl; G
system("PAUSE"); e
j
return 0; n e
e k
} š l
u
o d
n o
o
D
e
j
l
t
e
P
a
j
l
o
P
Varijabla u koju sprema-
mo rezultat.
a a
d t
a
r s
b k
e
O t
Donošenje odluke
Ponekad je u programu
#include <cstdlib> potrebno negativan broj
#include <iostream> pretvoriti u pozitivan.
#include <cmath>
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;
}
Naredba za pretvaranje
negativnog broja u poziti- Varijabla u koju spremamo broj koji
ćemo iz negativnog pretvoriti u poziti-
van broj.
van.
j
a
ž
r
d
a
S
d
#include <cstdlib> o
v
#include <iostream> U
#include <cmath>
i
v
r m
using namespace std; p a
r
Pogledajmo program š g
a o
r
int main() za vađenje kvadratnog N p
{ korijena. e
float broj; l
b
a
j
float rezultat; Što je to uopće kvadra- i
r
cout << "Unesite broj:" << endl; tni korijen? a
V
cin >> broj;
cout << endl; Ako je 4 puta 4, odnos- a
k
rezultat = sqrt(broj); i
f
no 4 na kvadrat, jedna- a
cout << "Kvadratni korijen je:" << endl; r
ko 16, onda je kvadrat- G
cout << rezultat << endl; ni korijen od 16 jedak
cout << endl; e
j
4. n e
system("PAUSE"); e k
š l
u
return 0; o d
n o
} o
D
Varijabla u koju spremamo
Varijabla u koju spre- broj čiji kvadratni korijen e
j
l
t
mamo rezultat. želimo izračunati. e
P
a a
Iako se nam na prvi d t
a
r s
pogled može učiniti b k
e
O t
da je program ispra-
van, to na žalost nije i
tako. Pokušamo li t
k
e
j
kvadratni korijen iz- b
računati iz negativ- O
nog broja dobit ćemo -
besmisleni rezultat. o i
r
p
Do toga dolazi zato i m
a
k
i r
što nije moguće izra- l
e g
čunati kvadratni kori- V
jen iz negativnog e
j
n
broja. a a
m d
i o
ž k
a
S
Donošenje odluke
Donošenje odluke
#include <cstdlib>
#include <iostream>
#include <cmath>
int main()
{
float broj; Ova inačica programa
float rezultat;
cout << "Unesite pozitivan broj." << endl; izračunava kvadratni
cin >> broj; korijen ako smo unijeli
cout << endl;
if (broj < 0) pozitivan broj ili nas
{ obavještava da je une-
cout << "Broj je negativan!" << endl;
} sen negativan broj ako
else unesemo negativan
{
rezultat = sqrt(broj); broj.
cout << "Kvadratni korijen je:" << endl;
cout << rezultat;
cout << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
j
a
ž
r
d
Pogledajmo bitne dijelo- a
#include <cstdlib> S
ve našeg programa.
#include <iostream>
d
#include <cmath> o
v
U
using namespace std; Uobičajen početak prog-
rama. Izvodi se prilikom i
svakog pokretanja prog- v
r m
int main() p a
r
{ rama š g
a o
r
N p
e
l
Formiranje varijabli i b
a
unos broja iz kojeg će- j
i
r
mo vaditi kvadratni kori- a
float broj; V
float rezultat; jen.
cout << "Unesite pozitivan broj." << endl; Izvodi se prilikom sva- a
k
i
f
cin >> broj; kog pokretanja progra- a
r
cout << endl; ma. G
Broj nula. e
j
n e
e k
Naredbom if ispitujemo š l
u
o d
n o
if (broj < 0) je li sadržaj varijable ma- o
nji od nule. D
e
j
l
t
{ e
cout << "Broj je negativan!" << endl; P
Ovaj dio programa izvo-
} di se samo ako je sadr-
žaj varijable broj manji a
j
l
od nule. o
P
else
a a
d t
Naredbom else započi- a
r s
b k
e
nje dio programa koji t
{ O
rezultat = sqrt(broj); se izvodi samo ako i
t
cout << "Kvadratni korijen je:" << endl; k
cout << rezultat; sadržaj varijable broj e
j
b
cout << endl; nije manji od nule. O
} -
o i
r
p
i m
a
k
i r
l
e g
V
cout << endl; Uobičajeni kraj progra- e
j
system("PAUSE"); ma. Izvodi se prilikom n
a a
return 0; svakog pokretanja prog- m d
i o
} rama. ž k
a
S
Donošenje odluke
Svi programi koje smo do sada vidjeli izvodili su se redom od prve do posljed-
nje naredbe. U slučaju programa za vađenje kvadratnog korijena to nam ne
odgovara jer želimo da program na jedan na čin reagira ako unesemo poziti-
van broj, a na drugi način ako unesemo negativan.
Ako unesemo pozitivan broj, izračunat ćemo kvadratni korijen i nećemo ispisi-
vati obavijest da je broj negativan, a ako unesemo negativan broj, ispisat će-
mo obavijest da je broj negativan i ne ćemo računati kvadratni korijen, budući
da iz negativnog broja nije moguće izračunati kvadratni korijen.
j
a
ž
r
d
Da bismo lakše shvatili način korištenja if ... else naredbi, napravit ćemo niz a
S
programa. Ti programi ne će raditi ništa osobito korisno, već će im jedina svrha
biti uvježbavanje pisanja programa unutar kojih ra čunalo donosi odluku. d
o
v
U
i
v
r m
p a
r
š g
#include <cstdlib> a o
r
N p
#include <iostream>
e
l
b
using namespace std; a
j
i
r
a
int main() V
{ a
float broj; k
i
f
cout << "Unesite broj." << endl; a
r
cin >> broj; G
cout << endl; e
j
if (broj > 0) n e
e k
{ š l
u
o d
cout << "Broj je veci od nule." << endl; n o
o
} D
else Ovaj program samo e
j
l
{ ispituje je li unesen t
e
cout << "Broj nije veci od nule." << endl; P
} broj veći od nule.
cout << endl;
system("PAUSE"); a
j
l
return 0; Ako je broj veći od o
P
} nule, izvodi se dio
programa koji ispisu- a a
d t
a
r s
je tekst Broj je veći b k
e
O t
od nule.
i
t
k
e
j
b
Ako broj nije veći od O
nule, izvodi se dio -
o i
r
programa koji ispisu- p
i m
a
k
i r
l
je tekst Broj nije e g
V
veći od nule. e
j
n
a a
m d
i o
ž k
a
S
Donošenje odluke
#include <cstdlib>
#include <iostream>
Ako je odgovor na pitanje
using namespace std;
je li sadržaj varijable broj
int main()
{ jednak nuli DA, izvršit će
float broj; se ovaj dio programa.
cout << "Unesite broj." << endl;
Ispisat će se poruka Broj
cin >> broj;
cout << endl; je jednak nuli.
if (broj == 0)
{ Ako je odgovor na pitanje
cout << "Broj je jednak nuli." << endl;
je li sadržaj varijable broj
}
else jednak nuli NE, izvršit će
{
se ovaj dio programa.
cout << "Broj nije jednak nuli." << endl;
} Ispisat će se poruka Broj
cout << endl;
nije jednak nuli .
system("PAUSE");
return 0;
}
j
a
ž
r
d
a
S
d
o
v
U
i
v
r m
p a
r
#include <cstdlib> š g
a o
r
#include <iostream> N p
e
l
using namespace std; b
a
j
i
r
int main() a
V
{
float broj; a
k
i
cout << "Unesite broj." << endl; Vidjeli smo da možemo f
a
cin >> broj; r
G
cout << endl; ispitivati je li varijabla
if (broj < 100) e
j
veća, manja ili jednaka n e
{ e k
š l
u
cout << "Broj je manji od sto." << endl; nekom broju. o d
n o
} o
U dosadašnjim primje- D
else
{ rima to je bio broj nula, e
j
l
cout << "Broj nije manji od sto." << endl; t
ali to može biti bilo koji e
} P
cout << endl; broj, npr. broj 100 kao
system("PAUSE"); što je to slučaj u ovom a
return 0; j
l
o
} primjeru. P
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
Donošenje odluke
#include <cstdlib>
#include <iostream>
int main()
{ Ovdje ispitujemo jesu li sa-
float prvi; držaji dviju varijabli u koje
float drugi;
cout << "Unesite prvi broj." << endl; smo prethodno unijeli broje-
cin >> prvi; ve jednaki.
cout << endl;
cout << "Unesite drugi broj." << endl;
cin >> drugi; Ako unesemo jednake bro-
cout << endl;
if (prvi == drugi) jeve ispisat, će se obavijest
{ Brojevi su jednaki.
cout << "Brojevi su jednaki." << endl;
}
else Ako unesemo različite, ispi-
{
cout << "Brojevi su razliciti." << endl; sat će se obavijest Brojevi
} su različiti.
cout << endl;
system("PAUSE");
return 0;
}
j
a
ž
r
d
U ovom primjeru ispitujemo je a
S
li sadržaj varijable prvi manji
od sadržaja varijable drugi. d
o
v
U
e
l
int main() b
{ a
j
i
r
float prvi; a
V
float drugi;
cout << "Unesite prvi broj." << endl; a
k
i
cin >> prvi; f
a
cout << endl; r
G
cout << "Unesite drugi broj." << endl;
cin >> drugi; e
j
n e
cout << endl; e k
š l
u
if (prvi < drugi) o d
n o
{ o
D
cout << "Prvi broj je manji." << endl;
} e
j
l
else t
e
{ P
cout << "Prvi broj nije manji." << endl;
} a
cout << endl; j
l
o
system("PAUSE"); P
return 0;
} a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
Donošenje odluke
#include <cstdlib>
#include <iostream>
int main()
{
float prvi;
float drugi;
cout << "Unesite prvi broj." << endl;
cin >> prvi;
cout << endl;
cout << "Unesite drugi broj." << endl; Osim jednos-
cin >> drugi; tavnih ispitiva-
cout << endl; nja if nared-
if ((prvi < 5) && (drugi < 5)) bom, moguća
{ su i složenija
cout << "Oba broja su manja od pet." << endl; ispitivanja.
}
else
{
cout << "Oba broja nisu manja od pet." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
j
a
ž
r
d
Prilikom formiranja složenih uvjeta moramo paziti na raspored zagrada. Svaki a
S
uvjet, prvi i drugi nalaze se unutar svojih zagrada, a svi zajedno nalaze se
d
unutar još jednog para zagrada. o
v
U
i
v
r m
p a
r
š g
a o
r
if ( (prvi < 5) && (drugi < 5) ) N p
e
l
b
a
{ j
i
r
a
V
a
} Postavlja se pitanje u kojem slučaju će se j
l
o
P
izvršavati sadržaj a, a u kojem slučaju sa-
držaj b.
a a
d t
a
r s
b k
e
O t
Ovim oznakama naređujemo računalu da
će se sadržaj a izvoditi samo onda kad su i
t
k
zadovoljena oba uvjeta; u našem slučaju e
j
b
O
kad je sadržaj varijable prvi manji od 5 i
-
kad je sadržaj varijable drugi manji od 5. o i
r
p
i m
a
k
i r
l
e g
U svim ostalim slučajevima izvršit će se V
e
j
sadržaj b. n
a a
m d
i o
ž k
a
S
Donošenje odluke
#include <cstdlib>
#include <iostream>
int main()
{
float prvi;
float drugi;
cout << "Unesite prvi broj." << endl;
cin >> prvi;
cout << endl;
cout << "Unesite drugi broj." << endl; Ako umjesto ozna-
cin >> drugi; ka && stavimo
cout << endl; oznake || ukupni
if ((prvi < 5) || (drugi < 5)) uvjet bit će zado-
{ voljen ako je ba-
cout << "Barem jedan je manji od 5." << endl; rem jedan od dva
} uvjeta zadovoljen.
else
{
cout << "Niti jedan nije manji od 5." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
j
a
ž
r
d
a
Ovdje možemo vidjeti primjere jednostavnih ispitivanja na temelju kojih raču- S
nalo donosi odluku koji dio programa će se izvoditi, a koji preskočiti.
d
o
v
Ovo su samo neki primjeri, dok je broj mogu ćih kombinacija praktički neog- U
raničen. Bilo koju varijablu koju koristimo u programu možemo usporediti s
bilo kojim brojem. i
v
r m
p a
r
Isto tako bilo koje dvije varijable koje se koriste u programu možemo među- š g
a o
r
sobno uspoređivati. N p
e
l
b
a
j
i
r
a
V
Primjeri jednostavnih ispitivanja
a
k
i
f
a
r
if (broj < 0) Ispitujemo je li sadržaj varijable broj manji od broja nula.
G
e
j
n e
if (broj > 0) Ispitujemo je li sadržaj varijable broj veći od broja nula. e k
š l
u
o d
n o
o
D
if (broj == 0) Ispitujemo je li sadržaj varijable broj jednak broju nula.
e
j
l
t
e
Ispitujemo je li sadržaj varijable broj manji od broja pede- P
if (broj < 50)
set.
a
j
l
o
if (broj > 50) Ispitujemo je li sadržaj varijable broj veći od broja pedeset. P
a a
if (broj == 50) Ispitujemo je li sadržaj varijable broj jednak broju pedeset. d t
a
r s
b k
e
O t
Ispitujemo je li sadržaj varijable broj različit od broja pede-
if (broj != 50) i
set. t
k
e
j
b
Ispitujemo je li sadržaj varijable prvi veći od sadržaja vari- O
if (prvi > drugi) jable drugi. -
o i
r
p
Ispitujemo je li sadržaj varijable prvi manji od sadržaja i m
a
if (prvi < drugi) k
i r
l
varijable drugi. e g
V
e
j
Ispitujemo je li sadržaj varijable prvi jednak sadržaju vari- n
if (prvi == drugi) a a
jable drugi. m d
i o
ž k
a
S
Donošenje odluke
Simbol && između dva uvjeta znači da oba uvjeta moraju biti zadovoljena da
bi bio zadovoljen ukupni uvjet.
j
a
ž
r
d
a
S
Donošenje odluke
#include <cstdlib>
#include <iostream>
int main()
{ Osim što možemo u pro-
float broj; gramu imati veoma slože-
cout << "Unesite broj." << endl; na ispitivanja unutar if
cin >> broj; naredbe, moguće je jed-
if (broj < 0) nu if naredbu staviti unu-
{ tar druge if naredbe.
cout << "Broj je manji od 0." << endl;
} To je nužno ako želimo
else ispitati više stvari, npr. je
{ li neki broj veći od nule ili
if (broj > 0) jednak nuli ili je manji od
{ nule. Takvo ispitivanje ne
cout << "Broj je veci od 0." << endl; možemo napraviti s jed-
} nom if naredbom, nego
else su nužne dvije if nared-
{ be.
cout << "Broj je 0." << endl;
} Pogledajmo ovaj prog-
} ram.
cout << endl;
system("PAUSE");
return 0;
}
j
a
ž
r
d
a
Pogledamo strukturu S
#include <cstdlib> programa.
d
#include <iostream> o
v
U
using namespace std;
i
Početak programa. v
r m
int main() p a
r
{ š g
a o
r
float broj; N p
cout << "Unesite broj." << endl; e
Prva if naredba. Ispitu- l
cin >> broj; b
a
je je li broj manji od 0. j
i
r
a
V
if (broj < 0)
a
k
i
{ f
Ako je uneseni broj a
r
cout << "Broj je manji od 0." << endl; manji od 0, izvodi se G
} ovaj dio. e
j
n e
else e k
š l
u
o d
n o
o
{ D
if (broj > 0) Ako uneseni broj nije
manji od 0, izvodi se e
j
l
ovaj dio. Unutar ovog t
{ e
dijela nalazi se druga P
cout << "Broj je veci od 0." << endl;
} if naredba.
a
j
else l
o
P
Ako je uneseni broj
{ veći od 0, izvodi se
cout << "Broj je 0." << endl; ovaj dio. a a
d t
} a
r s
b k
e
O t
}
Ako uneseni broj nije i
t
k
veći od 0, izvodi se e
j
cout << endl; ovaj dio. b
system("PAUSE"); O
return 0; Ako uneseni broj nije -
o i
} r
ni veći ni manji od p
i m
nule, onda znamo da k a
i r
l
je nula. e g
V
e
j
n
a a
m d
i o
Kraj programa. ž k
a
S
Donošenje odluke
j
a
ž
r
d
a
Pogledajmo strukturu S
#include <cstdlib> uvlačenja redova.
d
#include <iostream> o
v
U
using namespace std;
Bez uvlačenja piše se i
v
r m
int main() početak programa i dvije p a
r
{ glavne vitičaste zagrade. š g
a o
r
N p
float broj; e
l
cout << "Unesite broj." << endl; b
a
j
i
cin >> broj; Sadržaj unutar glavnih r
a
vitičastih zagrada uvlači V
se u desnu stranu.
if (broj < 0) a
k
i
Na toj razini piše se f
a
r
{ većina jednostavnih G
cout << "Broj je manji od 0." << endl; naredbi.
e
j
} n e
e k
š l
u
o d
else n o
Sadržaji unutar if na- o
D
{ redbe dodatno se pomi-
if (broj > 0) ču u desnu stranu. e
j
l
t
e
To nam pomaže da P
{
cout << "Broj je veci od 0." << endl; lakše uočimo gdje poči-
} nje, a gdje završava if
a
j
naredba. l
o
else P
{ a a
Ako se unutar jedne if d t
cout << "Broj je 0." << endl; a
r s
} naredbe nalazi druga if b k
e
O t
naredba, njen sadržaj
} dodatno se pomiče u i
desnu stranu. t
k
e
j
b
cout << endl; To nam pomaže da O
system("PAUSE"); lakše uočimo gdje poči- -
nje i gdje završava dru- o i
r
return 0; p
ga if naredba te poma- i m
} k a
i r
l
že da njen sadržaj lak- e g
še razlikujemo od sadr- V
žaja prve if naredbe. e
j
n
a a
m d
i o
ž k
a
S
Donošenje odluke
Switch naredba
#include <cstdlib>
#include <iostream>
int main()
{
float a;
float b; If naredba nam
int od; omogućuje gra-
cout << "Unesite 1. broj:" << endl; nanje na dvije
cin >> a; grane. Jedna će
cout << "Unesite 2. broj:" << endl; se izvršiti ako je
cin >> b; uvjet zadovo-
cout << "Brojeve cemo:" << endl; ljen, a druga ako
cout << "1 - zbrojiti" << endl; uvjet nije zado-
cout << "2 - oduzeti" << endl; voljen.
cout << "3 - mnoziti" << endl;
cout << "4 - dijeliti" << endl; Primjena nared-
cin >> od; be if nije ele-
switch (od) gantna ako se u
{ programu javi
case 1: potreba za gra-
cout << a << " + " << b << " = " << a + b << endl; nanjem u više
break; od dvije grane.
case 2:
cout << a << " - " << b << " = " << a - b << endl;
break; U ovom progra-
case 3: mu biramo jed-
cout << a << " x " << b << " = " << a * b << endl; nu od četiri ra-
break; čunske operaci-
case 4: je.
cout << a << " : " << b << " = " << a / b << endl;
break; Program bismo
default: mogli realizirati i
cout << "Morate unijeti 1,2,3 ili 4." << endl; uporabom više
} if naredbi, ali
cout << endl; daleko je ele-
system("PAUSE"); gantniji ako upo-
return 0; trijebimo switch
} naredbu.
j
a
ž
r
d
Početak switch naredbe. Ovdje se nalazi int varijabla. Grana- a
S
nje se vrši na temelju broja koji se
nalazi u varijabli. Int tip je obvezan. d
o
v
U
Na temelju slične
case 4: logike biraju se a a
d t
cout << "Cetvrti izbor." << endl; ostali case dijelovi a
r s
b k
kojih može biti pro- e
t
break; izvoljni broj.
O
i
t
k
default: (U našem slučaju e
j
b
imamo još case 3: O
i case 4:.)
cout << "Greska!!!" << endl; -
o i
r
p
i m
a
k
i r
l
} e g
V
Ovaj dio izvršava se ako ni jedan case uvjet e
j
nije zadovoljen, dakle ako u varijabli od nije bio n
a a
ni broj 1, ni broj 2, ni broj 3, ni broj 4. m d
i o
Kraj switch naredbe. ž k
a
S
Petlje
j
a
ž
r
d
a
S
d
o
v
U
i
v
r m
p a
r
š g
a o
r
N p
e
l
b
a
j
i
r
a
V
e
a
k
j
i
f
a
r
l
G
e
t
j
n e
e k
š l
u
o d
n o
o
e
D
e
j
l
t
e
P
P a
j
l
o
P
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
Petlje
For petlja
j
a
ž
r
d
Ključna naredba u novoj inačici programa je for naredba. Omogućuje nam a
S
izvršavanje dijela programa više puta. To višestruko ponavljanje dijela prog-
rama naziva se programska petlja. Slično kao if naredba, i for naredba je d
veoma složena i proteže se kroz više redova programa. o
v
U
Pogledajmo sastavne elemente for naredbe.
i
v
r m
p a
r
š g
a o
r
Ovdje se definira početna Petlja će se vrtjeti, odnosno petlja će po- N p
vrijednost varijable koju navljati dio programa, tako dugo dok je e
l
koristi for naredba i koju ovaj uvjet zadovoljen; u našem slučaju, b
a
j
prije for naredbe moramo tako dugo dok je sadržaj varijable x manji i
r
formirati. od 365. a
V
U našem slučaju početna Kad uvjet više nije zadovoljen; tj. kad x više a
k
vrijednost varijable x je i
f
ne bude manji od 365, program će nastavit a
r
260. izvođenje od prve naredbe nakon druge G
vitičaste zagrade.
e
j
n e
e k
š l
u
o d
n o
o
D
Petlje
int main()
{
j
a
ž
r
d
Nemojmo se obeshrabriti ako nam trenutno nije previše jasno ni kako for a
S
naredba radi, ni čemu bi to trebalo služiti. Na početku su takve nedoumice
normalne i nipošto nisu dokaz da nismo talentirani za programiranje. d
o
v
U
Takve nedoumice prevladavaju se tako da napišemo odre đenu količinu pro-
grama jer ćemo jedino na taj način do kraja shvatiti kako for naredba radi i i
čemu služi. v
r m
p a
r
š g
Drugačiji je problem ako nam se ne da pisati programe. Onda bismo doista a o
r
N p
mogli konstatirati da programiranje nije za nas i trebali bismo se pokušati
baviti nečim intelektualno manje zahtjevnim, npr. nogometom ili politikom. e
l
b
a
j
i
r
a
V
Ovaj će nam program po-
#include <cstdlib> moći da lakše shvatimo a
k
i
funkcioniranje if naredbe. f
#include <iostream> a
r
#include <winbgim.h> Vrijednost varijable x mije- G
njat će se od 0 do 9 po 1. e
j
using namespace std; n e
e k
Jedino što ovaj program š l
u
o d
int main() radi jest ispisivanje sadržaj n o
o
{ varijable x. D
int x;
To nam omogućuje lako e
j
cout << "Prije for naredbe." << endl; l
t
for (x = 0; x < 9; x = x + 1 ) opažanje kako se sadržaj e
P
{ varijable x mijenja, te koji
cout << x << endl; dio programa se ponavlja i
} koliko puta. a
j
l
cout << "Nakon for naredbe." << endl; o
P
cout << endl; Unošenjem varijacija u taj
system("PAUSE"); program najlakše ćemo
return 0; shvatiti for naredbu. a a
d t
} a
r s
b k
e
O t
i
t
k
e
j
b
O
Vidimo da se ponavlja -
o i
sadržaj unutar viti častih r
p
zagrada for naredbe. i m
a
k
i r
l
e g
V
Sadržaj prije i sadržaj pos- e
j
lije for naredbe ne ponav- n
a a
lja se. m
i
d
o
ž k
a
S
Petlje
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
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;
}
j
a
ž
r
d
a
S
d
o
v
U
#include <cstdlib>
#include <iostream> i
#include <winbgim.h> v
r m
p a
r
š g
using namespace std; a o
r
N p
e
j
l
t
e
P
Petlje
#include <cstdlib>
#include <iostream> Prilikom formiranja for nared-
#include <winbgim.h> be moguće je napraviti grešku
koja se naziva “mrtva petlja”.
using namespace std;
Do te greške dolazi kad uvjete
int main() za kraj petlje tako formuliramo
{ da se oni nikad neće ispuniti,
int x; pa će se petlja vječno izvoditi.
cout << "Prije for naredbe." << endl;
for (x = 18; x > -9; x = x + 2 ) U ovom primjeru početna vri-
{ jednost je 18. Ta početna vri-
cout << x << endl; jednost uvećava se za 2, a
} petlja će se ponavljati tako
cout << "Nakon for naredbe." << endl; dugo dok je x veći od –9.
cout << endl;
system("PAUSE"); Ako 18 uvećavamo za 2, x će
return 0; uvijek biti veći od –9 i petlja se
} nikad neće prekinuti.
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;
}
j
a
ž
r
d
a
Naredba for ne postoji zato da bi se niz brojeva ispisao na zaslon ra čunala, S
nego zato da bi se u programu postigli odre đeni efekti.
d
o
Iako to nije uvijek slučaj, najčešće se za postizanje željenih ciljeva koristi va- v
U
rijabla petlje. Pogledajmo nekoliko primjera.
i
v
r m
p a
r
š g
a o
r
#include <cstdlib> Ovaj primjer sličan je primjeru N p
#include <iostream> na početku ovog poglavlja. e
l
#include <winbgim.h> b
a
j
Razlika je u tome što su u ovom i
r
using namespace std; a
slučaju drugačije početna i kraj- V
nja vrijednost x varijable, pa
int main() smo dobili drugačiji niz kružnica. a
k
i
f
{ a
r
int gdriver = 9; U ovom slučaju vrijednost varija- G
int gmode = 2; ble x mijenja se od 60 do 580 po
int x; e
j
5. n e
initgraph(&gdriver, &gmode, ""); e k
š l
u
setbkcolor (WHITE); o d
Pokušamo sami mijenjati vrijed- n o
o
setcolor (BLACK); nosti unutar for naredbe i pro- D
cleardevice(); matrajmo kakve efekte će izaz-
for (x = 60; x < 580; x = x + 5 ) vati te promjene. e
j
l
t
{ e
P
circle(x,240,60);
}
getch(); a
j
l
closegraph(); o
return 0; P
}
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
Petlje
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice(); Varijablu x možemo staviti umjesto
for (x = 60; x < 390; x = x + 5 ) broja koji određuje udaljenost središ-
{
circle(320,x,60); ta od gornjeg ruba, pa će se kružni-
} ce crtati od gore prema dolje.
getch();
closegraph();
return 0;
} #include <cstdlib>
#include <iostream>
#include <winbgim.h>
j
a
ž
r
d
a
#include <cstdlib> S
#include <iostream>
d
#include <winbgim.h> o
v
U
using namespace std;
i
v
r m
int main() p a
r
{ š g
a o
r
int gdriver = 9; N p
int gmode = 2;
e
l
int x; b
initgraph(&gdriver, &gmode, ""); a
j
i
r
setbkcolor (WHITE); a
V
setcolor (BLACK);
cleardevice(); a
k
i
for (x = 20; x < 210; x = x + 10 ) Osim pozicije središta kružnice, f
a
r
{ varijablom x možemo mijenjati G
circle(320,240,x);
} polumjer kružnice. e
j
n e
getch(); e k
š l
u
closegraph(); o d
n o
return 0; o
D
}
#include <cstdlib> e
j
l
t
#include <iostream> e
P
#include <winbgim.h>
Petlje
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice(); Ovo je primjer programa koji crta
for (x = 10; x < 640; x = x + 30 ) niz pravokutnika.
{
rectangle (x, 20, x+20, 380);
}
getch();
closegraph();
return 0; #include <cstdlib>
} #include <iostream>
#include <winbgim.h>
j
a
ž
r
d
Pogledajmo bitne dijelove ovog programa. a
S
d
o
v
Za razliku od dosadašnjih primje- U
#include <cstdlib> ra, u ovom formiramo još jednu
#include <iostream> varijablu koju smo nazvali r . i
#include <winbgim.h> v
r m
p a
r
š g
using namespace std; a o
r
N p
Petlje
Animacija
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
int main()
{
Ovom inačicom programa dobit int gdriver = 9;
ćemo privid kretanja pravokutnika. int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 10; x < 620; x = x + 1 )
Pravokutnik koji se kreće {
na zaslonu računala. cleardevice();
rectangle (x, 20, x+20, 60);
}
getch();
Ovom naredbom brišemo ekran, a closegraph();
time i pravokutnik na staroj poziciji. return 0;
}
j
a
ž
r
d
a
#include <cstdlib> S
#include <iostream>
d
#include <winbgim.h> o
v
U
using namespace std;
i
v
r m
int main() p a
r
{ š g
a o
r
int gdriver = 9; N p
int gmode = 2; e
l
int x; b
a
j
initgraph(&gdriver, &gmode, ""); i
r
setbkcolor (WHITE); a
V
setcolor (BLACK); Sve grafičke elemente koje
cleardevice(); smo do sada mijenjali možemo a
k
for (x = 10; x < 200; x = x + 1 ) i
f
animirati. a
r
{ G
cleardevice(); U ovom programu animiramo
circle (320, 240, x); e
j
širenje kružnice. n e
} e k
š l
u
getch(); o d
n o
closegraph(); o
D
return 0; #include <cstdlib>
} #include <iostream> e
j
l
t
#include <winbgim.h> e
P
using namespace std;
a
j
int main() l
o
{ P
U ovom primjeru animiramo kružnicu
koja pada od gornjeg prema donjem int gdriver = 9;
rubu . int gmode = 2; a a
int x; d t
a
r s
initgraph(&gdriver, &gmode, ""); b k
e
O t
setbkcolor (WHITE);
setcolor (BLACK); i
t
cleardevice(); k
e
j
for (x = 10; x < 465; x = x + 1 ) b
{ O
cleardevice(); -
o i
r
circle (320, x, 10); p
} i m
a
k
i r
l
getch(); e g
closegraph(); V
e
j
Pokušajmo sami smi- return 0; n
sliti slične programe. a a
} m d
i o
ž k
a
S
Petlje
Petlja u petlji
j
a
ž
r
d
Analiziranje ovog a
#include <cstdlib> S
programa pomoći
#include <iostream> će nam da u pot- d
punosti razumije- o
v
using namespace std; mo način funkcio- U
niranja petlje unu-
int main() i
tar petlje. v
r m
{ p a
r
int x; š g
Pri tome nismo a o
r
int r; ograničeni na to N p
cout << "Prije petlje." << endl; da možemo staviti e
for (x = 0; x < 2; x = x + 1 ) l
jednu petlju unutar b
a
j
{ petlje. Moguće je i
r
cout << "Vanjska petlja. x = " << x << endl; a
unutar petlje staviti V
for (r = 0; r < 3; r = r + 1) petlju, a unutar te
{ petlje još jednu a
k
i
cout << "Nutarnja petlja. r = " << r << endl; petlju i tako petlje f
a
} r
dodavati u skladu G
} s ciljevima koje
cout << "Nakon petlje." << endl; e
j
želimo postići. n e
cout << endl; e k
š l
u
system("PAUSE"); o d
n o
return 0; o
D
}
e
j
l
t
e
P
a
j
l
o
Da bi rezultat rada programa P
bio bolje vidljiv, ovdje smo
naredbu cout koristili na na- a a
čin na koji je do sada nismo d t
a
r s
koristili. U ovoj inačici sadrži b k
e
O t
tri dijela.
i
t
k
e
j
b
O
cout << "Vanjska petlja. x = " << x << endl; -
o i
r
p
i m
a
k
i r
l
e g
V
Tekst unutar navodnika Sadržaj varijable x ispisu- e
Skok u novi j
ispisuje se na zaslon raču- n
a a
je se na zaslon računala. red. d
nala. m
i o
ž k
a
S
Petlje
Niz petlji
j
a
Dozvoljene i nedozvoljene kombinacije petlji ž
r
d
a
S
d
for (x = 30; x < 610; x = x + 60) o
v
{ U
a
k
i
f
a
r
for (x = 465; x < 100; x = x - 1) G
{ e
j
n e
circle (320, x, 10); e k
š l
u
o d
} Petlje se mogu na- n o
o
D
laziti jedna iza dru-
ge
for (r = 10; r < 91; y = y + 1) e
j
l
t
e
{ P
circle (320, x, r);
} a
j
l
o
P
a a
d t
a
r s
U ovom slučaju b k
for (x = 465; x < 100; x = x - 1) O
e
t
Petlje
While petlja
U čemu je razlika?
Naredba for pogodnija je za
točno određen broj ponav-
ljanja, a naredba while on-
da kad unaprijed ne može-
mo znati broj ponavljanja.
j
a
ž
r
d
Ključna naredba u novoj ina čici programa je while naredba. Logika uporabe a
S
te naredbe slična je logici uporabe for naredbe i ako bismo se potrudili svaki
program realiziran for naredbom mogli bismo realizirati while naredbom i d
o
svaki program realiziran while naredbom mogli bismo realizirati for nared- v
U
bom.
i
Zašto imamo dvije naredbe ako rade isti posao? v
r m
p a
r
š g
Zato što se neke stvari mogu lakše realizirati for naredbom, a neke while a o
r
N p
naredbom. Pogledajmo elemente while naredbe.
e
l
b
a
j
i
r
a
V
Prije naredbe while Ovdje se unutar zagrada nalazi uvjet koji a
moramo varijabli koju k
i
f
a
će while naredba koris- while naredba ispituje. Uvjeti se formiraju r
G
titi dati neku početnu po istoj logici kao i kod for naredbe.
vrijednost. e
j
n e
e k
š l
u
o d
Ako je uvjet zadovoljen, izvršit će se na- n o
o
D
redbe unutar viti častih zagrada, a nakon
a = 1; toga se računalo vraća na while naredbu e
j
l
t
e
i ponovo ispituje je li uvjet zadovoljen. P
while (a == 1)
a
j
Ako jest, ponovo se izvode naredbe unu- l
o
{ tar vitičastih zagrada. P
a a
cin >> a; Ako nije, izvodi se prva naredba poslije
d t
a
r s
b k
e
O t
druge vitičaste zagrade.
}
i
t
k
U našem slučaju ispituje se je li sadržaj e
j
b
O
varijable a jednak broju 1. Zato prije
Da bi se ponavljanje u -
o i
nekom trenutku preki- while naredbe moramo u varijablu a sta- r
p
nulo, unutar viti častih i m
a
viti broj jedan. Kad bi u varijabli a bio neki k
i r
l
zagrada varijabli koju e g
while naredba ispituje drugi broj, računalo bi skočilo na prvi red V
e
j
treba promijeniti vrijed- nakon druge vitičaste zagrade. n
a a
nost. m
i
d
o
ž k
a
S
Petlje
odgovor = 1;
Naredba while ispituje je li sadržaj
varijable odgovor jednak broju 1.
j
a
ž
r
d
Varijablu koju će koristiti while naredba moramo prije while naredbe a
S
formirati i moramo joj dati odgovarajuću početnu vrijednost.
d
o
Zašto je u našem slučaju odgovarajuća početna vrijednost 1? v
U
Zato što while naredba ispituje je li vrijednost varijable odgovor 1. i
v
r m
Ako bi vrijednost varijable odgovor bila npr. 2, nakon while naredbe p a
r
š g
program bi skočio na ovu naredbu i sadržaj unutar navodnika ne bi se a o
r
N p
izvršavao.
e
l
b
a
j
i
r
a
V
#include <cstdlib>
a
#include <iostream> k
i
f
a
r
using namespace std; G
e
j
int main() n e
e k
{ š l
u
o d
int odgovor; n o
o
odgovor = 1; D
cout << "Prije while naredbe." << endl;
e
j
while (odgovor == 1) l
t
{ e
P
cout << "Prvi red bloka ponavljanja" << endl;
cout << "1 = nastavak ili 2 = kraj." << endl;
cin >> odgovor; a
j
l
cout << "Zadnji red bloka ponavljanja" << endl; o
P
}
cout << "Nakon while naredbe." << endl;
cout << endl; a a
d t
system("PAUSE"); a
r s
b k
e
return 0; O t
}
i
t
k
e
j
b
O
-
Ovdje naredbom cin pre- o i
r
ko tipkovnice unosimo p
i m
a
k
i r
novu vrijednost varijable l
e g
odgovor i time biramo V
hoćemo li petlju ponoviti ili e
j
n
ćemo izaći iz programa. a a
m d
i o
ž k
a
S
Petlje
Da bi to bilo moguće, upotrijebili smo novi tip varijable, varijablu char tipa u
koju možemo spremiti jedno slovo.
#include <cstdlib>
#include <iostream>
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;
}
j
a
ž
r
d
Pogledajmo pobliže dijelove programa. Uobi čajeni početak programa. a
S
d
o
v
U
Petlje
#include <cstdlib>
#include <iostream> While naredbu možemo iskoris-
#include <winbgim.h> titi i za višestruko pokretanje
using namespace std; grafičkih programa.
int main()
{ Mala kružnica kreće se od gore
int gdriver = 9; prema dolje, a zatim nas ra ču-
int gmode = 2;
int x; nalo pita želimo li ponoviti ani-
char odgovor; maciju.
odgovor = 'd';
initgraph(&gdriver, &gmode, ""); U ovom programu koristimo dvi-
setbkcolor (WHITE); je različite vrste petlji.
setcolor (BLACK);
while (odgovor != 'n')
{ While naredbom ponavlja se
cleardevice();
for (x = 10; x < 465; x = x + 1 ) animacija, a for naredbom, koja
{ se nalazi unutar while petlje,
cleardevice();
circle (320, x, 10); animira se kretanje kružnice.
}
settextstyle(9, HORIZ_DIR, 1);
outtextxy(20, 20, "Želite li ponovo (d/n)?"); U grafičkom prozoru
odgovor = getch(); za unos slova u vari-
} jablu odgovor ne
closegraph(); koristi se cin nared-
return 0; ba, nego getch() na-
} redba.
j
a
ž
r
d
Pogledajmo dijelove našeg programa. a
S
d
o
#include <cstdlib> v
Uobičajeni početak programa. U
#include <iostream>
#include <winbgim.h> i
v
r m
p a
r
using namespace std; Formiranje varijabli. š g
a o
r
N p
int main()
{ e
l
Formiranje varijable odgovor . Ta b
a
varijabla je char tipa i koristit će je j
i
r
int gdriver = 9; while petlja unutar koje se nalazi a
V
int gmode = 2; program za animaciju.
int x; a
k
i
Služi nam za biranje ponavljanja f
a
char odgovor; animacije ili kraja programa. U vari-
r
G
odgovor = 'd'; jablu odgovor sprema se slovo d.
e
j
n e
initgraph(&gdriver, &gmode, ""); e k
š l
u
setbkcolor (WHITE); o d
n o
setcolor (BLACK); o
D
Otvaranje grafičkog
while (odgovor != 'n') prozora. e
j
l
t
e
{ P
Vanjska while petlja.
cleardevice();
a
j
l
o
for (x = 10; x < 465; x = x + 1 ) P
For petlja služi za iz-
{
cleardevice(); vođenje animacije.
a a
circle (320, x, 10); d t
a
r s
} b k
e
O t
settextstyle(9, HORIZ_DIR, 1); Nakon izvođenja ani-
i
t
outtextxy(20, 20, "Želite li ponovo (d/n)?"); macije unosi se odgo- k
odgovor = getch(); vor na pitanje želimo li e
j
b
ponoviti animaciju. O
} -
o i
r
p
closegraph(); i m
a
k
i r
return 0; l
e g
} V
Kraj programa. Ovaj dio izvodi se kad e
j
while naredba ustanovi da sadržaj n
a a
varijable odgovor nije različit od n. m d
i o
ž k
a
S
Petlje
Ovaj program već bismo mogli smatrati jednim elementom primitivne igrice.
Dovoljno bi bilo dodati kretanje malih kružnica od gore prema dolje i broja č koji
bi brojio koliko kružnica smo ovim pravokutnikom uspjeli “uhvatiti”.
Umjesto:
int x; #include <cstdlib>
x =290; #include <iostream>
#include <winbgim.h>
možemo napisati
int x = 290; using namespace std;
int main()
{
int gdriver = 9;
int gmode = 2;
int x = 290;
Umjesto: char odgovor = 'd';
char odgovor; initgraph(&gdriver, &gmode, "");
odgovor = ‘d’; setbkcolor (WHITE);
setcolor (BLACK);
možemo napisati cleardevice();
char odgovor = 'd'; while (odgovor != 'k')
{
rectangle(x, 432, x+60, 438);
odgovor = getch();
if (odgovor == 75)
{
x = x - 5;
Pravokutnik koji može- }
mo pomicati u lijevu i if (odgovor == 77)
desnu stranu. {
x = x + 5;
}
cleardevice();
}
closegraph();
return 0;
}
j
a
ž
r
d
Pogledajmo dijelove našeg programa. a
S
d
#include <cstdlib> o
Uobičajeni početak programa, v
#include <iostream> formiranje varijabli i otvaranje U
#include <winbgim.h> grafičkog prozora.
i
v
r m
using namespace std; p a
r
š g
a o
r
int main() Cijelo vrijeme dok naša pri- N p
{ mitivna igrica radi, vrtjet će e
se u ovoj while petlji. l
int gdriver = 9; b
a
j
int gmode = 2; i
r
Ako pritisnemo tipku k prog- a
int x = 290; V
char odgovor = 'd'; ram će izaći iz petlje i naša
initgraph(&gdriver, &gmode, ""); igrica će se ugasiti. a
k
i
setbkcolor (WHITE); f
a
r
setcolor (BLACK); G
cleardevice(); Ovdje se crta pravokutnik koji e
j
pomičemo. n e
e k
while (odgovor != 'k') š l
u
o d
{ n o
o
D
rectangle(x, 432, x+60, 438); Ovdje program ispituje koja
tipka je pritisnuta, a rezultat e
j
l
t
odgovor = getch(); sprema u varijablu odgovor . e
P
if (odgovor == 75)
{ Ako pritisnemo lijevu strelicu, varija- a
j
l
x = x - 5; bla x, koja određuje udaljenost pra- o
P
} vokutnika od lijeve strane, umanjit
će se za 5, pa će se pravokutnik
if (odgovor == 77) drugi put crtati pomaknut 5 točaka u a a
d t
{ lijevu stranu. a
r s
x = x + 5; b k
e
O t
}
i
t
cleardevice(); Ako pritisnemo desnu strelicu, varija- k
bla x će se uvećati za 5, pa će se e
j
b
} pravokutnik drugi put crtati pomaknut O
5 točaka u desnu stranu. -
o i
r
closegraph(); p
i m
a
return 0; k
i r
l
} Naredbom za brisanje ekrana bri- e g
V
šemo pravokutnik na staroj poziciji e
j
da bismo ga nacrtali na novoj. n
a a
(Pokušajmo ovu naredbu izbaciti.) m d
Kraj programa. i o
ž k
a
S
Petlje
j
a
ž
r
d
Da bismo dobili primitivni program za crtanje, dovoljno je da u prethod- a
S
nom programu maknemo naredbu za brisanje zaslona ra čunala.
d
#include <cstdlib> o
v
#include <iostream> U
Varijablama x i y određena je
#include <winbgim.h> pozicija gornjeg lijevog ugla pra- i
vokutnika. Varijabla x određuje v
r m
using namespace std; p a
r
udaljenost od lijevog ruba, a š g
a o
r
varijabla y od gornjeg ruba. N p
int main()
{ e
l
Udaljenost donjeg desnog ugla b
int gdriver = 9; a
j
i
int gmode = 2; pravokutnika od lijevog ruba r
a
int x = 290; V
int y = 220; određena je sa x + 60, a udalje-
char odgovor = 'd'; nost donjeg desnog ugla od gor- a
k
i
f
initgraph(&gdriver, &gmode, ""); a
r
njeg ruba određena je sa y+5.
setbkcolor (WHITE); G
setcolor (BLACK); e
j
cleardevice(); Širina našeg pravokutnika je 60, n e
e k
while (odgovor != 'k') a visina 5. (Pokušajmo promije- š l
u
o d
{ niti te brojeve.) n o
o
rectangle(x, y, x+60, y+5); D
odgovor = getch();
if (odgovor == 75) e
j
l
t
{ e
P
x = x - 5;
}
if (odgovor == 77) a
j
l
{ o
P
x = x + 5;
}
if (odgovor == 72) a a
d t
{ a
r s
y = y - 5; b k
e
O t
}
if (odgovor == 80) i
t
{ k
e
j
y = y + 5; b
Ako ovu naredbu obrišemo, pra- O
}
cleardevice(); vokutnik će se crtati na novoj po- -
o i
r
} ziciji, ali će ostati i na staroj pa će p
rezultat kretanja pravokutnika biti i m
a
closegraph(); k
i r
l
return 0; trag na zaslonu računala. e g
V
e
j
} Obrišimo ovu naredbu i pokreni- n
a a
mo program. m d
o
i
ž k
a
S
Petlje
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(); Ovom naredbom ispisujemo jednu
while (odgovor != 'k') točku na zaslon računala. Varijabla
{ x određuje udaljenost točke od lije-
putpixel(x, y, BLACK); vog ruba, varijabla y od gornjeg ru-
odgovor = getch(); ba, a BLACK određuje boju točke.
if (odgovor == 75)
{
x = x - 1;
}
if (odgovor == 77) Želimo li dobiti punu crtu, točku mo-
{ ramo pomicati za 1.
x = x + 1;
} Pokušajmo umjesto 1 staviti 2 ili 5.
if (odgovor == 72)
{
y = y - 1;
}
if (odgovor == 80)
{
y = y + 1;
}
}
closegraph();
return 0;
}
j
a
ž
r
d
Za crtanje možemo koristiti i a
S
kružnicu.
d
o
v
U
#include <cstdlib> i
v
r m
#include <iostream> p a
r
#include <winbgim.h> š g
a o
r
N p
using namespace std;
e
l
b
int main() a
j
i
r
{ a
V
int gdriver = 9;
int gmode = 2; a
k
i
int x = 290; f
a
int y = 220; r
Ovom naredbom ispisujemo kruž- G
char odgovor = 'd';
initgraph(&gdriver, &gmode, ""); nicu. Varijabla x određuje udalje- e
j
nost središta kružnice od lijevog n e
setbkcolor (WHITE); e k
š l
ruba, varijabla y udaljenost središ- u
setcolor (BLACK); o d
ta od gornjeg ruba, a 20 je polum- n o
cleardevice(); o
jer kružnice. D
while (odgovor != 'k')
{ e
j
l
circle(x, y, 20); t
e
odgovor = getch(); P
if (odgovor == 75)
{ a
x = x - 5; Broj 5 određuje pomak novog sre- j
l
o
} dišta u odnosu na staro. P
if (odgovor == 77)
{ Pokušajmo mijenjati taj broj. a a
x = x + 5; d t
a
r s
} b k
e
O t
if (odgovor == 72)
{ i
t
y = y - 5; k
} Imajmo stalno na umu da ćemo e
j
b
if (odgovor == 80) razumijevanje programa i vješti- O
{ nu pisanja vlastitih programa
-
y = y + 5; steći jedino tako da svaki primjer o i
r
programa koji je dat u ovoj knjizi p
} i m
a
mijenjamo na sve načine koji k
i r
} l
e g
closegraph(); nam padnu na pamet i onda pro- V
return 0; matramo kakve posljedice izazi- e
j
va određena promjena. n
} a a
m d
i o
ž k
a
S
Petlje
j
a
ž
r
d
Mišem možemo pokretati bilo koji grafi čki ob- a
S
jekt, npr. kružnicu.
d
o
#include <cstdlib> v
Početak programa. U
#include <iostream>
#include <winbgim.h> i
v
r m
p a
r
using namespace std; Varijable kojima određujemo tip š g
a o
r
grafičkog prozora. N p
int main()
{ e
l
b
a
j
Otvaranje grafičkog prozora. i
r
int gdriver = 9; a
int gmode = 2; V
a
initgraph(&gdriver, &gmode, ""); Unutar while petlje stalno se k
i
f
setbkcolor (WHITE); očitava pozicija pokazivača a
r
setcolor (BLACK); miša i crta se kružnica čije sre- G
cleardevice(); dište određuje položaj pokazi- e
j
vača miša, a polumjer je 100. n e
e k
š l
u
while (!kbhit()) o d
Petlja se izvodi tako dugo dok n o
{ o
circle(mousex(),mousey(),100); niti jedna tipka na tipkovnici D
} nije pritisnuta. e
j
l
t
e
closegraph(); P
return 0; Kraj programa.
}
a
j
l
o
P
a a
d t
a
r s
Jasno je da osim postojećih b k
e
O t
dimenzija kružnice i pravo-
kutnika možemo koristi pra- i
vokutnike i kružnice drugih t
k
e
j
dimenzija. b
O
Isto tako možemo koristiti i -
druge grafi čke elemente, o i
r
p
npr. točke ili crte. i m
a
k
i r
l
e g
Pokušajmo sami smisliti V
e
j
varijacije ovakvih programa. n
a a
m d
i o
ž k
a
S
Petlje
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
Ako u prethodne programe doda- cleardevice();
mo naredbu za brisanje sadržaja while (!kbhit())
grafičkog prozora, dobit ćemo pro- {
gram koji nam omogućuje pomica- cleardevice();
nje objekta mišem. circle(mousex(),mousey(),100);
}
closegraph();
return 0;
}
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
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; Na sličan način možemo mišem
} pomicati nešto drugo, npr. dvije
crte koje bi u igri mogle biti nišan.
j
a
ž
r
d
a
S
Nedostatak prethodnih programa bio je što se
ekran briše i objekt ponovo crta, bez obzira je li d
o
to potrebno ili nije, odnosno bez obzira je li v
U
došlo do pomaka miša ili nije.
i
Ako nije došlo do pomaka miša, nema potrebe v
r m
p a
r
objekt brisati i ponovo crtati. š g
a o
r
N p
Neprestano brisanje i crtanje može na sporijim
računalima izazvati treperenje slike, što je veo- e
l
b
ma neugodno. a
j
i
r
a
V
Ovaj program ispituje je li došlo do pomaka
miša ili nije. Ekran se briše i objekt crta na no- a
voj poziciji jedino ako je došlo do pomicanja k
i
f
a
r
miša.
#include <cstdlib> G
#include <iostream> e
j
#include <winbgim.h> n e
e k
š l
u
Ovom naredbom ispituje- o d
using namespace std; n o
o
mo je li došlo do pomaka D
int main() miša.
{ e
j
l
t
int gdriver = 9; Sadržaj unutar vitičastih e
zagrada izvršit će se jedi- P
int gmode = 2;
initgraph(&gdriver, &gmode, ""); no ako je došlo do poma-
setbkcolor (WHITE); ka miša. a
j
l
setcolor (BLACK); o
U tom slučaju obrisat će P
cleardevice();
while (!kbhit()) se sadržaj grafičkog pro-
{ zora i objekt će se nacrta- a a
ti na novoj poziciji. d t
if (ismouseclick(WM_MOUSEMOVE)) a
r s
b k
e
O t
{
cleardevice(); i
t
circle(mousex(),mousey(),100); Da bi bilo moguće novo k
e
j
} očitavanje miša, rezultat b
starog očitavanja ovom O
Petlje
Osim što možemo očitati je li došlo do pomaka miša, možemo isto tako o čitati je
li pritisnuta neka tipka na mišu. Ovaj program će nam omogućiti da pritiskom na
lijevu tipku miša nacrtamo objekt u grafi čkom prozoru.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, ""); Ovom naredbom ispituje-
setbkcolor (WHITE); mo je li pritisnuta lijeva
setcolor (BLACK); tipka miša.
cleardevice();
while (!kbhit()) Ako jest izvodi se sadržaj
{ unutar vitičastih zagrada.
if (ismouseclick(WM_LBUTTONDOWN))
{
cleardevice();
circle(mousex(),mousey(),100);
} Ovom naredbom brišemo
clearmouseclick(WM_LBUTTONDOWN); rezultat očitavanja lijeve
} tipke na mišu.
closegraph();
return 0; Novo očitavanje je mogu-
} će jedino nakon brisanja
starog očitavanja.
j
a
ž
r
d
a
S
OČITAVANJE MIŠA
d
o
v
ismouseclick(WM_MOUSEMOVE) Očitavanje kretanja miša. U
i
v
r m
clearmouseclick(WM_MOUSEMOVE) Brisanje očitavanja kretanja miša. p a
r
š g
a o
r
N p
ismouseclick(WM_LBUTTONDOWN) Očitavanje lijevog klika e
l
b
a
j
i
r
a
clearmouseclick(WM_LBUTTONDOWN); Brisanje očitavanja lijevog klika. V
a
k
i
f
a
r
ismouseclick(WM_LBUTTONDBLCLK) Očitavanje duplog lijevog klika.
G
e
j
Brisanje očitavanja duplog lijevog n e
clearmouseclick(WM_LBUTTONDBLCLK) e k
klika. š l
u
o d
n o
o
D
ismouseclick(WM_RBUTTONDOWN) Očitavanje desnog klika.
e
j
l
t
e
P
clearmouseclick(WM_RBUTTONDOWN) Brisanje očitavanja desnog klika.
a
j
l
o
ismouseclick(WM_RBUTTONDBLCLK) Očitavanje duplog desnog klika. P
Petlje
Do while petlja
j
a
ž
r
d
Usporedimo strukture while petlje i do while petlje. a
S
a = 1; d
o
Određivanje vrijednosti varijable koju će koristiti v
while naredba. U
while (a == 1) i
v
r m
p a
r
Ispitivanje je li uvjet zadovoljen, u našem sluča- š g
{ ju, je li sadržaj varijable a jednak broju 1. a o
r
N p
e
l
cin >> a; b
a
Ovaj dio unutar vitičastih zagrada ponavlja se j
i
r
dok je uvjet zadovoljen, u našem slučaju dok je a
V
} sadržaj varijable a jednak broju 1.
a
k
i
f
a
r
Petlja do while započinje određivanjem vrijed- G
nosti varijable koju će koristiti while naredba. e
j
n e
e k
š l
u
o d
n o
a = 1; o
D
Ovaj tip petlje započinje naredbom do nakon
koje slijede vitičaste zagrade unutar kojih se e
do nalazi dio programa koji se ponavlja dok je uv-
j
l
t
e
jet zadovoljen P
{
a
j
l
Dio koji se ponavlja i u kojem mora postojati o
cin >> a; mogućnost promjene vrijednosti varijable a. P
a a
} Ovdje se ispituje je li zadovoljen uvjet po istoj
d t
a
r s
b k
e
logici po kojoj se ispituje i u while naredbi. O t
while (a == 1); i
Uočimo da se ovdje na kraju while naredbe t
k
obavezno piše ; oznaka. e
j
b
O
-
o i
r
U čemu je razlika između ovih dviju petlji, osim očigledne razlike u načinu p
pisanja? Razlika je u tome što se sadržaj while petlje neće izvesti niti jednom i m
a
k
i r
l
ako uvjet nije zadovoljen jer se ispitivanje nalazi prije djela koji se ponavlja. e g
V
Sadržaj do while petlje će se bez obzira na uvjet izvesti barem jednom jer se e
j
najprije izvodi dio koji se ponavlja, a tek nakon toga ispituje se je li uvjet za- n
a a
dovoljen. m
i
d
o
ž k
a
S
Petlje
#include <cstdlib>
#include <iostream>
int main()
{
int x;
for (x = 0; x < 11; x = x + 1)
{
cout << rand() << endl;
}
system("PAUSE");
return 0;
}
Slučajne brojeve generirat
ćemo naredbom rand().
j
a
ž
r
d
Problem koji se sastoji u tome a
S
da naredba rand(); uvijek gene-
rira isti niz brojeva riješit ćemo d
naredbom srand(1); . o
v
U
i
v
r m
p a
r
š g
#include <cstdlib> a o
r
#include <iostream> N p
e
l
using namespace std; b
a
j
i
r
a
int main() V
{ Stavimo li naredbu srand(1) prije na-
int x; a
redbe rand() postići ćemo da naredba k
i
srand(1); f
rand() generira neki niz brojeva. a
r
for (x = 0; x < 11; x = x + 1) G
{ Ako umjesto srand(1); stavimo srand e
cout << rand() << endl; j
(2); dobit ćemo neki drugi niz brojeva. n e
e k
} š l
u
Pokušajmo i vidjet ćemo da ćemo za o d
system("PAUSE"); srand(3); dobit neki treći niz brojeva, a
n o
o
return 0; za srand(4); neki četvrti. D
}
e
j
l
t
Problem je u tome što ćemo za isti broj e
unutar zagrade dobivati uvijek isti niz. P
Dakle srand(6) davat će pri svakom
pokretanju isti niz brojeva, ali druga čiji
nego npr. srand(5) . Očito bi bilo dobro a
j
l
o
kad bismo na neki način broj unutar P
#include <cstdlib> zagrade mogli mijenjati.
#include <iostream> a a
d t
a
r s
using namespace std; b k
e
O t
Petlje
j
a
ž
r
d
Stavimo li u naredbu srand(1); umjesto a
#include <cstdlib> S
#include <iostream> konkretnog broja jedan naredbu time
#include <ctime> (NULL) koja će u svakom trenutku gene- d
o
rirati drugačiji broj, naredba rand() pri v
svakom će pokretanju generirati druga čiji U
using namespace std;
brojčani niz. Sada smo već blizu onome
i
int main() što smo željeli, a to je generator slučajnih v
r m
brojeva. p a
r
{ š g
a o
r
int x; N p
srand(time(NULL));
for (x = 0; x < 11; x = x + 1) e
l
b
{ a
j
i
r
cout << rand() << endl; a
V
}
system("PAUSE"); a
return 0; k
i
f
a
} r
G
e
j
n e
e k
š l
u
o d
n o
o
D
e
j
l
t
e
P
U ovom rješenju problemati č-
no je to što su često početni
brojevi veoma slični. Prvi put a
j
l
o
smo dobili 6089, drugi put P
6132, a treći put 6171.
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
-
o i
r
p
i m
a
Taj problem možemo najjed- k
i r
l
nostavnije eliminirati tako da e g
V
prvi broj koji generira genera- e
j
tor slučajnih brojeva ne koris- n
a a
timo u programu. m d
i o
ž k
a
S
Petlje
j
a
ž
r
d
Sad kad smo konačno dobili niz slučajnih brojeva, postavlja se pitanje kako a
S
postići da ti slučajni brojevi budu unutar unaprijed odre đenih granica. Ako
želim da se objekt pojavi na slučajnoj poziciji unutar prozora širokog 640 to- d
čaka, bilo bi zgodno da generator slučajnih brojeva generira slu čajni broj iz- o
v
među 0 i 640. U
i
v
r m
p a
r
Najprije ćemo program preurediti š g
#include <cstdlib> a o
r
#include <iostream> tako da generira brojeve između 0 i N p
#include <ctime> 1. To ćemo postići tako da generi- e
l
rani broj podijelimo maksimalnom b
a
j
using namespace std; mogućom vrijednošću slučajnog i
r
broja. U tom slučaju, ako je generi- a
V
int main() rani slučajni broj nula, rezultat će
{ biti nula, a ako je jednak maksimal- a
k
i
f
int x; noj mogućoj vrijednosti bit će 1. Za a
r
float sb; sve ostale vrijednosti dobit ćemo G
srand(time(NULL)); broj između nula i jedan.
e
j
rand(); n e
e k
for (x = 0; x < 11; x = x + 1) š l
u
o d
{ n o
Maksimalnu moguću vrijednost gene- o
sb = rand() / RAND_MAX; riranog slučajnog broja dobit ćemo D
cout << sb << endl; naredbom RAND_MAX. e
j
} l
t
system("PAUSE"); e
P
return 0;
} Pokrenemo li takav program kao
rezultat dobit ćemo samo nule, i a
j
l
o
možda ponekad broj 1. P
Zašto?
a a
d t
a
r s
Zato što je rezultat rada naredbe b k
e
rand() i naredbe RAND_MAX int O t
tipa, tj. broj bez decimalnog zare-
i
t
za. Rezultat, doduše, spremamo u k
varijablu sb koja je float tipa, ali e
j
b
računalo radi tako da izračuna re- O
zultat u int formatu, a tek onda -
broj pretvara u float. o i
r
p
i m
a
k
i r
Prvo podijeli dva int broja, makne l
e g
sadržaj desno od zareza, jer int tip V
nema zarez, i tek onda rezultat e
j
n
sprema u varijablu float tipa. a a
d
m
i o
ž k
a
S
Petlje
#include <cstdlib>
#include <iostream>
#include <ctime>
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 riješit ćemo tako da računalu
naredimo da broj koji će generirati na-
redba rand() i koji je int tipa, prije dije-
ljenja s RAND_MAX pretvori u float tip.
To ćemo učiniti naredbom:
j
a
ž
r
d
a
S
#include <cstdlib>
#include <iostream> d
o
#include <ctime> v
U
using namespace std;
i
v
r m
int main() p a
r
š g
{ a o
r
N p
int x;
float sb; e
l
srand(time(NULL)); b
a
j
i
rand(); r
a
for (x = 0; x < 11; x = x + 1) V
{
a
sb = (static_cast <float> (rand()) / RAND_MAX) * 640; k
i
f
cout << sb << endl; a
r
} G
system("PAUSE"); e
return 0; Kako ćemo postići da program ne generi- j
n e
} ra brojeve između 0 i 1, nego između 0 i e k
š l
u
640? Tako da slučajni broj koji računalo o d
n o
generira između 0 i 1 pomnožimo sa 640. o
D
i
t
sb = ( static_cast <float> ( rand() ) / RAND_MAX ) * 640; Množimo li k
e
j
broj između b
0 i 1 brojem O
640, dobit -
ćemo broje- o i
r
Generira slučajne Maksimalna vrijednost p
brojeve. koju rand() generira. ve između 0 i m
a
k
i r
i 640. l
e g
V
e
j
Dijeljenjem slučajnog broja maksimalnom mogućom vrije- n
a a
dnošću dobivamo broj između broja 0 i broja 1. m d
i o
ž k
a
S
Petlje
Budući da je to upravo
ono što smo željeli, ovo
upozorenje ćemo zane-
mariti.
j
a
ž
r
d
Korištenje slučajnih brojeva a
S
d
o
Ovaj program će generirati v
U
kružnice na slučajno odabra-
nim pozicijama. i
v
r m
p a
r
Na taj način u igrama može- š g
mo generirati objekte na slu- a o
r
N p
čajno odabranim mjestima.
e
l
b
a
j
i
r
a
V
#include <cstdlib>
#include <iostream> a
k
i
#include <winbgim.h> f
a
r
#include <ctime> G
Petlje
#include <cstdlib>
#include <iostream>
#include <ctime>
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;
}
j
a
ž
r
d
a
S
#include <cstdlib>
#include <iostream> d
Varijablu brojcanik na početku ćemo posta- o
v
#include <ctime> viti za nulu, a nakon svakog pogađanja uve- U
ćat ćemo je za jedan i tako ćemo znati koliko
using namespace std; nam je pokušaja trebalo za pogađanje zami- i
v
r m
šljenog broja. p a
r
int main() š g
a o
r
{ N p
int odgovor;
int slucajni_br; e
l
b
Ovdje se generira slučaj- a
j
i
ni broj između 0 i 100. r
int brojcanik = 0; a
V
srand(time(NULL)); a
rand(); k
i
f
a
r
G
slucajni_br = (static_cast <float> (rand()) / RAND_MAX) * 100;
e
j
n e
cout << "Zamislio sam broj od 0 do 100." << endl; e k
š l
u
cout << "Pogodite koji je to broj" << endl; o d
n o
o
D
do Ovdje unosimo odgovor.
{ e
j
l
t
cout << "Unestite odgovor." << endl; e
cin >> odgovor; Pri svakom unosu odgovora P
brojčanik povećavamo za 1.
brojcanik = brojcanik + 1;
a
j
l
o
if (slucajni_br > odgovor) P
{ Izvodi se ako je
cout << "Zamislio sam veci broj." << endl; zamišljeni broj veći
od unesenog. a a
} d t
a
r s
b k
e
O t
if (slucajni_br < odgovor)
{ Izvodi se ako je
i
t
cout << "Zamislio sam manji broj." << endl; zamišljeni broj ma- k
} nji od unesenog. e
j
b
} O
while (slucajni_br != odgovor); -
o i
r
p
cout << "Pogodili ste " << brojcanik << ". put." << endl; i m
a
Ispitivanje se k
i r
system("PAUSE"); ponavlja dok
l
e g
return 0; uneseni broj
V
} e
j
nije jednak n
a a
zamišljenom. m d
i o
ž k
a
S
Polja
j
a
ž
r
d
a
S
d
o
v
U
i
v
r m
p a
r
š g
a o
r
N p
e
l
b
a
j
i
r
a
V
a
a
k
i
f
a
j
r
G
l
e
j
n e
e k
š l
u
o d
n o
o
o
D
e
j
l
t
e
P
P
a
j
l
o
P
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
Polja
Jednodimenzionalna polja
j
a
ž
r
d
a
U ovom programu pojavljuju se Ovaj program radi isti posao kao i S
uglate zagrade. prethodni, ali je daleko elegantniji d
o
od njega. v
Dobit ćemo ih tako da držimo pri- U
tisnutu AltGr tipku, a zatim klikne-
mo slovo f ili slovo g. i
v
r m
Pogledamo li pažljivo program, p a
r
š g
vidjet ćemo da su nam svi elemen- a o
r
N p
ti poznati od prije, osim neobi čno
e
l
definirane varijable polje. b
#include <cstdlib> a
j
i
#include <iostream> r
a
#include <winbgim.h> V
Dok smo u dosadašnje varijable
a
using namespace std; mogli spremiti jedno slovo ili broj, k
i
f
a
r
int main() čini se da u ovu varijablu možemo G
{ spremiti mnoštvo brojeva. e
j
int gdriver = 9; n e
e k
int gmode = 2; š l
u
o d
int x; n o
Pažljivi analitičar možda bi uočio o
initgraph(&gdriver, &gmode, ""); D
setbkcolor (WHITE); da broj u uglatoj zagradi odgovara
e
j
setcolor (BLACK); l
t
količini brojeva u vitičastim zagra- e
cleardevice(); P
dama.
int polje[54] =
{ a
j
l
0, 200, 10, 200, 10, 50, 100, 50, 100, 200, o
P
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, a a
d t
a
r s
600, 40, 600, 200, 620, 200, 620, 20, 635, 20, b k
e
t
635, 200, 640, 200 O
};
moveto (polje[0], polje[1]); i
t
k
for (x = 2; x < 54; x = x + 2 ) e
j
b
{ O
lineto(polje[x], polje[x+1]);
-
} o i
r
getch(); p
i m
a
closegraph(); k
i r
l
e g
return 0; V
} e
j
n
a a
m d
i o
ž k
a
S
Polja
#include <cstdlib>
#include <iostream>
int main()
{
int polje[5] = {10, 20, 30, 40, 50}; Detaljno objašnjenje funkcionira-
cout << polje[0] << endl; nja programa s prethodne strani-
cout << polje[1] << endl; ce vidjet ćemo kasnije, a sada
cout << polje[2] << endl; ćemo pogledati kako funkcionira-
cout << polje[3] << endl; ju neobične varijable koje smo
cout << polje[4] << endl; uočili u prethodnom programu.
system("PAUSE");
return 0; Ovaj program pomoći će nam da
} lakše shvatimo ovaj novi tip vari-
jable.
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 sadrži 5 pretinaca koji se
razlikuju po brojevima i u svaki od
tih pretinaca možemo spremiti
jedan broj.
10 20 30 40 50
0 1 2 3 4
polje
j
a
ž
r
d
Novi tip varijable ima poseban naziv, naziva se polje. Ćelije polja međusobno a
S
razlikujemo po brojevima, a problem donekle komplicira činjenica da prvo
polje nije polje 1 nego polje 0, pa onda polje sa 5 elemenata ne sadrži polja d
od 1 do 5 nego od 0 do 4. U po četku će nas ta činjenica često zbunjivati. o
v
U
i
v
r m
p a
r
U vitičastim zagrada- š g
int polje[5] = {10, 20, 30, 40, 50}; ma navest ćemo vri-
a o
r
N p
jednosti pojedinih
e
l
ćelija. b
a
j
Za razliku od obične varijable prilikom i
r
Vrijednosti ćemo me- a
formiranja polja u uglatim zagradama V
moramo navesti koliko ćelija sadrži po- đusobno odvojiti za-
lje. U našem slučaju polje koje smo rezima. a
k
i
nazvali polje sadrži 5 ćelija. f
a
r
G
e
j
Sadržaj polja ispisuje se na sli- n e
cout << polje[1] << endl; čan način kao i sadržaj varijable.
e k
š l
u
o d
n o
o
D
Razlika je u tome da je pri korištenju varijable dovoljno navesti naziv, a ovdje e
j
l
osim naziva u uglatim zagradama moramo navesti broj ćelije koju želimo ispi- t
e
sati. U gornjem primjeru imajmo na umu da ćemo ispisati sadržaj druge ćelije, P
a ne sadržaj prve. Prvu bismo ispisali naredbom cout << polje[0] << endl; .
a
j
l
o
P
a a
d t
a
r s
Vidimo da b k
e
O t
#include <cstdlib>
#include <iostream> cout << polje[1] << endl; i
t
k
e
j
using namespace std; ispisuje sadržaj druge ćelije. b
Pokušajmo na sličan način ispi- O
int main() sati sadržaj neke druge npr. sa: -
{ o i
r
p
int polje[5] = {10, 20, 30, 40, 50}; cout << polje[0] << endl; i m
a
k
i r
cout << polje[1] << endl; l
e g
system("PAUSE"); sadržaj prve ćelije. (U uglatoj V
e
j
return 0; zagradi nalazi se broj nula, a ne n
} veliko slovo o.) a a
m d
i o
ž k
a
S
Polja
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;
}
j
a
ž
r
d
Polja mogu biti float tipa. a
S
i
v
r m
p a
r
š g
a o
r
N p
#include <cstdlib> e
l
#include <iostream> b
a
j
i
r
a
using namespace std; V
a
int main() k
i
f
{ a
r
float polje[5] = {10.12, 20.14, 30.16, 40.18, 50.19}; G
cout << polje[0] << endl; e
j
cout << polje[1] << endl; n e
e k
cout << polje[2] << endl; š l
u
o d
cout << polje[3] << endl; n o
o
cout << polje[4] << endl; D
system("PAUSE");
e
j
return 0; l
t
} e
P
a
j
l
o
P
#include <cstdlib>
#include <iostream> a a
d t
a
r s
using namespace std; Polja mogu biti i char tipa. b k
e
O t
Polja
#include <cstdlib>
#include <iostream>
int main()
{
int a[3] = {2, 3, 0};
a[2] = a[0] + a[1];
cout << a[2] << endl;
system("PAUSE");
return 0;
}
#include <cstdlib>
Kao što je slučaj i kod varijabli, sadržaj po- #include <iostream>
lja ne moramo definirati prilikom formiranja
using namespace std;
polja.
U ovom slučaju sadržaj prve i druge ćelije int main()
{
polja unosimo cin naredbom, a u treću ćeli- int b[3];
ju spremamo rezultat zbrajanja. cin >> b[0];
cin >> b[1];
b[2] = b[0] + b[1];
cout << b[2] << endl;
system("PAUSE");
return 0;
}
j
a
ž
r
d
Sadržaj polja možemo ispi- a
S
sati na ovaj način. Takav
način funkcionira, ali je nee- d
legantan. Osobito je neprikla- o
v
dan ako bismo htjeli ispisati U
veće polje.
i
v
r m
p a
r
š g
a o
r
#include <cstdlib> N p
#include <iostream> e
l
b
a
j
using namespace std; i
r
a
V
int main()
{ a
k
i
f
int polje[5] = {10, 20, 30, 40, 50}; a
r
cout << polje[0] << endl; G
cout << polje[1] << endl; e
cout << polje[2] << endl; Ovaj način ispisa sadržaja j
n e
e k
cout << polje[3] << endl; polja daleko je elegantniji. š l
u
o d
cout << polje[4] << endl; n o
o
system("PAUSE"); D
return 0; Formirali smo petlju koja će
e
j
} l
t
se vrtjeti onoliko puta koliko e
P
ćelija petlje želimo ispisati.
a
j
l
Varijabla petlje mijenja se od o
P
#include <cstdlib> početnog broja ćelije koju želi-
#include <iostream> a a
mo ispisati, u našem slučaju d t
a
r s
using namespace std; od 0, do broja krajnje ćelije b k
e
O t
Polja
#include <cstdlib>
#include <iostream>
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;
}
#include <cstdlib>
#include <iostream>
int main()
{
int polje[5] = {10, 20, 30, 40, 50};
int x;
for (x = 4; x > -1; x = x - 1)
{ Sadržaj polja možemo ispisivati i
cout << polje[x] << endl;
} unatrag. To ćemo postići tako da
system("PAUSE"); varijablu petlje x mijenjamo unat-
return 0;
} rag od četiri do nula po jedan.
j
a
ž
r
d
a
#include <cstdlib> Na sličan način pomoću petlje mo- S
#include <iostream> žemo uporabom tipkovnice unijeti
brojeve u pojedine ćelije. d
o
v
using namespace std; U
i
t
k
e
j
b
O
-
o i
r
Kao što je to vrijedilo za sve elemente programa koje p
i m
smo vidjeli do sada, i za polja vrijedi da ćemo ih najbolje k a
i r
l
shvatiti i usvojiti ako napravimo što veći broj varijacija e g
V
primjera koje smo vidjeli do sada. e
j
n
a a
Pokušajmo sami smisliti što više sličnih primjera. m
i
d
o
ž k
a
S
Polja
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, Ovom naredbom
550, 20, 550, 200, 550, 200, 560, 200, 560, 40, određuje se po-
600, 40, 600, 200, 620, 200, 620, 20, 635, 20, četak niza crta.
635, 200, 640, 200
};
{
lineto(polje[x], polje[x+1]);
}
getch();
closegraph();
return 0;
} Ovom petljom crta se
ostatak crteža.
j
a
ž
r
d
Pogledajmo podrobnije neke detalje programa. a
S
d
o
v
U
int polje[5] = {10, 20, 30, 40, 50};
i
v
r m
p a
r
š g
a o
r
Ovu naredbu int polje[5] = Ovaj oblik pogodniji je za N p
{ korištenje kad u veliko po-
možemo napi- e
l
10, 20, 30, 40, 50 lje želimo unijeti veliku koli- b
sati i ovako. }; činu brojeva. a
j
i
r
a
V
a
k
i
f
a
r
Ova naredba određuje početak niza crta. G
Udaljenost od lijevog ruba određena je e
j
moveto (polje[0], polje[1]); sadržajem ćelije polje[0], tj. prve ćelije, a n e
e k
udaljenost od gornjeg ruba sa polje[1], tj. š l
u
o d
sadržajem druge ćelije. n o
o
D
e
j
l
t
Početna vrijednost e
varijable x je 2. P
a a
d t
a
r s
b k
e
O t
for (x = 2; x < 54; x = x + 2 ) Varijabla x uvećava se za 2. To nam
{ odgovara zato što je kraj svake crte i
t
lineto(polje[x], polje[x+1]); određen s dva broja, pa kad želimo k
e
j
} očitati poziciju novog kraja crte, mo- b
O
ramo se u polju pomaknuti za dva
člana polja unaprijed. -
o i
r
p
i m
a
k
i r
l
e g
V
Udaljenost kraja e
j
crte od lijevog ruba Udaljenost kraja crte od gornjeg n
a a
grafičkog prozora. ruba grafičkog prozora. m d
i o
ž k
a
S
Polja
#include <cstdlib>
#include <iostream>
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;
} Mogli bismo postaviti pitanje trebaju
li nam uopće polja, budući da bismo
ovaj program mogli i ovako realizira-
ti, običnim varijablama.
j
a
ž
r
d
Ne samo da uporabom polja možemo pisati elegantnije programe, nego nam a
S
polja omogućuju realizaciju programa koje bi bilo veoma teško realizirati na
neki drugi način. Pogledajmo nekoliko primjera takvih programa. d
o
v
U
Polja
{
Unutar for petlje za svaku vrijed-
if (r < polje[x]) nost varijable x ispituje se je li sa-
{
držaj varijable r manji od polje[x] .
r = polje[x];
}
Ako jest, znači da je u ćeliji polje
}
[x] veći broj od onog u varijabli r ,
pa će se sadržaj ćelije polje[r]
Ova if naredbe je neobi čna. spremiti u varijablu r .
Nema else dijela. To je do-
zvoljeno. Ako nam else dio Ako nije, znači da je broj u polje[x]
ne treba, možemo ga izos- manji i u tom slučaju neće se izvo-
taviti. diti sadržaj unutar vitičastih zagra-
da.
U tom slučaju, ako je uvjet
zadovoljen, izvodi se sadr- Na kraju, u varijabli r ostaje najve-
žaj u vitičastim zagradama, ća vrijednost nađena u polju.
a ako nije, nastavlja se iz-
vođenje programa.
j
a
ž
r
d
a
#include <cstdlib> Jednostavnim promjenama pro- S
#include <iostream> gram koji pretražuje polje sa
ciljem da nađe najveći broj u d
o
polju možemo preurediti u prog- v
using namespace std; U
ram koji traži najmanji broj.
int main() i
Čemu služe takvi programski v
r m
{ p a
r
postupci? š g
int polje[5]; a o
r
int x; N p
int r; Na sličan način bismo u progra-
mu za vođenje videoteke mogli e
l
cout << "Unos polja." << endl; b
for (x = 0; x < 5; x = x + 1) pronaći korisnike koji nisu vratili a
j
i
r
{ film dulje od npr. tjedan dana ili a
korisnike koji su u prošloj godini V
cin >> polje[x];
posudili najviše filmova. a
} k
i
f
r = polje[0]; a
r
for (x = 1; x < 5; x = x +1) G
{ Dovoljno je da umjesto ispitivanja e
j
if (r > polje[x]) je li r < polje[x] stavimo ispitivanje n e
{ e k
je li r > polje[x]. š l
u
o d
r = polje[x]; n o
o
} D
}
cout << "Najmanji je." << endl; Odgovaraju će preuredimo ispis e
j
l
t
cout << r << endl; obavijesti. e
P
system("PAUSE");
return 0;
} a
j
l
o
P
a a
d t
a
r s
Pokušajmo sami korigirati b k
e
O t
program tako da pretražu-
je je li u polje unesen od-
i
t
ređen broj ili koliko puta k
se pojavljuje određen e
j
b
broj. O
-
Pokušajmo napraviti slič- o i
r
p
na pretraživanja slova. i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
Polja
#include <cstdlib>
#include <iostream>
int main()
{
int p[5];
int zamjena;
int privremeni;
int x;
cout << "Unos polja." << endl; Ovo je sasvim sigurno najslo-
for (x = 0; x < 5; x = x + 1) ženiji program koji smo do sa-
{ da vidjeli u ovoj knjizi.
cin >> p[x];
} Služi za sortiranje polja. Une-
semo različite brojeve u polje,
do a program će ih sortirati tako
{ da će u prvom polju biti najve ći
zamjena = 0; broj, a u posljednjem najmanji.
for (x = 0; x < 4; x = x + 1)
{
if (p[x] < p[x+1])
{ U ovom dijelu programa unosi-
privremeni = p[x]; mo brojeve u polje.
p[x] = p[x+1];
p[x+1] = privremeni;
zamjena = 1;
}
} U ovom dijelu vrši se sortiranje
} polja.
while (zamjena ==1);
system("PAUSE");
return 0;
}
j
a
ž
r
d
Pogledamo podrobnije dio programa u kojem se vrši sortiranje. a
S
d
o
Sortiranje se odvija u do ... while Na početku ispitivanja u varija- v
U
petlji. Petlja se ponavlja tako dugo blu zamjena stavlja se broj 0.
dok je varijabla zamjena jednaka Ako ne bude potrebno vršiti i
broju 1. nikakve zamjene u polju, varija- v
r m
p a
r
bla zamjena ostat će jednaka š g
nuli i izvođenje do ... while pet- a o
r
N p
lje će se zaustaviti.
e
l
b
a
j
i
r
do U for petlji čita se cijelo polje, s a
V
time da se varijabla petlje mije-
{ nja za jedan manje od veličine a
zamjena = 0; k
i
petlje; dakle u našem slučaju ne f
a
r
ide do 4 nego, do 3. G
for (x = 0; x < 4; x = x + 1)
{ e
j
n e
e k
š l
u
if (p[x] < p[x+1]) o d
If naredbom ispitujemo je li broj n o
o
{ u nekoj ćeliji polja (p[x]) manji D
privremeni = p[x]; od broja u sljedećoj ćeliji (p
e
j
[x+1] ). Ako nije, znači da ima- l
t
p[x] = p[x+1]; e
p[x+1] = privremeni; mo prvo veći broj, a zatim ma- P
zamjena = 1; nji. To je ono što želimo i petlja
} se vrti dalje.
a
j
l
o
} P
Polja
j
a
ž
r
d
Između polja mogu se vršiti matematičke ope- a
S
racije kao i između varijabli.
d
Ovaj program će zbrojiti sadržaje polja po1 i o
v
polja po2, a rezultat spremiti u polje po3 i za- U
#include <cstdlib>
#include <iostream> tim ga ispisati na zaslon računala.
i
v
r m
p a
r
using namespace std; š g
a o
r
N p
int main()
{ e
l
b
int po1[5] = {10, 15, 20, 25, 30}; a
j
i
int po2[5] = {35, 40, 35, 50, 55}; r
a
int po3[5]; V
int a; a
for (a = 0; a < 5; a = a +1) k
i
f
{ a
r
po3[a] = po1[a] + po2[a]; G
cout << po1[a] << " + " << po2[a] << " = " << po3[a] << endl; e
j
} n e
e k
system("PAUSE"); š l
u
o d
return 0; n o
o
} D
e
j
l
t
e
P
a
j
l
o
P
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
Pokušajmo napisati slične programe koji će vršiti neke operacije između po- O
lje; npr. programe koji će množiti ili dijeliti članove dvaju polja i rezultat spre- -
o i
r
mati u treće polje. p
i m
a
k
i r
l
Program koji će uspoređivati pojedine ćelije dvaju polja, a zatim će u treće e g
V
polje spremiti vrijednost one ćelije koja sadrži veći broj ili manji broj. e
j
n
a a
Program koji će brojiti koliko puta se neki broj pojavljuje u nekom polju. m d
o
i
ž k
a
S
Polja
Postavlja se pitanje na
koji način bismo mogli
podatke umjesto preko
tipkovnice unijeti u po-
lje iz neke datoteke. U
tu svrhu otvorit ćemo
Nopetad (u hrvatskoj
inačici Blok za pisa-
nje) i unijet ćemo osam
različitih brojeva koji će
biti odvojeni praznim
mjestima.
Važno je napomenuti
da to moramo učiniti
tim programom, a nipo-
što Wordom ili nekim
sličnim programom.
Te brojeve, odnosno taj tekst spre-
mit ćemo pod imenom podaci.txt
u onu istu mapu u kojoj se nalazi
naš program.
j
a
ž
r
d
a
S
d
o
v
U
i
v
r m
p a
r
š g
a o
r
N p
e
l
b
a
j
i
r
a
Ako je sve u redu, u onom istom V
e
j
l
t
e
P
Polja
j
a
ž
r
d
a
Naredba za formiranje objekta pomo- Naziv objekta. Bira se po istoj logi- S
ću kojeg ćemo čitati sadržaj datoteke. ci po kojoj biramo nazive varijabli.
d
o
v
U
i
v
r m
p a
r
Naziv datoteke koju ćemo čitati š g
ifstream ulaz ("podaci.txt"); pomoću objekta ulaz. a o
r
N p
e
l
b
a
j
i
r
a
V
a
k
i
f
a
r
G
e
j
n e
#include <cstdlib> e k
š l
u
#include <iostream> o d
n o
#include <fstream> o
D
Polja
j
a
ž
r
d
Naredba za formiranje objekta pomo- a
Naziv objekta. Bira se po istoj logi- S
ću kojeg ćemo spremati sadržaj dato-
ci po kojoj biramo nazive varijabli.
teke. d
o
v
U
i
v
r m
p a
r
Naziv datoteke u koju ćemo š g
ofstream izlaz ("podaci.txt"); spremati pomoću objekta ulaz. a o
r
N p
e
l
b
a
j
i
r
a
Što smo spremili možemo pogledati editorom, a možemo i programom koji V
sadržaj datoteke ispisuje na zaslon računala. a
k
i
f
a
r
G
e
j
n e
e k
š l
u
o d
n o
o
D
e
j
#include <cstdlib> l
t
e
#include <iostream> P
#include <fstream>
Polja
int main()
{
int x;
int p[8];
int zamjena;
int privremeni;
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1) U ovom djelu programa čitamo
{ sadržaj datoteke i spremamo ga
ulaz >> p[x]; u polje.
}
cout << "Zapocinje sortiranje." << endl;
do
{ Doslovno sa Copy Paste kopi-
zamjena = 0;
ran dio programa koji sortira
for (x = 0; x < 7; x = x + 1)
sadržaj polja od najvećeg prema
{
najmanjem.
if (p[x] < p[x+1])
{
privremeni = p[x];
p[x] = p[x+1];
p[x+1] = privremeni; U ovom djelu programa sadržaj
zamjena = 1; polja sprema se u datoteku.
}
}
}
while (zamjena ==1);
ofstream izlaz("podaci.txt");
for (x = 0; x < 8; x = x + 1) Ovdje vidimo i jedan jako va-
{ žan element programiranja.
izlaz << p[x]; Ne moramo svaku stvar svaki
izlaz << " "; put kad nam treba iznova pro-
} gramirati. Segment programa
cout << "Sortiranje je zavrsilo" << endl; koji dobro radi obilno proko-
system("PAUSE"); mentiramo i spremimo, a za-
return 0; tim ga ubacujemo u programe
} kad nam zatreba, kao što smo
ovdje ubacili segment progra-
ma koji sortira sadržaj polja.
j
a
ž
r
d
#include <cstdlib> Da bismo provjerili funkcio- a
S
#include <iostream> nira li naš program, najpri-
#include <fstream> je ćemo programom koji d
smo malo prije obradili o
v
unijeti brojeve u datoteku. U
using namespace std;
i
int main() v
r m
{ p a
r
š g
int x; a o
r
N p
int polje[8];
ofstream izlaz("podaci.txt"); e
l
b
for (x = 0; x < 8; x = x + 1) a
j
i
r
{ a
cin >> polje[x]; V
}
a
for (x = 0; x < 8; x = x + 1) k
i
f
{ a
r
#include <cstdlib>
izlaz << polje[x]; G
#include <iostream>
izlaz << " "; #include <fstream> e
j
} n e
e k
cout << "Spremanje je gotovo." << endl; š l
u
using namespace std; o d
n o
cout << endl; o
system("PAUSE"); D
int main()
return 0; { e
} j
l
int x; t
e
int polje[8]; P
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
a
j
{ l
o
ulaz >> polje[x]; P
}
for (x = 0; x < 8; x = x +1) a a
{ d t
a
r s
cout << polje[x] << endl; b k
e
Nakon što smo brojeve } O t
unijeli u datoteku, pokrene- system("PAUSE");
mo program za sortiranje return 0; i
t
datoteke koji vidimo na k
} e
j
lijevoj stranici. b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
Programom za čitanje sadržaja datoteke pog- n
a a
ledat ćemo rezultat sortiranja. m d
i o
ž k
a
S
Polja
Dvodimenzionalna polja
int main()
{
int polje[2] [4] = {{11, 12, 13, 14}, {21, 22, 23, 24}};
int x;
system("PAUSE");
return 0;
}
Ispis drugog reda.
j
a
ž
r
d
a
Tip polja u našem slučaju je int, Drugi red polja. Nalazi se S
a moglo je biti npr. float ili char . unutar vitičastih zagrada.
d
o
v
U
e
l
b
a
j
i
int polje [2] [4] = { {11, 12, 13, 14} , {21, 22, 23, 24} }; r
a
V
a
k
i
f
a
r
Cjelokupni sadržaj polja G
nalazi se unutar poseb- e
Broj redova polja. Broj stupaca polja. nih vitičastih zagrada.
j
n e
e k
š l
u
o d
n o
o
D
e
j
l
t
Budući da su u ovom tipu polja podaci raspoređeni u redove i stupce, prilično e
logično je da kad želimo pristupiti nekoj ćeliji takvog polja moramo navesti u P
uglatim zagradama broj reda i broj stupca ćelije kojoj želimo pristupiti.
a
j
l
o
P
i
t
Broj reda kojem pristupamo, u našem slučaju je to prvi red koji se ozna čava k
brojem nula. Dakle prvi red označava broj nula, a drugi broj jedan. e
j
b
O
-
o i
r
p
Dvodimenzionalna polja koriste se Osim dvodimenzionalnih postoje i i m
a
k
i r
l
na sličan način kao jednodimenzio- trodimenzionalna polja. Funkcioni- e g
V
nalna. Osobito su korisna u progra- raju slično kao dvodimenzionalna, e
mima u kojima se odvijaju složeni samo što imaju još i “dubinu”. j
n
a a
proračuni. m d
i o
ž k
a
S
Obrada teksta
j
a
ž
r
d
a
S
a
d
o
v
U
t i
v
r m
p a
s
r
š g
a o
r
N p
k
e
l
b
a
j
i
r
a
V
e
a
k
t
i
f
a
r
G
e
j
n e
e k
š l
u
o d
a
n o
o
D
e
j
d
l
t
e
P
a
a
j
l
o
P
b
b k
e
O t
i
t
k
e
j
b
O
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
Obrada teksta
String objekti
#include <cstdlib>
#include <iostream>
#include <string>
j
a
ž
r
d
a
#include <string> Da bi program mogao koristiti string objekte, S
ovu naredbu moramo staviti na početak prog-
d
rama. o
v
U
U našem programskom okruženju program će
raditi i bez ovog reda, ali je moguće da u ne- i
v
r m
kom drugom programskom okruženju ne će. p a
r
š g
a o
r
Zbog toga ćemo stavljati tu naredbu N p
e
l
b
a
j
i
r
a
V
a
k
i
f
a
r
G
e
j
n e
cout << odgovor << ", dobar dan!" << endl; e k
Vidimo da objekt odgo- š l
u
o d
vor u naredbi cout koris- n o
o
timo kao da koristimo D
varijablu.
e
j
l
t
Najprije će se ispisati e
P
sadržaj objekta odgovor ,
zatim tekst unutar navod-
nika i konačno skok u a
j
l
novi red. o
P
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
cin >> odgovor; U naredbi cin koju koristimo za unos preko tipkov- -
o i
nice objekt odgovor koristimo kao što bismo koris- r
p
tili varijablu. i m
a
k
i r
l
e g
V
Dok smo u varijablu char tipa mogli spremiti jedno e
j
slovo, u objekt klase string možemo spremati veći n
a a
tekst. m
i
d
o
ž k
a
S
Obrada teksta
Želimo li u string objekt unijeti veću količinu teksta, da bismo bili sigurni da će
sve biti u redu, možemo unaprijed naredbom reserve rezervirati potreban pro-
stor.
#include <cstdlib>
#include <iostream>
#include <string>
int main()
{
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
cin >> odgovor; Program radi jednako
cout << endl; kao i prethodni, osim
cout << odgovor << ", dobar dan!" << endl; što smo u ovom slučaju
cout << endl; za spremanje imena
system("PAUSE"); osigurali veliki prostor.
return 0;
}
j
a
ž
r
d
a
S
d
o
v
#include <cstdlib> U
#include <iostream>
#include <string> i
v
r m
p a
r
using namespace std; š g
a o
r
N p
int main() e
l
{ b
a
j
string odgovor; i
r
odgovor.reserve(256); a
V
cout << "Unesite vase ime." << endl;
cin >> odgovor; a
k
cout << endl; i
f
a
r
cout << odgovor << ", dobar dan!" << endl; G
cout << endl;
cout << "Imamo " << odgovor.size() << " slova." << endl; e
j
n e
cout << endl; e k
š l
u
cout << "Imamo " << odgovor.capacity() << " prostora." << endl; o d
n o
cout << endl; o
D
system("PAUSE");
return 0; e
j
l
t
} e
P
a
j
l
o
P
Naredba size() očigledno služi za određivanje
odgovor.size() broja znakova unesenog teksta. Riječ Stjepan
sastoji se od sedam slova. a a
d t
a
r s
b k
e
Objekt na koji se na- O t
redba odnosi.
i
t
Naredba capacity() služi za određivanje k
e
j
broja mjesta koja nam stoje na raspola- b
ganju za unos znakova u objekt odgo- O
vor . -
odgovor.capacity() o i
r
p
Zašto ih je na raspolaganju 355, ako i m
a
k
i r
l
smo naredbom odgovor.reserve(256) e g
rezervirali 256 mjesta? Zato što je 256 V
Objekt na koji se na- e
j
redba odnosi. mjesta samo polazište na temelju kojeg n
prevoditelj rezervira nešto veći prostor. a a
m d
i o
ž k
a
S
Obrada teksta
#include <cstdlib>
#include <iostream>
#include <string>
int main()
{
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
cin >> odgovor; Naredbom cin nije mo-
cout << endl; guće u objekt odgovor
cout << odgovor << ", dobar dan!" << endl; unijeti više odvojenih
cout << endl; riječi.
system("PAUSE");
return 0; Iako smo napisali prezi-
} me i ime, uspjeli smo
unijeti samo prezime.
#include <cstdlib>
#include <iostream>
#include <string>
int main()
{
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
getline(cin, odgovor);
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl; Ako umjesto cin nared-
system("PAUSE"); be upotrijebimo ovu na-
return 0; redbu, moći ćemo unijeti
} više riječi u objekt odgo-
vor.
j
a
ž
r
d
String objekt u koji ćemo unositi tekst. a
getline(cin, odgovor); U našem slučaju to je objekt odgovor. S
d
o
v
U
e
l
b
a
j
#include <cstdlib> i
r
#include <iostream> a
V
#include <string>
a
k
i
using namespace std; f
a
r
G
int main()
e
j
{ n e
string odgovor; e k
š l
u
odgovor.reserve(256); o d
n o
cout << "Unesite vase ime." << endl; Jedan od problema o
D
cin >> odgovor; pri izradi programa
cout << endl; javlja se kad korisnik e
j
l
t
cout << odgovor << ", dobar dan!" << endl; unese neodgovara- e
juću vrijednost. P
cout << endl;
system("PAUSE");
return 0; U ovom slučaju, um- a
j
l
} jesto da unesemo o
ime, samo smo priti- P
snuli tipku Enter .
a a
d t
a
r s
U ovom slučaju, na b k
e
O t
mjestu gdje se očekiva-
lo da ćemo unijeti tekst, i
mi smo unijeli brojeve. t
k
e
j
b
Postavlja se pitanje na O
koji bismo način mogli -
spriječiti ili barem sma- o i
r
p
njiti mogućnost unoše- i m
a
k
i r
nja besmislenih odgo- l
e g
vora. V
e
j
n
a a
m d
i o
ž k
a
S
Obrada teksta
#include <cstdlib>
#include <iostream>
#include <string>
int main()
{
string odgovor;
do
{ Ova inačica programa
cout << "Unesite vase ime." << endl; će zahtijevati da ponovi-
getline(cin, odgovor); mo unos ako pritisnemo
} tipku Enter , a da prije
while (odgovor.size() == 0); toga nismo ništa unijeli.
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}
j
a
Polje char tipa ž
r
d
a
S
d
o
v
U
i
#include <cstdlib> v
r m
p a
r
#include <iostream> š g
#include <string> a o
r
N p
Obrada teksta
Naredba za unos
teksta tipkovnicom.
j
a
ž
r
d
U ovu inačicu programa nije moguće unijeti broj na mjestu na kojem očekuje- a
S
mo tekst. U slučaju da unesemo brojeve, ra čunalo će zahtijevati da ponovimo
upis. d
o
v
U
i
v
r m
p a
r
š g
a o
r
N p
#include <cstdlib>
#include <iostream> e
l
b
#include <string> a
j
i
r
a
using namespace std; V
a
int main() k
i
f
{ a
r
char niz[255]; G
int x; e
j
int p; n e
e k
š l
u
o d
do n o
Početni dio programa i o
{ formiranje potrebnih vari- D
cout << "Unesite vase ime." << endl; jabli. e
cout << endl; j
l
t
e
cin.getline(niz,255); P
x = 0;
p = 1;
while (niz[x] != '\0') Ovo je glavni dio prog- a
j
l
{ rama. Ovdje se unosi o
P
if (isdigit(niz[x])) tekst i ispituje jesu li
{ unesena slova ili broje-
p = 0; vi. a a
d t
} a
r s
b k
e
x = x + 1; Ako su uneseni brojevi, O t
} unos se ponavlja.
} i
t
k
while (p == 0); Oznaku \ dobit ćemo e
j
pritiskom na AltGr i Q. b
O
cout << endl;
-
cout << niz << ", dobar dan!" << endl; o i
r
cout << endl; p
i m
a
system("PAUSE"); k
i r
l
Završni dio programa, e g
return 0; V
} ime se spaja s pozdra- e
j
vom i gasi se program. n
a a
m d
i o
ž k
a
S
Obrada teksta
Cijeli ovaj dio nalazi se unutar do ... while petlji koja će se ponavljati ako korisnik
umjesto slova unese brojeve.
{
p = 0;
} If naredbom ispitujemo je
li znak u nizu broj.
x = x + 1;
Ako jest, u p varijablu se
} sprema broj nula što će
imati za posljedicu da će
} se ponoviti do ... while
while (p == 0); petlja, odnosno unos.
Varijabla x uve-
ćava se za jedan Ako ni jedan član niza
da bi se pri sva- nije broj, u varijabli p će
Ovdje se ispituje je li kom ponavljanju ostati broj jedan i do ...
naredbom niz[x] while petlja se neće po-
vrijednost varijable p
nula i ako jest, do ... čitao slijedeći navljati, odnosno upis se
while petlja se ponavlja. član niza. neće ponavljati.
j
a
ž
r
d
Ovaj program je veoma složen pa ćemo odvojeno pogledati važnije elemente a
S
programa. Pogledajmo prvo glavnu do ... while petlju.
d
o
v
U
Ovdje se u varijablu p
sprema broj jedan. To je i
do Ovdje počinje petlja. varijabla o kojoj ovisi v
r m
{ p a
r
hoće li se do ... while š g
cout << "Unesite vase ime." << endl; petlja ponoviti ili ne. a o
r
cout << endl; N p
cin.getline(niz,255); e
l
x = 0; b
a
p = 1; j
i
r
while (niz[x] != '\0') a
V
{ Ovdje će se varijabla p postaviti na nula ako je
if (isdigit(niz[x])) jedan od znakova u nizu broj. To će imati za a
k
i
f
{ posljedicu da će se do ... while petlja ponoviti, a
r
p = 0; odnosno da će se unos teksta ponoviti. G
}
e
j
x = x + 1; n e
} e k
Ovdje se ispituje je li sadržaj varijable p jednak š l
u
} o d
n o
nuli. Ako jest do ... while petlja će se ponoviti, o
while (p == 0); D
a to znači da će se upis ponoviti.
e
j
l
t
e
P
Na početku se x postavlja na nulu, što znači da će se prvi
put sa niz[x] ispitivati niz[0] odnosno prva ćelija niza. a
j
l
o
P
Obrada teksta
#include <cstdlib>
#include <iostream>
#include <string>
j
a
ž
r
d
Osim što možemo ispitivati je li sadržaj varijable broj, ispitivati možemo i druga a
S
svojstva sadržaja varijable char tipa.
d
o
v
U
i
v
r m
p a
r
ISPITIVANJE ZNAKOVA š g
a o
r
N p
e
l
if (isdigit(slovo)) Ispituje je li sadržaj varijable slovo neki broj. b
a
j
i
r
a
V
Ispituje je li sadržaj varijable slovo broj ili slovo. Odgo-
if (isalnum(slovo)) vor je negativan ako unesemo upitnik, to čku ili nešto a
k
i
slično. f
a
r
G
e
j
if (isalpha(slovo)) Ispituje je li sadržaj varijable slovo neko slovo. n e
e k
š l
u
o d
n o
o
D
Ispituje je li sadržaj varijable slovo kontrolni znak. To je
if (iscntrl(slovo)) znak koji se dobiva ako držimo tipku Ctrl i onda pritis- e
j
l
t
nem npr. slovo v. e
P
Je li sadržaj varijable slovo nešto što se ispisuje na zas-
if (isgraph(slovo)) lon računala, dakle slovo, broj ili interpunkcija. U ovu a
j
l
grupu ne pripada prazno mjesto izme đu dviju riječi. o
P
Obrada teksta
#include <cstdlib>
#include <iostream>
#include <string>
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;
}
j
a
ž
r
d
a
S
d
o
v
U
if (isprint(slovo[6]))
{
i
cout << "Sedmi moze biti prazno mjesto." << endl; v
r m
} p a
r
š g
if (isupper(slovo[7])) a o
r
N p
{
cout << "Osmi je veliko slovo." << endl; e
l
} b
a
j
i
r
if (ispunct(slovo[8])) a
{ V
cout << "Deveti je neka interpunkcija." << endl;
a
} k
i
f
cout << endl; a
r
system("PAUSE"); G
return 0; e
j
} n e
e k
š l
u
o d
n o
o
D
e
j
l
t
e
P
Ovaj malo veći program morali smo staviti na dvije
stranice.
a
j
l
o
Možemo vidjeti uporabu naredbi za ispitivanje znako- P
va primijenjenu na polje char tipa.
a a
Vidimo da ne možemo odjednom ispitivati cijelo po- d t
a
r s
lje, nego da ispitujemo pojedine ćelije u polju. b k
e
O t
Program možemo korigirati mijenjanjem sadržaj polja
ili tako da, umjesto stalnog sadržaja polja, sadržaj i
t
k
polja unosimo preko tipkovnice. e
j
b
O
Uvijek imajmo u vidu da ćemo određenu naredbu -
usvojiti tek kad napravimo mnoštvo primjera u kojima o i
r
se ta naredba koristi. Određenu naredbu nismo usvo- p
i m
a
k
i r
jili kad smo je shvatili. Shvaćanje naredbe je samo l
e g
uvjet da bismo uopće mogli početi učiti. Naredbu V
smo usvojili tek kad smo je puno puta uspješno pri- e
j
n
mijenili u raznim programima i na razne načine. a a
d
m
i o
ž k
a
S
Obrada teksta
#include <cstdlib>
#include <iostream>
#include <string>
Zato što računalo smatra da velika slova dolaze prije malih. Ako želi-
mo napisati program koji sva slova raspoređuje po abecedi, morali
bismo najprije ustanoviti je li neko slovo veliko ili malo, odnosno prog-
ram bi morao biti nešto složeniji. (Pokušajmo ga napisati.)
j
a
ž
r
d
a
S
d
o
v
U
#include <cstdlib> i
#include <iostream> v
r m
#include <string> p a
r
š g
a o
r
N p
using namespace std;
e
l
int main() Mogla bi nas zbuniti b
a
uporaba znaka " i zna- j
i
{ r
a
char slovo = 'A'; ka '. V
char NizSlova[18] = "Ovo je niz slova.";
Pravilo je jednostavno, a
cout << "Jedno slovo je " << slovo << endl; k
i
f
cout << "Tekst je: " << NizSlova << endl; jedno slovo piše se u a
r
cout << endl; obliku 'a', a više slova u G
system("PAUSE"); obliku "Ovo je tekst.".
e
j
return 0; n e
e k
} š l
u
o d
n o
o
D
e
j
l
t
e
P
#include <cstdlib>
#include <iostream> a
j
l
#include <string> o
P
Obrada teksta
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
većim tekstom spremljenim u objekt string klase.
#include <cstdlib>
#include <iostream>
#include <string>
int main()
{
string tekst1 = "Ovo je prvi tekst.";
string tekst2 = " Ovo je drugi tekst.";
string tekst3;
tekst3 = tekst1 + tekst2; Objekte string klase možemo jed-
cout << tekst3 << endl; nostavno zbrojiti i rezultat zbraja-
cout << endl; nja spremiti u treći objekt.
system("PAUSE");
return 0;
}
j
a
ž
r
d
a
S
d
o
#include <cstdlib> v
U
#include <iostream>
#include <string> i
v
r m
p a
r
using namespace std; š g
a o
r
N p
int main()
{ e
l
b
string tekst1; a
j
i
r
string tekst2; a
V
cout << "Unesite prvu rijec." << endl;
cin >> tekst1; a
cout << endl; k
i
f
cout << "Unesite drugu rijec." << endl; a
r
Objekti klase string G
cin >> tekst2; mogu se međusobno
cout << endl; uspoređivati. e
j
if (tekst1 == tekst2) n e
e k
š l
u
{ U ovom programu us- o d
n o
cout << "Rijeci su jednake." << endl; poređujemo jesu li jed- o
} D
naki.
else e
j
l
t
{ e
cout << "Rijeci nisu jednake." << endl; P
}
cout << endl;
system("PAUSE"); a
j
l
o
return 0; P
}
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
Obrada teksta
#include <cstdlib>
#include <iostream>
#include <string>
int main()
{
string tekst1;
string tekst2;
cout << "Unesite prvu rijec." << endl;
cin >> tekst1;
cout << endl;
cout << "Unesite drugu rijec." << endl; Dva objekta klase string mo-
cin >> tekst2; žemo uspoređivati i tako da
cout << endl; ispitujemo je li prvi manji od
if (tekst1 < tekst2) drugog.
{
cout << "Prva je manja." << endl; Ostaje nejasno u kojem smis-
} lu se ispituje je li prvi manji od
else drugog.
{
cout << "Prva nije manja." << endl; Očito se ne ispituje količina
} slova, nego se objekti rangira-
cout << endl; ju po abecedi, ab je po abece-
system("PAUSE"); di nakon aaaaa, pa u tome
return 0; smislu ab nije manje nego je
} veće od aaaaa.
j
a
ž
r
d
Moguće su i složenije manipulacije nad tekstom. Ponovno pogledajmo nared- a
S
bu size() koju smo vidjeli na početku ovog poglavlja. Omogućuje nam određi-
vanje broja znakova koje sadrži tekst. Pri tome imajmo na umu da računalo i d
prazno mjesto između riječi smatra jednim znakom. o
v
U
i
v
r m
p a
r
š g
a o
r
N p
#include <cstdlib> e
l
#include <iostream> b
a
#include <string> j
i
r
a
V
using namespace std;
a
k
i
int main() f
a
r
{ G
string odgovor;
e
j
getline(cin, odgovor); n e
cout << "Tekst sadrzi " << odgovor.size() << " znakova." << endl; e k
š l
u
cout << endl; o d
n o
o
system("PAUSE"); D
return 0;
} Naredba size(). e
j
l
t
e
P
a
j
l
o
P
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
Obrada teksta
Ovaj program pretražuje sadržaj objekta tekst i traži pojavljuje li se u tom objek-
tu sadržaj objekta trazi. Ako se pojavljuje, obavještava nas na kojoj poziciji za-
počinje traženi tekst. (Prva pozicija nema broj jedan nego broj nula.)
#include <cstdlib>
#include <iostream>
#include <string>
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;
}
j
a
ž
r
d
Ovom naredbom utvr đujemo poziciju traženog teksta, a rezultat spremamo u a
S
varijablu pozicija.
d
o
v
U
Varijabla u koju spre-
mamo rezultat. pozicija = tekst.find(trazi);
i
v
r m
p a
r
š g
a o
r
N p
Naziv objekta u kojem se nalazi Naredba za Objekt koji pre-
e
l
tekst koji pretražujemo. pretraživanja. tražujemo. b
a
j
i
r
a
V
a a
d t
a
r s
b k
e
O t
Obrada teksta
Ovaj program radi sli čan posao kao i prethodni, ali pretraživanje zapo činje od
kraja teksta. Ako tražimo riječ koja se pojavljuje više puta, ovaj program naći će
posljednje pojavljivanje.
#include <cstdlib>
#include <iostream>
#include <string>
j
a
ž
r
d
a
S
d
o
v
U
#include <cstdlib>
#include <iostream> i
v
r m
#include <string> p a
r
š g
a o
r
using namespace std; N p
e
l
int main() Ovaj program smo tako korigirali da b
a
j
{ smo, iako s naredbom find započi- i
r
string tekst; njemo pretraživanje s lijeve strane, a
V
string trazi; pronašli drugo pojavljivanje tražene
int pozicija; riječi. a
k
cout << "Unesite tekst." << endl; i
f
a
r
getline(cin, tekst); G
cout << endl;
cout << "Sto trazim?" << endl; e
j
n e
getline(cin, trazi); e k
š l
u
cout << endl; o d
n o
pozicija = tekst.find(trazi,6); o
D
if (pozicija != string::npos)
{ e
j
l
t
cout << "Pocetak je na " << pozicija << ". poziciji." << endl; e
} P
else
{ a
j
l
cout << "Nema trazene rijeci." << endl; o
} P
cout << endl;
system("PAUSE"); a a
return 0; pozicija = tekst.find(trazi,6); d t
a
r s
} b k
e
O t
i
t
k
e
j
b
U već poznatu naredbu find dodali smo broj 6 čime smo naredili računalu da O
pretraživanje objekta tekst započne od znaka na poziciji 6. -
o i
r
p
Budući da prva riječ radi počinje na 5, računalo je našlo drugo pojavljivanje i m
a
k
i r
l
riječi radi. e g
V
e
j
Pomoću ove naredbe napravit ćemo program koji će pronaći sva pojavljiva- n
a a
nja neke riječi, a ne samo prvo ili posljednje. m d
o
i
ž k
a
S
Obrada teksta
Ovaj program može prona ći svako pojavljivanje neke riječi u nekom tekstu.
#include <cstdlib>
#include <iostream>
#include <string>
int main()
{ U ovom programu koristimo nared-
string tekst; bu find, a pozicija početka pretra-
string trazi; živanja nije određena brojem, ne-
int duljina; go sadržajem varijable trenutno .
int trenutno = 0;
int polozaj; Varijabla trenutno je na početku
cout << "Unesite tekst." << endl; 0, da bi prvo pretraživanje po čelo
getline(cin, tekst); od početka teksta. Ako na nekoj
cout << endl; poziciji pronađemo traženu riječ,
cout << "Sto trazim?" << endl; varijablu trenutno uvećavamo za
getline(cin, trazi); tu poziciju + 1, da bi novo pretraži-
cout << endl; vanje počelo nakon početka već
duljina = tekst.size(); nađene riječi i da bi se eventualno
while (trenutno < (duljina + 1)) pronašla nova riječ, a ne ponovo
{ ista.
polozaj = tekst.find(trazi,trenutno);
if (polozaj != string::npos)
{
cout << "Nalazi se na " << polozaj << ". mjestu." << endl;
trenutno = polozaj + 1;
}
else Budući da smo došavši do ove toče već
{ prilično napredovali u vještini programira-
trenutno = duljina + 1; nja, ovaj put je objašnjenje funkcioniranja
} programa nešto skromnije.
}
cout << endl; Pokušajmo shvatiti kako funkcionira prog-
system("PAUSE"); ram i pokušajmo ga korigirati tako da ispiše
return 0; adekvatnu obavijest, ako se tražena riječ
} uopće ne pojavljuje. Pokušajmo isti prog-
ram napisati korištenjem rfind naredbe.
j
a
ž
r
d
Na neku poziciju unutar teksta a
S
možemo dodati tekst.
d
o
v
U
e
j
l
t
e
P
Objekt u koji dodajemo tekst. tekst.insert(6,umetak);
a
j
l
o
P
Pozicija na koju dodajemo tekst.
#include <cstdlib> a a
#include <iostream> d t
a
r s
#include <string> b k
e
O t
Obrada teksta
#include <cstdlib>
#include <iostream>
#include <string>
int main()
{
string tekst = "Ovo je dobar tekst.";
tekst.erase(7,6);
cout << tekst << endl;
cout << endl;
system("PAUSE");
return 0;
}
Pozicija od kojem po-
činje brisanje.
Naredba za brisanje.
j
a
ž
r
d
Naredbom replace možemo dio teksta koji se nalazi u objektu klase string a
S
zamijeniti nekim drugim tekstom.
d
o
v
U
i
v
r m
p a
r
š g
a o
r
N p
e
l
b
a
j
i
r
#include <cstdlib> a
V
#include <iostream>
#include <string> a
k
i
f
a
r
using namespace std; G
e
j
int main() n e
{ e k
š l
u
string tekst = "Ovo je dobar tekst."; o d
n o
string drugi = "dodatan"; o
D
tekst.replace(7,5,drugi);
cout << tekst << endl; e
j
l
t
cout << endl; e
P
system("PAUSE");
return 0; Pozicija od koje zapo-
} činje zamjena teksta. a
j
l
o
P
i
t
k
e
j
b
Objekt u kojem mijenja- O
mo dio teksta. tekst.replace(7,5,drugi); -
o i
r
p
i m
a
k
i r
l
e g
V
Sadržaj kojim ćemo zamijeniti tekst u objektu tekst. Zamijenit ćemo 5 znako- e
j
va, počevši od sedmog sa sadržajem objekta drugi. Umjesto objekta drugi n
a a
mogli bismo staviti i tekst unutar navodnika. m d
i o
ž k
a
S
Obrada teksta
#include <cstdlib>
#include <iostream>
#include <string>
int main()
{
char niz[255]; Ovdje, na način koji smo već vidjeli u ovom pog-
string tekst; lavlju, ime unosimo u char polje i provjeravamo
tekst.reserve(256); jesu li uneseni brojevi ili slova. Ako su uneseni
int x; brojevi, unos se ponavlja. Naredba isdigit ne bi
int p; radila da smo koristili objekt klase string.
do
{
cout << "Unesite vase ime." << endl;
cout << endl;
cin >> niz;
x = 0;
p = 1;
while (niz[x] != '\0') Ovdje tekst iz polja tipa
{ char premještamo u ob-
if (isdigit(niz[x])) jekt klase string koji smo
{ nazvali tekst.
p = 0;
} To smo učinili da bismo
x = x + 1; mogli koristiti size nared-
} bu.
}
while (p == 0);
cout << endl;
tekst = niz;
cout << "Ime " << tekst << " sadrzi " << tekst.size() << " slova." << endl;
cout << endl;
system("PAUSE");
return 0; Naredba niz.size nije dozvoljena. Naredba
} size radi jedino s objektima, ali ne i s poljima.
j
a
Premještanje teksta iz stringa u char polje ž
r
d
a
S
Moguće je i tekst iz objekta klase string premjestiti u polje char tipa, ali je na- d
redba kojom to izvodimo nešto složenija. o
v
U
i
v
r m
p a
r
š g
a o
r
N p
e
l
b
a
j
i
r
a
#include <cstdlib> V
#include <iostream>
#include <string> a
k
i
f
a
r
G
using namespace std; e
j
n e
e k
int main() š l
u
o d
{ Formiramo objekt klase string i n o
o
string tekst = "Tekst."; u njega spremamo tekst D
“Tekst” . e
char *polje = (char*)tekst.c_str(); j
l
t
e
P
cout << polje[0] << endl;
cout << polje[1] << endl; Tekst iz objekta selimo u char
cout << polje[2] << endl; polje koje smo nazvali polje. a
j
l
cout << polje[3] << endl; o
P
cout << polje[4] << endl;
cout << polje[5] << endl;
Ispisujemo sadržaj polja da bis- a a
d t
cout << endl; mo vidjeli nalazi li se u njemu a
r s
system("PAUSE"); b k
e
doista “Tekst” . O t
return 0;
} i
t
k
e
j
b
O
-
char *polje = (char*)tekst.c_str(); o i
r
p
i m
a
k
i r
l
e g
V
Naziv char polja u koje ćemo Naziv objekta iz kojeg tekst seli- e
j
spremiti tekst iz objekta. U na- mo u char polje. U našem slu- n
a a
šem slučaju naziv je polje. čaju naziv objekta je tekst. m d
i o
ž k
a
S
Obrada teksta
#include <cstdlib>
#include <iostream>
#include <string>
#include <fstream>
int main()
{
int x;
string tekst[8]; Kad smo spremali brojeve, između
ofstream izlaz("podaci.txt"); brojeva stavljali smo prazno mjesto
for (x = 0; x < 8; x = x + 1) da bismo znali gdje završava jedan
{ broj, a počinje drugi.
getline(cin, tekst[x]);
} U ovom programu prazna mjesta
for (x = 0; x < 8; x = x + 1) nisu prikladna za razlikovanje sadr-
{ žaja pojedinih ćelija jer se prazna
izlaz << tekst[x]; mjesta nalaze između riječi.
izlaz << " # ";
}
cout << endl;
cout << "Spremanje je gotovo." << endl;
cout << endl;
system("PAUSE");
return 0;
}
j
a
ž
r
d
a
Programom sličnim programu za čitanje datoteka u kojima se nalaze brojevi S
čitat ćemo sadržaj datoteke u kojoj se nalaze tekstovi.
d
o
v
U
i
v
r m
p a
r
š g
a o
r
#include <cstdlib> N p
#include <iostream>
e
l
#include <string> b
#include <fstream> a
j
i
r
a
V
using namespace std;
a
k
i
int main() f
a
r
{ G
int x;
string tekst[8]; e
j
n e
string privremeni; e k
š l
u
ifstream ulaz("podaci.txt"); o d
n o
for (x = 0; x < 8; x = x + 1) o
D
{
do e
j
l
{ t
e
ulaz >> privremeni; P
if (privremeni != "#")
{
a
j
tekst[x] = tekst[x] + privremeni + " "; Oznaku # koristit ćemo l
o
} da bismo utvrdili jesmo P
} li došli do kraja sadrža-
while (privremeni != "#"); ja jedne ćelije polja. a a
} d t
a
r s
for (x = 0; x < 8; x = x +1) Ovo rješenje je jednos- b k
e
O t
{ tavno, ali je manjkavo.
cout << tekst[x] << endl; Ako bi netko prilikom i
} t
unosa teksta unio # k
e
j
cout << endl; oznaku, poremetio bi b
system("PAUSE"); ispravno funkcioniranje O
return 0; programa. -
} o i
r
p
i m
a
Zbog toga bi program k
i r
l
za unos teksta trebalo e g
V
tako modificirati da ne e
j
dozvoljava unos # oz- n
a a
nake. m d
i o
ž k
a
S
Objekti
j
a
ž
r
d
a
S
d
o
v
U
i
v
r m
p a
r
š g
a o
r
N p
i
e
l
b
a
j
t
i
r
a
V
a
k
k
i
f
a
r
G
e
e
j
n e
e k
j
š l
u
o d
n o
o
D
b
e
j
l
t
e
P
O
a
j
l
o
P
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
Objekti
j
a
ž
r
d
Imajmo u vidu da prednost uporabe objekata dolazi do izražaja u ve ćim prog- a
S
ramima. Manji programi koje ćemo vidjeti u ovom poglavlju mogu se elegan-
tnije napraviti bez uporabe objekata. Unato č tome, mi ćemo vidjeti primjere d
uporabe objekata u malim programima jer ćemo na primjerima malih progra- o
v
ma lakše shvatiti princip uporabe objekata. U
i
v
r m
p a
r
š g
a o
r
N p
e
l
b
#include <cstdlib> a
j
i
r
#include <iostream> a
V
using namespace std; a
k
i
f
class tekst a
r
{ G
public: e
j
void pisi() n e
e k
š l
u
{ o d
n o
cout << "Ovo je nas tekst." << endl; o
} D
Unesimo u program-
}; sku okolinu i pokreni- e
j
l
t
mo naš prvi program e
int main() koji koristi klase i ob- P
{ jekte.
tekst t;
t.pisi(); a
j
l
o
cout << endl; P
system("PAUSE");
return 0;
a a
} d t
a
r s
b k
e
#include <cstdlib> O t
#include <iostream>
i
t
Uočimo da taj program radi using namespace std; k
e
j
b
potpuno isti posao kao ovaj. O
int main()
Očito je da se u malim progra- { -
o i
r
mima ne isplati koristiti klase i cout << "Ovo je nas tekst." << endl; p
i m
cout << endl; k a
i r
l
objekte. Njihove prednosti do- system("PAUSE"); e g
V
laze do izražaja u većim prog- return 0; e
j
} n
ramima. a a
m d
i o
ž k
a
S
Objekti
Ovaj dio programa izrazito je sli čan ovom dijelu programa iz prošlog poglavlja.
U drugom redu nad objektom t vrši U drugom redu nad objektom tekst
se operacija pisi(). Unutar zagrada izvršili smo operaciju reserve(250)
nema sadržaja, jer se ništa ne uno- kojom smo osigurali prostor za spre-
si u objekt t, ali su zagrade svejed- manje teksta. Između naziva objekta
no obvezne. i naziva operacije nalazi se točka.
t . pisi() ;
Naziv objekta čiju meto-
Naziv metode koju sadrži
du ćemo koristiti. U na- objekt t. U našem slučaju
šem slučaju koristit će- koristimo metodu pisi().
mo metodu t.
Obvezna točka.
j
a
ž
r
d
a
S
d
o
v
#include <cstdlib> U
#include <iostream>
i
v
r m
using namespace std; p a
r
š g
Ovdje vidimo da objekt a o
r
class tekst možemo nazvati i dru- N p
{ gačije, npr. reci. e
l
public: b
a
void pisi() j
i
Ako smo formirali ob- r
a
{ jekt reci, onda naredba V
cout << "Ovo je nas tekst." << endl; koja je do sada imala
} oblik: a
k
i
}; f
a
r
t.pisi(); G
int main()
e
j
{ dobiva oblik: n e
tekst reci; e k
š l
u
o d
reci.pisi(); reci.pisi(); n o
o
cout << endl; D
system("PAUSE"); Dakle, sad se operacija
return 0; pisi vrši nad objektom e
j
l
t
} reci. e
P
a
j
l
o
P
a a
#include <cstdlib> d t
a
r s
#include <iostream> b k
e
Uočimo da postoji sličnost između O t
Objekti
#include <cstdlib>
#include <iostream>
class tekst
{
public:
void pisi()
{
cout << "Ovo je nas tekst." << endl;
}
}; Kao što možemo formirati
više varijabli int tipa, tako
int main() možemo formirati više
{ objekata klase tekst.
tekst prvi;
tekst drugi; U ovom primjeru formirali
tekst treci; smo tri objekta, objekt
prvi.pisi(); prvi, objekt drugi i objekt
drugi.pisi(); treći.
treci.pisi();
cout << endl; Za biranje naziva objeka-
system("PAUSE"); ta vrijede slična pravila
return 0; kao i za biranje naziva
} varijabli.
class tekst
{
public: Za razliku od klase string
void pisi() koju je već netko prije na-
{ pisao, a mi je samo koris-
cout << "Ovo je nas tekst." << endl; timo, klasu tekst morali
} smo sami napisati.
};
U ovom dijelu programa
formira se klasa tekst.
j
a
ž
r
d
Formiranje klase za- Nakon naredbe class a
po č inje naredbom
class tekst slijedi naziv klase. U
S
i
v
r m
p a
r
š g
a o
r
U ovoj inačici programa N p
#include <cstdlib> klasu smo nazvali BrdaI-
#include <iostream> Doline.
e
l
b
a
j
i
r
using namespace std; a
To je dozvoljeno, samo V
što sad naredbu koja je
class BrdaIDoline
prije imala oblik: a
{ k
i
f
public: a
r
tekst t; G
void pisi()
{ e
j
moramo napisati u obliku: n e
cout << "Ovo je nas tekst." << endl; e k
} š l
u
BrdaIDoline t; o d
}; n o
o
D
Dakle, formiramo objekt t
int main() klase BrdaIDoline. e
j
l
{ t
e
BrdaIDoline t; P
(Drugo je što je pametno
t.pisi();
da nam naziv klase govo-
cout << endl;
ri čemu klasa služi, pa je a
system("PAUSE"); logičnije da se klasa za j
l
return 0; o
ispis teksta zove tekst, a P
} ne BrdaIDoline.)
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
-
o i
r
p
i m
a
Vidimo da je rezultat rada k
i r
l
takvog programa potpuno e g
V
jednak kao i rezultat rada e
j
programa u kojem smo n
a a
formirali klasu tekst. m
i
d
o
ž k
a
S
Objekti
void pisi()
{ Ova naša mala klasa ne
cout << "Ovo je nas tekst." << endl; sadrži varijable i sadrži
} samo jednu metodu od-
nosno može napraviti
samo jednu operaciju. Tu
metodu nazvali smo pisi
().
j
a
ž
r
d
a
S
d
o
v
#include <cstdlib> U
#include <iostream> Kao što smo klasu mogli
nazvati drugačije, mogli i
v
r m
using namespace std; smo i metodu. p a
r
š g
a o
r
class tekst U ovom primjeru metodu N p
{ smo nazvali Pero().
e
l
public: b
a
void Pero() To je dozvoljeno, samo j
i
r
{ što ćemo naredbu koju a
V
cout << "Ovo je nas tekst." << endl; smo do sada pisali u obli-
} ku: a
k
i
}; f
a
r
t.pisi();
G
int main()
pisati u obliku: e
j
{ n e
tekst t; e k
š l
u
t.Pero(); t.Pero(); o d
n o
o
cout << endl; D
system("PAUSE"); Kao i kod biranja naziva
return 0; varijabli i klasa, i ovdje je e
j
l
t
} pametno da nam naziv e
metode govori što meto- P
da radi. Zato je naziv pisi
za metodu koja ispisuje
a
j
tekst bolji od naziva Pero. l
o
P
a a
Dok naziv metode uz d t
a
r s
određena ograni čenja b k
Void naredba ispred void pisi () možemo birati po volji, O
e
t
naziva metode ozna-
čuje da metoda ne ove dvije zagrade se
ovdje moraju obavezno i
t
vraća nikakvu vrijed- k
nalaziti. e
j
nost. b
O
U kojem smislu ne -
vraća vrijednost vid- o i
r
Naziv metode biramo po volji, paze ći na ogra- p
jet ćemo kasnije kad i m
ničenja o kojima smo govorili kad smo govorili k a
i r
l
ovakvu metodu us- o biranju naziva varijabli. e g
poredimo s onima V
e
j
koje vraćaju vrijed- Pametno je da naziv metode tako izaberemo n
nost. a a
da nam govori čemu metoda služi. m
i
d
o
ž k
a
S
Objekti
int main()
{
tekst t; Glavni dio programa. Sada možemo vidjeti zašto
t.pisi(); smo program započinjali s int main() oznakom,
cout << endl; odnosno oznakom da je to glavni dio.
system("PAUSE");
return 0; Kad računalo pokrene program, najprije će se
} pokrenuti ovaj dio, a ostali dijelovi će se koristiti
po potrebi.
j
a
ž
r
d
Unutar metode ne mora se a
S
nalaziti program za ispis. Mo-
že se nalaziti bilo što, npr. d
program za crtanje kružnice. o
v
U
i
v
r m
p a
r
#include <cstdlib> š g
a o
r
#include <iostream> N p
#include <winbgim.h> e
l
b
a
j
using namespace std; i
r
a
V
class tekst Iako program i ovako radi,
{ malo ćemo ga preurediti. a
k
i
public: f
a
r
void pisi() Umjesto class tekst stavit G
{ ćemo class slika.
e
j
int gdriver = 9; n e
int gmode = 2; e k
š l
u
o d
initgraph(&gdriver, &gmode, ""); n o
o
setbkcolor(WHITE); D
setcolor(BLACK); Umjesto void pisi() stavit će-
cleardevice(); mo void krug(). e
j
l
t
circle(320,240,180); e
P
getch();
closegraph();
} Umjesto tekst t; tj. umjesto a
j
l
}; naredbe formiranja objekta t o
P
klase tekst stavimo slika cr-
int main() taj. Time ćemo formirati ob-
{ jekt crtaj klase slika. a a
d t
tekst t; a
r s
t.pisi(); b k
e
O t
cout << endl;
system("PAUSE"); i
t
return 0; Umjesto t.pisi(); tj. umjesto k
pozivanja metode pisi() u klasi e
j
} b
tekst stavit ćemo crtaj.krug(); O
-
o i
r
p
i m
a
k
i r
l
Izbacimo naredbu cout << endl; i naredbu system("PAUSE"); . e g
V
Iako program radi i s tim naredbama, bez njih će raditi nešto elegantnije. Ovaj e
j
se program odvija u grafi čkom prozoru pa su nepotrebni razmak i pauza u n
a a
tekstualnom prozoru. m d
i o
ž k
a
S
Objekti
#include <cstdlib>
#include <iostream>
class tekst
{
public:
void prva()
{ Prva metoda koju smo
cout << "Ovo je prva metoda." << endl; nazvali prva() .
}
void druga()
{ Druga metoda koju smo
cout << "Ovo je druga metoda." << endl; nazvali druga().
}
void treca()
{ Treća metoda koju smo
cout << "Ovo je treca metoda." << endl; nazvali treca() .
}
};
int main()
{ Objekt formiramo jed-
tekst t; nom, a zatim pozivamo
t.prva(); metode po logici da
t.druga(); najprije navedemo na-
t.treca(); ziv objekta, zatim stavi-
cout << endl; mo točku i konačno
system("PAUSE"); naziv metoda. Zagrade
return 0; na kraju te ; oznaka su
} obvezne.
j
a
ž
r
d
Program može sadržavati a
S
više klasa, npr. u ovom
slučaju klasu tekst1 i klasu d
tekst2. o
v
U
i
v
r m
p a
r
š g
a o
r
N p
#include <cstdlib> e
l
#include <iostream> b
a
j
i
r
using namespace std; a
V
Objekti
#include <cstdlib>
#include <iostream>
class tekst
{
public:
void pisi()
{
cout << "Upravo koristimo objekt." << endl;
} Jednom formirani
}; objekt možemo proi-
zvoljni broj puta kori-
int main() stiti u programu.
{
tekst t; To je jedna od pred-
cout << "Objekt koristimo 1. put." << endl; nosti korištenja klasa
t.pisi(); i objekata.
cout << endl;
cout << "Objekt koristimo 2. put." << endl; Operaciju koja se u
t.pisi(); programu često po-
cout << endl; navlja stavimo u kla-
cout << "Objekt koristimo 3. put." << endl; su, u programu for-
t.pisi(); miramo objekt i pozi-
cout << endl; vamo određenu ope-
system("PAUSE"); raciju kad god nam
return 0; zatreba, bez potrebe
} da je ponovo piše-
mo.
Sve klase koje smo do sada formirali bile su veoma Uporaba klasa i obje-
jednostavne budući da nisu komunicirale s ostat- kata veoma je slože-
kom programa na način da bi bilo moguće u klasu na ideja, i kao uvijek
unijeti neke podatke ili iz klase iščitati neke podat- do sada, imajmo na
ke, npr. brojeve ili tekst. umu da ćemo te pro-
gramske tehnike us-
U nastavku ovog poglavlja vidjet ćemo na koji na- vojiti tek kad napravi-
čin možemo u klase unositi ili iz klasa iščitavati po- mo velik broj primje-
datke. ra.
j
a
Komunikacija s metodama ž
r
d
a
S
e
l
b
a
j
#include <cstdlib> i
r
a
#include <iostream> V
Objekti
#include <cstdlib>
#include <iostream>
public:
int pov; U public područ ju dodali smo
void naslov() varijablu koju smo nazvali pov.
{
cout << "Povrsina pravokutnika." << endl;
cout << endl;
} Sadržaj varijable c koja je formirana u
private područ ju i u kojoj se nalazi re-
int povrsina (int a, int b) zultat izračuna površine spremili smo u
{ varijablu pov koja je formirana u public
c = a * b; područ ju.
pov = c;
return (c);
}
}; Ovdje vidimo da sadržaju varija-
ble pov možemo pristupiti u
int main() glavnom programu, iako je for-
{ mirana u objektu. Pristupamo joj
pravokutnik p; tako da prvo napišemo naziv
p.naslov(); objekta zatim točku i na kraju
cout << "Povrsina je "; varijablu, dakle u p.pov obliku.
cout << p.povrsina(2,3);
cout << endl; Pokušamo li na isti način pristu-
piti varijabli c, doći će do greške.
cout << "p.pov je " << p.pov << endl; (Želimo li probati, maknimo //
// cout << "p.c je " << p.c << endl; oznaku na početku reda.)
cout << endl << endl; Već iz ovog primjera bismo mo-
system("PAUSE"); gli zaključiti u kojem smislu je c
return 0; varijabla private, a kojem smislu
} je pov varijabla public.
j
a
ž
r
d
Naredba private označava područ je u kojem se nalaze varijable i metode a
S
koje se mogu koristiti unutar klase odnosno unutar objekta, ali se njima ne
može pristupiti iz glavnog programa, odnosno izvan objekta. U ovom progra- d
mu u private područ ju imamo samo varijablu c. Mogli bismo imati i procedure. o
v
U
i
v
r m
p a
r
š g
a o
r
N p
e
l
b
class pravokutnik Za razliku od private a
j
i
{ područ ja, svemu što r
a
private: formiramo u public V
int c; područ ju možemo a
pristupiti i izvan kla- k
i
f
public: se, odnosno izvan a
r
int pov; objekta. G
void naslov() e
j
{ To ne možemo učini- n e
e k
cout << "Povrsina pravokutnika." << endl; ti tako da samo na- š l
u
o d
cout << endl; vedemo naziv varija- n o
o
} ble ili procedure ne- D
go tako da prvo na- e
j
l
int povrsina (int a, int b) vedemo naziv objek- t
e
{ ta, zatim točku i na P
c = a * b; kraju naziv varijable
pov = c; ili procedure. Ako
return (c); pristupamo procedu- a
j
l
} ri, moramo navesti i o
P
}; zagrade.
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
Ovdje su formirane još dvije varijable, varijabla a i varijabla b. Iako bi bilo O
logično da tim varijablama možemo pristupiti izvan klase odnosno izvan ob- -
o i
r
jekta, jer su formirane u public područ ju, to ipak nije slučaj. Pokušamo li im p
pristupiti izvan objekta doći će do greške. i m
a
k
i r
l
e g
V
Dakle izvana možemo pristupiti samo onim varijablama koje su u public po- e
druč ju formirane samostalno kao pov varijabla, a ne možemo onima koje su j
n
a a
formirane unutar neke metode. m d
o
i
ž k
a
S
Objekti
Što to znači?
To znači da će ova metoda
biti int tipa, odnosno da će int povrsina ( int a, int b )
rezultat njenog rada biti broj
int tipa.
j
a
ž
r
d
Pogledajmo još jednom naredbu za formiranje metode koja zapo činje void a
S
naredbom.
d
o
v
U
Void naredba znači da metoda Prazne zagrade znače da u ovu
naslov neće vraćati nikakav re- metodu ništa nije moguće unijeti i
v
r m
zultat rada. na način da se napiše: p a
r
š g
a o
r
Sad će netko upitati, kako ne p.naslov(2,3); N p
vraća kad ispisuje tekst na zas-
e
l
lon. Moguće je unutar metode staviti b
cin naredbu pa nešto unijeti npr. a
j
i
r
Ispisuje, ali se ispisivanje zbiva preko tipkovnice, ali nije moguće a
V
unutar metode. ništa unijeti na gore opisan na-
čin. a
k
i
U glavnom programu moguće je f
a
r
napisati: G
Objekti
#include <cstdlib>
#include <iostream>
class racunaj
{
private:
int c;
public:
int metoda1(int a, int b)
{
c = a + b; U ovom programu možemo
return (c); lijepo vidjeti kako o naredbi
}
return ovisi što će se nared-
int metoda2(int a, int b) bom r.metoda1(2,4) ispisati na
{
c = a + b; zaslon računala.
return (a);
}
j
a
ž
r
d
a
S
Objekti
#include <cstdlib>
#include <iostream>
j
a
ž
r
d
a
S
d
o
v
#include <cstdlib> U
#include <iostream>
i
v
r m
using namespace std; p a
r
š g
a o
r
N p
class racunaj
{ e
l
private: b
a
j
i
int a; r
a
int b; V
int c;
a
int p; k
i
f
int u; Ako za ispis koris- a
r
public: timo void metodu G
void unesi(void) pa uporaba nared- e
j
{ be return nije mo- n e
e k
cout << "Unesite stranicu a." << endl; guća, ispisom re- š l
u
o d
cin >> a; zultata unutar me- n o
o
cout << "Unesite stranicu b." << endl; tode možemo ispi- D
cin >> b; sati više vrijednos-
e
j
cout << "Cijena kvadratnog metra." << endl; ti. l
t
cin >> c; e
P
} U ovom slučaju u
void cijena(void) metodi cijena mi
{ ispisujemo površi- a
j
l
p = a * b; nu i cijenu. o
P
cout << "Povrsina je " << p << endl;
u = p * c; Da je to int meto-
cout << "Cijena je " << u << endl; da i da rezultat a a
d t
} vraćamo return a
r s
b k
e
}; naredbom, mogli O t
bi napisati ili re-
int main() turn(p) ili return i
t
(u), ali ne bismo k
{ e
j
racunaj p; mogli vratiti obje b
O
p.unesi(); vrijednosti.
p.cijena(); -
o i
r
Ukratko, koju od p
i m
a
cout << endl; metoda ispisa će- k
i r
l
system("PAUSE"); mo upotrijebiti ovi- e g
V
return 0; si o potrebama e
j
} koje moramo za- n
a a
dovoljiti. m d
i o
ž k
a
S
Objekti
Naredba cout << p.povrsina(2,3); zbunjujuća je između ostalog i zato što istov-
remeno služi za unos broja 2 i broja 3 u metodu i za ispis rezultata množenja,
odnosno rezultata rada metode.
return ( c );
cout << c;
j
a
ž
r
d
a
S
d
o
v
U
i
v
r m
p a
r
#include <cstdlib> š g
a o
r
#include <iostream> N p
e
l
using namespace std; b
a
j
i
r
class pravokutnik a
V
{
private: a
k
float c; i
f
a
r
public: G
void naslov()
{ Kao što smo već e
j
rekli, metode ne n e
cout << "Povrsina pravokutnika." << endl; e k
š l
u
cout << endl; moraju biti int tipa. o d
n o
} Mogu biti i nekog o
drugog tipa. U D
float povrsina (float a, float b)
{ ovom programu e
j
imamo metodu l
t
c = a * b; e
return (c); float tipa. P
}
}; a
j
l
o
int main() P
{
float a1; a a
float b1; d t
a
r s
pravokutnik p; b k
e
O t
p.naslov();
cout << "Unesite stranicu a." << endl; i
t
cin >> a1; k
e
cout << "Unesite stranicu b." << endl; j
b
cin >> b1; O
cout << "Povrsina je "; Vidimo da unutar -
o i
cout << p.povrsina(a1,b1); zagrada umjesto r
p
cout << endl << endl; konkretnih broje- i m
a
k
i r
l
system("PAUSE"); va možemo sta- e g
return 0; viti varijable. V
e
j
} n
a a
m d
i o
ž k
a
S
Objekti
#include <cstdlib>
#include <iostream> U deklaraciji klase samo su
nabrojeni elementi klase i po-
using namespace std; dijeljeni u private i public po-
druč je.
class pravokutnik
{ Ovdje se nalazi samo zaglav-
private: lje metode pravokutnik u ko-
int c; jem su određena ulazna i izla-
public: zna svojstva metode, ali ovdje
int povrsina (int a, int b); nema sadržaja metode.
};
j
a
ž
r
d
Pogledajmo kako su povezane deklaracija metode i definicije metode. a
S
d
o
Tip vrijednosti koju će metoda Obvezna ; ozna- v
ka U
vraćati kao rezultat. U ovom
slučaju je int, a mogao bi biti i Deklaracija metode u dek- i
neki drugi npr. float. laraciji klase. Ovdje je na- v
r m
p a
r
veden naziv metode i ulaz- š g
a o
r
no-izlazna svojstva meto- N p
de, ali ne i program meto-
de. e
l
b
a
j
i
r
a
int povrsina (int a, int b) ; V
Definicija me-
a
tode. Ovdje k
i
f
se nalazi pro- a
r
gram koji od- G
ređuje što ta e
j
metoda radi, n e
e k
odnosno svoj- š l
u
o d
int pravokutnik :: povrsina (int a, int b) stva metode. n o
o
D
e
j
l
t
Popis varijabli preko e
Naziv klase. Naziv metode. kojih se brojevi mogu P
unijeti u metodu.
a
j
l
Obvezna :: oznaka između naziva klase i o
P
naziva metode.
a a
d t
a
r s
U većini slučajeva do sada noviji način izrade programa bio je elegantniji b k
e
O t
od starog. U ovom slučaju to baš ne izgleda tako. Ovakav način pisanja
klase očigledno je manje elegantan od prethodnog. Postoji veća vjerojat- i
t
nost da će doći do greške budući da treba uskladiti deklaraciju metode i k
e
j
definiciju metode. b
O
Ovaj način pisanja klasa doista je manje elegantan od načina koji smo kori- -
stili u prethodnim programima i ima ga smisla upotrebljavati samo kad želi- o i
r
p
mo veći program razdijeliti u više datoteka. Ako klase pišemo na ovaj na- i m
a
k
i r
čin, tada možemo u jednu datoteku staviti sve deklaracije klasa, a u druge l
e g
datoteke definicije metoda. Ako se program nalazi u jednoj datoteci, bolje je V
e
j
definiciju metode napisati unutar deklaracije metode kao što smo to činili u n
prethodnim programima. a a
m d
i o
ž k
a
S
Objekti
Uporaba konstruktora
#include <cstdlib>
#include <iostream>
class pravokutnik
{ U ovom programu nalazi se nekoli-
private: ko neobičnosti.
int a;
int b; Prva neobičnost jest ova metoda.
public: Neobično je to što ima isti naziv
pravokutnik(void) kao i klasa. Klasu smo nazvali pra-
{ vokutnik i ova metoda zove se
cout << "Stranica a:" << endl; pravokutnik.
cin >> a;
cout << "Stranica b:" << endl; Druga neobi čnost jest što ova me-
cin >> b; toda nema nikakvu oznaku povrat-
} ne vrijednosti, nije ni void pravo-
int povrsina(void) kutnik() , ni int pravokutnik().
{
return (a * b);
}
}; Neobično je i to
što je nigdje ne
int main() pozivamo.
{
pravokutnik p; U ovom redu
cout << "Povrsina je " << p.povrsina() << "." << endl; formiramo objekt
cout << endl; p klase pravo-
system("PAUSE"); kutnik, a već u
return 0; sljedećem redu
} pozivamo meto-
du povrsina .
Iako nigdje u programu nije vidljivo pozivanje metode pravokutnik, njen sadržaj
se očigledno izvršava. Očigledno je da prije izvođenja metode površina računa-
lo unosi stranicu a i stranicu b. Takva metoda naziva se konstruktor , a izvršava
se u trenutku formiranja objekta. Dakle, ova metoda izvršila se u trenutku kad
smo naredbom pravokutnik.p formirali objekt p klase pravokutnik.
j
a
ž
r
d
a
S
d
o
v
U
#include <cstdlib>
i
#include <iostream> v
r m
p a
r
š g
using namespace std; a o
r
N p
class pravokutnik e
l
{ b
U ovom programu imamo a
j
i
private: dva konstruktora. r
a
int a; V
int b; Jednome je ulazni dio void
a
public: tipa, što znači da se u njega k
i
f
pravokutnik(void) ne može unositi vrijednost a
r
{ tako da napišemo: G
cout << "Stranica a:" << endl; e
j
cin >> a; pravokutnik p2(3,4); n e
e k
cout << "Stranica b:" << endl; š l
u
o d
cin >> b; n o
o
} D
pravokutnik(int a1, int b1) Drugome je ulazni dio (int
a1, int b1), što znači da se u e
j
{ l
t
a = a1; njega može vrijednost unositi e
tako da napišemo: P
b = b1;
}
pravokutnik p2(3,4);
int povrsina(void) a
j
l
{ o
P
return (a * b);
}
}; Ovdje formiramo objekt klase pravokutnik bez a a
vrijednosti u zagradi. U tom slučaju primijenit d t
a
r s
će se pravokutnik(void) konstruktor. b k
e
int main() O t
{
pravokutnik p1; i
t
k
cout << "Povrsina je " << p1.povrsina() << "." << endl; e
j
cout << endl; b
O
pravokutnik p2(3,4);
cout << "Za p2(3,4) povrsina je " << p2.povrsina() << "." << endl; -
o i
r
cout << endl; p
i m
system("PAUSE"); k a
i r
l
return 0; Objekt p2(3,4); u zagradi ima dva broja, pa će se u e g
V
} tom slučaju primijeniti pravokutnik(int a1, int b1) e
j
konstruktor. U tom slučaju površina će se izračunati n
a a
množenjem brojeva 3 i 4, bez unosa tipkovnicom. m d
i o
ž k
a
S
Objekti
Nasljeđivanje
#include <cstdlib>
#include <iostream>
j
a
ž
r
d
Pogledajmo međusobnu povezanost bitnih dijelova programa u kojem je primi- a
S
jenjena tehnika nasljeđivanja klasa.
d
o
v
U
a
k
i
f
a
r
Naziv nove klase. Naredba za nas- G
Klasa koju klasa kub nasljeđuje.
ljeđivanje klase. e
j
n e
e k
š l
u
o d
n o
o
D
class kub : public kvadrat Ovako deklarirana klasa kub
nasljeđuje sve varijable i meto- e
j
l
t
de klase kvadrat. e
P
int izracun (void) Klasa sadrži metodu izracun,
iako metodu izracun posjedu- a
j
l
je i klasa kvadrat koju naslje- o
đuje. U tom slučaju klasa kub P
koristit će vlastitu inačicu me-
tode izracun. a a
kub objekt2; d t
a
r s
b k
e
O t
i
t
objekt2.unos(); Ovdje koristimo metodu unos, iako je kla- k
e
j
sa kub ne posjeduje. To je moguće jer b
O
klasa kub nasljeđuje klasu kvadrat , a
klasa kvadrat sadrži klasu unos. -
o i
r
p
i m
a
k
i r
l
e g
V
Iako metodu izracun posjeduje i klasa
objekt2.izracun() kvadrat , objekt2 koristit će vlastitu inačicu
e
j
n
a a
metode izračun. m d
i o
ž k
a
S
Veliki programi
j
a
ž
r
i
d
a
S
d
o
v
U
m
i
v
r m
p a
r
š g
a
a o
r
N p
r
e
l
b
a
j
i
r
a
V
g
a
k
i
f
a
r
o
G
e
j
r
n e
e k
š l
u
o d
n o
o
D
p
e
j
l
t
e
P
i a
j
l
k
o
P
i
l
a a
d t
a
r s
b k
O
e
t
e
i
t
k
e
j
b
O
V
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
Veliki programi
j
a
ž
r
d
Male programe možemo smjestiti u jednu datoteku. Za ve će programe to nije a
S
praktično rješenje. Ako je veliki program u jednoj velikoj datoteci teže je pro-
naći grešku, teže je napraviti izmjenu programa i teže je podijeliti posao iz- d
o
među više programera. v
U
U ovom poglavlju vidjet ćemo kako podijeliti jedan nešto veći program u više
i
datoteka. Najprije ćemo program napisati u jednoj velikoj datoteci, a zatim ga v
r m
podijeliti u više manjih datoteka. p a
r
š g
a o
r
N p
e
l
Ovdje se nalazi deklaracija klase bomba. Sastoji b
a
se od varijabli x i y koje određuju položaj bombe na j
i
r
a
zaslonu te metode crtanje koja crta bombu i od V
metode brisanje koja briše bombu da bi se dobila
iluzija kretanje bombe. a
class bomba k
i
f
{ a
r
Deklaracija sadrži konstruktor koji određuje počet- G
private: nu poziciju bombe.
int x, y; e
j
public: n e
e k
š l
u
bomba() o d
n o
{ o
x = (static_cast <float> (rand()) / RAND_MAX) * 620; D
y = -((static_cast <float> (rand()) / RAND_MAX) * 480); e
j
l
t
} e
void crtanje(); P
void brisanje();
};
void bomba :: crtanje() a
j
l
Sadržaj metode crtanje. o
{ P
rectangle (x,y,(x+20),(y+5));
}
a a
void bomba :: brisanje() d t
a
{ Sadržaj metode brisanje. r s
b k
e
t
setcolor(WHITE); O
rectangle (x,y,(x+20),(y+5));
i
t
setcolor(BLACK); k
y = y + 5; e
j
b
if (y > 490) O
{ -
y = -((static_cast <float> (rand()) / RAND_MAX) * 480); o i
r
x = (static_cast <float> (rand()) / RAND_MAX) * 620; p
i m
a
k
i r
} l
e g
} V
e
j
n
a a
m d
i o
ž k
a
S
Veliki programi
j
a
ž
r
d
Ovdje se u svakom objektu klase a
S
bomba poziva metoda za crtanje bom-
be na novoj poziciji. d
o
v
Neprestanim brisanjem bombe na sta- U
roj poziciji i crtanjem na novoj stvara
i
se iluzija kretanja, odnosno padanja v
r m
bomba1.crtanje(); bombi. p a
r
š g
bomba2.crtanje(); a o
r
N p
bomba3.crtanje();
e
l
Naredba koja zaustavlja program odre- b
a
j
đeno vrijeme. Služi za regulaciju brzine i
r
igre. a
delay(1); V
a
k
i
f
Ovdje ispitujemo je li pritisnuta neka a
r
if (kbhit()) tipka na tipkovnici. G
{ e
j
n e
e k
Ako je pritisnuta neka tipka na tipkovni- š l
u
o d
n o
ci, ovdje se kod pritisnute tipke sprema o
odgovor = getch(); u varijablu odgovor . D
e
j
l
t
e
Ovdje se poziva metoda pomak koja će P
brod.pomak(odgovor);
} obrisati objekt na staroj poziciji.
a
j
l
o
P
Ovdje se poziva metoda crtaj koja će
brod.crtaj(); nacrtati objekt na novoj poziciji.
a a
d t
a
r s
b k
e
t
Izvođenje igre prekida se pritiskom na O
} tipku k.
i
t
k
Ovdje se ispituje je li pritisnuta tipka k i, e
j
b
ako je pritisnuta, izvođenje igre se zau- O
while (odgovor != 'k'); stavlja. -
o i
r
p
i m
a
k
i r
l
return 0; Nemojmo zaboraviti da sva četiri dijela e g
V
} programa moraju biti unijeta u našu pro- e
j
gramsku okolinu da bismo mogli pokre- n
a a
nuti program. m d
i o
ž k
a
S
Veliki programi
j
a
ž
r
d
a
S
d
o
v
U
Izaberemo Postavke projekta . i
v
r m
p a
r
š g
a o
r
N p
e
l
b
a
j
i
r
a
V
a
k
i
f
a
r
G
e
j
n e
e k
š l
u
o d
n o
o
D
e
j
l
t
e
P
a
j
l
o
P
a a
d t
a
r s
b k
e
O t
i
t
k
U Parameters unesemo -lbgi -lgdi32 e
j
b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
Veliki programi
j
a
ž
r
d
a
S
1 - Desni klik na Neimenovano1 .
d
o
v
U
i
v
r m
p a
r
š g
a o
r
N p
e
l
b
a
j
i
r
a
V
e
j
l
t
e
P
a
j
l
o
Datoteku preimenujemo u bom- P
ba.cpp i kliknemo na OK.
a a
d t
a
r s
b k
e
O t
i
t
k
e
j
b
O
-
o i
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
Veliki programi
- bomba.h
- objekt.cpp
- objekt.h
j
a
ž
r
d
a
U datoteku bomba.cpp spremimo me- S
tode klase bomba; metodu crtanje i
d
metodu brisanje. o
v
U
i
v
r m
p a
r
š g
a o
r
N p
e
l
b
a
j
i
r
a
V
a
k
i
f
a
r
G
Veliki programi
#ifndef BOMBA_H
#define BOMBA_H
#ifndef BOMBA_H
#define BOMBA_H Kad bi se datoteka zvala npr. datoteka.h , ovaj
dio imao bi oblik:
class bomba
{ #ifndef DATOTEKA_H
private: #define DATOTEKA_H
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(); Naredbu #endif pisat ćemo na kraju
};
svake datoteke koja počinje nared-
bom #ifndef .
#endif
j
a
ž
r
d
a
S
U datoteku objekt.cpp spremimo
metode klase bomba; metodu d
pomak i metodu crtaj . o
v
U
i
v
r m
p a
r
š g
a o
r
N p
e
l
b
a
j
i
r
a
V
a
k
i
Naredbama #include f
a
r
uključimo grafičku biblio- G
teku winbgim.h i dato-
teku objekt.h u kojoj se e
j
n e
nalazi deklaracija klase e k
š l
u
objekt . o d
#include <winbgim.h> n o
o
#include "objekt.h" D
Veliki programi
j
a
ž
r
d
Glavni program se u ovoj #include <cstdlib> a
S
inačici razlikuje od inačice #include <iostream>
koja se cijela nalazi u jednoj #include <winbgim.h> d
datoteci po tome što u ovoj o
#include <ctime> v
inačici moramo osim: U
Veliki programi
Rezultat izvođenja
našeg programa iz-
gledat će otprilike
ovako.
j
a
ž
r
d
main.cpp a
S
U ovom shematskom prika-
using namespace std; zu našeg programa može- d
o
mo vidjeti logiku po kojoj se v
U
#include "objekt.h" program podijeljen u više
datoteka povezuje u jednu i
#include "bomba.h" cjelinu. v
r m
p a
r
š g
int main() Koristeći ovu logiku, može- a o
r
N p
{ mo daleko veći program
GLAVNI PROGRAM; razdijeliti na veći broj dato- e
l
b
} teka. a
j
i
r
a
V
a
k
i
f
objekt.h bomba.h a
r
G
#ifndef OBJEKT_H #ifndef BOMBA_H e
j
n e
#define OBJEKT_H #define BOMBA_H e k
š l
u
o d
n o
class objekt class bomba o
D
{ {
e
j
l
t
DEKLARACIJA KLASE; DEKLARACIJA KLASE; e
P
}; };
a
j
#endif #endif l
o
P
a a
d t
objekt.cpp bomba.cpp a
r s
b k
e
O t
Sažimanje koda
j
a
ž
r
d
a
a
S
d
o
d
v
U
i
v
r m
o
p a
r
š g
a o
r
N p
k
e
l
b
a
j
i
r
a
V
a
e
k
i
f
a
j
r
G
e
j
n e
e k
n
š l
u
o d
n o
o
D
a
e
j
l
t
e
P
a
j
m
l
o
P
ž
a
r s
b k
e
O t
i
t
a
k
e
j
b
O
-
o i
S
r
p
i m
a
k
i r
l
e g
V
e
j
n
a a
m d
i o
ž k
a
S
Sažimanje koda
Mnoge naredbe mogu se, osim na na čin koji smo do sada vidjeli, pisati na na-
čin koji skraćuje pisanje, ponekad čak ubrzava rad programa, ali koji je po čet-
nicima možda nešto manje razumljiv.
#include <cstdlib>
#include <iostream>
U slučaju da formi-
#include <cstdlib> ramo više varijabli using namespace std;
#include <iostream> istog tipa, ne mo-
ramo svaku staviti int main()
using namespace std; u zasebni red, ne- {
go ih možemo for- int a, b, c;
int main() mirati u jednom cin >> a;
{ redu. cin >> b;
int a; c = a + b;
int b; Dakle umjesto: cout << c << endl;
int c; system("PAUSE");
cin >> a; int a; return 0;
cin >> b; int b; }
c = a + b; int c;
cout << c << endl;
system("PAUSE"); možemo napisati:
return 0;
} int a, b, c;
j
a
ž
r
d
Umjesto: a
#include <cstdlib> S
#include <iostream> #include <cstdlib>
int a; #include <iostream> d
o
using namespace std; a = 12; v
using namespace std; U
a
k
i
f
U if naredbi mogu se a
r
#include <cstdlib> G
izbaciti vitičaste zagra- #include <iostream>
de, ako se unutar viti- e
j
častih zagrada nalazi n e
using namespace std; e k
jedan red. š l
u
o d
n o
int main() o
Ako se nalazi više re- D
{
dova, uporaba vitičas- int a; e
j
l
tih zagrada je obvezna. cin >> a; t
e
P
if (a > 12)
{
cout << "Broj je veci od 12." << endl; a
j
l
} o
#include <cstdlib> else P
#include <iostream> {
cout << "Broj nije veci od 12." << endl; a a
using namespace std; } d t
a
r s
cout << a << endl; b k
e
int main() O t
system("PAUSE");
{ return 0;
int a; i
t
} k
cin >> a; e
j
b
if (a > 12) O
cout << "Broj je veci od 12." << endl;
-
else o i
r
cout << "Broj nije veci od 12." << endl; p
i m
a
cout << a << endl; Ova inačica prog- k
i r
l
rama radit će jed- e g
system("PAUSE"); V
return 0; nako kao i gornja e
j
} inačica s vitičastim n
a a
zagradama. m d
i o
ž k
a
S
Sažimanje koda
#include <cstdlib>
#include <iostream>
#include <cmath>
int main()
{
float a, b;
cin >> a;
if (a < 0)
cout << "Broj je negativan." << endl;
else Ako bismo ovom djelu vitičaste
b = sqrt(a); zagrade izbacili, ne bismo dobili
cout << b << endl; obavijest o greški, ali program
system("PAUSE"); ne bi ispravno radio, ako bismo
return 0; pokušali izračunati kvadratni
} korijen iz negativnog broja.
j
a
ž
r
d
#include <cstdlib> I u petljama se može izostaviti vitičasta zag- a
S
#include <iostream> rada ako se unutar vitičaste zagrade nalazi
samo jedan red. d
o
using namespace std; v
U
i
t
k
e
j
Na sličan način možemo b
umjesto: O
-
o i
r
x = x - 1; p
i m
a
k
i r
l
napisati: e g
V
e
j
x-- (Dva minusa, bez raz- n
a a
maka.) m d
i o
ž k
a
S
Sažimanje koda