Sie sind auf Seite 1von 306

C++ programiranje za apsolutne poetnike

programiranje
za apsolutne poetnike

PRO - MIL
Naslov knjige: C++ programiranje za apsolutne poetnike
Autor: Jakopec Ratko, ing
Naklada: PRO-MIL d.o.o. za nakladu, informatiku i edukaciju, Varadin,
R. Bokovia 20, 42000 Varadin, tel: 042 / 203 981, 233 971,
fax: 042 / 203 991, www.pro-mil.hr
Urednik: Nenad Milija, dipl. inf.
Lektura: Ruica Greguri, dipl. uitelj
Korektura: PRO-MIL d.o.o.
Recenzija: Igor Kos, dipl. inf.
Naslovnica: Ratko Jakopec, ing., Nenad Milija, dipl. inf.
Tiskara: Tiskara Varteks, Varadin
ISBN: 953-7156-19-2
Copyright: PRO-MIL d.o.o. za nakladu, informatiku i edukaciju, Varadin

Sva prava pridrana. Nije dozvoljeno kopirati ili reproducirati ni jedan dio knjige u bilo kojem obliku bez
prethodne pismene dozvole nakladnika.

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

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

Pojmovi za koje se zna da su zatitni znakovi napisani su poetnim velikim slovom. Nakladnik ne moe
provjeriti tonost niti eli utjecati na vjerodostojnost zatitnih znakova.

2 PRO - MIL
PRO - MIL
Sadraj

Saimanje Veliki pro- Objekti Obrada Polja Petlje Donoenje Grafika Varijable Na prvi Uvod Sadraj
koda grami teksta odluke program

3
C++ programiranje za apsolutne poetnike
Sadraj

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

4 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Analiza programa 60
Varijacije programa 63

Uvod
Problem dijeljenja 67
69

program
Na prvi
Uljepavanje programa

Nekoliko primjera programa 71


Grafika 75

Varijable
Podeavanje programskog okruenja 76
Na prvi grafiki program 77

Donoenje Grafika
Analiza programa 78
Varijacije programa 83

odluke
Crtanje pravokutnika 86
Crtanje crte 88

Petlje
Crtanje toke 95
Ispis teksta 97
Polja
Donoenje odluke 103
Funkcije 104
Obrada
teksta

Donoenje odluke 108


Switch naredba 126
Objekti

Petlje 129
Saimanje Veliki pro-

For petlja 130


grami

Do while petlja 168


Generator sluajnih brojeva 170
koda

Koritenje sluajnih brojeva 179

PRO - MIL
Sadraj

Polja 183
Jednodimenzionalna polja 184
Spremanje brojeva u datoteku 204
Dvodimenzionalna polja 212
Obrada teksta 215
String objekti 216
Polje char tipa 223
Obrada string objekata 234
Premjetanje teksta iz char polja u string 246
Premjetanje teksta iz stringa u char polje 247
Spremanje teksta u datoteku 248
Objekti 251
Jednostavan primjer klase i objekata 252
Sloeniji primjeri klasa i objekata 262
Komunikacija s metodama 265
Razdvajanje deklaracije i definicije 276
Uporaba konstruktora 278
Nasljeivanje 280
Veliki program 283
Jednostavna igra u jednoj datoteci 284
Jednostavna igra u vie datoteka 288
Saimanje koda 301
Primjeri saetog pisanja koda 302

6 PRO - MIL
PRO - MIL
Uvod

Saimanje Veliki pro- Objekti Obrada Polja Petlje Donoenje Grafika Varijable Na prvi Uvod Sadraj
koda grami teksta odluke program

7
C++ programiranje za apsolutne poetnike
Uvod

to je to program, a to programiranje?

Program je niz uputa raunalu o tome kako da napravi odreeni posao. Posao
moe bit voenje skladita, izraun plae radnicima ili pretvaranje slike u boji u
crno bijelu sliku. Programiranje je pisanje tih uputa. Za pisanje uputa odnosno
programa koriste se odreene naredbe. Skup naredbi koje ine cjelinu naziva se
programski jezik.

Budui da su naredbe pisane naim jezikom, a raunalo razumije samo nule i


jedinice, program se nakon pisanja mora prevesti u oblik razumljiv raunalu. Taj
postupak se naziva prevoenje. Na engleskom jeziku naziva se Compile. Hrvats-
ki programeri taj postupak obino nazivaju kompajliranje. U programu koji emo
mi koristiti, postupak prevoenja naredbi u oblik razumljiv raunalu naziva se
kompajlaj, a ovoj knjizi koristit emo izraz prevoenje.

Da bismo uspjeno programirali, oigledno je da nam treba program u kojem e-


mo program pisati i program koji e napisani program prevesti u oblik razumljiv
raunalu. U dananje vrijeme sve te funkcije, a i mnoge dodatne objedinjene su u
jedan program koji emo u ovoj knjizi nazivati programska okolina. On e nam
omoguiti pisanje programa, prevoenje programa u oblik razumljiv raunalu,
traenje greaka i pokretanje programa. Postoji cijeli niz takvih programa, a mi
emo koristiti Dev-C++.

Je li teko nauiti programirati?

Da, teko je. Ako mislimo da emo uzeti nekakav programski jezik i da emo za
par dana pisati programe, kao to moemo uzeti FrontPage pa za par dana napra-
viti WEB stranicu, od toga nee biti nita.

Neki, ako ne i veina profesionalnih uitelja programiranja, zapoet e poduku ne-


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

To su gluposti. Moda i jesmo do sada stvari radili po odreenom algoritmu, ali


nismo o tome na taj nain razmiljali, nemamo um posloen na taj nain. Osim to-
ga u programiranju se upotrebljavaju malo drugaiji algoritmi nego to su algoritmi
za kuhanje kave.

Programiranje je zapravo potpuno drugaiji nain razmiljanja od onog na koji smo


do sada navikli i trebat e godine rada da ponemo razmiljati na taj nain. Cijeli
problem dodatno komplicira injenica da su dananja raunala vrlo sloeni sustavi i
treba nam puno vremena da barem priblino ponemo shvaati kako raunala fun-
kcioniraju.

8 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Zbog svega toga trebat e nam dvije do tri godine svakodnevnog rada da bismo
koliko - toliko nauili programirati. Pod pojmom nauiti programirati ne mislim na
dobivanje dvojke u koli ili pisanje programa za zbrajanje dva broja. Pod poj-
mom nauiti programirati mislim na to da smo u stanju napisati program koji za-

Uvod
dovoljava neije potrebe i taj netko nam je spreman za to platiti. Nema puno
smisla rei da znam programirati, ali ne znam napraviti nita za to bi netko bio
spreman platiti.

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

Varijable
Ovim uvodom vas nisam htio preplaiti, ve sam vas htio ohrabriti da ustrajete u
uenju programiranja, iako e vam se na poetku moda initi da nita ne razu-
mijete i da sporo napredujete.

Donoenje Grafika
Zato ba C++?

odluke
Zato to je to trenutno najraireniji jezik, osobito u profesionalnoj uporabi. U ra-
unalstvu se klonite ekskluzivnosti. Ako vas veseli da budete posebni, obrijte
glavu ili obojite kosu na zeleno. Imate bezbroj mogunosti, ali kad su raunala u
pitanju, najbolje je koristiti raunalo koje koristi veina i programski jezik koji ko-

Petlje
risti veina.

U tom sluaju lako dolazimo do programa, lako dolazimo do literature, puno ljudi
se razumije u to pa moemo dobiti savjet. Konano, ako traimo posao u smislu

Polja
da programerska ekipa treba jo jednoga (jednu), vea je vjerojatnost da oni ve
koriste sustav s kojim znamo raditi.

Bjeite od genijalnih raunala, revolucionarnih sustava i drugaijih razmiljanja.


Obrada
teksta

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

Iako po mom sudu C++ ima niz prednosti u odnosu na druge jezike, nemojmo se
suvie optereivati time koji emo jezik zapoeti uiti i koju inaicu tog jezika.
Glavni problem je nauiti jedan jezik, a kad nam to uspije, ako se ukae potreba,
Saimanje Veliki pro-

lako emo prijei na drugi. Da bi netko tko nikad nije programirao nauio jedan
grami

jezik, treba mu do tri godine, ali kad ve jedan jezik nauimo, da bismo nauili
drugi, dovoljno nam je do tri mjeseca. Nauivi jedan jezik, poinjemo razumije-
vati kako se programira, a to je najtee i najdulje traje. Najlake je nauiti nove
naredbe ili bolje reeno novi nain pisanja slinih naredbi u drugom jeziku.
koda

PRO - MIL 9
Uvod

Zato ba Dev-C++?

Programsko okruenje koje emo koristiti za pisanje naih programa naziva se


Dev-C++. Zato sam odabrao upravo ovo okruenje? Zato to je besplatno, ugod-
nog izgleda, na hrvatskom jeziku i malih dimenzija. Zbog toga to je malih dimenzi-
ja, zadovoljavajue e raditi i na starijim raunalima, a nove inaice mogue je u
prihvatljivom vremenu uitati s interneta i pomou spore internetske veze.

Iako je taj program relativno malih dimenzija, posjeduje sve osobine koje su potre-
bne za uenje programiranja, a mogao bi posluiti i za manje sloeno profesional-
no programiranje.

Kako se ui programiranje?

Programiranje se ne ui tako da se naui sadraj neke knjige, a zatim se eventual-


no neto radi na raunalu. Programiranje se ui tako da se ukljui raunalo, otvori
knjiga, ita sadraj knjige i istovremeno prikazano u knjizi nastojimo napraviti na
raunalu.

Nakon to smo odreenu naredbu shvatili, nismo zavrili s uenjem. Nakon toga
treba napraviti nekoliko desetaka manjih programa u kojima emo tu naredbu kori-
stiti da bismo stekli rutinu u njenom koritenju.

Kako dalje nakon ove knjige?

Ova knjiga nije zamiljena kao knjiga iz koje emo saznati sve tajne programiranja,
nego kao knjiga koja bi ljudima koji nikad nisu programirali i nita o tome na znaju
trebala pomoi da zaponu uenje programiranja.

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

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

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

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

- Budete li odluili koristiti neko sloenije programsko okruenje za pisanje progra-

10 PRO - MIL
C++ programiranje za apsolutne poetnike

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

- Programi rade unutar nekog operacijskog sustava, najee Windowsa ili

Uvod
Linuxa. Da bi mogli pisati programe za pojedine operacijske sustave, moramo
razumjeti kako ti sustavi funkcioniraju pa emo morati nabaviti knjigu koja govori
o strukturi operacijskog sustava za koji elimo pisati programe.

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

Varijable
ge u kojima iznose optimalna rjeenja za pojedine probleme.

- S vremenom emo se specijalizirati za pojedine teme, npr. za pisanje igara, za


grafiku, za obradu zvuka ili neto slino, pa je dobro nabaviti knjigu koja govori o

Donoenje Grafika
toj problematici.

Dakle, kad se detaljno upoznamo s nekim programskim jezikom, kad upoznamo


odreeni operacijski sustav, kad se upoznamo s programerskim tehnikama i od-
reenim programerskim podrujem, tek emo onda biti sposobni pisati kvalitetne

odluke
komercijalne programe, odnosno programirati za novce.

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

Petlje
U ovom trenutku to vam moda zvui obeshrabrujue, ali ako sve to savladate,
stei ete vjetinu kojom ne vlada ba svatko i koja ima svoju trinu cijenu.

Polja
Obrada
teksta
Objekti
Saimanje Veliki pro-
koda grami

PRO - MIL 11
Uvod

Instaliranje Dev-C++ programskog okruenja

Na CD-u priloenom uz knjigu


nalazi se program Dev-C++.

Ovaj izbornik trebao bi se po-


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

Instalaciju pokreemo klikom


na Program.

Nakon klika na Program zapoet e instaliranje Dev-C++ programa. Program


e nas prvo upozoriti da ne smijemo instalirati program, ako je program ve in-
staliran. Ako zbog nekog razloga instalaciju elimo ponoviti, moramo deinstalira-
ti stari program, a tek nakon toga moemo ga ponovo instalirati.

Ako je Dev-C++ program ve instaliran, zaustavit emo pos-


tupak instalacije i deinstalirati staru inaicu programa.

Ako Dev-C++ nije instaliran na naem raunalu, klikom na U


redu nastavljamo instalaciju.

12 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
1 - Izaberemo jezik.

Uvod
program
Na prvi
Varijable
Donoenje Grafika
2 - Klikom na OK nastavljamo

odluke
instalaciju.

Petlje
Polja
Obrada
teksta

Klikom na Prihvaam izjavlju-


jemo sa se slaemo s uvjetima
koritenja programa.
Objekti
Saimanje Veliki pro-
koda grami

PRO - MIL 13
Uvod

Ovdje bismo mogli izabrati komponente


koje emo instalirati. Mi neemo nita
mijenjati. Samo kliknemo na Dalje.

1 - Ovdje moemo izabrati ma-


pu u koju e se instalirati Dev-
C++.

2 - Instaliranje nastavljamo
klikom na Instaliraj.

14 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Nakon klika na Instaliraj zapoet
e instaliranje programa.

Uvod
program
Na prvi
Varijable
Donoenje Grafika
odluke
Petlje
Kliknemo na Da.

Polja
Obrada
teksta
Objekti
Saimanje Veliki pro-
koda grami

PRO - MIL 15
Uvod

Kliknemo na Kraj.

Kliknemo na U redu.

16 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
1 - Izaberemo
hrvatski jezik.

Uvod
program
Na prvi
2 - Izaberemo Use XP
Theme.

Varijable
Donoenje Grafika
3 - Klik na Next.

odluke
Petlje
Polja
Obrada
teksta
Objekti
Saimanje Veliki pro-
grami

Klik na Next.
koda

PRO - MIL 17
Uvod

Klik na Next.

Nakon klika na Next zapoet e instaliranje nekih do-


datnih funkcija. Na sporijim raunalima taj proces moe
trajati i do pola sata, a na brima nekoliko minuta.

18 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Uvod
program
Na prvi
Varijable
Donoenje Grafika
odluke
Na kraju klik na OK.

Petlje
Klikom ovdje ugasimo ovaj prozor.
Time je instaliranje Dev-C++ progra-
Polja
ma zavreno.
Obrada
teksta
Objekti
Saimanje Veliki pro-
koda grami

PRO - MIL 19
Uvod

Formiranje radne mape

Iako to nije nuno, dobro je formirati praznu


mapu u koju emo spremati programe.

Tu mapu moemo otvoriti na bilo kojem


disku na kojem imamo mjesta i moemo je
nazvati prema vlastitom izboru.

Ja u na C: disku otvoriti mapu koju u na-


zvati Radni.

Klik na disk na kojem elimo otvoriti novu


mapu, u mojem sluaju na C: disk.

Kliknemo na Datoteka, zatim na Novo


i konano na Mapa.

20 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Uvod
program
Na prvi
Varijable
Donoenje Grafika
Unesemo naziv mape, u
mojem sluaju Radni.

odluke
Petlje
Polja
Obrada
teksta
Objekti
Saimanje Veliki pro-
grami

Ako je sve u redu, na C: disku trebala bi


biti formirana mapa pod nazivom Radni.
koda

PRO - MIL 21
Uvod

Instalacija grafike

Da bi Dev-C++ mogao koristiti naredbe za rad s grafikom,


runo moramo dodati nekoliko datoteka.

Nakon instaliranja programa

Dev-C++, na disku C: u ma-

pi Dev-Cpp nalazit e se

mapa include i mapa lib.

Na CD-u priloenom uz knji-

gu u mapi Grafika nalazi se

mapa include i mapa lib.

22 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Uvod
program
Na prvi
Varijable
Sadraj mape include na CD-u

kopiramo u mapu include na C:

Donoenje Grafika
disku.

odluke
Petlje
Polja
Obrada
teksta

Sadraj mape lib na CD-u kopira-


Objekti

mo u mapu lib na C: disku.


Saimanje Veliki pro-
grami

Bude li potekoa s instaliranjem progra-


ma, pogledajmo filmove na kojima moe-
mo vidjeti cijeli tijek instalacije, a nalaze
se na priloenom CD-u.
koda

PRO - MIL 23
Na prvi program

24 PRO - MIL
PRO - MIL
Na prvi program

Saimanje Veliki pro- Objekti Obrada Polja Petlje Donoenje Grafika Varijable Na prvi Uvod Sadraj
koda grami teksta odluke program

25
C++ programiranje za apsolutne poetnike
Na prvi program

Formiranje projekta

Prilikom svakog pokretanja


programa pojavit e se pro-
zor sa sugestijama koje e
nam olakati koritenje prog-
rama.

Kliknemo ovdje da bismo


ugasili taj prozor.

1 - Kliknemo na Datoteka.

Program je dio vee cjeline koja


se naziva projekt. Zbog toga
emo pisanje programa zapo-
eti formiranjem novog projek-
ta.

Pogledajmo kako emo formira-


ti novi projekt.

3 - Izaberemo Projekt.

2 - Izaberemo Nova.

26 PRO - MIL
C++ programiranje za apsolutne poetnike

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

Uvod
U emu je razlika?

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

Varijable
Console Application ne izvodi se unutar klasinog windows prozora,
ve unutar pojednostavljene verzije s crnom pozadinom. Nedostatak ovog
naina pisanja programa jest to je program veoma ruan i to taj oblik
prozora ima manje mogunosti od klasinog prozora. Jedina prednost mu

Donoenje Grafika
je to je jednostavan, pa je prikladniji za poetnike.

odluke
1 - Izaberemo Basic.

Petlje
2 - Zatim Console Application.

Polja
3 - Ovdje unosimo naziv pro-
jekta. Na poetku moemo
Obrada
teksta

ostaviti naziv koje je predloilo


raunalo, a to je Projekt1.
Objekti
Saimanje Veliki pro-
grami

4 - Ovdje odredimo da
5 - Biranje zavravamo
e na projekt sadra-
klikom na OK.
vati C++ program.
koda

PRO - MIL 27
Na prvi program

Sada emo izabrati mapu u


koju emo spremiti na pro-
jekt.

Najbolje je da ga spremimo
u prije pripremljenu praznu
mapu.

Kliknemo ovdje.

1 - Izaberemo disk na koji emo


spremiti na projekt u prije prip-
remljenu praznu mapu.

U mojem sluaju to je disk C.


Kliknemo na njega.

(Na mojem raunalu disk C nazi-


va se Podaci. Na vaem rauna-
lu moe imati drugaije naziv.
Naziv diska nije vaan, vano je
da izaberemo onaj disk na kojem
smo prije toga pripremili prazni
prostor, kao to je opisano u uvo-
dnom poglavlju ove knjige.)

2 - Kliknemo na Spremi.

28 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
1 - Ovdje bi se trebala nalaziti oznaka diska na kojem
smo pripremili prazni prostor za smjetaj naeg projekta.

Uvod
2 - Sadraj ovog prozo-
ra na vaem raunalu

program
Na prvi
bit e sasvim sigurno
drugaiji nego na mo-
jem, budui da njegov
sadraj ovisi o progra-

Varijable
mima koji su instalirani
u raunalu i nainu ko-
ritenja raunala. Ne-
mojte brinuti zbog toga.

Donoenje Grafika
odluke
3 - Pronai emo mapu Radni i kliknuti na
nju. (Ako mapu Radni niste do sada formira- 4 - Klik na Otvori.
li, formirajte je prema uputama danim u uvo-
dnom poglavlju.

Petlje
Polja

1 - Ovdje bi se trebao nalaziti naziv prostora u koji emo


Obrada
teksta

spremiti na C++ projekt.


Objekti

2 - Klik na Spremi.
Saimanje Veliki pro-
koda grami

PRO - MIL 29
Na prvi program

Raunalo e automatski
generirati jednostavan
C++ program i time je
otvaranje projekta zavr-
eno.

U programu bismo se lake snalazili kad bi


se ispred svakog reda u programu nalazio
broj reda. Pogledajmo kako emo ukljuiti tu
mogunost.

1 - Kliknemo na Alati.

2 - Kliknemo na Izgled editora.

30 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
1 - Kliknemo na karticu
Prikaz.

Uvod
2 - Kliknemo na kvadrati ispred
opcije Brojevi linije.

program
Na prvi
Varijable
3 - Kliknemo na OK.

Donoenje Grafika
odluke
Petlje
Polja
Obrada
teksta
Objekti

Vidimo da se sada is-


pred svakog reda u pro-
Saimanje Veliki pro-

gramu automatski ispi-


grami

suje broj reda.


koda

PRO - MIL 31
Na prvi program

Mogui problem

1 - Ovo je prije spremljeni projekt.

Prilikom isprobavanja programa moe nam se


dogoditi da pokuamo u prostor za spremanje
projekta spremiti novi projekt, iako projekt pod
tim nazivom ve postoji u tom prostoru. U
istom prostoru ne moe biti vie projekta s
istim imenom.

U tom sluaju, ako elim zadrati stari projekt,


novom projektu moramo dati neki drugi naziv,
npr. Projekt2.dev.

3 - Klik na Spremi.

2 - Ovo je novi projekt. Ako elimo zadrati stari,


moramo mu promijeniti naziv. Ako stari projekt
ne elimo zadrati, ostavimo postojei naziv.

1 - Ako novi projekt


ima isti naziv kao i
stari jer stari projekt
ne elimo zadrati,
raunalo e nas upo-
zoriti da e stari pro-
jekt biti obrisan.

2 - Klik na Yes i novi projekt bit e


formiran, a stari obrisan.

32 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Unos prvog programa

Uvod
Umjesto programa

program
Na prvi
koji je generiralo
raunalo prilikom
otvaranja novog
projekta, unesemo

Varijable
ovakav program.

To emo uiniti pa-


ljivo jer i najmanja
greka moe prouz-

Donoenje Grafika
rokovati greku u
programu.

odluke
Petlje
Na poetku e nam se esto
dogaati da umjesto toke sa
zarezom ovdje unesemo dvo-

Polja
#include <cstdlib> toje to e uzrokovati greku
#include <iostream> u programu.

using namespace std;


Obrada
teksta

int main()
Lijevu vitiastu zagradu dobit
{
emo tako da pritisnemo tipku
cout << "Ovo je moj tekst." << endl;
AltGr i ne putajui tu tipku,
Objekti

system("PAUSE");
pritisnemo tipku b.
return 0;
}
Desnu emo dobiti tako da
pritisnemo AltGr i, ne putajui
Saimanje Veliki pro-
grami

tu tipku, pritisnemo tipku n.

Ovdje se nalazi broj nula,


a ne veliko slovo o.
koda

PRO - MIL 33
Na prvi program

Pokretanje programa

Ve smo rekli da raunalo razumije samo nule i jedinice. Svi sadraji, muzika,
filmovi, slike itd. moraju biti prevedeni u nule i jedinice da bi ih raunalo ra-
zumjelo. Tako je i s programom.

Da bi raunalo razumjelo na program, najprije ga iz oblika koji smo upravo


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

U naem programskom okruenju imamo tri vane naredbe vezane uz pre-


voenje i pokretanje programa.

Ovo je prevedeno kao Kompajlaj. Izaberemo li ovu opciju, na program


e se prevesti u oblik razumljiv raunalu, ali se nee pokrenuti. elite li
tako prevedeni program pokrenuti, morate izabrati opciju Pokreni.

Ovo je prevedeno kao Pokreni. Ovu opciju moe-


mo koristiti samo ako smo program ve preveli i
elimo ga jo jednom pokrenuti.

Ovo je prevedeno kao Kompajlaj i pokreni. Ve iz


naziva vidimo da je ovdje prevoenje i pokretanje
objedinjeno.

Izaberemo li ovu opciju, na program e se preves-


ti i odmah pokrenuti.

Prvi put emo odabrati ovu opciju.

34 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
1 - Klikom na Kompajlaj i pokreni zapoet emo prevoenje i
pokretanje naeg programa.

Uvod
program
Na prvi
2 - Otvara se prozor u kojem nas raunalo pita kamo i
pod kojim nazivom emo spremiti na program.

Raunalo e predloiti da to bude ono isto mjesto u

Varijable
koje smo spremili projekt to emo mi prihvatiti.

Donoenje Grafika
odluke
Mjesto na koje e raunalo spremiti na

Petlje
program.

3 - Prevoenje i pokretanje naeg prog- Polja


rama zapoet emo klikom na Spremi.
Obrada
teksta
Objekti
Saimanje Veliki pro-
grami

Ovdje se nalazi naziv naeg programa,


main.cpp. Iako bismo taj naziv mogli
promijeniti, na poetku je najbolje da za-
drimo naziv koji je predloilo raunalo.
koda

PRO - MIL 35
Na prvi program

Nakon klika na Kompajlaj i pokreni najpri-


je e se otvoriti prozor u kojem emo moi
pratiti tijek prevoenja naeg programa u
nule i jedinice razumljive raunalu.

Nakon prevoenja prog-


ram e se pokrenuti unu-
tar ovakvog prozora. Ovaj
na program ispisuje tekst
Ovo je moj tekst.

Tekst Press any key to


continue raunalo je ge-
neriralo automatski i njime
nas obavjetava da je
dovoljno pritisnuti bilo ko-
ju tipku na tipkovnici i pro-
zor u kojem se izvrio na
program e se zatvoriti.

36 PRO - MIL
C++ programiranje za apsolutne poetnike

Mogui problem

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

Uvod
U tom sluaju, ako elimo zadrati stari prog-

program
Na prvi
ram, novom emo dati neki drugi naziv npr.
main2.cpp i kliknut emo na Spremi.

Varijable
Ako stari program ne elimo sauvati, ostavit
emo novom programu naziv main.cpp i kliknut
emo na Spremi.

Donoenje Grafika
odluke
main.cpp

Petlje
Ako ne elimo zadrati stari prog-
ram, pa smo u prethodnom koraku

Polja
kliknuli na Spremi bez da smo
mijenjali novom programu naziv,
raunalo e nas jo jednom upozo-
riti da e stari program biti obrisan.
Obrada
teksta
Objekti

1 - Kliknemo na Yes. Stari program e


se obrisati, novi e se spremiti, a zatim
e zapoeti prevoenje i pokretanje
Saimanje Veliki pro-

novog programa. Tijek prevoenja i


grami

pokretanja programa moemo vidjeti


na prethodnoj stranici.
koda

PRO - MIL 37
Na prvi program

Greka u programu
Gotovo je nemogue unijeti program, a da
se tijekom unosa ne pojavi greka.

Pogledajmo to e se dogoditi ako pokua-


mo pokrenuti program u kojem je dolo do
greke prilikom unosa.

1 - Umjesto
2 - Kliknemo na Kompajlaj i pokreni. toke sa zare-
zom unesemo
dvotoje.

3 - Uoenu greku uklonimo i ponov-


no kliknemo na Kompajlaj i pokreni.

1 - Kad raunalo naie na


greku, prevoenje prog-
rama se zaustavlja i rau-
nalo oznaava red u ko-
jem je dolo do greke.

2 - Istovremeno se otvara
prozor u kojem moemo
vidjeti dodatne informacije
o uoenoj greki.

Ovdje moemo vidjeti su-


gestiju da umjesto dvoto-
ja treba staviti toku sa
zarezom.

38 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Oznaavanje pozicije greke prili-

Uvod
no je nepouzdano budui da rau-
nalo zapravo ne oznaava poziciju
greke, nego poziciju na kojoj je
greka primijeena. Pogledajmo

program
Na prvi
ovaj primjer.

Varijable
Donoenje Grafika
1 - Ovdje je dolo do greke jer
nismo unijeli toku sa zarezom.

odluke
Kad takav program pokuamo prevesti i pok-

Petlje
renuti, kao pogrean bit e oznaen deveti
red, jer je u njemu greka primijeena, iako
se greka zapravo nalazi u osmom redu.

Polja
Zato imajmo na umu da je oznaavanje re-
dova u kojim se pojavila greka samo gruba
orijentacija, a ne precizni pokazatelj.
Obrada
teksta
Objekti

1 - Program pokreemo klikom na


Saimanje Veliki pro-

Kompajlaj i pokreni.
koda grami

PRO - MIL 39
Na prvi program

Analiza programa

#include <cstdlib>
#include <iostream> Ove naredbe emo pisati na poetku sva-
kog C++ programa. Zato? C++ organizi-
ran je tako da su njegove naredbe organi-
zirane u grupe ili, kako bi programeri rek-
li, biblioteke i na poetku programa mora-
mo rei raunalu koje biblioteke naredbi
namjeravamo koristiti.

#include - ovo je naredba kojom na po-


etku programa obavjetavamo raunalo
koje biblioteke naredbi elimo koristiti.

iostream - skup naredbi koje nam omo-


guuju komunikaciju s programom, npr.
ako to ne bismo ukljuili, ne bi bio mogu
ispis teksta Ovo je moj tekst. na ekran.

cstdlib - biblioteka standardnih naredbi.

Postoji mnotvo biblioteka naredbi. Moglo


bi se dogoditi da se u dvije razliite bibliote-
ke nau dvije naredbe istog naziva, a razli-
ite namjene.
using namespace std;
Ovom naredbom obavjetavamo prevodite-
lja da emo koristiti standardne nazive na-
redbi.

Naredba int main() oznaava da na ovom


mjestu poinje sam program. Ono to smo
pisali prije te naredbe ne smatra se progra-
int main()
mom, nego uputama prevoditelju kako e
prevesti program koji slijedi, npr. koje biblio-
teke naredbi e koristiti prilikom prevoenja.

40 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
{ } - Iako neveliki, ovo su jako vani dijelovi
programa. Oznauju prostor unutar kojeg se
{
nalazi program, { oznauje poetak, a } kraj

Uvod
programa.

program
Na prvi
Varijable
Ovaj red sadri dvije naredbe.

Prvom naredbom nareujemo


raunalu da tekst koji se nalazi
unutar navodnika ispie na

Donoenje Grafika
cout << "Ovo je moj tekst." << endl;
zaslonu raunala.

Drugom naredbom nareuje-


mo raunalu da prijee u novi

odluke
red.

Petlje
Ovom naredbom nareujemo raunalu
Polja
da stane i eka tako dugo dok ne pritis-
nemo neku tipku.
system("PAUSE");
Da bismo bolje razumjeli ovu naredbu,
Obrada
teksta

obrisat emo ovaj red u programu, a za-


tim emo prevesti i pokrenuti program
klikom na Kompajlaj i pokreni.
Objekti

Ova naredba oznauje kraj programa. Na-


return 0;
kon te naredbe program se gasi.
Saimanje Veliki pro-
grami

Ova vitiasta zagrada oznaava kraj pros-


}
tora unutar kojeg se nalazi program.
koda

PRO - MIL 41
Na prvi program

Gruba skica programa

Da bismo se lake snali u naem programu, podijelit emo ga na nekoliko veih


cjelina.

#include <cstdlib> Ovo je poetak programa. Ove naredbe


#include <iostream> pisat emo na poeku svakog naeg prog-
rama. Kasnije emo ovdje dodati jo neke
using namespace std; naredbe.

int main() Iako smo objasnili emu slue pojedine


{ naredbe, trenutno nije bitno da tono poz-
najemo znaenje svake od njih.

Dovoljno je da znamo da te naredbe mora-


mo napisati na poeku svakog naeg pro-
grama i da ih tono napiemo.

Ovdje se nalazi glavni dio na-


eg programa i u ovom dijelu
odreujemo to e na prog-
ram raditi.
cout << "Ovo je moj tekst." << endl;
U iduim vjebama gornji i do-
nji dio uglavnom neemo dirati,
a sve bitno zbivat e se u
ovom dijelu programa.

Ovo su naredbe koje piemo na kraju prog-


rama. Slino kao to je to sluaj s naredba-
ma na poetku programa, vrlo rijetko emo
ih mijenjati i trenutno nije bitno da u potpu-
nost razumijemo znaenje svake od tih
naredbi.
system("PAUSE");
return 0; Dovoljno je da znamo da te naredbe mora-
} mo napisati na kraju programa da bi prog-
ram normalno radio.

42 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Varijacije programa

Jedna od najboljih metoda koje nam pomau da bolje razumijemo funkcionira-

Uvod
nje programa i pojedinih naredbi jest da u program unosimo manje izmjene, a
zatim opaamo kakve posljedice e takve izmjene izazvati.

program
Na prvi
Kao to smo ve vidjeli, pok-
#include <cstdlib>
#include <iostream> renemo li ovaj program, na

Varijable
zaslonu raunala dobit emo
using namespace std;
ovakav rezultat.
int main()
{

Donoenje Grafika
cout << "Ovo je moj tekst." << endl;
system("PAUSE");
return 0;
}

odluke
Petlje
#include <cstdlib>
#include <iostream>

using namespace std;

int main() Polja


{
cout << "OVDJE STAVLJAMO TEKST." << endl;
Obrada

system("PAUSE");
teksta

return 0;
}
Objekti
Saimanje Veliki pro-
grami

Promijenimo li ovaj red dobit emo ovakav rezultat.

Oigledno je da je funkcija ovog reda u programu


ispis teksta koji se nalazi unutar navodnika i da taj
tekst moemo po volji mijenjati.
koda

PRO - MIL 43
Na prvi program

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
cout << "Jaa jesm nism ghgh." << endl;
system("PAUSE");
return 0;
}

Promijenimo ponovno ovaj red i pokrenimo program.

Dobit emo ovakav rezultat.

Oigledno je da ovim redom u programa nareujemo raunalu da ispie tekst


unutar navodnika na zaslon raunala, ali da raunalo ne ulazi u to ima li taj
tekst smisla ili nema.

Iako raunalo ne ulazi u


smisao teksta koji smo na-
Navodnik koji
pisali unutar navodnika,
smo dodali.
ovdje ipak postoji jedno
ogranienje, a to je da unu-
tar navodnika ne smijemo
koristiti navodnik.
#include <cstdlib>
Navodnici oznauju poetak #include <iostream>
i kraj teksta, pa bi raunalo
navodnik unutar teksta using namespace std;
smatralo krajem teksta, a
sadraj iza tog navodnika int main()
grekom. {
cout << "Jaa jesm " nism ghgh." << endl;
Preuredimo ovaj red i poku- system("PAUSE");
ajmo program pokrenuti. return 0;
Vidjet emo da e raunalo }
dojaviti greku.

44 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Uvod
#include <cstdlib>
#include <iostream>

program
Na prvi
using namespace std;

int main()
{

Varijable
cout << "Ovo je moj tekst." << endl ;
system("PAUSE");
return 0;
}
Vratimo na program u

Donoenje Grafika
prvobitno stanje, a zatim
ga pokrenimo klikom na
Kompajlaj i pokreni.
Ovako e izgledati rezul-

odluke
tat rada naeg programa.
#include <cstdlib>
#include <iostream>
Da bismo bolje razumjeli
njegovu funkciju, obrie-
using namespace std;
mo ovaj dio programa.

Petlje
Nova inaica programa
int main()
trebala bi ovako izgledati.
{
cout << "Ovo je moj tekst.";
Klikom na Kompajlaj i
system("PAUSE");
Polja
pokreni pokrenemo pro-
return 0;
gram.
}
Obrada
teksta

Ovako bi trebao izgledati


rezultat izvoenja ove
inaice programa.
Objekti

Program radi i bez obri-


sanog dijela, ali nakon
ispisa naeg teksta rau-
Saimanje Veliki pro-

nalo nije skoilo u novi


grami

red, nego je sljedei tekst


nastavilo pisati u istom
redu. Oigledno da je <<
endl naredba za skok u
novi red.
koda

PRO - MIL 45
Na prvi program

#include <cstdlib> Vratimo obrisanu << endl naredbu.


#include <iostream>

using namespace std;


Postavlja se pitanje ako s <<
int main() endl nareujemo raunalu da
{ skoi u novi red, bi li s vie
cout << "Ovo je moj tekst." << endl; takvih naredbi u nizu vie puta
cout << endl; skoilo u novi red.
system("PAUSE");
return 0; Pogledajmo to e se dogoditi
} ako u na program dodamo
jo jednu << endl naredbu.

Vidimo da se je dogodilo
ono to smo oekivali.

Izmeu prvog i drugog


reda teksta pojavio se je
jedan prazni red.
#include <cstdlib>
#include <iostream>

using namespace std;

int main() Dodajmo u na program


{ jo nekoliko << endl nared-
cout << "Ovo je moj tekst." << endl; bi.
cout << endl;
cout << endl;
cout << endl;
system("PAUSE");
return 0;
}

Pokrenemo li takav program


vidimo da se je razmak izme-
u dva reda u programu po-
veao.

46 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Vie naredbi << endl moemo napisati i
#include <cstdlib> unutar jednog reda.
#include <iostream>

Uvod
Pokrenemo li ovu inaicu programa, uvje-
using namespace std; rit emo se da daje isti rezultat kao i pret-
hodna.
int main()

program
Na prvi
{
cout << "Ovo je moj tekst." << endl << endl << endl << endl;
system("PAUSE");
return 0;

Varijable
}

Pogledajmo sada podrobnije red u kojem se nalaze naredbe za ispis teksta i

Donoenje Grafika
skok u novi red.

odluke
Propisana rije kojom obavjetavamo raunalo
Ove oznake obvezno
da emo sadraj koji slijedi poslati na neku izla-
se stavljaju ispred
znu jedinicu, u naem sluaju na zaslon rau-
sadraja koji e iz
nala.

Petlje
raunala ii na neku
izlaznu jedinicu, npr.
Uoimo da naredbu << endl ne moemo koris-
zaslon raunala.
titi ako prije nismo stavili naredbu cout.

Polja

Iako nevelik,
Obrada

cout << "Ovo je moj tekst." << endl ;


teksta

ovo je JAKO
vaan dio pro-
grama.
Objekti

Oznaava kraj
Tekst unutar navod- naredbe ili
Ovom naredbom
nika ispisat e se na grupe naredbi
nareujemo raunalu
zaslon raunala. koje ine cjeli-
da prilikom ispisa
Saimanje Veliki pro-

nu.
grami

skoi u novi red.


Uoimo da ovaj dio
ini cjelinu sa <<
Uoimo da ova na-
oznakama i da bez
redba ini cjelinu s
tih oznaka nee fun-
<< oznakama.
koda

kcionirati.

PRO - MIL 47
Na prvi program

Distribucija programa

Nakon to nae programersko remek djelo proradi, osjetit emo potrebu na


program podijeliti s prijateljima ili ga staviti na internet. Postavlja se pitanje
to moramo uiniti da bi na program proradio i na prijateljevom raunalu.

Prilikom prevoenja programa programsko okruenje iz naeg programa ge-


nerira prevedeni program koji sadri sve elemente koji su mu potrebni da bi
se samostalno pokrenuo u windows programskom okruenju kao i svaki dru-
gi windows program.

A gdje se nalazi prevedena inaica naeg programa?

Otvorimo Windows Explorer i u njemu otvorimo mapu u koju smo koristili tije-
kom prevoenja programa. U naem sluaju to je Radni mapa na C disku.

Datoteka s nastavkom exe sadri


na preveden program koji moe
samostalno raditi u windows okru-
enju.

Dovoljno je da tu datoteku poa-


ljemo prijatelju koji e ju pokrenuti
dvostrukim klikom mia.

48 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Uitavanje spremljenog projekta

Uvod
program
Na prvi
Varijable
Ako pokuamo ugasiti prog-
ramsko okruenje, a da nis-

Donoenje Grafika
mo spremili program, rau-
Na projekt e se spremiti prili- nalo e nas upozoriti.
kom prevoenja programa.
Klikom na Yes spremit emo

odluke
Ako projekt elimo spremiti bez na program.
da smo program preveli, kliknemo
na ikonu Spremi.

Petlje
Spremljeni projekt moe-
Polja
mo uitati u nae prog-
ramsko okruenje na vie
naina.
Obrada
teksta

Na najjednostavniji nain
moemo uitati nekoliko
2 - Zatim na Ponovno otvori. prethodnih spremanja.
Objekti

1 - Kliknemo na Datoteka.
Saimanje Veliki pro-
grami

3 - Na ovom popisu
kliknemo na projekt
koji elimo otvoriti.
koda

PRO - MIL 49
Na prvi program

elimo li u nae programsko okruenje


uitati program koji ne moemo uitati
na nain koji smo vidjeli na prethodnoj
stranici, uitat emo ga na neto sloe-
niji nain.

2 - Zatim na Otvori datoteku


ili projekt.

1 - Kliknemo na Datoteka.

1 - Otvorit e se dodatni prozor u ko-


jem emo izabrati mapu u kojoj se
nalazi projekt i naziv projekta.

2 - Ovdje biramo mapu u kojoj


se nalazi projekt.

3 - Kliknemo na projekt koji elimo uitati.


Prepoznajemo ga po nastavku dev.

4 - Kliknemo na Otvori.

50 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Nakon to se

Uvod
spremljeni projekt
uitao, mogli bismo
biti zbunjeni injeni-
com da ga ne vidi-

program
Na prvi
mo u prostoru u
kojem smo oeki-
vali da emo ga
vidjeti.

Varijable
Donoenje Grafika
odluke
Petlje
Polja
Obrada
teksta
Objekti
Saimanje Veliki pro-
grami

Da bismo na program vidjeli, ovdje kliknemo na


naziv programa, u naem sluaju to je main.cpp.
koda

PRO - MIL 51
Varijable

52 PRO - MIL
PRO - MIL
Varijable

Saimanje Veliki pro- Objekti Obrada Polja Petlje Donoenje Grafika Varijable Na prvi Uvod Sadraj
koda grami teksta odluke program

53
C++ programiranje za apsolutne poetnike
Varijable

Osnovne raunske operacije

#include <cstdlib>
#include <iostream> Sada emo raunalo iskoristiti za rauna-
nje.
using namespace std;
Unesimo ovaj program u C++ programsko
int main() okruenje.
{
cout << 2+3; Klikom na Kompajlaj i pokreni ga pokre-
cout << endl; nemo. Dobit emo ovakav rezultat.
system("PAUSE");
return 0;
}

Ovaj program zbraja


broj 2 i broj 3, a re-
zultat koji je u ovom
sluaju broj 5 ispisu-
je na zaslon. #include <cstdlib>
#include <iostream>
Pogledajmo sada using namespace std;
strukturu naeg no-
int main()
vog programa. {
U ovom redu
cout << 2+3; nareujemo ra-
unalu da zbroj
cout << endl; broja 2 i broja 3,
a to je broj 5,
ispie na zaslon
system("PAUSE"); raunala.
return 0;
} U ovom redu
Poetak i kraj progra- nareujemo ra-
ma isti su kao i do unalo da skoi
u novi red.
sada, dok je srednji
dio promijenjen.

54 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Pokuajmo zbrojiti neka druga dva broja, #include <cstdlib>
npr. 8 i 4. #include <iostream>

Uvod
Pokrenimo program i vidjet emo da e using namespace std;
raunalo zbrojiti ta dva broja.
int main()

program
Na prvi
{
cout << 8+4;
cout << endl;
system("PAUSE");
return 0;

Varijable
}

Donoenje Grafika
odluke
Pokuajmo neku drugu raunsku opera- #include <cstdlib>

Petlje
ciju, npr. oduzimanje. #include <iostream>

U ovom programu oduzet emo od broja using namespace std;


12 broj 8.
int main()
Pokrenimo program i pogledajmo na { Polja
rezultat. cout << 12-8;
cout << endl;
Obrada

system("PAUSE");
teksta

return 0;
}
Objekti
Saimanje Veliki pro-
koda grami

PRO - MIL 55
Varijable

Dok smo za zbrajanje i oduzimanje koristili #include <cstdlib>


oznake uobiajene u matematici, za mnoe- #include <iostream>
nje emo koristiti zvjezdicu. Nalazi se iznad
broja devet s desne strane, na brojanoj tip- using namespace std;
kovnici.
int main()
Mnoenje broja 2 i broja 3 zapisat emo kao {
2*3. cout << 2*3;
cout << endl;
Pogledamo rezultat. system("PAUSE");
return 0;
}

Oznaka za dijeljenje tako-


er ima drugaiji oblik od
onog na koji smo navikli u
matematici. Kao oznaka
dijeljenje koristi se kosa
crta koja se nalazi iznad
broja 8 s desne strane,
na brojanom dijelu tip-
kovnice.

12 podijeljeno sa 4 napi-
sat emo kao 12/4.
#include <cstdlib>
#include <iostream> Pokrenimo program i po-
gledamo rezultat.
using namespace std;

int main()
{
cout << 12/4;
cout << endl;
system("PAUSE");
return 0;
}

Na prvi pogled uinit e nam se


da je program za dijeljenje is-
pravan.

56 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
#include <cstdlib> Pokuajmo ovdje umjesto 12/4 staviti 13/4.
#include <iostream>
Pokrenimo program i pogledajmo rezultat.

Uvod
using namespace std;
Rezultat je oigledno pogrean.
int main()

program
Na prvi
{
cout << 13/4;
cout << endl;
system("PAUSE");
return 0;

Varijable
}

Donoenje Grafika
#include <cstdlib>
#include <iostream>

using namespace std;

odluke
int main()
{ Pokuajmo ovdje staviti
cout << 15/3; 15/3 i pokrenimo program.
cout << endl;
Rezultat je ispravan.

Petlje
system("PAUSE");
return 0;
}

Umjesto 15/3 stavimo 17/3 i Polja


pokrenimo program.
Obrada
teksta

#include <cstdlib>
#include <iostream>
Objekti

using namespace std; Rezultat je pogrean. Mogli bismo


zakljuiti da e dijeljenje biti isprav-
int main() no, ako je rezultat cjelobrojni broj.
Saimanje Veliki pro-

{
grami

cout << 17/3; Ako je rezultat decimalni broj, dolazi


cout << endl; do greke.
system("PAUSE");
return 0; Kako rijeiti taj problem, vidjet emo
neto kasnije u ovom poglavlju.
koda

PRO - MIL 57
Varijable

Varijable

Vidjeli smo da osnovne raunske ope-


#include <cstdlib>
racije, osim dijeljenja, funkcioniraju, ali
#include <iostream>
ne ba na nain kako smo mi zamiljali
da bi program trebao raditi.
using namespace std;
Problem naih dosadanjih programa
int main()
jest u tome to svaki program vri ra-
{
unsku operaciju izmeu dva konkret-
int a;
na broja i ako elimo izvriti raunsku
int b;
operaciju izmeu druga dva broja, pro-
int c;
gram moramo iznova pisati i prevoditi.
cin >> a;
cin >> b;
Postavlja se pitanje bismo li mogli napi-
c = a + b;
sati npr. program za zbrajanje koji ne bi
cout << c;
zbrajao dva konkretna broja, nego bi
cout << endl;
mogao zbrojiti bilo koja dva broja.
system("PAUSE");
return 0;
To je, naravno, mogue. Unesimo, pre-
}
vedimo i pokrenimo ovaj program.

Nakon pokretanja programa


ugledat emo zbunjujui crni
ekran bez sadraja.

Na tipkovnici iza-
beremo prvi broj
koji elimo zbrajati,
npr. broj 3 i zatim
pritisnemo Enter
tipku na tipkovnici.

58 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Na tipkovnici izaberemo
drugi broj koji elimo
zbrajati, npr. broj 5 i

Uvod
zatim pritisnemo Enter
tipku na tipkovnici.

program
Na prvi
Nakon pritiska na

Varijable
Enter tipku na tip-
kovnici, a zaslonu
raunala ugledat
em o r e zu lt at
zbrajanja broja 3 i

Donoenje Grafika
broja 5, a to je broj
8.

odluke
Petlje
Polja
Pokrenimo bez ikakvih izmjena isti prog- Na slian nain kao i u
ram jo jednom, ali sada unesimo neke prethodnom primjeru,
druge brojeve, npr. broj 12 i broj 14. dakle tako da nakon sva-
kog unosa broja pritisne-
Obrada

mo tipku Enter na tipkov-


teksta

nici, unesimo brojeve 12 i


14.

Kao rezultat dobit emo


Objekti

njihov zbroj, a to je broj


26.
Saimanje Veliki pro-

Vidimo da smo uspjeli


grami

postii ono to smo elje-


li. Pomou jednog progra-
ma moemo zbrajati razli-
ite brojeve, bez da prog-
ram moramo mijenjati.
koda

PRO - MIL 59
Varijable

Analiza programa

#include <cstdlib> Poetak programa.


#include <iostream>
a
using namespace std; Naredbom int formirat
emo u raunalu pros-
int main() tor poput posude. U taj
{ prostor moemo spre-
b
mati brojeve.

Formirat emo tri pros-


int a; tora, prostor a, prostor
b i prostor c. c
int b;
int c;

Naredbom cin u prostor a i prostor b 3


cin >> a;
spremit emo broj koji smo unijeli
cin >> b;
preko tipkovnice, npr. broj 3 i broj 5. a

5
Zbrojimo sadraj prostora a i prostora
c = a + b;
b, a rezultat spremimo u prostor c. b

8 3 5
cout << c;
c = a + b

Sadraj prostora c, a to je
c
cout << endl; rezultat zbrajanja, ispiemo
na zaslon raunala. 8

Skok u novi red.


system("PAUSE");
return 0;
}
Kraj programa.

60 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Ovom naredbom formiramo prostor u raunalu u koji emo spremati brojeve.

Na poetku taj prostor moemo zamisliti kao posudice u koje moemo staviti

Uvod
brojeve, iako su to zapravo rezervirana mjesta u memoriji naeg raunala.

program
Na prvi
Naredba za formiranje Oznaka ; obvezno dolazi
prostora. int a ; na kraju naredbe.

Varijable
int b; Ovdje se nalazi naziv prostora.
int c;
Zato svaki prostor ima naziv???

Donoenje Grafika
Zato to u jednom programu moe-
Ovim naredbama se for- mo imati vie takvih prostora, pa
miraju jo dva prostora, nam naziv prostora omoguuje da ih

odluke
prostor b i prostor c. razlikujemo.

Petlje
Nakon formiranja prostor za spremanje brojeva je prazan i bio bi nam sasvim
beskoristan kad u njega ne bismo mogli staviti neki broj.

Polja
U taj prostor broj moemo staviti na vie naina, a jedan od njih je da ga une-
semo pomou tipkovnice. Za to emo koristiti naredbu cin. Obrada
teksta

Oznaka ; obvezno dolazi


Naredba za unos. cin >> a ; na kraju naredbe.
Objekti
Saimanje Veliki pro-
grami

Ovdje stavljamo oznaku prostora u


koji emo unijeti broj. Dakle, broj
Ova oznaka stavlja se emo unijeti u prostor a i ne u neki
ispred naziva prostora u drugi prostor, npr. b ili c.
koda

koji emo unijeti broj.

PRO - MIL 61
Varijable

Naredba slina prethodnoj, samo to e se u


cin >> b ; ovom sluaju unijeti broj spremiti u prostor b.

Osim to u te prostore moemo spremati brojeve, izmeu njih moemo izvoditi


raunske operacije na isti nain kao to smo ih izvodili izmeu brojeva.

U naem sluaju zbrojit emo sadraj prostora a i sadraj prostora b, a rezultat


tog zbrajanja spremit emo u prostor c.

Oznaka ; obvezno
Prostor c u koji e-
mo spremiti rezultat. c = a + b ; dolazi na kraju na-
redbe.

Znak jednakosti ima


istu funkciju kao i u Oznaka raunske ope-
matematici. racije izmeu prostora.

Naziv prvog prostora. Naziv drugog prostora.

Nakon to se naredba c = a + b; izvri, u prostoru c nalazit e se rezultat zbra-


janja sadraja prostora a i prostora b, ali da korisnik vidio rezultat moramo nare-
diti raunalu da sadraj prostora c ispie na zaslon raunala. To emo uiniti
ovom naredbom.

Oznaka ; obavezno
Naredba za ispis. cout << c ; dolazi na kraju na-
redbe.

Oznaka ispred sadr- Prostor c u koji e-


aja koji ispisujemo. mo spremiti rezultat.

62 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Varijacije programa

Da bismo bolje razumjeli izradu programa koji koriste prostor za spremanje

Uvod
brojeva, napravit emo niz izmjena na naem programu i opaat emo kako te
izmijene utjeu na rad program.

program
Na prvi
#include <cstdlib> Ovaj program ima potpuno istu struktu-
#include <iostream> ru kao prethodni, samo to ima drugai-
je nazive prostora za spremanje broje-

Varijable
using namespace std; va.

int main() Prvi prostor vie se ne naziva a, nego


{ prvi. Drugi prostor vie se ne naziva b,
int prvi; nego drugi. Trei prostor vie se ne

Donoenje Grafika
int drugi; naziva c, nego rezultat.
int rezultat;
cin >> prvi; Prevedimo i pokrenimo ovaj program i
cin >> drugi; vidjet emo da radi jednako kao i pret-

odluke
rezultat = prvi + drugi; hodni program.
cout << rezultat;
cout << endl;
system("PAUSE");

Petlje
return 0;
}

Sad se postavlja pitanje po kojoj logici se biraju nazivi prostora za spre- Polja
manje brojeva. Pogledajmo neka pravila i sugestije.
Obrada

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

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

- Naziv ne smije sadravati razmak; PrviBroj i prvi_broj je dozvoljeno, a


Objekti

prvi broj nije.

- Ako naziv sadri brojeve, prvi znak mora biti slovo, dakle a1 je dozvolje-
Saimanje Veliki pro-

no, a 1a nije.
grami

- Pametno je da naziv prostora govori to se u prostoru nalazi. Bolje je da


prostor u koji emo spremati povrinu nazovemo povrsina nego qqy1.

- Dva razliita prostora ne mogu imati isto ime.


koda

PRO - MIL 63
Varijable

#include <cstdlib>
#include <iostream> Pokuamo li pokrenuti ovaj program, ra-
unalo e dojaviti greku.
using namespace std;
Do greke je dolo zato to smo ovdje
int main() formirali prostor A, a ovdje smo pokuali
{ unijeti broj u prostor a.
int A;
int B; Raunalo razlikuje velika i mala slova pa
int c; njemu prostor a i prostor A nisu isto.
cin >> a;
cin >> b; S njegove toke gledita mi ovdje poku-
c = a + b; avamo unijeti broj u prostor koji ne pos-
cout << c; toji.
cout << endl;
system("PAUSE"); Zato e nas raunalo u komentaru greke
return 0; upozoriti da ne zna to je to a.
}

64 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
#include <cstdlib>
#include <iostream> U ovom programu ovu naredbu nismo napi-
sali u ispravnom obliku kao cout << c; nego

Uvod
using namespace u obliku cout << "c"; dakle sadraj koji se
std; ispisuje stavili smo u navodnike kao to
smo to naviknuli prilikom ispisa teksta kori-
int main() tenjem cout naredbe.

program
Na prvi
{
int a; Pokrenemo li ovaj program, on e se izvriti
int b; i raunalo nam nee dojaviti nikakvu gre-
int c; ku, ali kao rezultat neemo dobiti ono to

Varijable
cin >> a; smo oekivali.
cin >> b;
c = a + b; Vidimo da smo u prostor a unijeli 8, u pros-
cout << "c"; tor b unijeli smo 4, ali kao rezultat nismo
cout << endl; dobili broj 12, nego slovo c.

Donoenje Grafika
system("PAUSE");
return 0; Zato?
}
cout << c; - ispisuje sadraj prostora c.

odluke
cout << "c"; - ispisuje slovo c.

Petlje
Polja
Ovaj tip greke veo-
ma je teko pronai
Obrada
teksta

u sloenim programi-
ma, budui da rau-
nalo nee dojaviti
greku i poziciju gre-
Objekti

ke prilikom prevo-
enja.

To se dogaa zato
Saimanje Veliki pro-

to je program for-
grami

malno ispravno napi-


san; cout << "c"; je
ispravna naredba, ali
ne radi ono to smo
koda

htjeli.

PRO - MIL 65
Varijable

#include <cstdlib> Prostore za spremanje brojeva moemo


#include <iostream> koristiti i za druge matematike operaci-
je.
using namespace std;
Ovdje moemo vidjeti program za oduzi-
int main() manje.
{
int broj1; Od sadraja prostora broj1 oduzet e se
int broj2; sadraj prostora broj2, a rezultat e se
int rezultat; spremiti u prostor rezultat.
cin >> broj1;
cin >> broj2;
rezultat = broj1 - broj2;
cout << rezultat;
cout << endl;
system("PAUSE");
return 0;
}

#include <cstdlib>
#include <iostream> Na slian nain moemo napraviti program
za mnoenje sadraja 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
C++ programiranje za apsolutne poetnike

Sadraj
Problem dijeljenja

Ostao nam je nerijeen problem dijelje-

Uvod
#include <cstdlib>
#include <iostream> nja.

using namespace std; Sadraje prostora za spremanje broje-

program
Na prvi
va moemo dijeliti, ali e kao i proli put
int main()
{ kad smo pokuali dijeliti, rezultat biti
int broj1; ispravan samo za brojeve iji rezultat

Varijable
int broj2;
int rezultat; dijeljenja nije decimalni broj.
cin >> broj1;
cin >> broj2; Ako je rezultat dijeljenja decimalni broj,
rezultat = broj1 / broj2;

Donoenje Grafika
cout << rezultat; rezultat e biti pogrean.
cout << endl;
system("PAUSE");
return 0;

odluke
}

Petlje
Problem emo rijeiti ovako napisanim
programom. Umjesto naredbom int,
prostor za spremanje brojeva formirat
emo naredbom float;

Polja
#include <cstdlib>
#include <iostream> Pokrenemo li taj program, dobit emo
ispravan rezultat.
using namespace std;
Obrada
teksta

int main()
{
float broj1;
float broj2;
Objekti

float rezultat;
cin >> broj1;
cin >> broj2;
Saimanje Veliki pro-

rezultat = broj1 / broj2;


grami

cout << rezultat;


cout << endl;
system("PAUSE");
return 0;
}
koda

PRO - MIL 67
Varijable

Ovo je jo jedan nain na koji moemo formirati prostor za spremanje brojeva.

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


nog float naredbom???

U prostor formiran int naredbom moemo spremati samo brojeve bez decimal-
nog zareza, a u prostore formirane float naredbom moemo spremati brojeve
s decimalnim zarezom.

Oznaka ; obvezno
Naredba za formi-
ranje prostora za
float broj1 ; dolazi na kraju na-
redbe.
spremanje brojeva
s decimalnim zare-
zom.

Naziv prostora. Uoimo da iz-


meu broj i 1 nema razmaka.

Postavlja se pitanje bismo li mogli u na program unijeti broj s decimalnim zare-


zom. Pokrenimo jo jednom program iz prethodnog primjera i pokuajmo.

Vidimo da je mogue unijeti


decimalne brojeve u na
program.

Broj 16,25 podijelili smo


brojem 2,5 i kao rezultat
ispravno dobili 6,5.

Pri tome moramo imati u


vidu da C++ kao decimalni
zarez zapravo ne koristi
zarez, nego toku.

Dakle, ako elimo unijeti


npr. 3,14 unijet emo 3.14
koritenjem tipkovnice.

68 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Uljepavanje programa

Nai programi dodue rade, ali su tako runi da bi teko bili runiji. Korisnika

Uvod
doeka crni ekran bez ikakvih uputa. Nakon to unesemo dva broja, dobit
emo trei bez ikakvog komentara to taj trei broj predstavlja.

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

Varijable
U ovom programu na

Donoenje Grafika
#include <cstdlib> poetku programa, te
#include <iostream> prije svakog unosa i
ispisa rezultata nared-
using namespace std; bom cout ispisali smo

odluke
adekvatan komentar
int main() koji pomae korisniku
{ da lake shvati emu
float broj1; program slui, to mora
float broj2; unijeti i to je dobio kao

Petlje
float rezultat; rezultat.
cout << "Dijeljenje." << endl;
cout << "Unesite prvi broj." << endl; Ovakav program puno
cin >> broj1; je ugodniji za upotrebu
Polja
cout << "Unesite drugi broj." << endl; od programa bez ko-
cin >> broj2; mentara.
rezultat = broj1 / broj2;
cout << "Rezultat dijeljenja je:" << endl;
Obrada
teksta

cout << rezultat;


cout << endl;
system("PAUSE");
return 0;
Objekti

}
Saimanje Veliki pro-
koda grami

PRO - MIL 69
Varijable

Prethodni program mogli bismo jo malo uljepati dodavanjem praznih redova.


Unesimo i pokrenimo ovaj program.

#include <cstdlib> Naslov programa.


#include <iostream>

using namespace std; Dva skoka u novi red.

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
C++ programiranje za apsolutne poetnike

Sadraj
Nekoliko primjera programa

// ********************************* Ovo je program za

Uvod
// Program za izraun povrine izraun povrine
// ********************************* pravokutnika. Uni-
jet emo ga u ra-

program
Na prvi
#include <cstdlib> unalo i pokrenuti.
#include <iostream>
Struktura je ista
using namespace std; kao i struktura
prethodnog prog-

Varijable
int main() rama, ali su prila-
{ goeni komentari i
float stranica_A; nazivi prostora za
float stranica_B; spremanje broje-

Donoenje Grafika
float povrsina; va.
cout << "Povrsina." << endl;
cout << endl; Jedina novost je
cout << endl; komentar na po-
cout << "Unesite prvu stranicu." << endl; etku programa

odluke
cin >> stranica_A; koji se nalazi iza //
cout << endl; oznaka i opisuje
cout << "Unesite drugu stranicu." << endl; namjenu progra-
cin >> stranica_B; ma.

Petlje
cout << endl;
povrsina = stranica_A * stranica_B;
cout << "Povrsina je:" << endl;
cout << povrsina;

Polja
cout << endl;
cout << endl;
system("PAUSE");
return 0;
Obrada

}
teksta
Objekti

Komentar zapoinje // ozna-


kom i pomae nam da se
lake snaemo ako program
Saimanje Veliki pro-
grami

elimo kasnije koristiti.

Komentirati moemo namje-


nu programa ili pojedine Prilikom prevoenja programa, kad prevo-
segmente programa. ditelj naie na // oznaku, skae u novi red
koda

ne prevodei ostatak reda.

PRO - MIL 71
Varijable

Osim to komentare
// ******************************
// Program za izraun brzine moemo pisati u zase-
// ******************************
bnom redu, moemo ih
#include <cstdlib> pisati i na kraju nared-
#include <iostream>
bi.
using namespace std;
Pri tome imajmo na
int main() umu da je
{
float put; // prostor za put float put; // komentar
float vrijeme; // prostor za vrijeme
float brzina; // prostor za brzinu ispravno, ali
cout << "Brzina." << endl;
cout << endl; // komentar float put;
cout << endl;
cout << "Unesite prevaljeni put." << endl; ili
cin >> put;
cout << endl; float // komentar put;
cout << "Unesite vrijeme." << endl;
cin >> vrijeme; nije. Dakle, ako ko-
cout << endl; mentar unosimo u red
brzina = put / vrijeme; s naredbom, komentar
cout << "Brzina je:" << endl; mora biti na kraju reda.
cout << brzina;
cout << endl;
cout << endl;
system("PAUSE"); Postavlja se pitanje emu
return 0; takvi komentari slue. Ako
} smo upravo napisali prog-
ram, a program ima deset
redova, onda nam komen-
tari ne trebaju.

Ako napiemo vei prog-


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

Komentari su korisni i ako


moramo korigirati program
koji je netko drugi pisao.

72 PRO - MIL
C++ programiranje za apsolutne poetnike

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

Uvod
#include <cstdlib>
#include <iostream> Ovo je primjer programa za izraun volu-

program
Na prvi
mena kvadrata.
using namespace std;
Pokuajmo za vjebu sami smisliti neko-
int main() liko slinih programa.
{

Varijable
float stranica_A;
float stranica_B;
float stranica_C;
float volumen;

Donoenje Grafika
cout << "Izracun volumena." << endl;
cout << endl;
cout << "Unesite stranicu a." << endl;
cin >> stranica_A;
cout << "Unesite stranicu b." << endl;

odluke
cin >> stranica_B;
cout << "Unesite stranicu c." << endl;
cin >> stranica_C;
cout << endl;

Petlje
volumen = stranica_A * stranica_B * stranica_C;
cout << "Volumen je:" << endl;
cout << volumen;
cout << endl;
cout << endl;
system("PAUSE"); Polja
return 0;
}
Obrada
teksta
Objekti
Saimanje Veliki pro-
koda grami

PRO - MIL 73
Grafika

74 PRO - MIL
PRO - MIL
Grafika

Saimanje Veliki pro- Objekti Obrada Polja Petlje Donoenje Grafika Varijable Na prvi Uvod Sadraj
koda grami teksta odluke program

75
C++ programiranje za apsolutne poetnike
Grafika

Podeavanje programskog okruenja

Da bi grafika funkcionirala,
prilikom instalacije progra-
ma moramo instalirati do-
datke kojim programskom
okruenju omoguuje pri-
kaz grafike.
1 - Kliknemo na Projekt. Ako to nismo uinili, vrati-
mo se na uvodno poglavlje
i instalirajmo potrebne do-
datke.
2 - Zatim na Postavke projekta.
Nakon toga podesit emo
programsko okruenje.

1 - Kliknemo na Parametes.

2 - Ovdje unesemo -lbgi -lgdi32

Kliknemo na Ok.

76 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Na prvi grafiki program

Unesimo i pokrenimo ovaj prog-

Uvod
#include <cstdlib>
ram. Uoimo da su poetak i kraj
#include <iostream>
programa izmijenjeni.
#include <winbgim.h>
Na poetku dodan je ovaj red, a

program
Na prvi
using namespace std;
na kraju je izbaena naredba:
system("PAUSE");
int main()
{

Varijable
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);

Donoenje Grafika
Klikom na Kompajlaj i pokreni pokrenemo
cleardevice();
program.
circle(320,240,180);
getch();
Otvorit e se dva prozora:
closegraph();

odluke
return 0;
- tekstualni koji smo do sada koristili
}
- grafiki u kojem e raunalo nacrtati krug.

Petlje
Polja
Obrada
teksta
Objekti
Saimanje Veliki pro-
koda grami

PRO - MIL 77
Grafika

Analiza programa

#include <cstdlib>
Poetak programa. Za razliku od dosa-
#include <iostream>
danjih programa, u ovom smo korigi-
#include <winbgim.h>
rali poetak dodavi mu jo jednu na-
redbu.
using namespace std;
Ovom naredbom u program ukljuuje-
int main()
mo grafike naredbe.
{

int gdriver = 9; Ovdje odreujemo veliinu grafikog


int gmode = 2; prozora i broj boja.

initgraph(&gdriver, &gmode, ""); Otvaranje grafikog prozora.

setbkcolor(WHITE); Odreivanje boje pozadine.

setcolor(BLACK); Odreivanje boje crte.

Brie stari sadraj zaslona i stare pos-


cleardevice(); tavke boja. Pokuajmo pokrenuti prog-
ram bez ove naredbe.

circle(320,240,180); Naredba za crtanje kruga.

78 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Ovom naredbom zaustavljamo izvoe-
nje programa do trenutka dok ne priti-
getch(); snemo neku tipku na tipkovnici. Ima

Uvod
istu namjenu kao i system(PAUSE)
u normalnim programima.

Da bismo bolje razumjeli ovu naredbu,

program
Na prvi
izbacimo je iz programa i pokuajmo
pokrenuti program bez nje.

Varijable
closegraph(); Zatvaranje grafikog prozora.

Donoenje Grafika
Kraj programa. Uoimo da ovdje vie
return 0;
nema naredbe system(PAUSE); Njenu
}
funkciju sada ima getch(); naredba.

odluke
Pogledajmo sada poblie odreene naredbe. Ovom naredbom odreujemo tip

Petlje
grafikog prozora.

Polja

int gdriver = 9 ; Ovaj broj moe biti izmeu 1 i


Obrada
teksta

10. Ako je 9, dobit emo VGA


prozor ija maksimalna veliina
moe biti 640 X 480 toaka i 16
boja.
Objekti

Ako umjesto broja 9 stavimo


broj 6, dobit emo IBM 8514
prozor ija maksimalna veliina
Saimanje Veliki pro-

moe biti 1024 X 768 toaka i


grami

256 boja.

Upotrijebimo li druge brojeve,


dobit emo manje prozore s ma-
njim brojem boja.
koda

PRO - MIL 79
Grafika

Nakon to smo naredbom int gdriver = 9; odabrali tip grafikog prozora, ovom
naredbom biramo rezoluciju grafikog prozora.

int gmode = 2 ; Znaenje ovog broja ovisi o tipu grafikog pro-


zora koji smo odabrali.

Ako smo naredbom int gdriver = 9; odabrali


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

Ako smo naredbom int gdriver = 6 ; odabrali


IBM 8514 prozor, stavimo li ovdje broj 0, dobit
emo prozor veliine 640 X 480 toaka, a sta-
vimo li broj 1, dobit emo prozor veliine 1024
X 768 toaka.

Ovom naredbom odreuje se boja po- Ovdje unosimo naziv bo-


zadine. U naem sluaju bit e bijela. je. Naziv boje moe biti:

BLACK,
BLUE,
GREEN,
CYAN,
RED,
setbkcolor( WHITE ); MAGENTA,
BROWN,
LIGHTGRAY,
DARKGRAY,
LIGHTBLUE,
LIGHTGREEN,
LIGHTCYAN,
LIGHTRED,
LIGHTMAGENTA,
YELLOW,
WHITE.

80 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Osim navoenja imena boja, boje moemo odrediti i navoenjem njihove broj-
ane vrijednosti.

Uvod
program
Na prvi
setbkcolor(COLOR( 255, 255, 255 )); Plava.

Varijable
Crvena. Zelena.

Donoenje Grafika
Dodat emo naredbu COLOR iza koje se nalaze tri broja ija vrijednost mo-
e biti izmeu 0 i 255.

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

Prvim brojem odreujemo intenzitet crvene boje, drugim intenzitet zelene i

Petlje
treim intenzitet plave boje.

Naredbom setbkcolor(COLOR(255,255,255)); dobit emo bijelu boju, a na-


redbom setbkcolor(COLOR(0,0,0)); dobit emo crnu boju.

Polja
Obrada
teksta

Ovom naredbom odreuje se boja kojom crtamo. Koristimo iste nazive boja
kao i u prethodnoj naredbi.
Objekti

setcolor(BLACK);
Saimanje Veliki pro-

Kao i u prethodnoj naredbi,


grami

boje moemo odrediti navo-


enjem njihovog naziva, a
moemo i pomou brojeva
setcolor(COLOR (0,0,0)); upotrebom naredbe COLOR.
koda

PRO - MIL 81
Grafika

Ovo je naredba za crtanje kruga.

circle( 320, 240, 180 ) ;

Udaljenost sredita od Udaljenost sredita od


Polumjer kruga.
lijevog ruba prozora gornjeg ruba prozora

640

240
irina prozora,
320
u naem slu-
aju 640 toa-
ka.
180

480

Visina prozora, u naem


sluaju 480 toaka.

82 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Varijacije programa

#include <cstdlib> Napravit emo nekoliko prim-

Uvod
#include <iostream> jera da bismo lake razumjeli
#include <winbgim.h> kako radi naredba za crtanje
kruga.
using namespace std;

program
Na prvi
Ovaj program slian je pretho-
int main() dnom. Razlika je u tome to je
{ prethodni crtao samo jedan
int gdriver = 9; krug, a ovaj e nacrtati nekoli-

Varijable
int gmode = 2; ko krugova razliitog polumje-
initgraph(&gdriver, &gmode, ""); ra, ali sa sreditem u istoj to-
setbkcolor(WHITE); ki.
setcolor(BLACK);

Donoenje Grafika
cleardevice(); Ovdje se nalaze etiri nared-
circle(320,240,220); be za crtanje etiri kruga.
circle(320,240,165);
circle(320,240,110); Pokrenemo li ovaj program,
circle(320,240,55); trebali bismo dobiti ovakav

odluke
getch(); rezultat.
closegraph();
return 0;
}

Petlje
Polja
Pokuajmo program pro-
Obrada

mijeniti tako da poveamo


teksta

ili smanjimo broj krugova.

Pokuajmo promijeniti
brojeve koji odreuju po-
Objekti

lumjer kruga i poloaj sre-


dita kruga.
Saimanje Veliki pro-
koda grami

PRO - MIL 83
Grafika

U ovom primjeru napravit


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

Pogledajmo jo nekoliko mogunosti. #include <cstdlib>


U ovom sluaju promjenom udalje- #include <iostream>
nosti od gornjeg ruba prozora dobili #include <winbgim.h>
smo tri kruga, jedan iznad drugoga.
using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle (320, 60, 60);
circle (320, 180, 60);
circle (320, 300, 60);
getch();
closegraph();
return 0;
}

84 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
#include <cstdlib>
#include <iostream>

Uvod
#include <winbgim.h>

using namespace std;

program
Na prvi
int main()
{
int gdriver = 9;
int gmode = 2;

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

Donoenje Grafika
circle (180, 180, 60);
circle (300, 300, 60);
getch();
closegraph();

odluke
return 0;
}

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

Polja
using namespace std;

int main()
{
Obrada
teksta

int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
Objekti

setcolor(BLACK);
cleardevice();
circle(320,240,220);
circle(220,140,50);
Saimanje Veliki pro-

circle(420,140,50);
grami

circle(320,240,30);
getch();
closegraph();
return 0;
koda

PRO - MIL 85
Grafika

Crtanje pravokutnika

Osim krunice moemo nacrtati


#include <cstdlib>
i druge oblike, npr. pravokutnik.
#include <iostream>
#include <winbgim.h>
Ovdje u program unesemo na-
redbu za crtanje pravokutnika,
using namespace std;
a na zaslonu raunala dobit
emo ovakav rezultat.
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
rectangle (160, 100, 480, 380);
getch();
closegraph();
return 0;
}

Naredba za crtanje
rectangle ( 160, 100, 480, 380 ); pravokutnika.

640
Naredbom rectan-
100 gle crtamo pravo-
kutnik, a sa etiri
160 380 broja koji se nala-
ze iza naredbe
rectangle odreu-
jemo poloaj gor-
njeg lijevog i do-
njeg desnog ugla
480 pravokutnika.

480 Funkciju pojedinih


brojeva moemo
vidjeti na crteu.

86 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
#include <cstdlib> Meusobno moemo kombinirati
#include <iostream> vie pravokutnika.
#include <winbgim.h>

Uvod
using namespace std;

int main()

program
Na prvi
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");

Varijable
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
rectangle (160, 100, 480, 380);

Donoenje Grafika
rectangle (190, 130, 450, 350);
rectangle (220, 160, 420, 320);
rectangle (250, 190, 390, 290);
getch();
closegraph();

odluke
return 0;
}

Petlje
Pravokutnik moemo kombini- #include <cstdlib>
rati s drugim oblicima. #include <iostream>
#include <winbgim.h>
Pokuajmo za vjebu sami iz-

Polja
misliti nekoliko primjera, npr. using namespace std;
deblo stabla nacrtamo kao pra-
vokutnik, a kronju kao krug. int main()
{
Obrada
teksta

int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
Objekti

setcolor(BLACK);
cleardevice();
circle (320, 240, 220);
circle (220, 140, 50);
Saimanje Veliki pro-

circle (420, 140, 50);


grami

circle (320, 240, 30);


rectangle (260, 342, 380, 338);
getch();
closegraph();
koda

return 0;
}

PRO - MIL 87
Grafika

Crtanje crte

#include <cstdlib> Crtu moemo nacrtati na vie


#include <iostream> naina, a uporaba naredbe line
#include <winbgim.h> jedan je od njih.

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
line (120, 100, 500, 380);
getch();
closegraph();
return 0;
}

Naredba za crtanje
line ( 160, 100, 480, 380 ); crte.

640
100

120 380 Naredbom line


crtamo crtu, a sa
etiri broja koji se
nalaze iza nared-
be line odreuje-
mo poetak i kraj
500 crte.

Funkciju pojedinih
480 brojeva moemo
vidjeti na crteu.

88 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Napravimo nekoliko crtea upo-
#include <cstdlib> rabom naredbe za crtanje crte.
#include <iostream>
#include <winbgim.h>

Uvod
using namespace std;

program
Na prvi
int main()
{
int gdriver = 9;
int gmode = 2;

Varijable
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
line (100, 240, 540, 240);

Donoenje Grafika
line (320, 20, 320, 460);
getch();
closegraph();
return 0;

odluke
}

#include <cstdlib>

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

using namespace std;

int main() Polja


{
int gdriver = 9;
Obrada
teksta

int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
Objekti

cleardevice();
circle (320, 240, 220);
circle (320, 240, 165);
circle (320, 240, 110);
Saimanje Veliki pro-

circle (320, 240, 55);


grami

line (100, 240, 540, 240);


line (320, 20, 320, 460);
getch();
closegraph();
koda

return 0;
}

PRO - MIL 89
Grafika

Osim uporabom naredbe line,


#include <cstdlib>
crtu moemo nacrtati i upora-
#include <iostream>
bom naredbi moveto i lineto.
#include <winbgim.h>
Naredbom moveto odreuje-
using namespace std;
mo poetak crte, a naredbom
lineto odreujemo kraj crte.
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto (120, 100);
lineto (500, 380);
getch();
closegraph();
return 0;
}

Ovom naredbom odreujemo


moveto ( 120, 100 ); poetak crte.

Ovom naredbom odre-


640
ujemo kraj crte.
100

120 380

500 lineto ( 500, 380 );

480

90 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
#include <cstdlib>
Ovaj nain crtanja pogodan
#include <iostream>
je za crtanje vie crta u nep-
#include <winbgim.h>
rekinutom nizu.

Uvod
using namespace std;
Pogledajmo ovaj primjer.
int main()

program
Na prvi
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");

Varijable
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto(160, 240);
lineto(160, 450);

Donoenje Grafika
lineto(480, 450);
lineto(480, 240);
lineto(160, 240);
lineto(320, 120);

odluke
lineto(480, 240);
getch();
closegraph();
return 0;

Petlje
}

#include <cstdlib>
#include <iostream>
Pogledajmo, korak po korak, #include <winbgim.h> Polja
kako je nastao ovaj crte.
using namespace std;
Obrada
teksta

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

initgraph(&gdriver, &gmode, "");


setbkcolor(WHITE);
setcolor(BLACK);
Saimanje Veliki pro-

cleardevice();
grami

moveto(160, 240);
lineto(160, 450);
getch();
closegraph();
return 0;
koda

PRO - MIL 91
Grafika

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

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto(160, 240);
lineto(160, 450);
lineto(480, 450);
getch();
closegraph();
return 0;
}

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

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto(160, 240);
lineto(160, 450);
lineto(480, 450);
lineto(480, 240);
getch();
closegraph();
return 0;
}

92 PRO - MIL
C++ programiranje za apsolutne poetnike

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

Uvod
using namespace std;

int main()

program
Na prvi
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");

Varijable
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto(160, 240);
lineto(160, 450);

Donoenje Grafika
lineto(480, 450);
lineto(480, 240);
lineto(160, 240);
getch();

odluke
closegraph();
return 0;
}
#include <cstdlib>
#include <iostream>

Petlje
#include <winbgim.h>

using namespace std;

Polja
int main()
{
int gdriver = 9;
int gmode = 2;
Obrada
teksta

initgraph(&gdriver, &gmode, "");


setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
Objekti

moveto(160, 240);
lineto(160, 450);
lineto(480, 450);
lineto(480, 240);
Saimanje Veliki pro-

lineto(160, 240);
grami

lineto(320, 120);
getch();
closegraph();
return 0;
koda

PRO - MIL 93
Grafika

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

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto(160, 240);
lineto(160, 450);
#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
C++ programiranje za apsolutne poetnike

Sadraj
Crtanje toke

Ponekad nam je potrebna samo

Uvod
#include <cstdlib> jedna toka, kao u ovom primje-
#include <iostream> ru gdje smo tokom oznaili
#include <winbgim.h> sredite kruga.

program
Na prvi
using namespace std;

int main()
{

Varijable
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);

Donoenje Grafika
cleardevice();
circle (320, 240, 220);
putpixel (320, 240, BLACK);
getch();

odluke
closegraph();
return 0;
}

Petlje
Naredba za crtanje
putpixel ( 320, 240, BLACK );
Polja
toke.
Obrada
teksta

640
Ovdje unosimo boju
toke koju odreuje-
380
mo na isti nain kao i
boju pozadine ili boju
Objekti

crte.

500
Saimanje Veliki pro-
grami

480
koda

PRO - MIL 95
Grafika

Ispis teksta

#include <cstdlib> Moemo li unutar grafikog


#include <iostream>
#include <winbgim.h> prozora staviti tekst? Moe-
mo, ali naalost, ne na nain
using namespace std;
na koji smo to do sada navikli
int main() raditi.
{
int gdriver = 9;
int gmode = 2; Ako prije naredbe za crtanje
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE); kruga stavimo naredbu i za
setcolor(BLACK); ispis teksta, tekst e se ispisa-
cleardevice();
cout << "Ovo je krug." << endl; ti, ali ne unutar grafikog pro-
circle (320, 240, 220); zora, ve unutar tekstualnog
getch();
closegraph(); prozora.
return 0;
}

96 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
Upotrijebimo li ovu naredbu, #include <cstdlib>
#include <iostream>
tekst e se ispisati unutar
#include <winbgim.h>

Uvod
grafikog prozora.
using namespace std;

program
Na prvi
int main()
{
int gdriver = 9;
int gmode = 2;

Varijable
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
outtext ("Ovo je krug.");

Donoenje Grafika
circle (320, 240, 220);
getch();
closegraph();
return 0;

odluke
}

Petlje
#include <cstdlib> Naredbu za odreivanje pozici-
#include <iostream>
#include <winbgim.h> je poetka crte moemo iskori-

Polja
stiti za odreivanje poetka
using namespace std;
teksta.
int main()
Obrada

{
teksta

int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
Objekti

setcolor(BLACK);
cleardevice();
moveto (320, 240);
outtext ("Ovo je krug.");
Saimanje Veliki pro-
grami

circle (320, 240, 220);


getch();
closegraph();
return 0;
}
koda

PRO - MIL 97
Grafika

#include <cstdlib>
#include <iostream>
#include <winbgim.h> Naredba outtextxy objedi-
njuje naredbu za odreivanje
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;
}

Brojevima odreujemo Unutar navodnika je


poziciju ispisa. tekst koji ispisujemo.

outtextxy ( 320, 240, "Ovo je krug." );

640

240

320 Ovo je krug.

480

98 PRO - MIL
C++ programiranje za apsolutne poetnike

Sadraj
#include <cstdlib>
#include <iostream> Naredbom settextstyle mo-

Uvod
#include <winbgim.h> emo mijenjati oblik i veliinu
slova te smjer ispisa teksta.
using namespace std;
Stavljamo je prije naredbe za

program
Na prvi
int main()
ispis teksta.
{
int gdriver = 9;
int gmode = 2;

Varijable
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
settextstyle (9, HORIZ_DIR, 1);

Donoenje Grafika
outtextxy (320, 240, "Ovo je krug.");
circle (320, 240, 220);
getch();
closegraph();

odluke
return 0;
}

Petlje
Naredba za odreivanje veliine i oblika slova te smjera ispisa.

Polja
settextstyle ( 9, HORIZ_DIR, 1 );
Obrada
teksta

Ovaj broj odreuje Veliina slova.


oblik slova. Njego-
va vrijednost moe
Objekti

biti izmeu 0 i 10.

Smjer teksta:
Saimanje Veliki pro-
grami

HORIZ_DIR - vodoravni tekst.

VERT_DIR - uspravni tekst od dolje prema gore.

-VERT_DIR - uspravni tekst od gore prema dolje.


koda

PRO - MIL 99
Grafika

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

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle (320, 240, 220);
settextstyle(9, HORIZ_DIR, 1); Pogledajmo primjer prom-
outtextxy(320, 200, "Ovo je krug."); jene veliine 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;
}

100 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
#include <cstdlib> Pogledajmo primjer promjene
#include <iostream> oblika slova.

Uvod
#include <winbgim.h>

using namespace std;

program
Na prvi
int main()
{
int gdriver = 9;
int gmode = 2;

Varijable
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle (320, 240, 220);

Donoenje Grafika
settextstyle(0, HORIZ_DIR, 3);
outtextxy(320, 40, "Ovo je krug.");
settextstyle(1, HORIZ_DIR, 3);
outtextxy(320, 80, "Ovo je krug.");

odluke
settextstyle(2, HORIZ_DIR, 3);
outtextxy(320, 120, "Ovo je krug.");
settextstyle(3, HORIZ_DIR, 3);
outtextxy(320, 160, "Ovo je krug.");
settextstyle(4, HORIZ_DIR, 3);

Petlje
outtextxy(320, 200, "Ovo je krug.");
settextstyle(5, HORIZ_DIR, 3);
outtextxy(320, 240, "Ovo je krug.");
settextstyle(6, HORIZ_DIR, 3);

Polja
outtextxy(320, 280, "Ovo je krug.");
settextstyle(7, HORIZ_DIR, 3);
outtextxy(320, 320, "Ovo je krug.");
settextstyle(8, HORIZ_DIR, 3);
Obrada
teksta

outtextxy(320, 360, "Ovo je krug.");


settextstyle(9, HORIZ_DIR, 3);
outtextxy(320, 400, "Ovo je krug.");
settextstyle(10, HORIZ_DIR, 3);
Objekti

outtextxy(320, 440, "Ovo je krug.");


getch();
closegraph();
return 0;
Saimanje Veliki pro-

}
koda grami

PRO - MIL 101


Donoenje odluke

102 PRO - MIL


PRO - MIL
Donoenje odluke

Saimanje Veliki pro- Objekti Obrada Polja Petlje Donoenje Grafika Varijable Na prvi Uvod Sadraj
koda grami teksta odluke program

103
C++ programiranje za apsolutne poetnike
Donoenje odluke

Funkcije

#include <cstdlib> Pojam funkcije zvui jako


#include <iostream> pametno, ali iza tog naziva
#include <cmath> kriju se uglavnom jednos-
tavne stvari, matematike
using namespace std; operacije poput potencira-
nja ili vaenja kvadratnog
int main() korijena.
{
float broj; Pogledajmo program za
float potencija; potenciranje.
float rezultat;
cout << "Unesite broj:" << endl; Da bismo u programu mogli
cin >> broj; koristiti matematike funkci-
cout << endl; je, moramo u program uk-
cout << "Unesite potenciju:" << endl; ljuiti biblioteku matemati-
cin >> potencija; kih funkcija.
cout << endl;
rezultat = pow(broj,potencija);
cout << "Rezultat je:" << endl;
cout << rezultat << endl;
cout << endl;
system("PAUSE");
return 0;
}

Varijabla u koju sprema-


mo rezultat potenciranja.

Potencija na koju
rezultat = pow ( broj, potencija ); potenciramo.

Naredba za potenciranje. Broj koji potenciramo.

104 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Ovo je program za izra-
#include <cstdlib> un sinusa.
#include <iostream>

Uvod
#include <cmath> Ako ne znate to je to
sinus, nemojte se time
using namespace std; optereivati. To nije bitno

program
Na prvi
za razumijevanje C++
int main() programskog jezika.
{
float kut; Vano je uoiti da ova
float rezultat; funkcija veliinu kuta ne

Varijable
cout << "Kut u radijanima:" << endl; izraava stupnjevima ne-
cin >> kut; go radijanima.
cout << endl;
rezultat = sin(kut);

Donoenje Grafika
cout << "Sinus kuta je:" << endl;
cout << rezultat << endl;
cout << endl;
system("PAUSE");
return 0;

odluke
}

Varijabla u koju sprema- Petlje


Polja
mo rezultat.
Obrada
teksta

rezultat = sin ( kut );


Objekti
Saimanje Veliki pro-
grami

Naredba za izraun sinusa kuta. Varijabla u koju spremamo veliinu


kuta kojem emo raunati sinus. Kut
mora biti izraen u radijanima, a ne u
stupnjevima.
koda

PRO - MIL 105


Donoenje odluke

Ponekad je u programu
#include <cstdlib> potrebno negativan broj
#include <iostream> pretvoriti u pozitivan.
#include <cmath>

using namespace std;

int main()
{
float broj;
float rezultat;
cout << "Unesite negativni broj:" << endl;
cin >> broj;
cout << endl;
rezultat = abs(broj);
cout << "Broj bez minusa:" << endl;
cout << rezultat << endl;
cout << endl;
system("PAUSE");
return 0;
}

Varijabla u koju sprema-


mo rezultat.

rezultat = abs ( broj );

Naredba za pretvaranje
Varijabla u koju spremamo broj koji
negativnog broja u poziti-
emo iz negativnog pretvoriti u poziti-
van broj.
van.

106 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Uvod
#include <cstdlib>
#include <iostream>
#include <cmath>

program
Na prvi
using namespace std;
Pogledajmo program
int main() za vaenje kvadratnog
{ korijena.

Varijable
float broj;
float rezultat; to je to uope kvadrati
cout << "Unesite broj:" << endl; korijen?
cin >> broj;
cout << endl; Ako je 4 puta 4, odnos-

Donoenje Grafika
rezultat = sqrt(broj); no 4 na kvadrat, jedna-
cout << "Kvadratni korijen je:" << endl; ko 16, onda je kvadrat-
cout << rezultat << endl; ni korijen od 16 jedak
cout << endl; 4.

odluke
system("PAUSE");
return 0;
}
Varijabla u koju spremamo
Varijabla u koju spre- broj iji kvadratni korijen

Petlje
mamo rezultat. elimo izraunati.

Naredba za izraun kvadra-

Polja
tnog korijena.
rezultat = sqrt ( broj ); Obrada
teksta

Iako se nam na prvi


pogled moe uiniti
da je program ispra-
van, to na alost nije
tako. Pokuamo li
Objekti

kvadratni korijen iz-


raunati iz negativ-
nog broja dobit emo
Saimanje Veliki pro-

besmisleni rezultat.
grami

Do toga dolazi zato


to nije mogue izra-
unati kvadratni kori-
jen iz negativnog
broja.
koda

PRO - MIL 107


Donoenje odluke

Donoenje odluke

Pokuajmo kvadrati korijen izra-


unati pomou ovakvog progra-
ma.

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

using namespace std;

int main()
{
float broj; Ova inaica programa
float rezultat;
cout << "Unesite pozitivan broj." << endl; izraunava kvadratni
cin >> broj; korijen ako smo unijeli
cout << endl;
if (broj < 0) pozitivan broj ili nas
{ obavjetava 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;
}

108 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Pogledajmo bitne dijelo-
#include <cstdlib> ve naeg programa.
#include <iostream>

Uvod
#include <cmath>

using namespace std; Uobiajen poetak prog-


rama. Izvodi se prilikom
svakog pokretanja prog-

program
Na prvi
int main()
{ rama

Varijable
Formiranje varijabli i
unos broja iz kojeg e-
float broj; mo vaditi kvadratni kori-
float rezultat; jen.
cout << "Unesite pozitivan broj." << endl; Izvodi se prilikom sva-

Donoenje Grafika
cin >> broj; kog pokretanja progra-
cout << endl; ma.
Broj nula.

odluke
Naredbom if ispitujemo
if (broj < 0) je li sadraj varijable ma-
nji od nule.

Petlje
{
cout << "Broj je negativan!" << endl; Ovaj dio programa izvo-
} di se samo ako je sadr-
aj varijable broj manji

Polja
od nule.

else
Obrada
teksta

Naredbom else zapoi-


{ nje dio programa koji
rezultat = sqrt(broj);
se izvodi samo ako
cout << "Kvadratni korijen je:" << endl;
Objekti

cout << rezultat; sadraj varijable broj


cout << endl;
nije manji od nule.
}
Saimanje Veliki pro-
grami

cout << endl; Uobiajeni kraj progra-


system("PAUSE"); ma. Izvodi se prilikom
koda

return 0; svakog pokretanja prog-


} rama.

PRO - MIL 109


Donoenje odluke

Svi programi koje smo do sada vidjeli izvodili su se redom od prve do posljed-
nje naredbe. U sluaju programa za vaenje kvadratnog korijena to nam ne
odgovara jer elimo da program na jedan nain reagira ako unesemo poziti-
van broj, a na drugi nain ako unesemo negativan.

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

Za razliku od dosadanjih naredbi koje su se nalazile u jednom redu, naredba


koja nam omoguuje izvoenje jednog ili drugog dijela programa proteu se
kroz vie redova. Pogledajmo strukturu tog sustava.

Uvjet na temelju kojeg U naem sluaju ispituje se je li sadraj


e raunalo odluiti hoe
li se izvoditi sadraj a ili varijable broj manji od broja nula.
sadraj b.

Naredbom if za- Ovaj dio programa


poinje donoe- if ( broj < 0 ) unutar vitiastih zag-
nje odluke. rada izvrit e se ako
je uvjet zadovoljen,
{ tj. ako je sadraj vari-
jable broj manji od
nula.
Sadraj a i sa- sadraj a
draj b nalaze
se unutar vitia-
stih zagrada. }
Naredbom else za-
U poetku esto poinje dio programa
e nam se dea- else koji se izvrava ako
vati da izostavi- uvjet iza if naredbe
mo vitiaste za- nije zadovoljen, tj.
grade ili da ih { ako sadraj varijable
krivo napiemo. broj nije manji od
nule.
sadraj b
U tom sluaju izvodi
se sadraj b, a ne
} izvodi se sadraj a.

110 PRO - MIL


C++ programiranje za apsolutne poetnike

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

Uvod
program
Na prvi
#include <cstdlib>
#include <iostream>

Varijable
using namespace std;

int main()
{

Donoenje Grafika
float broj;
cout << "Unesite broj." << endl;
cin >> broj;
cout << endl;
if (broj > 0)

odluke
{
cout << "Broj je veci od nule." << endl;
}
else Ovaj program samo

Petlje
{
ispituje je li unesen
cout << "Broj nije veci od nule." << endl;
} broj vei od nule.
cout << endl;
system("PAUSE");
return 0; Ako je broj vei od Polja
}
nule, izvodi se dio
programa koji ispisu-
Obrada
teksta

je tekst Broj je vei


od nule.
Objekti

Ako broj nije vei od


nule, izvodi se dio
Saimanje Veliki pro-
grami

programa koji ispisu-


je tekst Broj nije
vei od nule.
koda

PRO - MIL 111


Donoenje odluke

U ovom programu ispitivat e-


mo je li unesen broj jednak nuli.

Za to ispitivanje koristit emo


dvostruki znak jednakosti.

#include <cstdlib>
#include <iostream>
Ako je odgovor na pitanje
using namespace std;
je li sadraj varijable broj
int main()
jednak nuli DA, izvrit 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 sadraj varijable broj
}
else jednak nuli NE, izvrit 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;
}

Da smo umjesto broj == 0 napi-


sali broj = 0 program ne bi ispi-
tivao je li sadraj varijable broj
jednak nuli, nego bi broj nula
stavio u varijablu broj.

112 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Uvod
program
Na prvi
#include <cstdlib>
#include <iostream>

Varijable
using namespace std;

int main()
{
float broj;

Donoenje Grafika
cout << "Unesite broj." << endl; Vidjeli smo da moemo
cin >> broj;
cout << endl; ispitivati je li varijabla
if (broj < 100) vea, manja ili jednaka

odluke
{
cout << "Broj je manji od sto." << endl; nekom broju.
} U dosadanjim primje-
else
{ rima to je bio broj nula,

Petlje
cout << "Broj nije manji od sto." << endl; ali to moe biti bilo koji
}
cout << endl; broj, npr. broj 100 kao
system("PAUSE"); to je to sluaj u ovom
Polja
return 0;
} primjeru. Obrada
teksta
Objekti
Saimanje Veliki pro-
koda grami

PRO - MIL 113


Donoenje odluke

Osim varijable i broja, if nared-


bom moemo usporeivati dvije
varijable.

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{ Ovdje ispitujemo jesu li sa-
float prvi; draji 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 razliite, ispi-
{
cout << "Brojevi su razliciti." << endl; sat e se obavijest Brojevi
}
su razliiti.
cout << endl;
system("PAUSE");
return 0;
}

114 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
U ovom primjeru ispitujemo je
li sadraj varijable prvi manji
od sadraja varijable drugi.

Uvod
#include <cstdlib>

program
Na prvi
#include <iostream>

using namespace std;

Varijable
int main()
{
float prvi;
float drugi;
cout << "Unesite prvi broj." << endl;

Donoenje Grafika
cin >> prvi;
cout << endl;
cout << "Unesite drugi broj." << endl;
cin >> drugi;

odluke
cout << endl;
if (prvi < drugi)
{
cout << "Prvi broj je manji." << endl;
}

Petlje
else
{
cout << "Prvi broj nije manji." << endl;
}

Polja
cout << endl;
system("PAUSE");
return 0;
}
Obrada
teksta
Objekti
Saimanje Veliki pro-
koda grami

PRO - MIL 115


Donoenje odluke

#include <cstdlib>
#include <iostream>

using namespace std;

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

116 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Prilikom formiranja sloenih uvjeta moramo paziti na raspored zagrada. Svaki
uvjet, prvi i drugi nalaze se unutar svojih zagrada, a svi zajedno nalaze se

Uvod
unutar jo jednog para zagrada.

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

Varijable
{

sadraj a Ovdje imamo dva uvjeta, prvi uvjet i drugi

Donoenje Grafika
uvjet. Svaki od ta dva uvjeta moe biti zado-
} voljen ili nezadovoljen.

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

Petlje
sadraj b 5, a mogue je i da nije.

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

Ovim oznakama nareujemo raunalu da


e se sadraj a izvoditi samo onda kad su
Objekti

zadovoljena oba uvjeta; u naem sluaju


kad je sadraj varijable prvi manji od 5 i kad
Saimanje Veliki pro-

je sadraj varijable drugi manji od 5.


grami

U svim ostalim sluajevima izvrit e se


sadraj b.
koda

PRO - MIL 117


Donoenje odluke

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
float prvi;
float drugi;
cout << "Unesite prvi broj." << endl;
cin >> prvi;
cout << endl;
cout << "Unesite drugi broj." << endl; 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;
}

Oznaku | dobijemo tako da dri-


mo lijevu AltGr tipku, a zatim
pritisnemo W tipku.

118 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Ovdje moemo vidjeti primjere jednostavnih ispitivanja na temelju kojih rau-
nalo donosi odluku koji dio programa e se izvoditi, a koji preskoiti.

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

program
Na prvi
Isto tako bilo koje dvije varijable koje se koriste u programu moemo meu-
sobno usporeivati.

Varijable
Primjeri jednostavnih ispitivanja

Donoenje Grafika
if (broj < 0) Ispitujemo je li sadraj varijable broj manji od broja nula.

odluke
if (broj > 0) Ispitujemo je li sadraj varijable broj vei od broja nula.

if (broj == 0) Ispitujemo je li sadraj varijable broj jednak broju nula.

Petlje
Ispitujemo je li sadraj varijable broj manji od broja pede-
if (broj < 50)
set.

if (broj > 50) Ispitujemo je li sadraj varijable broj vei od broja pedeset. Polja
Obrada
teksta

if (broj == 50) Ispitujemo je li sadraj varijable broj jednak broju pedeset.

Ispitujemo je li sadraj varijable broj razliit od broja pede-


if (broj != 50)
set.
Objekti

Ispitujemo je li sadraj varijable prvi vei od sadraja vari-


if (prvi > drugi)
jable drugi.
Saimanje Veliki pro-
grami

Ispitujemo je li sadraj varijable prvi manji od sadraja


if (prvi < drugi)
varijable drugi.

Ispitujemo je li sadraj varijable prvi jednak sadraju vari-


if (prvi == drugi)
koda

jable drugi.

PRO - MIL 119


Donoenje odluke

Osim jednostavnih ispitivanja if naredbom, u programu moemo imati i veoma


sloena ispitivanja.

Sloena ispitivanja formiraju se koritenjem zagrada po logici slinoj logici u


matematici i uporabom simbola || i &&.

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

Simbol || izmeu dva uvjeta oznauje da je dovoljno da je barem jedan od


uvjeta zadovoljen da bi bio zadovoljen ukupni uvjet.

Broj moguih kombinacija praktiki je neogranien, a koju kombinaciju emo


upotrijebiti ovisi o cilju koji programom elimo postii.

Primjeri sloenih ispitivanja

Uvjet je zadovoljen ako je sadraj vari-


if ((prvi < 5) && (drugi < 5)) jable prvi manji od 5 i ako je sadraj
varijable drugi manji od 5.

Uvjet je zadovoljen ako je ili sadraj


varijable prvi manji od 5, ili ako je sa-
if ((prvi < 5) || (drugi < 5))
draj varijable drugi manji od 5, ili ako
su obje varijable manje od 5.

Uvjet je zadovoljen ako je sadraj vari-


jable prvi ili sadraj varijable drugi ili
if (((prvi < 5) || (drugi < 5)) && (treci < 5))
sadraj obiju varijabli manji od 5 i ako
je sadraj varijable treci manji od 5.

Uvjet je zadovoljen ako je barem jedna


od triju varijabli manja od pet, ili ako su
if ((prvi < 5) || (drugi < 5) || (treci < 5))
dvije manje od 5, ili ako su sve tri ma-
nje od 5.

Uvjet je zadovoljen ako su sve tri vari-


jable manje od pet. Dovoljno je da jed-
if ((prvi < 5) && (drugi < 5) && (treci < 5))
na varijabla nije manja od 5 i uvjet nije
ispunjen.

120 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
#include <cstdlib>

Uvod
#include <iostream>

using namespace std;

program
Na prvi
int main()
{
float prvi;
float drugi;

Varijable
float treci;
cout << "Unesite prvi broj." <<
endl;
cin >> prvi; Ovdje vidimo primjer pro-

Donoenje Grafika
cout << "Unesite drugi broj." << endl;
cin >> drugi; grama koji moemo isko-
cout << "Unesite treci broj." << endl; ristiti za isprobavanje
cin >> treci;
if (((prvi < 5) || (drugi < 5)) && (treci < 5)) kombinacija s prethodne

odluke
{ stranice.
cout << "DA" << endl;
}
else U ovom sluaju ukupni

Petlje
{
cout << "NE" << endl; uvjet je ispunjen ako je
} prvi broj manji od 5 ili ako
cout << endl;
system("PAUSE"); je drugi broj manji od 5 ili
return 0; ako su oba manja od 5 i Polja
}
ako je trei broj manji od
Obrada

5.
teksta

Ako je ukupni uvjet zado-


Objekti

voljen, izvest e se ovaj


dio programa.
Saimanje Veliki pro-
grami

Ako ukupni uvjet nije


zadovoljen, izvest e se
ovaj dio programa.
koda

PRO - MIL 121


Donoenje odluke

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
float broj; Osim to moemo u pro-
cout << "Unesite broj." << endl; gramu imati veoma sloe-
cin >> broj; na ispitivanja unutar if
if (broj < 0) naredbe, mogue je jed-
{ nu if naredbu staviti unu-
cout << "Broj je manji od 0." << endl; tar druge if naredbe.
}
else To je nuno ako elimo
{ ispitati vie stvari, npr. je
if (broj > 0) li neki broj vei od nule ili
{ jednak nuli ili je manji od
cout << "Broj je veci od 0." << endl; nule. Takvo ispitivanje ne
} moemo napraviti s jed-
else nom if naredbom, nego
{ su nune dvije if naredbe.
cout << "Broj je 0." << endl;
} Pogledajmo ovaj prog-
} ram.
cout << endl;
system("PAUSE");
return 0;
}

122 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Pogledamo strukturu
#include <cstdlib> programa.

Uvod
#include <iostream>

using namespace std;

program
Na prvi
Poetak programa.
int main()
{
float broj;
cout << "Unesite broj." << endl;

Varijable
cin >> broj; Prva if naredba. Ispitu-
je je li broj manji od 0.

if (broj < 0)

Donoenje Grafika
{ Ako je uneseni broj
cout << "Broj je manji od 0." << endl; manji od 0, izvodi se
} ovaj dio.

odluke
else

{
if (broj > 0) Ako uneseni broj nije
manji od 0, izvodi se

Petlje
{ ovaj dio. Unutar ovog
cout << "Broj je veci od 0." << endl; dijela nalazi se druga
} if naredba.

Polja
else
Ako je uneseni broj
{ vei od 0, izvodi se
cout << "Broj je 0." << endl; ovaj dio.
Obrada
teksta

}
Ako uneseni broj nije
Objekti

vei od 0, izvodi se
cout << endl; ovaj dio.
system("PAUSE");
return 0; Ako uneseni broj nije
Saimanje Veliki pro-

} ni vei ni manji od
grami

nule, onda znamo da


je nula.
koda

Kraj programa.

PRO - MIL 123


Donoenje odluke

#include <cstdlib> Pogledamo li paljivo ovaj


#include <iostream> program, vidjet emo da je
using namespace std; potpuno identian programu s
int main() prethodne stranice. Razlika je
{ jedino u tome to pojedini re-
float broj; dovi nisu uvueni.
cout << "Unesite broj." << endl;
cin >> broj; Pokuamo li pokrenuti ovaj
if (broj < 0) program, vidjet emo da radi
{ potpuno jednako kao i inaica
cout << "Broj je manji od 0." << endl; s uvuenim redovima.
}
else U emu je onda razlika? Za-
{ to bismo uope uvlaili redove
if (broj > 0) kad program oigledno radi i
{ bez toga?
cout << "Broj je veci od 0." << endl;
} Razlika je u preglednosti. Pro-
else gram s uvuenim redovima
{ daleko je pregledniji.
cout << "Broj je 0." << endl;
} Usporedimo li program s uvu-
} enim redovima na prethodnoj
cout << endl; stranici i ovaj bez uvuenih
system("PAUSE"); redova, vidjet emo da je na
return 0; inaici s uvuenim redovima
} daleko lake uoiti gdje zapo-
inju, a gdje zavravaju poje-
dine if naredbe; koje vitiaste
zagrade ine par i sl.

Preglednost programa s uvla-


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

Osnovna ideja je u tome da se uvue


svaka cjelina za koju bi moglo biti
nejasno gdje poinje, a gdje zavra-
va.

124 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Pogledajmo strukturu
uvlaenja redova.
#include <cstdlib>

Uvod
#include <iostream>

using namespace std;


Bez uvlaenja pie se

program
Na prvi
int main() poetak programa i dvije
{ glavne vitiaste zagrade.

float broj;

Varijable
cout << "Unesite broj." << endl;
cin >> broj; Sadraj unutar glavnih
vitiastih zagrada uvlai
se u desnu stranu.
if (broj < 0)

Donoenje Grafika
Na toj razini pie se
{ veina jednostavnih
cout << "Broj je manji od 0." << endl; naredbi.
}

odluke
else
Sadraji unutar if na-
{ redbe dodatno se pomi-
if (broj > 0) u u desnu stranu.

Petlje
{ To nam pomae da
cout << "Broj je veci od 0." << endl; lake uoimo gdje poi-
} nje, a gdje zavrava if

Polja
naredba.
else

{
Obrada
teksta

cout << "Broj je 0." << endl; Ako se unutar jedne if


} naredbe nalazi druga if
naredba, njen sadraj
} dodatno se pomie u
desnu stranu.
Objekti

cout << endl; To nam pomae da


system("PAUSE"); lake uoimo gdje poi-
Saimanje Veliki pro-

return 0; nje i gdje zavrava dru-


grami

} ga if naredba te poma-
e da njen sadraj lak-
e razlikujemo od sadr-
aja prve if naredbe.
koda

PRO - MIL 125


Donoenje odluke

Switch naredba

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
float a;
float b; If naredba nam
int od; omoguuje gra-
cout << "Unesite 1. broj:" << endl; nanje na dvije
cin >> a; grane. Jedna e
cout << "Unesite 2. broj:" << endl; se izvriti 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 elegan-
switch (od) tna ako se u
{ programu javi
case 1: potreba za gra-
cout << a << " + " << b << " = " << a + b << endl; nanjem u vie
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 vie
}
if naredbi, ali
cout << endl;
daleko je ele-
system("PAUSE");
gantniji ako upo-
return 0;
trijebimo switch
}
naredbu.

126 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Poetak switch naredbe. Ovdje se nalazi int varijabla. Grana-
nje se vri na temelju broja koji se
nalazi u varijabli. Int tip je obvezan.

Uvod
Naredbom case 1: zapoinje dio programa koji
switch (od)

program
Na prvi
e se izvriti ako se u varijabli od nalazi broj 1.

Varijable
Naredbom break
case 1: zavrava case 1:
naredba.

cout << "Prvi izbor." << endl; Pokuajmo je obri-

Donoenje Grafika
sati. Pokrenimo
program i promat-
break; rajmo posljedice.

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

Petlje
Naredbom case 2:
zapoinje dio pro-
case 3: grama koji e se
izvriti ako je sadr-
cout << "Treci izbor." << endl; aj varijable od
Polja
break; broj 2.

Na temelju sline
case 4: logike biraju se
Obrada
teksta

cout << "Cetvrti izbor." << endl; ostali case dijelovi


kojih moe biti pro-
break; izvoljni broj.
Objekti

default: (U naem sluaju


imamo jo case 3:
i case 4:.)
cout << "Greska!!!" << endl;
Saimanje Veliki pro-
grami

}
Ovaj dio izvrava se ako ni jedan case uvjet
nije zadovoljen, dakle ako u varijabli od nije bio
koda

ni broj 1, ni broj 2, ni broj 3, ni broj 4.


Kraj switch naredbe.

PRO - MIL 127


Petlje

128 PRO - MIL


PRO - MIL
Petlje

Saimanje Veliki pro- Objekti Obrada Polja Petlje Donoenje Grafika Varijable Na prvi Uvod Sadraj
koda grami teksta odluke program

129
C++ programiranje za apsolutne poetnike
Petlje

For petlja

Ovaj program crta niz krugova jedna-


#include <cstdlib> kog promjera. Svakome je sredite
#include <iostream> pomaknuto za pet toaka u desnu
#include <winbgim.h> stranu u odnosu na sredite prethod-
nog.
using namespace std;
Vidimo da program funkcionira, ali nije
int main() ba elegantan budui da moramo pu-
{ no puta ponoviti slinu naredbu.
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK); #include <cstdlib>
cleardevice(); #include <iostream>
circle(260,240,60); Ovaj program radi isti
#include <winbgim.h> posao, ali je oigledno
circle(265,240,60);
circle(270,240,60); daleko elegantniji.
using namespace std;
circle(275,240,60);
circle(280,240,60); int main()
circle(285,240,60); {
circle(290,240,60); int gdriver = 9;
circle(295,240,60); int gmode = 2;
circle(300,240,60); int x;
circle(305,240,60); initgraph(&gdriver, &gmode, "");
circle(310,240,60); setbkcolor (WHITE);
circle(315,240,60); setcolor (BLACK);
circle(320,240,60); cleardevice();
circle(325,240,60); for (x = 260; x < 365; x = x + 5 )
circle(330,240,60); {
circle(335,240,60); circle(x,240,60);
circle(340,240,60); }
circle(345,240,60); getch();
circle(350,240,60); closegraph();
circle(355,240,60); return 0;
circle(360,240,60); }
getch();
closegraph();
return 0;
}

130 PRO - MIL


C++ programiranje za apsolutne poetnike

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

Uvod
veoma sloena i protee se kroz vie redova programa.

Pogledajmo sastavne elemente for naredbe.

program
Na prvi
Ovdje se definira poetna Petlja e se vrtjeti, odnosno petlja e po-
vrijednost varijable koju navljati dio programa, tako dugo dok je

Varijable
koristi for naredba i koju ovaj uvjet zadovoljen; u naem sluaju,
prije for naredbe moramo tako dugo dok je sadraj varijable x manji
formirati. od 365.

U naem sluaju poetna Kad uvjet vie nije zadovoljen; tj. kad x vie

Donoenje Grafika
vrijednost varijable x je ne bude manji od 365, program e nastavit
260. izvoenje od prve naredbe nakon druge
vitiaste zagrade.

odluke
for ( x = 260 ; x < 365 ; x=x+5 )

Petlje
{ Ovdje odreujemo na-
in na koji e se vrijed-
circle ( x, 240, 60 ); Polja
nost varijable x mije-
njati.

} U naem sluaju nakon


Obrada
teksta

svakog ponavljanja for


naredbe, vrijednost
varijable x uveat e se
za 5, a rezultat e se
Objekti

spremiti u varijablu x.
Udaljenost sredita kruga od lije-
vog ruba nije odreena brojem,
nego vrijednou varijable x.
Saimanje Veliki pro-

Sadraj unutar navodni-


grami

Budui da se pri svakom ponov- ka ponavlja se svaki put


nom izvoenju sadraj varijable x kad for naredba uvea
mijenja, jednako e se mijenjati i vrijednost varijable x i
udaljenost sredita kruga od lije- provjeri je li x manji od
koda

vog ruba. 365.

PRO - MIL 131


Petlje

Pogledajmo dijelove naeg programa.


#include <cstdlib>
#include <iostream>
#include <winbgim.h>
Uobiajeni poetak programa.
using namespace std;

int main()
{

Naredbe za otvaranje grafikog pro-


zora, odreivanje svojstava grafike i
int gdriver = 9; formiranje varijable x koju koristimo u
int gmode = 2; for naredbi.
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK); Ovdje definiramo petlju. Poetna
cleardevice(); vrijednost varijable petlje x je 260,
uveavat e se za 5, a izvravat e
se tako dugo dok je sadraj varijable
x manji od 365.

for (x = 260; x < 365; x = x + 5 )


Pri svakom ponavljanju petlje po-
navlja se sadraj unutar vitiastih
zagrada.

U naem sluaju na grafikom ek-


ranu e se crtati krug.
{
circle(x,240,60); Udaljenost sredita kruga od lije-
} vog ruba nije odreena brojem,
nego vrijednou varijable x.

Budui da vrijednost varijable x pri


svakom ponavljanju raste za 5,
sredie novog kruga bit e za pet
toaka pomaknuto u desnu stranu.
getch();
closegraph();
return 0;
}
Uobiajeni kraj programa.

132 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Nemojmo se obeshrabriti ako nam trenutno nije previe jasno ni kako for
naredba radi, ni emu bi to trebalo sluiti. Na poetku su takve nedoumice
normalne i nipoto nisu dokaz da nismo talentirani za programiranje.

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

program
Na prvi
Drugaiji je problem ako nam se ne da pisati programe. Onda bismo doista
mogli konstatirati da programiranje nije za nas i trebali bismo se pokuati
baviti neim intelektualno manje zahtjevnim, npr. nogometom ili politikom.

Varijable
Ovaj e nam program po-
#include <cstdlib> moi da lake shvatimo

Donoenje Grafika
#include <iostream> funkcioniranje if naredbe.
#include <winbgim.h> Vrijednost varijable x mije-
njat e se od 0 do 9 po 1.
using namespace std;

odluke
Jedino to ovaj program
int main() radi jest ispisivanje sadraj
{ varijable x.
int x;
To nam omoguuje lako

Petlje
cout << "Prije for naredbe." << endl;
for (x = 0; x < 9; x = x + 1 ) opaanje kako se sadraj
{ varijable x mijenja, te koji
cout << x << endl; dio programa se ponavlja i
} koliko puta.
Polja
cout << "Nakon for naredbe." << endl;
cout << endl; Unoenjem varijacija u taj
system("PAUSE"); program najlake emo
return 0; shvatiti for naredbu.
Obrada
teksta

}
Objekti

Vidimo da se ponavlja
Saimanje Veliki pro-

sadraj unutar vitiastih


grami

zagrada for naredbe.

Sadraj prije i sadraj pos-


lije for naredbe ne ponav-
koda

lja se.

PRO - MIL 133


Petlje

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

using namespace std;

int main() U prolom primjeru vrijed-


{ nost varijable x uveavali
int x; smo za 1, a u primjeru prije
cout << "Prije for naredbe." << endl; toga za 5.
for (x = 0; x < 9; x = x + 2 )
{ Vrijednost varijable x u for
cout << x << endl; naredbi moemo uveavati
} za bilo koju vrijednost koja
cout << "Nakon for naredbe." << endl; nam u programu treba, npr.
cout << endl; za 2.
system("PAUSE");
return 0; U ovom sluaju vrijednost
} varijable x raste od 0 do 9
po 2.

Mijenjati moemo poetnu i #include <cstdlib>


krajnju vrijednost petlje. #include <iostream>
#include <winbgim.h>
U ovom sluaju x e se mijenja-
ti od 10 do 29. using namespace std;

int main()
{
int x;
cout << "Prije for naredbe." << endl;
for (x = 10; x < 29; x = x + 2 )
{
cout << x << endl;
}
cout << "Nakon for naredbe." << endl;
cout << endl;
system("PAUSE");
return 0;
}

134 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Uvod
#include <cstdlib>
#include <iostream>

program
Na prvi
#include <winbgim.h>

using namespace std;

int main()

Varijable
{
int x;
cout << "Prije for naredbe." << endl;
for (x = 28; x > 9; x = x - 2 )

Donoenje Grafika
{
cout << x << endl; For naredba moe brojiti i
} unatrag.
cout << "Nakon for naredbe." << endl;
cout << endl; U ovom sluaju vrijednost

odluke
system("PAUSE"); varijable x mijenja se od 28
return 0; do 9 po 2.
}

Petlje
U for naredbi mogu se koristi- #include <cstdlib>
ti i negativni brojevi. #include <iostream>
#include <winbgim.h> Polja
using namespace std;
Obrada
teksta

int main()
{
int x;
cout << "Prije for naredbe." << endl;
Objekti

for (x = 18; x > -9; x = x - 2 )


{
cout << x << endl;
}
Saimanje Veliki pro-
grami

cout << "Nakon for naredbe." << endl;


cout << endl;
system("PAUSE");
return 0;
}
koda

PRO - MIL 135


Petlje

#include <cstdlib>
#include <iostream> Prilikom formiranja for nared-
#include <winbgim.h> be mogue je napraviti greku
koja se naziva mrtva petlja.
using namespace std;
Do te greke dolazi kad uvjete
int main() za kraj petlje tako formuliramo
{ da se oni nikad nee ispuniti,
int x; pa e se petlja vjeno izvoditi.
cout << "Prije for naredbe." << endl;
for (x = 18; x > -9; x = x + 2 ) U ovom primjeru poetna vri-
{ jednost je 18. Ta poetna vri-
cout << x << endl; jednost uveava se za 2, a
} petlja e se ponavljati tako
cout << "Nakon for naredbe." << endl; dugo dok je x vei od 9.
cout << endl;
system("PAUSE"); Ako 18 uveavamo za 2, x e
return 0; uvijek biti vei od 9 i petlja se
} nikad nee prekinuti.

Pogledajmo jo jedan primjer


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

using namespace std;

int main()
{
int x;
cout << "Prije for naredbe." << endl;
for (x = 0; x < 9; x = x - 1 )
{
cout << x << endl;
}
cout << "Nakon for naredbe." << endl;
cout << endl;
system("PAUSE");
return 0;
}

136 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Naredba for ne postoji zato da bi se niz brojeva ispisao na zaslon raunala,
nego zato da bi se u programu postigli odreeni efekti.

Uvod
Iako to nije uvijek sluaj, najee se za postizanje eljenih ciljeva koristi va-
rijabla petlje. Pogledajmo nekoliko primjera.

program
Na prvi
#include <cstdlib>
#include <iostream> Ovaj primjer slian je primjeru

Varijable
#include <winbgim.h> na poetku ovog poglavlja.
using namespace std; Razlika je u tome to su u ovom
sluaju drugaije poetna i kraj-
int main()

Donoenje Grafika
nja vrijednost x varijable, pa
{ smo dobili drugaiji niz krugova.
int gdriver = 9;
int gmode = 2; U ovom sluaju vrijednost varija-
int x; ble x mijenja se od 60 do 580 po

odluke
initgraph(&gdriver, &gmode, ""); 5.
setbkcolor (WHITE);
setcolor (BLACK); Pokuamo sami mijenjati vrijed-
cleardevice(); nosti unutar for naredbe i pro-
for (x = 60; x < 580; x = x + 5 )

Petlje
matrajmo kakve efekte e izaz-
{ vati te promjene.
circle(x,240,60);
}
getch();

Polja
closegraph();
return 0;
}
Obrada
teksta
Objekti
Saimanje Veliki pro-
koda grami

PRO - MIL 137


Petlje

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

using namespace std;

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

using namespace std;


Uveavamo li varijablu x za 15 um-
jesto za 5, pomak sredita krugova int main()
bit e vei. {

Umjesto broja 15 pokuajmo staviti int gdriver = 9;


10, a zatim 20. int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 60; x < 390; x = x + 15 )
{
circle(320,x,60);
}
getch();
closegraph();
return 0;
}

138 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
#include <cstdlib>
#include <iostream>

Uvod
#include <winbgim.h>

using namespace std;

program
Na prvi
int main()
{
int gdriver = 9;
int gmode = 2;

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

Donoenje Grafika
for (x = 20; x < 210; x = x + 10 ) Osim pozicije sredita kruga,
{ varijablom x moemo mijenjati
circle(320,240,x);
} polumjer kruga.

odluke
getch();
closegraph();
return 0;
}
#include <cstdlib>

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

using namespace std;

Polja
Na slian nain moemo crtati ni-
zove drugih geometrijskih oblika, int main()
npr. crta. {
int gdriver = 9;
Obrada
teksta

int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
Objekti

setcolor (BLACK);
cleardevice();
for (x = 10; x < 640; x = x + 10 )
{
Saimanje Veliki pro-

line (x, 20, x, 400);


grami

}
getch();
closegraph();
return 0;
koda

PRO - MIL 139


Petlje

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

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice(); 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>

using namespace std;


U dosadanjim programima koris-
tili smo jednu varijablu. int main()
{
U ovom primjeru koristima dvije, int gdriver = 9;
jednom pomiemo udaljenost sre- int gmode = 2;
dita od lijevog ruba, a drugom int x;
mijenjamo promjer. int r;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
r = 20;
for (x = 20; x < 475; x = x + 15 )
{
circle(x,240,r);
r = r + 5;
}
getch();
closegraph();
return 0;
}

140 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Pogledajmo bitne dijelove ovog programa.

Uvod
Za razliku od dosadanjih primje-
#include <cstdlib> ra, u ovom formiramo jo jednu
#include <iostream> varijablu koju smo nazvali r.

program
Na prvi
#include <winbgim.h>

using namespace std;

int main()

Varijable
Prije for naredbe u varijablu r spre-
{
mimo poetnu vrijednost polumje-
int gdriver = 9;
ra kruga. U naem sluaju spremili
int gmode = 2; smo broj 20.
int x;

Donoenje Grafika
int r;

initgraph(&gdriver, &gmode, ""); For naredba mijenja vrijednost


setbkcolor (WHITE);

odluke
varijable x o 20 do 475 po 15.
setcolor (BLACK);
cleardevice();

r = 20;

Petlje
for (x = 20; x < 475; x = x + 15 ) U naredbi za crtanje kruga upotri-
{ jebili smo dvije varijable.

circle(x,240,r); Varijablom x odreujemo udalje-


nost sredita kruga od lijevog ru- Polja
r = r + 5; ba, a varijablom r polumjer kruga.
Obrada

}
teksta

getch();
closegraph();
return 0;
}
Objekti

Da bi kod svakog ponavljanja


polumjer kruga bio vei, nakon
to smo nacrtali krug, unutar viti-
astih zagrada for naredbe, broj
Saimanje Veliki pro-

I u ovom sluaju promjena pojedinih u varijabli r poveavamo za 5.


grami

elemenata i opaanje rezultata po-


moi e nam da bolje razumijemo Zbog toga e pri svakom ponav-
program; npr umjesto r = r + 5 poku- ljaju polumjer kruga biti vei.
ajmo staviti r = r + 10; umjesto x = x
koda

+ 15 pokuajmo staviti x = x + 5.

PRO - MIL 141


Petlje

Animacija

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

using namespace std;


Animaciju moemo napraviti
int main() veoma jednostavno.
{
int gdriver = 9; Ovaj program crta niz pravo-
int gmode = 2; kutnika.
int x;
initgraph(&gdriver, &gmode, ""); Dovoljno je da pravokutnik
setbkcolor (WHITE); prije crtanja na novoj poziciji
setcolor (BLACK); obriemo na staroj i dobit e-
cleardevice(); mo iluziju kretanja.
for (x = 10; x < 620; x = x + 30 )
{
rectangle (x, 20, x+20, 60);
} #include <cstdlib>
getch(); #include <iostream>
closegraph(); #include <winbgim.h>
return 0;
} using namespace std;

int main()
{
Ovom inaicom 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 kree {
na zaslonu raunala. cleardevice();
rectangle (x, 20, x+20, 60);
}
getch();
Ovom naredbom briemo ekran, a closegraph();
time i pravokutnik na staroj poziciji. return 0;
}

142 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
#include <cstdlib>
#include <iostream>

Uvod
#include <winbgim.h>

using namespace std;

program
Na prvi
int main()
{
int gdriver = 9;
int gmode = 2;

Varijable
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice(); Sve grafike elemente koje smo

Donoenje Grafika
for (x = 10; x < 200; x = x + 1 ) do sada mijenjali moemo ani-
{ mirati.
cleardevice(); U ovom programu animiramo
circle (320, 240, x); irenje kruga.

odluke
}
getch();
closegraph();
return 0; #include <cstdlib>
} #include <iostream>

Petlje
#include <winbgim.h>

using namespace std;

Polja
int main()
U ovom primjeru animiramo krug {
koji pada od gornjeg prema do- int gdriver = 9;
njem rubu . int gmode = 2;
Obrada
teksta

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

cleardevice();
for (x = 10; x < 465; x = x + 1 )
{
cleardevice();
Saimanje Veliki pro-

circle (320, x, 10);


grami

}
getch();
closegraph();
Pokuajmo sami smi- return 0;
koda

sliti sline programe. }

PRO - MIL 143


Petlje

Petlja u petlji

Slino kao to moemo unutar if


#include <cstdlib> naredbe staviti drugu if naredbu
#include <iostream> tako unutar for petlje moemo stavi-
#include <winbgim.h> ti drugu for petlju.

using namespace std; Kod ovakvih programa veoma je


vano pravilno uvlaiti redove, jer
int main() tako lake uoavamo poetak i kraj
{ pojedinih for naredbi.
int gdriver = 9;
int gmode = 2;
int x;
int r;
initgraph(&gdriver, &gmode, "");
Ovom naredbom nareujemo ra-
setbkcolor (WHITE);
unalu da na ovom mjestu stoji
setcolor (BLACK);
onoliko milisekundi koliki broj smo
cleardevice();
stavili u zagradu.
for (x = 30; x < 610; x = x + 60 )
{
U naem sluaju raunalo e sta-
for (r = 5; r < 31; r = r + 5)
jati 100 milisekundi.
{
delay(100);
Ovom naredbom usporavamo iz-
cleardevice();
voenje animacije, ako je animaci-
circle (x, 240, r);
ja suvie brza.
}
}
Na vaem raunalu taj broj moete
getch();
promijeniti i tako izvoenje anima-
closegraph();
cije prilagoditi brzini svog rauna-
return 0;
la. (Ako imamo sporo raunalo,
}
ovu naredbu moemo izbaciti.)

Ovdje vidimo tijek cijele anima-


cije, iako e se tijekom anima-
cije istovremeno vidjeti samo
jedan krug.

Vanjskom petljom pomiemo


sredite kruga u lijevu stranu,
a unutranjom petljom mijenja-
mo polumjer kruga.

144 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Analiziranje ovog
#include <cstdlib> programa pomoi
#include <iostream> e nam da u pot-

Uvod
punosti razumije-
using namespace std; mo nain funkcio-
niranja petlje unu-
int main() tar petlje.

program
Na prvi
{
int x; Pri tome nismo
int r; ogranieni na to
cout << "Prije petlje." << endl; da moemo staviti

Varijable
for (x = 0; x < 2; x = x + 1 ) jednu petlju unutar
{ petlje. Mogue je
cout << "Vanjska petlja. x = " << x << endl; unutar petlje staviti
for (r = 0; r < 3; r = r + 1) petlju, a unutar te
{ petlje jo jednu

Donoenje Grafika
cout << "Nutarnja petlja. r = " << r << endl; petlju i tako petlje
} dodavati u skladu
} s ciljevima koje
cout << "Nakon petlje." << endl; elimo postii.

odluke
cout << endl;
system("PAUSE");
return 0;
}

Da bi rezultat rada programa Petlje


Polja
bio bolje vidljiv, ovdje smo
naredbu cout koristili na na-
Obrada
teksta

in na koji je do sada nismo


koristili. U ovoj inaici sadri
tri dijela.
Objekti

cout << "Vanjska petlja. x = " << x << endl;


Saimanje Veliki pro-
grami

Tekst unutar navodnika


Sadraj varijable x ispisu- Skok u novi
ispisuje se na zaslon rau-
je se na zaslon raunala. red.
koda

nala.

PRO - MIL 145


Petlje

Niz petlji

#include <cstdlib> Osim to petlju moemo staviti unutar


#include <iostream> druge petlje, petlje moemo staviti
#include <winbgim.h> jednu iza druge.

using namespace std; U ovom sluaju prva petlja mali krug


pomie od dolje prema gore, a zatim
int main() druga petlja mali krug iri tako da sve
{ zajedno tvori jednostavan prikaz vatro-
int gdriver = 9; meta.
int gmode = 2;
int x;
int r;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 465; x > 100; x = x - 1 )
{
cleardevice();
circle (320, x, 10); Analiza ovog prog-
} rama pomoi e
for (r = 10; r < 91; r = r + 1) nam da lake razu-
{ #include <cstdlib> mijemo funkcionira-
cleardevice(); #include <iostream> nje niza petlji.
circle (320, x, r);
} using namespace std;
getch();
closegraph(); int main()
return 0; {
} int x;
int r;
cout << "Prije petlji." << endl;
for (x = 2; x > 0; x = x - 1 )
{
cout << "Prva petlja. x = " << x << endl;
}
for (r = 0; r < 3; r = r + 1)
{
cout << "Druga petlja. r = " << r << endl;
}
cout << "Nakon petlji." << endl;
cout << endl;
system("PAUSE");
return 0;
}

146 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Dozvoljene i nedozvoljene kombinacije petlji

for (x = 30; x < 610; x = x + 60)

Uvod
{
for (r = 5; r < 31; r = r + 5) Petlje se mogu na-

program
Na prvi
{ laziti jedna unutar
druge.
circle (x, 240, r);
}

Varijable
}

Donoenje Grafika
for (x = 465; x < 100; x = x - 1)
{
circle (320, x, 10);

odluke
} Petlje se mogu na-
laziti jedna iza dru-
ge
for (r = 10; r < 91; y = y + 1)

Petlje
{
circle (320, x, r);
}
Polja
Obrada
teksta

U ovom sluaju
for (x = 465; x < 100; x = x - 1)
druga for naredba
{
Objekti

circle (320, x, 10); nalazi se unutar

for (r = 10; r < 91; y = y + 1) prve for naredbe.


}
Saimanje Veliki pro-

Ovakva ispreplete-
grami

{ nost dviju for na-


circle (320, x, r); redbi nije dozvolje-
}
koda

na.

PRO - MIL 147


Petlje

While petlja

#include <cstdlib> Do sada smo za svaki novi proraun


#include <iostream> programe morali iznova pokretati.

using namespace std; Daleko elegantnije bilo bi kad bi nas


program nakon prorauna pitao eli-
int main() mo li proraun ponoviti ili elimo pre-
{ kinuti izvoenje programa.
int broj;
int kvadrat; Ovaj program radi upravo tako. Une-
int odgovor; semo li nakon prorauna broj 1, pro-
odgovor = 1; raun emo moi ponoviti, a unese-
while (odgovor == 1) mo li 2, odnosno bilo koji broj razliit
{ od 1 program e se zaustaviti.
cout << "Unesite broj" << endl;
cin >> broj;
kvadrat = broj * broj;
cout << "Kvadrat unesenog broja je:" << endl;
cout << kvadrat;
cout << endl;
cout << "Ponovo = unesite 1." << endl;
cout << "Kraj = unesite 2." << endl;
cin >> odgovor;
}
cout << endl; U ovom programu koristi se
system("PAUSE"); petlja, budui da se dio pro-
return 0; grama moe ponoviti vie
} puta. Ova petlje nije realizi-
rana for naredbom, nego
while naredbom.

U emu je razlika?

Naredba for pogodnija je za


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

(U ovom sluaju mi ne mo-


emo unaprijed znati koliko
puta e korisnik htjeti kvad-
rirati neki broj.)

148 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Kljuna naredba u novoj inaici programa je while naredba. Logika uporabe
te naredbe slina je logici uporabe for naredbe i ako bismo se potrudili svaki
program realiziran for naredbom mogli bismo realizirati while naredbom i

Uvod
svaki program realiziran while naredbom mogli bismo realizirati for nared-
bom.

Zato imamo dvije naredbe ako rade isti posao?

program
Na prvi
Zato to se neke stvari mogu lake realizirati for naredbom, a neke while
naredbom. Pogledajmo elemente while naredbe.

Varijable
Prije naredbe while mo-
Ovdje se unutar zagrada nalazi uvjet koji

Donoenje Grafika
ramo varijabli koju e
while naredba koristiti while naredba ispituje. Uvjeti se formiraju
dati neku poetnu vrije-
po istoj logici kao i kod for naredbe.
dnost.

odluke
Ako je uvjet zadovoljen, izvrit e se na-
redbe unutar vitiastih zagrada, a nakon
a = 1; toga se raunalo vraa na while naredbu i

Petlje
ponovo ispituje je li uvjet zadovoljen.
while (a == 1)

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

cin >> a;
Obrada
teksta

Ako nije, izvodi se prva naredba poslije


druge vitiaste zagrade.
}
Objekti

U naem sluaju ispituje se je li sadraj


varijable a jednak broju 1. Zato prije while
Da bi se ponavljanje u
Saimanje Veliki pro-

nekom trenutku preki- naredbe moramo u varijablu a staviti broj


grami

nulo, unutar vitiastih jedan. Kad bi u varijabli a bio neki drugi


zagrada varijabli koju
while naredba ispituje broj, raunalo bi skoilo na prvi red nakon
treba promijeniti vrijed- druge vitiaste zagrade.
koda

nost.

PRO - MIL 149


Petlje

Pogledajmo dijelove naeg programa.


#include <cstdlib>
#include <iostream>

using namespace std;


Uobiajeni poetak programa i formi-
int main() ranje varijabli.
{
int broj;
int kvadrat; U varijablu odgovor stavljamo broj 1.
int odgovor; To moramo uiniti jer naredba while
ispituje je li u varijabli odgovor broj
1.

odgovor = 1;
Naredba while ispituje je li sadraj
varijable odgovor jednak broju 1.

while (odgovor == 1) Ako jest, izvode se ove naredbe.

U ovom djelu izra-


{
unava se kvadrat
cout << "Unesite broj" << endl;
unesenog broja.
cin >> broj;
kvadrat = broj * broj;
U ovom dijelu u
cout << "Kvadrat unesenog broja je:" << endl;
varijablu odgovor
cout << kvadrat;
unosi se broj na
cout << endl;
temelju kojeg e
while naredba od-
cout << "Ponovo = unesite 1." << endl;
luiti treba li nared-
cout << "Kraj = unesite 2." << endl;
be unutar vitiastih
cin >> odgovor;
zagrada ponoviti.
}

cout << endl;


Kraj programa. Izvodit e se kad
system("PAUSE");
while naredba ustanovi da sadraj
return 0;
varijable odgovor nije broj 1.
}

150 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Varijablu koju e koristiti while naredba moramo prije while naredbe
formirati i moramo joj dati odgovarajuu poetnu vrijednost.

Uvod
Zato je u naem sluaju odgovarajua poetna vrijednost 1?

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

program
Na prvi
Ako bi vrijednost varijable odgovor bila npr. 2, nakon while naredbe
program bi skoio na ovu naredbu i sadraj unutar navodnika ne bi se
izvravao.

Varijable
#include <cstdlib>

Donoenje Grafika
#include <iostream>

using namespace std;

int main()

odluke
{
int odgovor;
odgovor = 1;
cout << "Prije while naredbe." << endl;

Petlje
while (odgovor == 1)
{
cout << "Prvi red bloka ponavljanja" << endl;
cout << "1 = nastavak ili 2 = kraj." << endl;
cin >> odgovor;
Polja
cout << "Zadnji red bloka ponavljanja" << endl;
}
cout << "Nakon while naredbe." << endl;
cout << endl;
Obrada
teksta

system("PAUSE");
return 0;
}
Objekti

Ovdje naredbom cin pre-


Saimanje Veliki pro-
grami

ko tipkovnice unosimo
novu vrijednost varijable
odgovor i time biramo ho-
emo li petlju ponoviti ili
emo izai iz programa.
koda

PRO - MIL 151


Petlje

U prethodnim programima korisnik je mogao izabrati hoe li program izvoditi


ponovo, ali biranje je funkcioniralo na vrlo neprirodan nain. Nije ba logino
unijeti broj 1 za ponavljanje prorauna ili broj 2 za prekid programa.

Ova inaica programa to biranje izvodi na elegantniji nain. Umjesto unoenja


brojeva kao odgovora, u ovom programu unosimo slova.

Da bi to bilo mogue, upotrijebili smo novi tip varijable, varijablu char tipa u
koju moemo spremiti jedno slovo.

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int broj;
int kvadrat;
char odgovor;
odgovor = 'd';
while (odgovor != 'n')
{
cout << "Unesite broj" << endl;
cin >> broj;
kvadrat = broj * broj;
cout << "Kvadrat unesenog broja je:" << endl;
cout << kvadrat;
cout << endl;
cout << "Zelite li ponovo (d/n)?" << endl;
cin >> odgovor;
}
cout << endl;
system("PAUSE");
return 0;
}

152 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Pogledajmo poblie dijelove programa. Uobiajeni poetak programa.

Uvod
Formiranje varijabli koje emo koristiti
#include <cstdlib>

program
Na prvi
u programu.
#include <iostream>

using namespace std;


Formiranje varijable tipa char u koju

Varijable
int main() moemo spremiti jedno slovo.
{
Nakon formiranja u varijablu odgo-
int broj; vor spremamo slovo d.
int kvadrat;

Donoenje Grafika
char odgovor;
while nared-
odgovor = 'd';
bom ispituje-
mo je li sadr-

odluke
while (odgovor != 'n')
aj varijable
odgovor razli-
{
it od slova n.
cout << "Unesite broj" << endl;

Petlje
Ako jest, izvo-
cin >> broj;
di se sadraj
kvadrat = broj * broj;
unutar vitias-
cout << "Kvadrat unesenog broja je:" << endl;
tih zagrada.
cout << kvadrat;
Polja
cout << endl;

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


cin >> odgovor; Ovdje se izra-
Obrada
teksta

unava kvad-
} rat unesenog
broja.
Objekti

cout << endl;


system("PAUSE");
Ovdje se unosi slovo d ili slovo n na te-
return 0;
} melju ega e while naredba ponovo iz-
Saimanje Veliki pro-
grami

vesti naredbe unutar vitiastih zagrada


ako smo unijeli slovo d ili e izvesti na-
redbe nakon vitiastih zagrada ako smo
koda

Kraj programa. unijeli slovo n.

PRO - MIL 153


Petlje

#include <cstdlib>
#include <iostream> While naredbu moemo iskoris-
#include <winbgim.h> titi i za viestruko pokretanje

using namespace std; grafikih programa.

int main()
{ Mali krug kree se od gore pre-
int gdriver = 9; ma dolje, a zatim nas raunalo
int gmode = 2;
int x; pita elimo li ponoviti animaciju.
char odgovor;
odgovor = 'd';
initgraph(&gdriver, &gmode, ""); U ovom programu koristimo dvi-
setbkcolor (WHITE); je razliite 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 kruga.
}
settextstyle(9, HORIZ_DIR, 1);
outtextxy(20, 20, "elite li ponovo (d/n)?"); U grafikom prozoru
odgovor = getch(); za unos slova u vari-
} jablu odgovor ne
closegraph(); koristi se cin nared-
return 0; ba, nego getch() na-
} redba.

Ako koristimo getch() na-


redbu, nakon unosa ne
koristima Enter tipku.

Dovoljno je pritisnuti slovo


d ili slovo n.

154 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Pogledajmo dijelove naeg programa.

Uvod
#include <cstdlib>
#include <iostream> Uobiajeni poetak programa.
#include <winbgim.h>

program
Na prvi
using namespace std; Formiranje varijabli.

int main()
{

Varijable
Formiranje varijable odgovor. Ta
varijabla je char tipa i koristit e je
int gdriver = 9; while petlja unutar koje se nalazi
int gmode = 2; program za animaciju.
int x;

Donoenje Grafika
Slui nam za biranje ponavljanja
char odgovor; animacije ili kraja programa. U vari-
odgovor = 'd'; jablu odgovor sprema se slovo d.
initgraph(&gdriver, &gmode, "");

odluke
setbkcolor (WHITE);
setcolor (BLACK);
Otvaranje grafikog
while (odgovor != 'n') prozora.

Petlje
{
Vanjska while petlja.
cleardevice();

for (x = 10; x < 465; x = x + 1 )


For petlja slui za izvo- Polja
{
enje animacije.
cleardevice();
Obrada

circle (320, x, 10);


teksta

settextstyle(9, HORIZ_DIR, 1); Nakon izvoenja ani-


outtextxy(20, 20, "elite li ponovo (d/n)?"); macije unosi se odgo-
Objekti

odgovor = getch(); vor na pitanje elimo li


ponoviti animaciju.
}
Saimanje Veliki pro-
grami

closegraph();
return 0;
}
Kraj programa. Ovaj dio izvodi se kad
while naredba ustanovi da sadraj
koda

varijable odgovor nije razliit od n.

PRO - MIL 155


Petlje

Ovaj program omoguit e nam da lijevom i desnom strelicom na tipkovnici


kontroliramo kretanje pravokutnika u lijevu ili desnu stranu.

Program naputamo pritiskom na tipku k.

Ovaj program ve bismo mogli smatrati jednim elementom primitivne igrice.


Dovoljno bi bilo dodati kretanje malih krugova od gore prema dolje i broja koji
bi brojio koliko krugova smo ovim pravokutnikom uspjeli uhvatiti.

Umjesto:
int x; #include <cstdlib>
x =290; #include <iostream>
#include <winbgim.h>
moemo 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);
moemo napisati cleardevice();
char odgovor = 'd'; while (odgovor != 'k')
{
rectangle(x, 432, x+60, 438);
odgovor = getch();
if (odgovor == 75)
{
x = x - 5;
Pravokutnik koji moe- }
mo pomicati u lijevu i if (odgovor == 77)
desnu stranu. {
x = x + 5;
}
cleardevice();
}
closegraph();
return 0;
}

156 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Pogledajmo dijelove naeg programa.

Uvod
#include <cstdlib> Uobiajeni poetak programa,
#include <iostream> formiranje varijabli i otvaranje
#include <winbgim.h> grafikog prozora.

program
Na prvi
using namespace std;

int main() Cijelo vrijeme dok naa pri-


{ mitivna igrica radi, vrtjet e

Varijable
int gdriver = 9; se u ovoj while petlji.
int gmode = 2;
int x = 290; Ako pritisnemo tipku k prog-
char odgovor = 'd'; ram e izai iz petlje i naa
initgraph(&gdriver, &gmode, ""); igrica e se ugasiti.

Donoenje Grafika
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice(); Ovdje se crta pravokutnik koji
pomiemo.

odluke
while (odgovor != 'k')
{
Ovdje program ispituje koja
rectangle(x, 432, x+60, 438);
tipka je pritisnuta, a rezultat

Petlje
sprema u varijablu odgovor.
odgovor = getch();

if (odgovor == 75)
{ Ako pritisnemo lijevu strelicu, varija-
Polja
x = x - 5; bla x, koja odreuje udaljenost pra-
} vokutnika od lijeve strane, umanjit
e se za 5, pa e se pravokutnik
if (odgovor == 77) drugi put crtati pomaknut 5 toaka u
Obrada
teksta

{ lijevu stranu.
x = x + 5;
}
Ako pritisnemo desnu strelicu, varija-
Objekti

cleardevice();
bla x e se uveati za 5, pa e se
} pravokutnik drugi put crtati pomaknut
5 toaka u desnu stranu.
Saimanje Veliki pro-

closegraph();
grami

return 0;
} Naredbom za brisanje ekrana bri-
emo pravokutnik na staroj poziciji
da bismo ga nacrtali na novoj.
koda

(Pokuajmo ovu naredbu izbaciti.)


Kraj programa.

PRO - MIL 157


Petlje

Dodamo li u prethodni program ispitivanje je li pritisnuta


strelica prema gore ili strelica prema dolje, na pravo-
kutnik moi e se pomicati u sva etiri smjera.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
Varijablom x odreujemo udaljenost
using namespace std; gornjeg lijevog ugla pravokutnika od
lijevog ruba grafikog prozora, a
int main() varijablom y od gornjeg ruba grafi-
{ kog prozora. Brojevi 290 i 220 odre-
int gdriver = 9; uju poetnu poziciju pravokutnika.
int gmode = 2; (Pokuajmo mijenjati te brojeve.)
int x = 290;
int y = 220;
char odgovor = 'd';
initgraph(&gdriver, &gmode, ""); I u ovom sluaju program e se izvo-
setbkcolor (WHITE); diti dok korisnik ne pritisne tipku k,
setcolor (BLACK); odnosno dok je pritisnuta tipaka razli-
cleardevice(); ita od k.
while (odgovor != 'k')
{
rectangle(x, y, x+60, y+5);
odgovor = getch(); Ovdje smo dodali dio programa u kojem ispi-
if (odgovor == 75) tujemo je li pritisnuta strelica prema gore ili
{ strelica prema dolje.
x = x - 5;
} Zato ovdje koristimo broj 72, a ne strelicu
if (odgovor == 77) prema gore?
{
x = x + 5; Zato to strelicu prema gore ne moemo uni-
} jeti u program preko tipkovnice, a broj 72 je
if (odgovor == 72) ifra za strelicu prema gore. (75 za lijevo, 77
{ za desno i 80 za dolje.)
y = y - 5;
}
if (odgovor == 80)
{
y = y + 5;
}
cleardevice();
}
closegraph();
return 0;

158 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Da bismo dobili primitivni program za crtanje, dovoljno je da u prethod-
nom programu maknemo naredbu za brisanje zaslona raunala.

Uvod
#include <cstdlib>
#include <iostream>
Varijablama x i y odreena je
#include <winbgim.h>
pozicija gornjeg lijevog ugla pra-

program
Na prvi
vokutnika. Varijabla x odreuje
using namespace std;
udaljenost od lijevog ruba, a
varijabla y od gornjeg ruba.
int main()
{

Varijable
Udaljenost donjeg desnog ugla
int gdriver = 9;
int gmode = 2; pravokutnika od lijevog ruba
int x = 290;
odreena je sa x + 60, a udalje-
int y = 220;
char odgovor = 'd'; nost donjeg desnog ugla od gor-

Donoenje Grafika
initgraph(&gdriver, &gmode, "");
njeg ruba odreena je sa y+5.
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice(); irina naeg pravokutnika je 60,

odluke
while (odgovor != 'k') a visina 5. (Pokuajmo promije-
{ niti te brojeve.)
rectangle(x, y, x+60, y+5);
odgovor = getch();

Petlje
if (odgovor == 75)
{
x = x - 5;
}
if (odgovor == 77)
Polja
{
x = x + 5;
}
if (odgovor == 72)
Obrada
teksta

{
y = y - 5;
}
if (odgovor == 80)
Objekti

{
y = y + 5;
} Ako ovu naredbu obriemo, pra-
cleardevice(); vokutnik e se crtati na novoj po-
Saimanje Veliki pro-

} ziciji, ali e ostati i na staroj pa e


grami

closegraph(); rezultat kretanja pravokutnika biti


return 0; trag na zaslonu raunala.

} Obriimo ovu naredbu i pokreni-


koda

mo program.

PRO - MIL 159


Petlje

elimo li napraviti program za crtanje, pogodnije je za


crtanje koristiti toku umjesto pravokutnika.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

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

160 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Za crtanje moemo koristiti i krug.

Uvod
#include <cstdlib>

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

using namespace std;

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

Donoenje Grafika
int x = 290;
int y = 220;
char odgovor = 'd'; Ovom naredbom ispisujemo krug.
initgraph(&gdriver, &gmode, ""); Varijabla x odreuje udaljenost
sredita kruga od lijevog ruba,

odluke
setbkcolor (WHITE);
setcolor (BLACK); varijabla y udaljenost sredita od
cleardevice(); gornjeg ruba, a 20 je polumjer
while (odgovor != 'k') kruga.
{

Petlje
circle(x, y, 20);
odgovor = getch();
if (odgovor == 75)
{

Polja
x = x - 5; Broj 5 odreuje pomak novog sre-
} dita u odnosu na staro.
if (odgovor == 77)
{ Pokuajmo mijenjati taj broj.
Obrada
teksta

x = x + 5;
}
if (odgovor == 72)
{
Objekti

y = y - 5;
} Imajmo stalno na umu da emo
if (odgovor == 80) razumijevanje programa i vjeti-
{ nu pisanja vlastitih programa
stei jedino tako da svaki primjer
Saimanje Veliki pro-

y = y + 5;
grami

} programa koji je dat u ovoj knjizi


} mijenjamo na sve naine koji
closegraph(); nam padnu na pamet i onda pro-
return 0; matramo kakve posljedice izazi-
} va odreena promjena.
koda

PRO - MIL 161


Petlje

Objekte na zaslonu raunala osim tipkovnicom mo-


emo pomicati i miem.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
Naredbom kbhit ispituje se je li bilo
using namespace std; koja tipka na tipkovnici pritisnuta.
int main() Naredbom while (!kbhit) nareujemo
{ raunalu da petlju izvodi tako dugo
int gdriver = 9; dok ni jedna tipka nije pritisnuta.
int gmode = 2;
initgraph(&gdriver, &gmode, ""); Pritisnemo li bilo koju tipku na tipkov-
setbkcolor (WHITE); nici, zaustavlja se izvoenje petlje i
setcolor (BLACK); prekida se program.
cleardevice();
while (!kbhit())
{
rectangle(mousex(),mousey(),mousex()+80,mousey()+80 );
}
closegraph();
return 0;
}

Naredbom mousex() oitava se Naredbom mousey() oitava se


udaljenost pokazivaa mia od udaljenost pokazivaa mia od
lijevog ruba grafikog prozora. gornjeg ruba grafikog prozora.

Gornji lijevi ugao pravokutnika


odreen je poloajem pokazi-
vaa mia, a donji desni tako
da se udaljenost pokazivaa
mia od desnog ruba uveava
za 80, a udaljenost pokaziva-
a mia od gornjeg ruba uve-
ava isto tako za 80.

Dimenzije naeg pravokutnika


su 80 puta 80.

162 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Miem moemo pokretati bilo koji grafiki ob-
jekt, npr. krug.

Uvod
#include <cstdlib>
#include <iostream> Poetak programa.
#include <winbgim.h>

program
Na prvi
using namespace std; Varijable kojima odreujemo tip
grafikog prozora.
int main()
{

Varijable
Otvaranje grafikog prozora.
int gdriver = 9;
int gmode = 2;

Donoenje Grafika
initgraph(&gdriver, &gmode, ""); Unutar while petlje stalno se
setbkcolor (WHITE); oitava pozicija pokazivaa
setcolor (BLACK); mia i crta se krug ije sredite
cleardevice(); odreuje poloaj pokazivaa
mia, a polumjer je 100.

odluke
while (!kbhit())
{ Petlja se izvodi tako dugo dok
circle(mousex(),mousey(),100); niti jedna tipka na tipkovnici
} nije pritisnuta.

Petlje
closegraph();
return 0; Kraj programa.
}

Polja
Obrada
teksta

Jasno je da osim postojeih


dimenzija kruga i pravokut-
nika moemo koristi pravo-
kutnike i krugove drugih
Objekti

dimenzija.

Isto tako moemo koristiti i


Saimanje Veliki pro-

druge grafike elemente,


grami

npr. toke ili crte.

Pokuajmo sami smisliti


varijacije ovakvih programa.
koda

PRO - MIL 163


Petlje

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

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
Ako u prethodne programe doda- cleardevice();
mo naredbu za brisanje sadraja while (!kbhit())
grafikog prozora, dobit emo pro- {
gram koji nam omoguuje pomica- cleardevice();
nje objekta miem. circle(mousex(),mousey(),100);
}
closegraph();
return 0;
}
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
while (!kbhit())
{
cleardevice();
line (mousex()+40, mousey(), mousex()-40, mousey());
line (mousex(), mousey()-40, mousex(), mousey()+40);
}
closegraph();
return 0; Na slian nain moemo miem
} pomicati neto drugo, npr. dvije
crte koje bi u igri mogle biti nian.

164 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Nedostatak prethodnih programa bio je to se
ekran brie i objekt ponovo crta, bez obzira je li

Uvod
to potrebno ili nije, odnosno bez obzira je li
dolo do pomaka mia ili nije.

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

Neprestano brisanje i crtanje moe na sporijim

Varijable
raunalima izazvati treperenje slike, to je veo-
ma neugodno.

Ovaj program ispituje je li dolo do pomaka


mia ili nije. Ekran se brie i objekt crta na no-

Donoenje Grafika
voj poziciji jedino ako je dolo do pomicanja
mia.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

odluke
using namespace std; Ovom naredbom ispituje-
mo je li dolo do pomaka
int main() mia.
{

Petlje
int gdriver = 9; Sadraj unutar vitiastih
int gmode = 2; zagrada izvrit e se jedi-
initgraph(&gdriver, &gmode, ""); no ako je dolo do poma-
setbkcolor (WHITE); ka mia.

Polja
setcolor (BLACK);
cleardevice(); U tom sluaju obrisat e
while (!kbhit()) se sadraj grafikog pro-
{ zora i objekt e se nacrta-
Obrada
teksta

if (ismouseclick(WM_MOUSEMOVE)) ti na novoj poziciji.

{
cleardevice();
Objekti

circle(mousex(),mousey(),100); Da bi bilo mogue novo


} oitavanje mia, rezultat
starog oitavanja ovom
clearmouseclick(WM_MOUSEMOVE); se naredbom mora obri-
Saimanje Veliki pro-

sati.
grami

}
closegraph(); Kad ovu naredbu ne bis-
return 0; mo upotrijebili, u progra-
} mu bi bilo mogue samo
koda

jedno oitavanje mia.

PRO - MIL 165


Petlje

Osim to moemo oitati je li dolo do pomaka mia, moemo isto tako oitati je
li pritisnuta neka tipka na miu. Ovaj program e nam omoguiti da pritiskom na
lijevu tipku mia nacrtamo objekt u grafikom prozoru.

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

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, ""); Ovom naredbom ispituje-
setbkcolor (WHITE); mo je li pritisnuta lijeva
setcolor (BLACK); tipka mia.
cleardevice();
while (!kbhit()) Ako jest izvodi se sadraj
{ unutar vitiastih zagrada.
if (ismouseclick(WM_LBUTTONDOWN))
{
cleardevice();
circle(mousex(),mousey(),100);
} Ovom naredbom briemo
clearmouseclick(WM_LBUTTONDOWN); rezultat oitavanja lijeve
} tipke na miu.
closegraph();
return 0; Novo oitavanje je mogu-
} e jedino nakon brisanja
starog oitavanja.

Uoimo, ako smo oitavali ismouseclick(WM_MOUSEMOVE), briemo


clearmouseclick(WM_MOUSEMOVE),

a ako smo oitavali ismouseclick(WM_LBUTTONDOWN), briemo


clearmouseclick(WM_LBUTTONDOWN).

166 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
OITAVANJE MIA

Uvod
ismouseclick(WM_MOUSEMOVE) Oitavanje kretanja mia.

program
Na prvi
clearmouseclick(WM_MOUSEMOVE) Brisanje oitavanja kretanja mia.

ismouseclick(WM_LBUTTONDOWN) Oitavanje lijevog klika

Varijable
clearmouseclick(WM_LBUTTONDOWN); Brisanje oitavanja lijevog klika.

Donoenje Grafika
ismouseclick(WM_LBUTTONDBLCLK) Oitavanje duplog lijevog klika.

Brisanje oitavanja duplog lijevog

odluke
clearmouseclick(WM_LBUTTONDBLCLK)
klika.

ismouseclick(WM_RBUTTONDOWN) Oitavanje desnog klika.

Petlje
clearmouseclick(WM_RBUTTONDOWN) Brisanje oitavanja desnog klika.

ismouseclick(WM_RBUTTONDBLCLK) Oitavanje duplog desnog klika. Polja

Brisanje oitavanja duplog des-


Obrada
teksta

clearmouseclick(WM_RBUTTONDBLCLK)
nog klika.

ismouseclick(WM_MBUTTONDOWN) Oitavanje srednjeg klika.


Objekti

Brisanje oitavanja srednjeg kli-


clearmouseclick(WM_MBUTTONDOWN)
ka.
Saimanje Veliki pro-
grami

ismouseclick(WM_MBUTTONDBLCLK) Oitavanje duplog srednjeg klika.

Brisanje oitavanja duplog sred-


clearmouseclick(WM_MBUTTONDBLCLK)
koda

njeg klika.

PRO - MIL 167


Petlje

Do while petlja

Pokrenemo li ova dva


programa, vidjet emo #include <cstdlib>
da je rezultat njihovog #include <iostream>
rada potpuno jednak, #include <winbgim.h>
iako prvi koristi while
naredbu, a drugi do using namespace std;
while naredbu.
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
while (!kbhit())
{
if (ismouseclick(WM_LBUTTONDOWN))
#include <cstdlib> {
#include <iostream> circle(mousex(),mousey(),100);
#include <winbgim.h> }
clearmouseclick(WM_LBUTTONDOWN);
using namespace std; }
closegraph();
int main() return 0;
{ }
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
do
{
if (ismouseclick(WM_LBUTTONDOWN))
{
circle(mousex(),mousey(),100);
}
clearmouseclick(WM_LBUTTONDOWN);
}
while (!kbhit());
closegraph();
return 0;
}

168 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Usporedimo strukture while petlje i do while petlje.

a = 1;

Uvod
Odreivanje vrijednosti varijable koju e koristiti
while naredba.
while (a == 1)

program
Na prvi
Ispitivanje je li uvjet zadovoljen, u naem slua-
{ ju, je li sadraj varijable a jednak broju 1.

Varijable
cin >> a;
Ovaj dio unutar vitiastih zagrada ponavlja se
dok je uvjet zadovoljen, u naem sluaju dok je
} sadraj varijable a jednak broju 1.

Donoenje Grafika
Petlja do while zapoinje odreivanjem vrijed-
nosti varijable koju e koristiti while naredba.

odluke
a = 1;
Ovaj tip petlje zapoinje naredbom do nakon
koje slijede vitiaste zagrade unutar kojih se
do

Petlje
nalazi dio programa koji se ponavlja dok je uv-
jet zadovoljen
{

Polja
Dio koji se ponavlja i u kojem mora postojati
cin >> a; mogunost promjene vrijednosti varijable a. Obrada

}
teksta

Ovdje se ispituje je li zadovoljen uvjet po istoj


logici po kojoj se ispituje i u while naredbi.
while (a == 1);
Uoimo da se ovdje na kraju while naredbe
Objekti

obavezno pie ; oznaka.


Saimanje Veliki pro-

U emu je razlika izmeu ovih dviju petlji, osim oigledne razlike u nainu
grami

pisanja? Razlika je u tome to se sadraj while petlje nee izvesti niti jednom
ako uvjet nije zadovoljen jer se ispitivanje nalazi prije djela koji se ponavlja.
Sadraj do while petlje e se bez obzira na uvjet izvesti barem jednom jer se
najprije izvodi dio koji se ponavlja, a tek nakon toga ispituje se je li uvjet za-
koda

dovoljen.

PRO - MIL 169


Petlje

Generator sluajnih brojeva

Ponekad, osobito u igricama, htjeli bismo da se neki dijelovi u programu pri


svakom pokretanju programa odvijaju drugaije. Ako piemo igricu u kojoj igra
gaa letee tanjure, htjeli bismo da se pri svakom pokretanju igre oni pojave
na drugom mjestu i da se svaki put kreu drugaijim putanjama. Igrica e nam
brzo dosaditi ako se objekt koji trebamo gaati pri svakom pokretanju igrice
pojavljuje na istom mjestu i kree istom putanjom.

Takve varijacije u odvijanju programa postiemo generatorom sluajnih broje-


va. Pogledajmo kako emo formirati program za generiranje sluajnih brojeva.

#include <cstdlib>
#include <iostream>

using namespace std;

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

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

Jasno, od takvih sluajnih


brojeva ne moemo imati
puno koristi.

Pokuajmo napisati prog-


ram koji nee svaki put ge-
nerirati isti niz brojeva.

170 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Problem koji se sastoji u tome
da naredba rand(); uvijek gene-
rira isti niz brojeva rijeit emo

Uvod
naredbom srand(1);.

program
Na prvi
#include <cstdlib>
#include <iostream>

Varijable
using namespace std;

int main()
{
Stavimo li naredbu srand(1) prije na-
int x;

Donoenje Grafika
redbe rand() postii emo da naredba
srand(1);
rand() generira neki niz brojeva.
for (x = 0; x < 11; x = x + 1)
{
Ako umjesto srand(1); stavimo srand
cout << rand() << endl;
(2); dobit emo neki drugi niz brojeva.

odluke
}
Pokuajmo i vidjet emo da emo za
system("PAUSE");
srand(3); dobit neki trei niz brojeva, a
return 0;
za srand(4); neki etvrti.
}

Petlje
Problem je u tome to emo za isti broj
unutar zagrade dobivati uvijek isti niz.
Dakle srand(6) davat e pri svakom
pokretanju isti niz brojeva, ali drugaiji

Polja
nego npr. srand(5). Oito bi bilo dobro
kad bismo na neki nain broj unutar
#include <cstdlib> zagrade mogli mijenjati.
#include <iostream>
Obrada
teksta

using namespace std;

int main()
{
Objekti

int x;
srand(2);
for (x = 0; x < 11; x = x + 1)
Saimanje Veliki pro-

{
grami

cout << rand() << endl;


}
system("PAUSE");
return 0;
}
koda

PRO - MIL 171


Petlje

Da bi naredba time(NULL) funkcionirala,


#include <cstdlib> moramo naredbom #include <ctime> uk-
#include <iostream> ljuiti odgovarajuu biblioteku.
#include <ctime>

using namespace std;


Razliite brojeve dobit emo naredbom
int main() time(NULL). Iako se ini loginim da na-
{ redba time(NULL) pokazuje trenutno vrije-
cout << time(NULL) << endl; me, ona to ne ini, nego prikazuje trenut-
system("PAUSE"); no sistemsko vrijeme. To je vrijeme koje
return 0; je proteklo od 1. sijenja 1970. godine.
}

Budui da program ne moemo


vie puta pokrenuti u istom tre-
nutku, pri svakom pokretanju
ove naredbe dobit emo drugi
broj.

172 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
#include <cstdlib> Stavimo li u naredbu srand(1); umjesto
#include <iostream> konkretnog broja jedan naredbu time
#include <ctime> (NULL) koja e u svakom trenutku gene-

Uvod
rirati drugaiji broj, naredba rand() pri
using namespace std; svakom e pokretanju generirati drugaiji
brojani niz. Sada smo ve blizu onome
to smo eljeli, a to je generator sluajnih

program
Na prvi
int main()
{ brojeva.
int x;
srand(time(NULL));
for (x = 0; x < 11; x = x + 1)

Varijable
{
cout << rand() << endl;
}
system("PAUSE");

Donoenje Grafika
return 0;
}

odluke
Petlje
U ovom rjeenju problemati-
no je to to su esto poetni
brojevi veoma slini. Prvi put
smo dobili 6089, drugi put Polja
6132, a trei put 6171.
Obrada
teksta
Objekti
Saimanje Veliki pro-
grami

Taj problem moemo najjed-


nostavnije eliminirati tako da
prvi broj koji generira genera-
tor sluajnih brojeva ne koris-
koda

timo u programu.

PRO - MIL 173


Petlje

#include <cstdlib> Problem koji bi mogla stvarati pojava da


#include <iostream> na generator sluajnih brojeva generira
#include <ctime> niz brojeva u kojem prvi broj u nizu ima
slinu vrijednost prilikom vie pokretanja
using namespace std; rijeit emo tako da prvi put pozovemo
naredbu rand(); i tako generirani broj ne-
int main() emo ni za to koristiti.
{
int x;
srand(time(NULL)); Koristit emo sluajne brojeve koji e se
rand(); generirati prilikom sljedeih pozivanja
for (x = 0; x < 11; x = x + 1) naredbe rand();.
{
cout << rand() << endl; Na taj nain postii emo da e pri nizu
} uzastopnih pokretanja i prvi broj u sva-
system("PAUSE"); kom od nizova bit razliit.
return 0;
}

Vidimo da smo uspjeli dobiti vie


doista razliitih nizova.

174 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Sad kad smo konano dobili niz sluajnih brojeva, postavlja se pitanje kako
postii da ti sluajni brojevi budu unutar unaprijed odreenih granica. Ako
elim da se objekt pojavi na sluajnoj poziciji unutar prozora irokog 640 to-

Uvod
aka, bilo bi zgodno da generator sluajnih brojeva generira sluajni broj iz-
meu 0 i 640.

program
Na prvi
#include <cstdlib> Najprije emo program preurediti
#include <iostream> tako da generira brojeve izmeu 0 i
#include <ctime> 1. To emo postii tako da generi-

Varijable
rani broj podijelimo maksimalnom
using namespace std; moguom vrijednou sluajnog
broja. U tom sluaju, ako je generi-
int main() rani sluajni broj nula, rezultat e
biti nula, a ako je jednak maksimal-

Donoenje Grafika
{
int x; noj moguoj vrijednosti bit e 1. Za
float sb; sve ostale vrijednosti dobit emo
srand(time(NULL)); broj izmeu nula i jedan.
rand();

odluke
for (x = 0; x < 11; x = x + 1)
{ Maksimalnu moguu vrijednost gene-
sb = rand() / RAND_MAX; riranog sluajnog broja dobit emo
cout << sb << endl; naredbom RAND_MAX.

Petlje
}
system("PAUSE");
return 0;
} Pokrenemo li takav program kao

Polja
rezultat dobit emo samo nule, i
moda ponekad broj 1.

Zato?
Obrada
teksta

Zato to je rezultat rada naredbe


rand() i naredbe RAND_MAX int
tipa, tj. broj bez decimalnog zare-
za. Rezultat, dodue, spremamo u
Objekti

varijablu sb koja je float tipa, ali


raunalo radi tako da izrauna re-
zultat u int formatu, a tek onda broj
Saimanje Veliki pro-

pretvara u float.
grami

Prvo podijeli dva int broja, makne


sadraj desno od zareza, jer int tip
nema zarez, i tek onda rezultat
sprema u varijablu float tipa.
koda

PRO - MIL 175


Petlje

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

using namespace std;

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

static_cast <float> (rand())

Nakon primjene te naredbe program e


generirati sluajne brojeve izmeu broja
Ovom naredbom nareujemo
0 i broja 1.
raunalu da jedan tip podatka
npr. int pretvori u neki drugi tip,
npr. float.

static_cast <float> ( rand() ) Unutar navodnika nave-


demo varijablu ili izraz
iji tip elimo mijenjati.
Mi emo mijenjati tip
Ovdje navedemo tip u koji neki drugi tip elimo rezultatu izvoenja rand
pretvoriti. Mi elimo int tip pretvoriti u float, pa () naredbe.
smo zato ovdje napisali float.

176 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
#include <cstdlib>
#include <iostream>

Uvod
#include <ctime>

using namespace std;

program
Na prvi
int main()
{
int x;
float sb;

Varijable
srand(time(NULL));
rand();
for (x = 0; x < 11; x = x + 1)
{

Donoenje Grafika
sb = (static_cast <float> (rand()) / RAND_MAX) * 640;
cout << sb << endl;
}
system("PAUSE");
Kako emo postii da program ne generi-
return 0;

odluke
ra brojeve izmeu 0 i 1, nego izmeu 0 i
}
640? Tako da sluajni broj koji raunalo
generira izmeu 0 i 1 pomnoimo sa 640.

Ako je sluajni broj imao minimalnu mogu-

Petlje
u vrijednost 0, rezultat e biti nula.
Pogledajmo dio programa
kojim generiramo sluajni Ako je sluajni broj imao maksimalnu mo-
broj izmeu 0 i 640. guu vrijednost 1, rezultat e biti 640.

Za sve ostale vrijednosti rezultat e biti Polja


izmeu 0 i 640, a to je ono to smo htjeli
postii.
Ovaj dio pretvara int sluaj-
Obrada
teksta

ni broj u float tip.


Objekti

sb = ( static_cast <float> ( rand() ) / RAND_MAX ) * 640; Mnoimo li


broj izmeu
0 i 1 brojem
640, dobit
Saimanje Veliki pro-

Generira sluajne Maksimalna vrijednost emo broje-


grami

brojeve. koju rand() generira. ve izmeu 0


i 640.

Dijeljenjem sluajnog broja maksimalnom moguom vrije-


koda

dnou dobivamo broj izmeu broja 0 i broja 1.

PRO - MIL 177


Petlje

Ako elimo da raunalo generira broj iz-


#include <cstdlib> meu 0 i 640 bez decimalnog zareza, slu-
#include <iostream> ajni broj emo spremiti u int varijablu.
#include <ctime>
Budui da je generirani sluajni broj float
using namespace std; tipa, raunalo e nas pri prvom pokretanju
programa upozoriti da je dolo do pretva-
int main() ranja float tipa u int tip.
{
int x; Kad float tip broja spremimo u int varijablu,
int sb; raunalo e ga automatski pretvoriti u int
srand(time(NULL)); tip tako da e mu maknuti sve brojeve de-
rand(); sno od decimalnog zareza.
for (x = 0; x < 11; x = x + 1)
{
sb = (static_cast <float> (rand()) / RAND_MAX) * 640;
cout << sb << endl;
}
system("PAUSE");
return 0;
}

Raunalo nas upozorava


da je dolo do pretvaranja
float tipa u int tip.

Budui da je to upravo
ono to smo eljeli, ovo
upozorenje emo zane-
mariti.

178 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Koritenje sluajnih brojeva

Uvod
Ovaj program e generirati
krugove na sluajno odabra-
nim pozicijama.

program
Na prvi
Na taj nain u igrama moe-
mo generirati objekte na slu-
ajno odabranim mjestima.

Varijable
#include <cstdlib>
#include <iostream>

Donoenje Grafika
#include <winbgim.h>
#include <ctime>

using namespace std; Budui da poloaj kruga odreuju

odluke
dva broja, jedan koji odreuje uda-
int main() ljenost sredita od desnog ruba i
{ drugi koji odreuje udaljenost sre-
int x; dita od gornjeg ruba generirat
int sx; emo dva sluajna broja.

Petlje
int sy;
int gdriver = 9; Prvi emo spremiti u int varijablu
int gmode = 2; sx i bit e izmeu 0 i 640. Drugi
initgraph(&gdriver, &gmode, ""); emo spremiti u sy i bit e izmeu

Polja
setbkcolor (WHITE); 0 i 480.
setcolor (BLACK);
cleardevice(); (Dimenzije grafikog prozora su
srand(time(NULL)); 640x480).
Obrada
teksta

rand();
for (x = 1; x < 60; x = x + 1 )
{
sx = (static_cast <float> (rand()) / RAND_MAX) * 640;
Objekti

sy = (static_cast <float> (rand()) / RAND_MAX) * 480;


circle(sx,sy,20);
}
getch();
Saimanje Veliki pro-

closegraph();
grami

return 0;
} Poloaj kruga ovisit e o sluajno generiranim brojevima.

Ispis kruga nalazi se unutar petlje pa e se generirati


onoliko krugova koliko puta e se petlja izvesti.
koda

PRO - MIL 179


Petlje

Pogledajmo primjer sasvim jednostavne igrice. Raunalo e generirati sluajni


broj izmeu 0 i 100, a mi emo pokuati pogoditi koji je to broj. Ako ne pogodi-
mo, raunalo e nas obavijestiti je li zamislilo vei ili manji broj, pa emo poga-
ati ponovo, dok ne pogodimo. Na kraju nas raunalo obavjetava koliko poku-
aja nam je trebalo da pogodimo zamiljeni broj.

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

using namespace std;

int main()
{
int odgovor;
int slucajni_br;
int brojcanik = 0;
srand(time(NULL));
rand();
slucajni_br = (static_cast <float> (rand()) / RAND_MAX) * 100;
cout << "Zamislio sam broj od 0 do 100." << endl;
cout << "Pogodite koji je to broj" << endl;
do
{
cout << "Unestite odgovor." << endl;
cin >> odgovor;
brojcanik = brojcanik + 1;
if (slucajni_br > odgovor)
{
cout << "Zamislio sam veci broj." << endl;
}
if (slucajni_br < odgovor)
{
cout << "Zamislio sam manji broj." << endl;
}
}
while (slucajni_br != odgovor);
cout << "Pogodili ste " << brojcanik << ". put." << endl;
system("PAUSE");
return 0;
}

180 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
#include <cstdlib>
#include <iostream>

Uvod
Varijablu brojcanik na poetku emo posta-
#include <ctime> viti za nulu, a nakon svakog pogaanja uve-
at emo je za jedan i tako emo znati koliko
using namespace std; nam je pokuaja trebalo za pogaanje zami-

program
Na prvi
ljenog broja.
int main()
{
int odgovor;
int slucajni_br;

Varijable
Ovdje se generira sluaj-
int brojcanik = 0; ni broj izmeu 0 i 100.

srand(time(NULL));

Donoenje Grafika
rand();

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

cout << "Zamislio sam broj od 0 do 100." << endl;

odluke
cout << "Pogodite koji je to broj" << endl;

do Ovdje unosimo odgovor.


{

Petlje
cout << "Unestite odgovor." << endl;
cin >> odgovor; Pri svakom unosu odgovora
brojanik poveavamo za 1.
brojcanik = brojcanik + 1;

if (slucajni_br > odgovor)


Izvodi se ako je Polja
{
zamiljeni broj vei
cout << "Zamislio sam veci broj." << endl;
od unesenog.
Obrada

}
teksta

if (slucajni_br < odgovor)


{ Izvodi se ako je
cout << "Zamislio sam manji broj." << endl; zamiljeni broj ma-
Objekti

} nji od unesenog.
}
while (slucajni_br != odgovor);
Saimanje Veliki pro-
grami

cout << "Pogodili ste " << brojcanik << ". put." << endl;
Ispitivanje se
system("PAUSE");
ponavlja dok
return 0;
uneseni broj
}
nije jednak
koda

zamiljenom.

PRO - MIL 181


Polja

182 PRO - MIL


PRO - MIL
Polja

Saimanje Veliki pro- Objekti Obrada Polja Petlje Donoenje Grafika Varijable Na prvi Uvod Sadraj
koda grami teksta odluke program

183
C++ programiranje za apsolutne poetnike
Polja

Jednodimenzionalna polja

#include <cstdlib>
Zamislimo da kao pozadinu neke
#include <iostream>
jednostavne igrice elimo nacrtati
#include <winbgim.h>
neto to bi moglo asocirati na
nebodere.
using namespace std;
To moemo uiniti nizom lineto
int main()
naredbi i to rjeenje funkcionira, ali
{
i sami vidimo da nije ba osobito
int gdriver = 9;
elegantno.
int gmode = 2;
initgraph(&gdriver, &gmode, "");
Zamislimo koliko bi to rjeenje bilo
setbkcolor (WHITE);
nepraktino ako bismo htjeli nacr-
setcolor (BLACK);
tati crte s vie detalja, npr. prozo-
cleardevice();
rima.
moveto (0, 200);
lineto (10, 200);
lineto (10, 50);
lineto (100, 50);
lineto (100, 200);
lineto (120, 200);
lineto (120, 150);
lineto (300, 150);
lineto (300, 200);
lineto (350, 200);
lineto (350, 30);
lineto (400, 30);
lineto (400, 200);
lineto (450, 200);
lineto (450, 20);
lineto (550, 20);
lineto (550, 200);
lineto (560, 200);
lineto (560, 40);
lineto (600, 40);
lineto (600, 200);
lineto (620, 200);
lineto (620, 20);
lineto (635, 20);
lineto (635, 200);
lineto (640, 200);
getch();
closegraph();
return 0;
}

184 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
U ovom programu pojavljuju se Ovaj program radi isti posao kao i
uglate zagrade.
prethodni, ali je daleko elegantniji

Uvod
Dobit emo ih tako da drimo pri- od njega.
tisnutu AltGr tipku, a zatim klikne-
mo slovo f ili slovo g.

program
Na prvi
Pogledamo li paljivo program,
vidjet emo da su nam svi elemen-
ti poznati od prije, osim neobino

Varijable
#include <cstdlib> definirane varijable polje.
#include <iostream>
#include <winbgim.h>
Dok smo u dosadanje varijable

Donoenje Grafika
using namespace std; mogli spremiti jedno slovo ili broj,
int main() ini se da u ovu varijablu moemo
{ spremiti mnotvo brojeva.
int gdriver = 9;

odluke
int gmode = 2;
int x; Paljivi analitiar moda bi uoio
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE); da broj u uglatoj zagradi odgovara

Petlje
setcolor (BLACK); koliini brojeva u vitiastim zagra-
cleardevice();
dama.
int polje[54] =
{
0, 200, 10, 200, 10, 50, 100, 50, 100, 200, Polja
120, 200, 120, 150, 300, 150, 300, 200, 350, 200,
350, 30, 400, 30, 400, 200, 450, 200, 450, 20,
Obrada

550, 20, 550, 200, 550, 200, 560, 200, 560, 40,
teksta

600, 40, 600, 200, 620, 200, 620, 20, 635, 20,
635, 200, 640, 200
};
moveto (polje[0], polje[1]);
Objekti

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


{
lineto(polje[x], polje[x+1]);
}
Saimanje Veliki pro-
grami

getch();
closegraph();
return 0;
}
koda

PRO - MIL 185


Polja

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int polje[5] = {10, 20, 30, 40, 50}; Detaljno objanjenje 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 neobine varijable koje smo
cout << polje[4] << endl; uoili u prethodnom programu.
system("PAUSE");
return 0; Ovaj program pomoi e nam da
} lake shvatimo ovaj novi tip vari-
jable.

Naredbom int a = 12; u raunalu formi-


ramo prostor odnosno varijablu kojoj 12
int a = 12;
smo dali naziv a i u koju smo spremili
a
broj 12;

int polje[5] = {10, 20, 30, 40, 50}; Ovom naredbom kao i prethod-
nom formiramo varijablu, ali dok
smo u prethodnu varijablu mogli
spremiti samo jedan broj, ova
varijabla sadri 5 pretinaca koji se
razlikuju po brojevima i u svaki od
tih pretinaca moemo spremiti
jedan broj.

10 20 30 40 50

0 1 2 3 4

polje

186 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Novi tip varijable ima poseban naziv, naziva se polje. elije polja meusobno
razlikujemo po brojevima, a problem donekle komplicira injenica da prvo
polje nije polje 1 nego polje 0, pa onda polje sa 5 elemenata ne sadri polja

Uvod
od 1 do 5 nego od 0 do 4. U poetku e nas ta injenica esto zbunjivati.

program
Na prvi
int polje[5] = {10, 20, 30, 40, 50}; U vitiastim zagrada-
ma navest emo vri-
jednosti pojedinih

Varijable
elija.
Za razliku od obine varijable prilikom
formiranja polja u uglatim zagradama Vrijednosti emo me-
moramo navesti koliko elija sadri po- usobno odvojiti za-
lje. U naem sluaju polje koje smo

Donoenje Grafika
rezima.
nazvali polje sadri 5 elija.

Sadraj polja ispisuje se na sli-

odluke
cout << polje[1] << endl; an nain kao i sadraj varijable.

Razlika je u tome da je pri koritenju varijable dovoljno navesti naziv, a ovdje

Petlje
osim naziva u uglatim zagradama moramo navesti broj elije koju elimo ispi-
sati. U gornjem primjeru imajmo na umu da emo ispisati sadraj druge elije,
a ne sadraj prve. Prvu bismo ispisali naredbom cout << polje[0] << endl;.

Polja
Obrada
teksta

Vidimo da

#include <cstdlib> cout << polje[1] << endl;


#include <iostream>
ispisuje sadraj druge elije.
Objekti

using namespace std; Pokuajmo na slian nain ispi-


sati sadraj neke druge npr. sa:
int main()
Saimanje Veliki pro-

{ cout << polje[0] << endl;


grami

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


cout << polje[1] << endl; sadraj prve elije. (U uglatoj
system("PAUSE"); zagradi nalazi se broj nula, a ne
return 0; veliko slovo o.)
koda

PRO - MIL 187


Polja

Pogledajmo bitne dijelove ovog


#include <cstdlib> programa.
#include <iostream>

using namespace std;

int main() Ovdje formiramo polje koje se sa-


{ stoji od 5 elija. U prvu eliju spre-
mamo broj 10, u drugu 20, u treu
int polje[5] = {10, 20, 30, 40, 50}; 30, u etvrtu 40 i u petu 50.
cout << polje[0] << endl;
cout << polje[1] << endl;
cout << polje[2] << endl;
cout << polje[3] << endl;
cout << polje[4] << endl;
Sadraj polja ispisujemo tako da
system("PAUSE"); uz naziv polja u uglatim zagrada-
return 0; ma navodimo i broj elije koji eli-
} mo ispisati.

#include <cstdlib> Sadraj polja ne mora se ispisivati


#include <iostream> po redu, nego se moe ispisivati
bilo kojim redoslijedom.
using namespace std;

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

188 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Polja mogu biti float tipa.

(Uoimo da zarezom odvaja-

Uvod
mo brojeve, a toka ima fun-
kciju decimalnog zareza.)

program
Na prvi
#include <cstdlib>

Varijable
#include <iostream>

using namespace std;

Donoenje Grafika
int main()
{
float polje[5] = {10.12, 20.14, 30.16, 40.18, 50.19};
cout << polje[0] << endl;
cout << polje[1] << endl;

odluke
cout << polje[2] << endl;
cout << polje[3] << endl;
cout << polje[4] << endl;
system("PAUSE");

Petlje
return 0;
}

Polja
#include <cstdlib>
#include <iostream>
Obrada
teksta

using namespace std; Polja mogu biti i char tipa.

int main() Pokuajmo iz ispisa izbaciti endl


{
Objekti

naredbe:
char polje[5] = {'P', 'O', 'L', 'J', 'A'};
cout << polje[0] << endl; cout << polje[0] << endl;
cout << polje[1] << endl;
Saimanje Veliki pro-

cout << polje[2] << endl; napiimo u obliku


grami

cout << polje[3] << endl;


cout << polje[4] << endl; cout << polje[0];
system("PAUSE");
return 0; Samo cout << polje[4] << endl;
}
koda

nemojmo mijenjati.

PRO - MIL 189


Polja

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int a[3] = {2, 3, 0};
a[2] = a[0] + a[1];
cout << a[2] << endl;
system("PAUSE");
return 0;
}

Polja moemo koristiti na isti nain kao i


varijable, npr. za izraune.

#include <cstdlib>
Kao to je sluaj i kod varijabli, sadraj po-
#include <iostream>
lja ne moramo definirati prilikom formiranja
using namespace std;
polja.
U ovom sluaju sadraj prve i druge elije int main()
{
polja unosimo cin naredbom, a u treu 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;
}

190 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Sadraj polja moemo ispi-
sati na ovaj nain. Takav
nain funkcionira, ali je nee-

Uvod
legantan. Osobito je neprikla-
dan ako bismo htjeli ispisati
vee polje.

program
Na prvi
#include <cstdlib>
#include <iostream>

Varijable
using namespace std;

int main()
{

Donoenje Grafika
int polje[5] = {10, 20, 30, 40, 50};
cout << polje[0] << endl;
cout << polje[1] << endl;
cout << polje[2] << endl; Ovaj nain ispisa sadraja

odluke
cout << polje[3] << endl; polja daleko je elegantniji.
cout << polje[4] << endl;
system("PAUSE");
return 0; Formirali smo petlju koja e

Petlje
}
se vrtjeti onoliko puta koliko
elija petlje elimo ispisati.

Polja
Varijabla petlje mijenja se od
#include <cstdlib> poetnog broja elije koju eli-
#include <iostream>
mo ispisati, u naem sluaju
Obrada
teksta

using namespace std; od 0, do broja krajnje elije

int main() koju elimo ispisati, u naem


{
Objekti

sluaju to je 4.
int polje[5] = {10, 20, 30, 40, 50};
int x;
for (x = 0; x < 5; x = x + 1) Pri ispisu umjesto polje[1] ko-
Saimanje Veliki pro-

{
ristimo polje[x] to znai da se
grami

cout << polje[x] << endl;


} ispisuje ono polje iji broj je
system("PAUSE");
return 0; jednak trenutnoj vrijednosti
} varijable x.
koda

PRO - MIL 191


Polja

Moemo ispisati dio elija


polja, npr. prvu, drugu i tre-
u.
To emo postii tako da vari-
jablu petlje x mijenjamo od
jedan do tri po jedan.

#include <cstdlib>
#include <iostream>

using namespace std;

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

#include <cstdlib>
#include <iostream>

using namespace std;

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

192 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
#include <cstdlib> Na slian nain pomou petlje mo-
#include <iostream> emo uporabom tipkovnice unijeti
brojeve u pojedine elije.

Uvod
using namespace std;

int main()

program
Na prvi
{ Ovu petlju koristimo za unos
int polje[5]; brojeva u polje.
int x;
cout << "Unos polja." << endl; Opet umjesto cin >> polje [0]

Varijable
imamo cin >> polje[x], a varijab-
for (x = 0; x < 5; x = x + 1) lu x petlja mijenja od nula do
{ etiri i tako e se unijeti sadraj
cin >> polje[x]; cijelog polja.
}

Donoenje Grafika
Kao i do sada nakon svakog
cout << "Ispis polja." << endl; unosa broja pritisnemo Enter
tipku.
for (x = 0; x < 5; x = x + 1)

odluke
{
cout << polje[x] << endl;
} Koristei isti trik ovdje ispisujemo
sadraj polja.
system("PAUSE");

Petlje
return 0; Umjesto cout << polje[0] stavili
} smo cout << polje[x], a x for pet-
lja mijenja od nula do etiri i tako

Polja
e se ispisati sadraj cijelog po-
lja.
Obrada
teksta
Objekti
Saimanje Veliki pro-

Kao to je to vrijedilo za sve elemente programa koje


grami

smo vidjeli do sada, i za polja vrijedi da emo ih najbolje


shvatiti i usvojiti ako napravimo to vei broj varijacija
primjera koje smo vidjeli do sada.
koda

Pokuajmo sami smisliti to vie slinih primjera.

PRO - MIL 193


Polja

Pogledajmo program koji smo vidjeli na poetku ovog poglavlja.

Ovdje se formira polje u kojem se nalazi poloaj


#include <cstdlib> toaka ijim emo spajanjem dobiti crte.
#include <iostream>
#include <winbgim.h> Na prvi pogled moe nam se uiniti da smo to
ovdje uinili drugaije nego do sada. Paljivom
using namespace std; analizom vidjet emo da nismo.

int main() Najprije imamo int polje[54] =, a zatim u vitias-


{ tim zagradama vrijednosti pojedinih elija.
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();

int polje[54] =
{
0, 200, 10, 200, 10, 50, 100, 50, 100, 200,
120, 200, 120, 150, 300, 150, 300, 200, 350, 200,
350, 30, 400, 30, 400, 200, 450, 200, 450, 20, Ovom naredbom
550, 20, 550, 200, 550, 200, 560, 200, 560, 40, odreuje se po-
600, 40, 600, 200, 620, 200, 620, 20, 635, 20, etak niza crta.
635, 200, 640, 200
};

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

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

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

getch();
closegraph();
return 0;
} Ovom petljom crta se
ostatak crtea.

194 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Pogledajmo podrobnije neke detalje programa.

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

program
Na prvi
Ovu naredbu int polje[5] = Ovaj oblik pogodniji je za
{ koritenje kad u veliko po-
moemo napi-

Varijable
10, 20, 30, 40, 50 lje elimo unijeti veliku koli-
sati i ovako. }; inu brojeva.

Donoenje Grafika
Ova naredba odreuje poetak niza crta.
Udaljenost od lijevog ruba odreena je
moveto (polje[0], polje[1]); sadrajem elije polje[0], tj. prve elije, a

odluke
udaljenost od gornjeg ruba sa polje[1], tj.
sadrajem druge elije.

Petlje
Poetna vrijednost
varijable x je 2.
Petlja e se izvoditi dok je x manji od 54. Budui
da se x uveava za 2 vrijednost varijable x e rasti
od 2 do 52. Polja
Obrada
teksta

for (x = 2; x < 54; x = x + 2 ) Varijabla x uveava se za 2. To nam


{ odgovara zato to je kraj svake crte
Objekti

lineto(polje[x], polje[x+1]); odreen s dva broja, pa kad elimo


} oitati poziciju novog kraja crte, mo-
ramo se u polju pomaknuti za dva
lana polja unaprijed.
Saimanje Veliki pro-
grami

Udaljenost kraja
crte od lijevog ruba Udaljenost kraja crte od gornjeg
koda

grafikog prozora. ruba grafikog prozora.

PRO - MIL 195


Polja

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int polje[5] = {10, 20, 30, 40, 50};
cout << polje[0] << endl;
cout << polje[1] << endl;
cout << polje[2] << endl;
cout << polje[3] << endl;
cout << polje[4] << endl;
system("PAUSE");
return 0;
} Mogli bismo postaviti pitanje trebaju
li nam uope polja, budui da bismo
ovaj program mogli i ovako realizira-
ti, obinim varijablama.

Vidimo da ovakav pro-


#include <cstdlib>
gram moemo realizi- #include <iostream>
rati obinim varijabla-
using namespace std;
#include <cstdlib> ma, ali ovakav, koji
#include <iostream> int main()
koristi for naredbu, ne
{
using namespace std; moemo realizirati sa- int polje1 = 10;
mo varijablama. int polje2 = 20;
int main() int polje3 = 30;
{ int polje4 = 40;
int polje[5] = {10, 20, 30, 40, 50}; int polje5 = 50;
int x; cout << polje1 << endl;
for (x = 0; x < 5; x = x +1) cout << polje2 << endl;
{ cout << polje3 << endl;
cout << polje[x] << endl; cout << polje4 << endl;
} cout << polje5 << endl;
system("PAUSE"); system("PAUSE");
return 0; return 0;
} }

196 PRO - MIL


C++ programiranje za apsolutne poetnike

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

Uvod
#include <cstdlib>

program
Na prvi
#include <iostream> Polja nam omoguuju operacije sa elijama polja.

using namespace std; Ovo je primjer programa koji pretrauje uneseno


polje i ispisuje najvei broj u polju.

Varijable
int main()
{
int polje[5];
int x;
int r; Unos polja.

Donoenje Grafika
cout << "Unos polja." << endl;
for (x = 0; x < 5; x = x + 1)
{
U ovom dijelu programa pretrauje

odluke
cin >> polje[x];
se uneseno polje i najvei broj na-
}
en u polju sprema se u varijablu
r.
r = polje[0];
for (x = 1; x < 5; x = x +1)

Petlje
{
if (r < polje[x])
{
U ovom dijelu ispisuje se sadraj
r = polje[x];
varijable r, odnosno najvei broj
Polja
}
unesen u polje.
}

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


Obrada
teksta

cout << r << endl;

system("PAUSE");
return 0;
Objekti

}
Saimanje Veliki pro-
koda grami

PRO - MIL 197


Polja

Pogledajmo detaljnije najzanimljiviji dio prethodnog program, dio u kojem se


pretrauje polje i najvei pronaeni broj sprema u r varijablu.

Prvi lan polja, dakle polje[0] Pretraivanje se nastavlja unutar for


sprema se u varijablu r. petlje, ija se varijabla x mijenja od
1 do 5 po 1.

Zato petlja ne poinje s nula?

Zato to smo prvu eliju (polje[0])


ve proitali pa je neemo itati
unutar for petlje.
r = polje[0];

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

{
Unutar for petlje za svaku vrijed-
if (r < polje[x]) nost varijable x ispituje se je li sa-
{
draj varijable r manji od polje[x].
r = polje[x];
}
Ako jest, znai da je u eliji polje[x]
}
vei broj od onog u varijabli r, pa
e se sadraj elije polje[r] spremiti

Ova if naredbe je neobina. u varijablu r.

Nema else dijela. To je doz-


voljeno. Ako nam else dio Ako nije, znai da je broj u polje[x]

ne treba, moemo ga izos- manji i u tom sluaju nee se izvo-

taviti. diti sadraj unutar vitiastih zagra-


da.

U tom sluaju, ako je uvjet


zadovoljen, izvodi se sadr- Na kraju, u varijabli r ostaje najve-

aj u vitiastim zagradama, a vrijednost naena u polju.

a ako nije, nastavlja se iz-


voenje programa.

198 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Jednostavnim promjenama pro-
#include <cstdlib>
gram koji pretrauje polje sa
#include <iostream>
ciljem da nae najvei broj u

Uvod
polju moemo preurediti u prog-
using namespace std;
ram koji trai najmanji broj.
int main()

program
Na prvi
emu slue takvi programski
{
postupci?
int polje[5];
int x;
Na slian nain bismo u progra-
int r;
mu za voenje videoteke mogli

Varijable
cout << "Unos polja." << endl;
pronai korisnike koji nisu vratili
for (x = 0; x < 5; x = x + 1)
film dulje od npr. tjedan dana ili
{
korisnike koji su u proloj godini
cin >> polje[x];
posudili najvie filmova.
}

Donoenje Grafika
r = polje[0];
for (x = 1; x < 5; x = x +1)
{ Dovoljno je da umjesto ispitivanja
if (r > polje[x]) je li r < polje[x] stavimo ispitivanje

odluke
{ je li r > polje[x].
r = polje[x];
}
}
cout << "Najmanji je." << endl; Odgovarajue preuredimo ispis

Petlje
cout << r << endl; obavijesti.
system("PAUSE");
return 0;
}

Polja
Obrada
teksta

Pokuajmo sami korigirati


program tako da pretrau-
je je li u polje unesen od-
reen broj ili koliko puta
Objekti

se pojavljuje odreen
broj.
Saimanje Veliki pro-

Pokuajmo napraviti sli-


grami

na pretraivanja slova.
koda

PRO - MIL 199


Polja

#include <cstdlib>
#include <iostream>

using namespace std;

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];
} Slui za sortiranje polja. Une-
semo razliite brojeve u polje,
do a program e ih sortirati tako
{ da e u prvom polju biti najvei
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 vri se sortiranje
} polja.
while (zamjena ==1);

cout << "Sortirano polje." << endl;


for (x = 0; x < 5; x = x +1) U ovom dijelu sortirano polje
{ ispisuje se na zaslon raunala.
cout << p[x] << endl;
}

system("PAUSE");
return 0;
}

200 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Pogledamo podrobnije dio programa u kojem se vri sortiranje.

Uvod
Sortiranje se odvija u do ... while pet- Na poetku ispitivanja u varija-
lji. Petlja se ponavlja tako dugo dok je blu zamjena stavlja se broj 0.
varijabla zamjena jednaka broju 1. Ako ne bude potrebno vriti

program
Na prvi
nikakve zamjene u polju, varija-
bla zamjena ostat e jednaka
nuli i izvoenje do ... while pet-
lje e se zaustaviti.

Varijable
do U for petlji ita se cijelo polje, s
time da se varijabla petlje mije-
{ nja za jedan manje od veliine

Donoenje Grafika
zamjena = 0; petlje; dakle u naem sluaju ne
ide do 4 nego, do 3.
for (x = 0; x < 4; x = x + 1)
{

odluke
if (p[x] < p[x+1])
If naredbom ispitujemo je li broj
u nekoj eliji polja (p[x]) manji
{
privremeni = p[x]; od broja u sljedeoj eliji (p

Petlje
p[x] = p[x+1]; [x+1]. Ako nije, znai da imamo
prvo vei broj, a zatim manji.
p[x+1] = privremeni;
To je ono to elimo i petlja se
zamjena = 1;
vrti dalje.
}

} Polja

} Ako jest, znai da imamo prvo


manji, a zatim vei broj, pa ih
Obrada
teksta

while (zamjena ==1); treba zamijeniti.

U tom sluaju u ovom dijelu e


se izvriti zamjena.
Objekti

Na kraju zamjene u varijablu zamjena stavit e se broj 1.


Saimanje Veliki pro-
grami

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

To znai da nije pronaen ni jedan sluaj da je neki broj manji od sljedeeg


koda

tj. da je sortiranje od veeg prema manjem zavreno.

PRO - MIL 201


Polja

Pogledajmo kako funkcioni-


Za zamjenu sadraja dviju susjednih elija
ra zamjena sadraja elija.
u polju treba nam pomona varijabla; u
naem sluaju to je varijabla privremeni.

Zato?

Da smo odmah napravili drugu naredbu,


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

Da broj koji se nalazi u p[x] ne bi nestao,


privremeno ga spremamo u varijabli priv-
remeni.

Nakon to smo u prethodnom koraku sadr-


aj elije p[x] spremili u varijablu privremeni,
sadraj elije p[x+1] spremamo u eliju p[x].
p[x] = p[x+1];
Budui da p[x] usporeujemo sa p[x+1], x
mora bit za jedan manji od broja elija.

Sadraj varijable privremeni sada vraam u


polje, ali ne u eliju p[x] u kojoj se taj sadr-
aj do sada nalazio, nego u sljedeu eliju,
p[x+1] = privremeni; u eliju p[x+1].

Time smo sadraje elija p[x] i p[x+1] zami-


jenili.

Na kraju zamjene u varijablu zamjena stav-


ljamo broj jedan.

Time smo obavijestili raunalo da je bilo


potrebno vriti zamjene u polju, tj. da polje
zamjena = 1;
nije bilo sortirano po redu, te da do ... while
petlja mora jo jednom provjeriti je li polje
sortirano. Kad se ni u jednom sluaju nee
dogoditi da je neka elija manja od sljede-
e, sortiranje je zavreno.

202 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Izmeu polja mogu se vriti matematike ope-
racije kao i izmeu varijabli.

Uvod
Ovaj program e zbrojiti sadraje polja po1 i
#include <cstdlib> polja po2, a rezultat spremiti u polje po3 i zatim
#include <iostream> ga ispisati na zaslon raunala.

program
Na prvi
using namespace std;

int main()
{

Varijable
int po1[5] = {10, 15, 20, 25, 30};
int po2[5] = {35, 40, 35, 50, 55};
int po3[5];
int a;

Donoenje Grafika
for (a = 0; a < 5; a = a +1)
{
po3[a] = po1[a] + po2[a];
cout << po1[a] << " + " << po2[a] << " = " << po3[a] << endl;
}

odluke
system("PAUSE");
return 0;
}

Petlje
Polja
Obrada
teksta
Objekti

Pokuajmo napisati sline programe koji e vriti neke operacije izmeu po-
lje; npr. programe koji e mnoiti ili dijeliti lanove dvaju polja i rezultat spre-
Saimanje Veliki pro-

mati u tree polje.


grami

Program koji e usporeivati pojedine elije dvaju polja, a zatim e u tree


polje spremiti vrijednost one elije koja sadri vei broj ili manji broj.
koda

Program koji e brojiti koliko puta se neki broj pojavljuje u nekom polju.

PRO - MIL 203


Polja

Spremanje brojeva u datoteku

Postavlja se pitanje na
koji nain bismo mogli
podatke umjesto preko
tipkovnice unijeti u po-
lje iz neke datoteke. U
tu svrhu otvorit emo
Nopetad (u hrvatskoj
inaici Blok za pisanje)
i unijet emo osam raz-
liitih brojeva koji e biti
odvojeni praznim mjes-
tima.

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

U naem sluaju to je mapa Radni


na C: disku.

Ako smo program spremili u neku


drugu mapu, u tu istu mapu spre-
mimo i ovaj tekst.

204 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Uvod
program
Na prvi
Varijable
Ako je sve u redu, u onom istom
prostoru u kojem se nalazi na

Donoenje Grafika
projekt i na program morala bi se
nalaziti i datoteka podaci.txt.

odluke
Petlje
Polja
Int tip u sluaju da koristimo
Jasno je da moemo staviti i
Dev-C++ moe biti od
neke druge brojeve, a moemo
2147483648 do 2147483647.
ih staviti vie ili manje nego u
naem primjeru.
Obrada

Float tip moe imati najveu


teksta

vrijednost od 3.40282 * 10-38. To


Ako mijenjamo koliinu brojeva,
se u programu pie kao
onda u programu koji e ih itati
3.40285e-38.
moramo na isti nain promijeniti
Objekti

veliinu polja i for petlju.


Mogu li se u programima koristiti
i vei brojevi? Naravno, ali taj
Moramo imati na umu i da broj
problem nadilazi potrebe naeg
koji unosimo ne moe biti neog-
Saimanje Veliki pro-

uvodnog prirunika.
ranieno velik. Koliki broj moe-
grami

mo unijeti u polje, odnosno u


Za sada je bitno imati na umu
varijablu, ovisi o svojstvima pro-
da u int ili float varijablu ne mo-
gramskog okruenja koje koristi-
emo staviti neogranieno velik
mo.
broj.
koda

PRO - MIL 205


Polja

Ovim programom proitat emo brojeve koji su sprem-


ljeni u datoteku podaci.txt, spremit emo ih u polje i na
kraju ispisati na zaslon raunala.
#include <cstdlib>
#include <iostream>
#include <fstream> Dodat emo novu biblioteku.

using namespace std;


Ovdje formiramo neto s ime se do sada
int main() nismo sretali, a to je objekt. Trenutno nije
{ vano to je to tono objekt. Za sada e-
mo rei da je to element programa pomo-
int x; u kojeg emo itati sadraj datoteke.
int polje[8];
ifstream ulaz("podaci.txt");

for (x = 0; x < 8; x = x + 1) Ova petlja mora se vrtjeti onoliko puta


{ koliko brojeva elimo proitati, odnosno
ulaz >> polje[x]; koliko nae polje ima elija. U naem
} sluaju to je osam puta.

for (x = 0; x < 8; x = x +1)


{
cout << polje[x] << endl; Ovom naredbom sadraj datoteke
} unosi se u polje.

system("PAUSE"); Da smo ovdje napisali:


return 0;
} cin >> polje[x];

brojevi bi se u polje unosili pomo-


Ispis sadraja polja. u tipkovnice.

ulaz >> polje[x];

je varijacija te naredbe i znai da


se brojevi nee u polje unositi po-
mou tipkovnice nego pomou
objekta ulaz, a prije smo definirali
da objekt ulaz ita iz datoteke po-
daci.txt.

206 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Naredba za formiranje objekta pomo- Naziv objekta. Bira se po istoj logi-
u kojeg emo itati sadraj datoteke. ci po kojoj biramo nazive varijabli.

Uvod
program
Na prvi
Naziv datoteke koju emo itati
ifstream ulaz ("podaci.txt"); pomou objekta ulaz.

Varijable
Donoenje Grafika
odluke
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

Petlje
int main()
{
int x;

Polja
int polje[8];
float a = 0; Kada uitamo brojeve u polje,
ifstream ulaz("podaci.txt"); s tim brojevima moemo raditi
for (x = 0; x < 8; x = x + 1) sve ono to moemo raditi i s
Obrada
teksta

{ brojevima koje smo unijeli


ulaz >> polje[x]; preko tipkovnice.
}
for (x = 0; x < 8; x = x +1) U ovom programu izraunat
Objekti

{ emo prosjenu vrijednost


a = a + polje[x]; unesenih brojeva.
}
a = a / 8; Budemo li eksperimentirali s
Saimanje Veliki pro-

cout << "Prosjek je " << a << endl; drugim brojevima, imajmo na
grami

cout << endl; umu da njihova ukupna suma


system("PAUSE"); ne smije biti vea od maksi-
return 0; malne dozvoljene vrijednosti
} varijable.
koda

PRO - MIL 207


Polja

Ovaj program omoguuje nam da sadraj polja koji


smo unijeli preko tipkovnice spremimo u datoteku.
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std; I u ovom sluaju moramo imati ukljuenu


fstream biblioteku.
int main()
{
int x;
int polje[8];
ofstream izlaz("podaci.txt"); Ovdje formiramo objekt izlaz pomou
kojeg emo brojeve iz polja spremiti
for (x = 0; x < 8; x = x + 1) u datoteku podaci.txt.
{
cin >> polje[x];
}

for (x = 0; x < 8; x = x + 1) Na uobiajeni nain unosimo brojeve


{ u polje.
izlaz << polje[x];
izlaz << " ";
}
Ovdje sadraj polja sprema-
cout << "Spremanje je gotovo." << endl; mo u datoteku podaci.txt.
cout << endl;
system("PAUSE"); Naredbom:
return 0;
} izlaz << polje[x];

brojeve iz polja pomou


objekta izlaz aljemo u da-
toteku.

Ova naredba slina je na-


redbi:

cout << polje[x];

kojom brojeve aljemo na


zaslon raunala.

Naredbom izlaz << " "; iz-


meu dva broja unosimo
prazno mjesto.

208 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Naredba za formiranje objekta pomo-
Naziv objekta. Bira se po istoj logi-
u kojeg emo spremati sadraj dato-
ci po kojoj biramo nazive varijabli.
teke.

Uvod
program
Na prvi
Naziv datoteke u koju emo
ofstream izlaz ("podaci.txt"); spremati pomou objekta ulaz.

Varijable
to smo spremili moemo pogledati editorom, a moemo i programom koji
sadraj datoteke ispisuje na zaslon raunala.

Donoenje Grafika
odluke
Petlje
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;


Polja
int main()
{
Obrada

int x;
teksta

int polje[8];
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{
Objekti

ulaz >> polje[x];


}
for (x = 0; x < 8; x = x +1)
{
Saimanje Veliki pro-
grami

cout << polje[x] << endl;


}
system("PAUSE");
return 0;
}
koda

PRO - MIL 209


Polja

U ovom programu nema nieg novog. Samo smo


kao lego kocke sloili elemente koje smo do sada
#include <cstdlib> upoznali.
#include <iostream>
#include <fstream> Ovaj program uitava datoteku u polje, sortira polje
i zatim sortirano polje sprema natrag u datoteku.
using namespace std;

int main()
{
int x;
int p[8];
int zamjena;
int privremeni;
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1) U ovom djelu programa itamo
{ sadraj 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)
sadraj polja od najveeg prema
{
najmanjem.
if (p[x] < p[x+1])
{
privremeni = p[x];
p[x] = p[x+1];
p[x+1] = privremeni;
U ovom djelu programa sadraj
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 sadraj polja.

210 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
#include <cstdlib> Da bismo provjerili funkcio-
#include <iostream> nira li na program, najpri-
#include <fstream> je emo programom koji

Uvod
smo malo prije obradili
using namespace std; unijeti brojeve u datoteku.

int main()

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

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

Donoenje Grafika
for (x = 0; x < 8; x = x + 1)
{ #include <cstdlib>
izlaz << polje[x]; #include <iostream>
izlaz << " "; #include <fstream>
}

odluke
cout << "Spremanje je gotovo." << endl; using namespace std;
cout << endl;
system("PAUSE"); int main()
return 0; {

Petlje
} int x;
int polje[8];
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)

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

{
teksta

cout << polje[x] << endl;


Nakon to smo brojeve
}
unijeli u datoteku, pokrene-
system("PAUSE");
mo program za sortiranje
return 0;
Objekti

datoteke koji vidimo na


}
lijevoj stranici.
Saimanje Veliki pro-
grami

Programom za itanje sadraja datoteke pog-


koda

ledat emo rezultat sortiranja.

PRO - MIL 211


Polja

Dvodimenzionalna polja

Ako postoje jednodimenzionalna polja, moraju postojati i dvodimenzionalna. (U


suprotnom bismo imali situaciju kao kad je jedan novinar govorio o lokalnim sta-
novnicima nekog mjesta, iako nam vjerojatno ne bi mogao objasniti kako izgle-
daju globalni stanovnici istog mjesta.)

1.stupac 2. stupac 3. stupac 4. stupac Dvodimenzionalne


matrice pogodne su
1. red 11 12 13 14 za spremanje sadr-
aja tabela.
2. red 21 22 23 24

U ovom programu emo gornju tabelu


#include <cstdlib> spremiti u dvodimenzionalnu matricu, a
#include <iostream> zatim emo prvi i drugi red ispisati.

using namespace std;

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

cout << "Prvi red." << endl;


for (x = 0; x < 4; x = x + 1)
{ Ispis prvog reda.
cout << polje[0] [x] << endl;
}
cout << endl;

cout << "Drugi red." << endl;


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

system("PAUSE");
return 0;
}
Ispis drugog reda.

212 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Tip polja u naem sluaju je int, Drugi red polja. Nalazi se
a moglo je biti npr. float ili char. unutar vitiastih zagrada.

Uvod
Prvi red polja. Nalazi se

program
Na prvi
Naziv polja. unutar vitiastih zagrada.

Varijable
int polje [2] [4] = { {11, 12, 13, 14} , {21, 22, 23, 24} };

Donoenje Grafika
Cjelokupni sadraj polja
nalazi se unutar poseb-
Broj redova polja. Broj stupaca polja.
nih vitiastih zagrada.

odluke
Petlje
Budui da su u ovom tipu polja podaci rasporeeni u redove i stupce, prilino
logino je da kad elimo pristupiti nekoj eliji takvog polja moramo navesti u
uglatim zagradama broj reda i broj stupca elije kojoj elimo pristupiti.

Polja
Broj stupca kojem pristupamo, u naem
cout << polje [0] [x] sluaju je to sadraj varijable x.
Obrada
teksta

Broj reda kojem pristupamo, u naem sluaju je to prvi red koji se oznaava
Objekti

brojem nula. Dakle prvi red oznaava broj nula, a drugi broj jedan.
Saimanje Veliki pro-
grami

Dvodimenzionalna polja koriste se Osim dvodimenzionalnih postoje i


na slian nain kao jednodimenzio- trodimenzionalna polja. Funkcioni-
nalna. Osobito su korisna u progra- raju slino kao dvodimenzionalna,
mima u kojima se odvijaju sloeni samo to imaju jo i dubinu.
koda

prorauni.

PRO - MIL 213


Obrada teksta

214 PRO - MIL


PRO - MIL
Obrada teksta

Saimanje Veliki pro- Objekti Obrada Polja Petlje Donoenje Grafika Varijable Na prvi Uvod Sadraj
koda grami teksta odluke program

215
C++ programiranje za apsolutne poetnike
Obrada teksta

String objekti

elimo li napisati program za voenje telefonskog imenika ili program za voe-


nje videoteke, osim obrade brojeva i grafike sasvim sigurno e nam trebati obra-
da teksta. Iako smo i do sada koristili tekstove za ispisivanje raznih obavijesti,
ostalo je nejasno na koji nain bismo mogli tekstove pretraivati ili sortirati.

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

using namespace std; Pogledamo li ovaj pro-


gram, uinit e nam se
int main() da smo za lake bara-
{ tanje tekstom upotrije-
string odgovor; bili novi tip varijable,
cout << "Unesite vase ime." << endl; string tip; te da smo u
cin >> odgovor; programu koristili vari-
cout << endl; jablu koju smo nazvali
cout << odgovor << ", dobar dan!" << endl; odgovor.
cout << endl;
system("PAUSE");
return 0;
}
Pogledajmo nove elemente u ovom programu.

string odgovor; Iako ovaj red izgleda kao da formiramo varijablu


string tipa koju smo nazivali odgovor, string nije tip
varijable nego klasa, a odgovor nije varijabla nego
objekt.

Time se trenutno ne moramo optereivati i moemo


objekt odgovor koristiti kao da smo formirali varijablu
string tipa pod nazivom odgovor.

Tek neto vee mogunosti koje e nam string prui-


ti dat e nam naslutiti da se iza toga naziva krije
kompleksnija struktura od obine varijable.

216 PRO - MIL


C++ programiranje za apsolutne poetnike

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

Uvod
rama.

U naem programskom okruenju program e


raditi i bez ovog reda, ali je mogue da u ne-

program
Na prvi
kom drugom programskom okruenju nee.

Zbog toga emo stavljati tu naredbu

Varijable
Donoenje Grafika
odluke
cout << odgovor << ", dobar dan!" << endl; Vidimo da objekt odgovor
u naredbi cout koristimo
kao da koristimo varijab-
lu.

Petlje
Najprije e se ispisati
sadraj objekta odgovor,
zatim tekst unutar navod-
nika i konano skok u
Polja
novi red.
Obrada
teksta
Objekti

cin >> odgovor; U naredbi cin koju koristimo za unos preko tipkovni-
Saimanje Veliki pro-

ce objekt odgovor koristimo kao to bismo koristili


grami

varijablu.

Dok smo u varijablu char tipa mogli spremiti jedno


slovo, u objekt klase string moemo spremati vei
koda

tekst.

PRO - MIL 217


Obrada teksta

Oigledno je da u string objekt moemo spremiti tekst i postavlja se pitanje


koliko najvie znakova smije sadravati taj tekst.

U naelu raunalo bi se samo trebalo brinuti da osigura dovoljno mjesta za


spremanje bilo kojeg teksta. U sluaju koritenja kraih tekstova, poput imena,
naziva gradova i slino o tome ne moramo voditi brigu.

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

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

using namespace std;

int main()
{
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
cin >> odgovor; Program radi jednako
cout << endl; kao i prethodni, osim
cout << odgovor << ", dobar dan!" << endl; to smo u ovom sluaju
cout << endl; za spremanje imena
system("PAUSE"); osigurali veliki prostor.
return 0;
}

Operacija koja se vri nad objektom.


Ovom naredbom se za objekt odgovor
rezervira 256 mjesta za spremanje znako-
va.
odgovor.reserve(256)

Objekt na koji se naredba Obratimo panju na toku koja se obvezno


odnosi, u naem sluaju je nalazi izmeu oznake objekta i oznake
to objekt odgovor. operacije koja se nad njim vri.

218 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Uvod
#include <cstdlib>
#include <iostream>
#include <string>

program
Na prvi
using namespace std;

int main()

Varijable
{
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
cin >> odgovor;

Donoenje Grafika
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
cout << "Imamo " << odgovor.size() << " slova." << endl;

odluke
cout << endl;
cout << "Imamo " << odgovor.capacity() << " prostora." << endl;
cout << endl;
system("PAUSE");
return 0;

Petlje
}

Naredba size() oigledno slui za odreivanje Polja


odgovor.size() broja znakova unesenog teksta. Rije Stjepan
sastoji se od sedam slova.
Obrada
teksta

Objekt na koji se na-


redba odnosi.
Objekti

Naredba capacity() slui za odreivanje


broja mjesta koja nam stoje na raspola-
ganju za unos znakova u objekt odgo-
vor.
odgovor.capacity()
Saimanje Veliki pro-
grami

Zato ih je na raspolaganju 355, ako


smo naredbom odgovor.reserve(256)
Objekt na koji se na- rezervirali 256 mjesta? Zato to je 256
redba odnosi. mjesta samo polazite na temelju kojeg
koda

prevoditelj rezervira neto vei prostor.

PRO - MIL 219


Obrada teksta

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

using namespace std;

int main()
{
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
cin >> odgovor; Naredbom cin nije mo-
cout << endl; gue u objekt odgovor
cout << odgovor << ", dobar dan!" << endl; unijeti vie odvojenih
cout << endl; rijei.
system("PAUSE");
return 0; Iako smo napisali prezi-
} me i ime, uspjeli smo
unijeti samo prezime.

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

using namespace std;

int main()
{
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
getline(cin, odgovor);
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl; Ako umjesto cin nared-
system("PAUSE"); be upotrijebimo ovu na-
return 0; redbu, moi emo unijeti
} vie rijei u objekt odgo-
vor.

220 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
String objekt u koji emo unositi tekst.
getline(cin, odgovor); U naem sluaju to je objekt odgovor.

Uvod
Naredba koja nam omoguuje

program
Na prvi
unos vie rijei u string objekt.

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

Donoenje Grafika
using namespace std;

int main()
{

odluke
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl; Jedan od problema
cin >> odgovor; pri izradi programa
cout << endl; javlja se kad korisnik

Petlje
cout << odgovor << ", dobar dan!" << endl; unese neodgovara-
cout << endl; juu vrijednost.
system("PAUSE");
return 0; U ovom sluaju, um-

Polja
} jesto da unesemo
ime, samo smo priti-
snuli tipku enter.
Obrada
teksta

U ovom sluaju, na
mjestu gdje se oekiva-
lo da emo unijeti tekst,
mi smo unijeli brojeve.
Objekti

Postavlja se pitanje na
koji bismo nain mogli
Saimanje Veliki pro-

sprijeiti ili barem sma-


grami

njiti mogunost unoe-


nja besmislenih odgo-
vora.
koda

PRO - MIL 221


Obrada teksta

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

using namespace std;

int main()
{
string odgovor;

do
{ Ova inaica programa
cout << "Unesite vase ime." << endl; e zahtijevati da pono-
getline(cin, odgovor); vimo unos ako pritisne-
} mo tipku Enter, a da
while (odgovor.size() == 0); prije toga nismo nita
unijeli.
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}

do Naredbu za unos teks-


{ ta u objekt odgovor
cout << "Unesite vase ime." << endl;
getline(cin, odgovor); stavili smo u do ...
} while petlju koja se
while (odgovor.size() == 0);
izvodi tako dugo dok je
broj slova koja smo
unijeli jednak nuli.

Kad je taj broj razliit


od nule, nastavlja se
izvoenje programa.

222 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Polje char tipa

Uvod
program
Na prvi
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

Varijable
int main()
{
char niz[255];

Donoenje Grafika
cout << "Unesite vase ime." << endl;
cin.getline(niz,255);
cout << endl;
cout << niz << ", dobar dan!" << endl;
cout << endl;

odluke
system("PAUSE"); Tekst se moe unijeti u prog-
return 0; ram i obraivati i na drugi
} nain; uporabom polja char
tipa.

Petlje
Formiranje niza ije elije su char tipa. U svaku moemo staviti jedno slovo.

Tip niza. U Polja


Broj elija niza. U
naem sluaju
char niz[255]; naem sluaju niz
niz je char sadri 255 elija
Obrada
teksta

tipa. to znai da u taj


Naziv niza, u naem sluaju na- niz moemo spre-
ziv niza je niz. miti 255 slova.
Objekti

Ovom naredbom preko tipkovni-


cin.getline( niz, 255); ce unosimo tekst u niz char tipa.
Saimanje Veliki pro-
grami

Broj elija niza.


Naredbe za
unos tekst u
koda

char niz. Naziv niza.

PRO - MIL 223


Obrada teksta

Sadraj niza char


cout << niz << ", dobar dan!" << endl; tipa ispisuje se na
isti nain na koji se
ispisuje sadraj
Naziv niza char tipa Ispisujem tekst Skok u varijable.
koji ispisujemo. unutar navod- novi red.
nika.

#include <cstdlib> Umjesto naredbe:


#include <iostream>
#include <string> cin.getline(niz,255);

using namespace std; moemo staviti naredbu:

int main() cin >> niz;


{
char niz[255]; ali u tom sluaju moi
cout << "Unesite vase ime." << endl; emo unijeti samo jednu
cin >> niz; rije. Nakon pritiska raz-
cout << endl; maknice unos e se pre-
cout << niz << ", dobar dan!" << endl; kinuti pa, kao to moe-
cout << endl; mo vidjeti na donjoj slici,
system("PAUSE"); iako smo napisali Bunic
return 0; Stjepan, uneseno je sa-
} mo prezime. Jasno, ako
ba elimo unijeti samo
jednu rije onda emo
upotrijebiti ovu naredbu
jer je jednostavnija.

cin >> niz;

Naziv char polja u


koje unosimo tekst.

Naredba za unos
teksta tipkovnicom.

224 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
U ovu inaicu programa nije mogue unijeti broj na mjestu na kojem oekuje-
mo tekst. U sluaju da unesemo brojeve, raunalo e zahtijevati da ponovimo
upis.

Uvod
program
Na prvi
#include <cstdlib>
#include <iostream>

Varijable
#include <string>

using namespace std;

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

odluke
do Poetni dio programa i
{ formiranje potrebnih vari-
cout << "Unesite vase ime." << endl; jabli.

Petlje
cout << endl;
cin.getline(niz,255);
x = 0;
p = 1;
while (niz[x] != '\0') Ovo je glavni dio prog-
Polja
{ rama. Ovdje se unosi
if (isdigit(niz[x])) tekst i ispituje jesu li
{ unesena slova ili broje-
vi.
Obrada

p = 0;
teksta

}
x = x + 1; Ako su uneseni brojevi,
} unos se ponavlja.
}
Objekti

while (p == 0); Oznaku \ dobit emo


pritiskom na AltGr i Q.
cout << endl;
cout << niz << ", dobar dan!" << endl;
Saimanje Veliki pro-
grami

cout << endl;


system("PAUSE");
return 0; Zavrni dio programa,
} ime se spaja s pozdra-
vom i gasi se program.
koda

PRO - MIL 225


Obrada teksta

Pogledajmo podrobnije glavni dio prethodnog programa u kojem se unosi tekst i


ispituje jesu li unesena slova ili brojevi.

Cijeli ovaj dio nalazi se unutar do ... while petlji koja e se ponavljati ako korisnik
umjesto slova unese brojeve.

do While petlja ita niz, slovo


{ po slovo, dok ne doe do
kraja niza.
cout << "Unesite vase ime." << endl;
Oznaka \0 nalazi se na
cout << endl; Unos teksta. kraju niza pa niz[x] != '\0'
ispituje je li element niza
cin.getline(niz,255); niz[1] jednak znaku za
Postavljanje odgo- kraj, odnosno jesmo li
x = 0; varajuih vrijed- doli do kraja niza.
p = 1; nosti varijabli.
To radi tako da je na po-
while (niz[x] != '\0') etku vrijednost varijable
x nula, a zatim se uvea-
{ va po jedan
if (isdigit(niz[x]))

{
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 ...
vrijednost varijable p naredbom niz[x] while petlja se nee po-
nula i ako jest, do ... itao slijedei navljati, odnosno upis se
while petlja se ponavlja. lan niza. nee ponavljati.

226 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Ovaj program je veoma sloen pa emo odvojeno pogledati vanije elemente
programa. Pogledajmo prvo glavnu do ... while petlju.

Uvod
Ovdje se u varijablu p
sprema broj jedan. To je
do Ovdje poinje petlja.

program
Na prvi
varijabla o kojoj ovisi
{
hoe li se do ... while
cout << "Unesite vase ime." << endl;
petlja ponoviti ili ne.
cout << endl;
cin.getline(niz,255);

Varijable
x = 0;
p = 1;
while (niz[x] != '\0')
{ Ovdje e se varijabla p postaviti na nula ako je
if (isdigit(niz[x])) jedan od znakova u nizu broj. To e imati za

Donoenje Grafika
{ posljedicu da e se do ... while petlja ponoviti,
p = 0; odnosno da e se unos teksta ponoviti.
}
x = x + 1;

odluke
}
Ovdje se ispituje je li sadraj varijable p jednak
}
nuli. Ako jest do ... while petlja e se ponoviti, a
while (p == 0);
to znai da e se upis ponoviti.

Petlje
Na poetku se x postavlja na nulu, to znai da e se prvi
put sa niz[x] ispitivati niz[0] odnosno prva elija niza.

Polja
x = 0; While petlja ponavlja se tako dugo dok elija niz[x]
nije jednaka oznaci za kraj. Prvi put se ispituje
Obrada

p = 1;
teksta

while (niz[x] != '\0') prva elija odnosno elija niz[0].


{
if (isdigit(niz[x]))
{ Nakon to smo while naredbom ispitali jesmo li
Objekti

p = 0; doli do kraja niza, if naredbom ispitujemo je li


} elija koju trenutno ispitujemo jednaka nuli. Ako
x = x + 1; jest, varijabla p postavlja se na nulu, to znai da
Saimanje Veliki pro-

} e se ponoviti glavna do ... while petlja.


grami

Ovdje se varijabla x uveava za jedan. To znai da e pri sljedeem izvoenju


while petlje x biti 1, pa e se sa niz[x] ispitivati niz[1], zatim pri sljedeem izvo-
koda

enju while petlje niz[2] i tako do kraja niza.

PRO - MIL 227


Obrada teksta

Ovom naredbom ispitujemo je li jedan znak


broj. Moe se ispitivati varijabla char tipa ili
jedna elija niza char tipa.

if ( isdigit ( niz [x] ) )


Ispitujemo eliju niza char tipa. Broj elije
odreen je vrijednou varijable x.

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

using namespace std;


U ovom jednostavnom
int main() programu moemo vidjeti
{ kako funkcionira ispitiva-
char slovo; nje je li unesen znak broj
cin >> slovo; ili nije.
if (isdigit(slovo))
{ Osim ispitivanje je li uni-
cout << "Ovo je broj " << slovo << jeti znak broj, mogua su
endl; i druga ispitivanja.
}
else U tablici s desne strane
{ moemo vidjeti druge
cout << slovo << " nije broj." << endl; mogunosti.
}
cout << endl;
system("PAUSE");
return 0;
}

Pokuajmo u gornji program


staviti ostala ispitivanja koja
moemo vidjeti u tablici.

U tom sluaju morat emo mo-


dificirati obavijesti koje daje pro-
gram.

228 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Osim to moemo ispitivati je li sadraj varijable broj, ispitivati moemo i druga
svojstva sadraja varijable char tipa.

Uvod
program
Na prvi
ISPITIVANJE ZNAKOVA

Varijable
if (isdigit(slovo)) Ispituje je li sadraj varijable slovo neki broj.

Ispituje je li sadraj varijable slovo broj ili slovo. Odgovor


if (isalnum(slovo))

Donoenje Grafika
je negativan ako unesemo upitnik, toku ili neto slino.

if (isalpha(slovo)) Ispituje je li sadraj varijable slovo neko slovo.

odluke
Ispituje je li sadraj varijable slovo kontrolni znak. To je
if (iscntrl(slovo)) znak koji se dobiva ako drimo tipku Ctrl i onda pritis-

Petlje
nem npr. slovo v.

Je li sadraj varijable slovo neto to se ispisuje na zas-


if (isgraph(slovo)) lon raunala, dakle slovo, broj ili interpunkcija. U ovu

Polja
grupu ne pripada prazno mjesto izmeu dviju rijei.

if (islower(slovo)) Je li sadraj varijable slovo malo slovo.


Obrada
teksta

Je li sadraj varijable neto to se ispisuje. Za razliku od


if (isprint(slovo)) sline naredbe if (isgraph(slovo)) ovdje pripada i prazno
Objekti

mjesto izmeu dviju rijei.


Saimanje Veliki pro-

if (isupper(slovo)) Je li sadraj varijable slovo veliko slovo.


grami

if (ispunct(slovo)) Je li sadraj varijable slovo neka interpunkcija.


koda

PRO - MIL 229


Obrada teksta

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

using namespace std;

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

230 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Uvod
if (isprint(slovo[6]))
{
cout << "Sedmi moze biti prazno mjesto." << endl;

program
Na prvi
}
if (isupper(slovo[7]))
{
cout << "Osmi je veliko slovo." << endl;

Varijable
}
if (ispunct(slovo[8]))
{
cout << "Deveti je neka interpunkcija." << endl;

Donoenje Grafika
}
cout << endl;
system("PAUSE");
return 0;
}

odluke
Petlje
Ovaj malo vei program morali smo staviti na dvije
stranice.

Moemo vidjeti uporabu naredbi za ispitivanje znako- Polja


va primijenjenu na polje char tipa.
Obrada

Vidimo da ne moemo odjednom ispitivati cijelo po-


teksta

lje, nego da ispitujemo pojedine elije u polju.

Program moemo korigirati mijenjanjem sadraj polja


ili tako da, umjesto stalnog sadraja polja, sadraj
Objekti

polja unosimo preko tipkovnice.

Uvijek imajmo u vidu da emo odreenu naredbu


Saimanje Veliki pro-

usvojiti tek kad napravimo mnotvo primjera u kojima


grami

se ta naredba koristi. Odreenu naredbu nismo usvo-


jili kad smo je shvatili. Shvaanje naredbe je samo
uvjet da bismo uope mogli poeti uiti. Naredbu
smo usvojili tek kad smo je puno puta uspjeno pri-
mijenili u raznim programima i na razne naine.
koda

PRO - MIL 231


Obrada teksta

Pogledajmo jo nekoliko detalja vezanih uz char varijable i char polja.

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

using namespace std; Iako to na prvi pogled nema


smisla, znakovi se mogu us-
int main() poreivati kao i brojevi.
{
char slovo1; Na prvi pogled izgleda da se
char slovo2; usporeuju na temelju abece-
cout << "Unesite prvo slovo." << endl; de, ali to nije ba tako.
cin >> slovo1;
cout << "Unesite drugo slovo." << endl; Ovaj program dobro radi ako
cin >> slovo2; usporeujemo samo velika ili
samo mala slova.
if (slovo1 < slovo2)
{
cout << "Prvo slovo je prije po abecedi." << endl;
}
else
{
cout << "Drugo slovo je prije po abecedi." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

Zato na taj nain ne moemo usporeivati velika i mala slova?

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

232 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Uvod
#include <cstdlib>
#include <iostream>

program
Na prvi
#include <string>

using namespace std;

Varijable
int main() Mogla bi nas zbuniti
{ uporaba znaka " i zna-
char slovo = 'A'; ka '.
char NizSlova[18] = "Ovo je niz slova.";
Pravilo je jednostavno,

Donoenje Grafika
cout << "Jedno slovo je " << slovo << endl;
cout << "Tekst je: " << NizSlova << endl; jedno slovo pie se u
cout << endl; obliku 'a', a vie slova u
system("PAUSE"); obliku "Ovo je tekst.".
return 0;

odluke
}

Petlje
#include <cstdlib>
#include <iostream>
Polja
#include <string>

using namespace std;


Obrada
teksta

int main()
{
char slovo;
cout << "Unesite slovo." << endl; Slovima moemo do-
Objekti

cin >> slovo; davati ili oduzimati


slovo = slovo - 1; brojeve.
cout << "Prethodni znak je " << slovo << endl;
slovo = slovo + 2;
Saimanje Veliki pro-

cout << "slijedeci znak je " << slovo << endl;


grami

cout << endl;


system("PAUSE");
return 0;
}
koda

PRO - MIL 233


Obrada teksta

Obrada string objekata

Do sada smo uglavnom vidjeli operacije koje se mogu provoditi nad jednim slo-
vom spremljenim u char varijablu ili char polje. Pogledajmo sada operacije nad
veim tekstom spremljenim u objekt string klase.

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

using namespace std;

int main()
{
string tekst1 = "Ovo je prvi tekst.";
string tekst2 = " Ovo je drugi tekst.";
string tekst3;
tekst3 = tekst1 + tekst2; Objekte string klase moemo jed-
cout << tekst3 << endl; nostavno zbrojiti i rezultat zbraja-
cout << endl; nja spremiti u trei objekt.
system("PAUSE");
return 0;
}

234 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Uvod
#include <cstdlib>
#include <iostream>
#include <string>

program
Na prvi
using namespace std;

int main()
{

Varijable
string tekst1;
string tekst2;
cout << "Unesite prvu rijec." << endl;
cin >> tekst1;

Donoenje Grafika
cout << endl;
cout << "Unesite drugu rijec." << endl; Objekti klase string
cin >> tekst2; mogu se meusobno
cout << endl; usporeivati.
if (tekst1 == tekst2)

odluke
{ U ovom programu us-
cout << "Rijeci su jednake." << endl; poreujemo jesu li jed-
} naki.
else

Petlje
{
cout << "Rijeci nisu jednake." << endl;
}
cout << endl;

Polja
system("PAUSE");
return 0;
}
Obrada
teksta
Objekti
Saimanje Veliki pro-
koda grami

PRO - MIL 235


Obrada teksta

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

using namespace std;

int main()
{
string tekst1;
string tekst2;
cout << "Unesite prvu rijec." << endl;
cin >> tekst1;
cout << endl;
cout << "Unesite drugu rijec." << endl; Dva objekta klase string mo-
cin >> tekst2; emo usporeivati 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; Oito se ne ispituje koliina
} 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
} vee od aaaaa.

Kao i kod char polja, sustav je


prilino primitivan i dobro radi
jedino ako se ne mijeaju veli-
ka i mala slova, budui da ra-
unalo smatra da su sva velika
slova prije malih, pa su u tom
smislu manja od malih.

Zato raunalo smatra da je AB


manje od aaaaa.

236 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Mogue su i sloenije manipulacije nad tekstom. Ponovno pogledajmo nared-
bu size() koju smo vidjeli na poetku ovog poglavlja. Omoguuje nam odrei-
vanje broja znakova koje sadri tekst. Pri tome imajmo na umu da raunalo i

Uvod
prazno mjesto izmeu rijei smatra jednim znakom.

program
Na prvi
#include <cstdlib>

Varijable
#include <iostream>
#include <string>

using namespace std;

Donoenje Grafika
int main()
{
string odgovor;
getline(cin, odgovor);

odluke
cout << "Tekst sadrzi " << odgovor.size() << " znakova." << endl;
cout << endl;
system("PAUSE");
return 0;
} Naredba size().

Petlje
Polja
Obrada
teksta
Objekti
Saimanje Veliki pro-
koda grami

PRO - MIL 237


Obrada teksta

Ovaj program pretrauje sadraj objekta tekst i trai pojavljuje li se u tom objektu
sadraj objekta trazi. Ako se pojavljuje, obavjetava nas na kojoj poziciji zapoi-
nje traeni tekst. (Prva pozicija nema broj jedan nego broj nula.)

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

using namespace std;

int main()
{
string tekst;
string trazi;
int pozicija;
cout << "Unesite tekst." << endl;
getline(cin, tekst);
cout << endl;
cout << "Sto trazim?" << endl;
getline(cin, trazi);
cout << endl;
pozicija = tekst.find(trazi);
if (pozicija != string::npos)
{
cout << "Pocetak je na " << pozicija << ". poziciji." << endl;
}
else
{
cout << "Nema trazene rijeci." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

238 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Ovom naredbom utvrujemo poziciju traenog teksta, a rezultat spremamo u
varijablu pozicija.

Uvod
Varijabla u koju spre-
mamo rezultat. pozicija = tekst.find(trazi);

program
Na prvi
Naziv objekta u kojem se nalazi Naredba za Objekt koji pre-

Varijable
tekst koji pretraujemo. pretraivanja. traujemo.

Ovom naredbom provjeravamo je li traena rije naena u pretraivanom ob-

Donoenje Grafika
jektu.

Ovom naredbom dobivamo

odluke
if (pozicija != string::npos) oznaku koja oznaava da tra-
ena rije nije naena.

Usporeujemo rezultat pretra-

Petlje
ivanja u pozicija varijabli i
U varijabli pozicija nalazi se re- obavijest da traena rije nije
zultat pretraivanja objekta. naena.

Polja
Obrada
teksta

Problem ovog programa,


Objekti

odnosno ove naredbe, je u


tome to e pronai samo
prvo pojavljivanje neke rije-
i, ako se ista rije vie puta
Saimanje Veliki pro-

pojavljuje u tekstu.
grami

elimo li ispitati sva pojavlji-


vanja neke rijei, morat e-
mo napisati malo sloeniji
koda

program.

PRO - MIL 239


Obrada teksta

Ovaj program radi slian posao kao i prethodni, ali pretraivanje zapoinje od
kraja teksta. Ako traimo rije koja se pojavljuje vie puta, ovaj program nai e
posljednje pojavljivanje.

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

using namespace std;

int main() Program je u potpunosti identi-


{ an prethodnome, samo to
string tekst; ovdje umjesto naredbe find
string trazi; imamo naredbu rfind.
int pozicija;
cout << "Unesite tekst." << endl; Time smo raunalu naredili da
getline(cin, tekst); pretraivanje zapone od kraja
cout << endl; teksta koji se nalazi u objektu
cout << "Sto trazim?" << endl; tekst.
getline(cin, trazi);
cout << endl;
pozicija = tekst.rfind(trazi);
if (pozicija != string::npos)
{
cout << "Pocetak je na " << pozicija << ". poziciji." << endl;
}
else
{
cout << "Nema trazene rijeci." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

240 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Uvod
#include <cstdlib>
#include <iostream>

program
Na prvi
#include <string>

using namespace std;

Varijable
int main() Ovaj program smo tako korigirali da
{ smo, iako s naredbom find zapoi-
string tekst; njemo pretraivanje s lijeve strane,
string trazi; pronali drugo pojavljivanje traene
int pozicija; rijei.

Donoenje Grafika
cout << "Unesite tekst." << endl;
getline(cin, tekst);
cout << endl;
cout << "Sto trazim?" << endl;

odluke
getline(cin, trazi);
cout << endl;
pozicija = tekst.find(trazi,6);
if (pozicija != string::npos)
{

Petlje
cout << "Pocetak je na " << pozicija << ". poziciji." << endl;
}
else
{

Polja
cout << "Nema trazene rijeci." << endl;
}
cout << endl;
system("PAUSE");
Obrada

pozicija = tekst.find(trazi,6);
teksta

return 0;
}
Objekti

U ve poznatu naredbu find dodali smo broj 6 ime smo naredili raunalu da
pretraivanje objekta tekst zapone od znaka na poziciji 6.
Saimanje Veliki pro-
grami

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


rijei radi.

Pomou ove naredbe napravit emo program koji e pronai sva pojavljiva-
koda

nja neke rijei, a ne samo prvo ili posljednje.

PRO - MIL 241


Obrada teksta

Ovaj program moe pronai svako pojavljivanje neke rijei u nekom tekstu.

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

using namespace std;

int main()
{ U ovom programu koristimo nared-
string tekst; bu find, a pozicija poetka pretrai-
string trazi; vanja nije odreena brojem, nego
int duljina; sadrajem varijable trenutno.
int trenutno = 0;
int polozaj; Varijabla trenutno je na poetku 0,
cout << "Unesite tekst." << endl; da bi prvo pretraivanje poelo od
getline(cin, tekst); poetka teksta. Ako na nekoj pozi-
cout << endl; ciji pronaemo traenu rije, vari-
cout << "Sto trazim?" << endl; jablu trenutno uveavamo za tu
getline(cin, trazi); poziciju + 1, da bi novo pretraiva-
cout << endl; nje poelo nakon poetka ve na-
duljina = tekst.size(); ene rijei i da bi se eventualno
while (trenutno < (duljina + 1)) pronala 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 Budui da smo doavi do ove toe ve
{ prilino napredovali u vjetini programira-
trenutno = duljina + 1; nja, ovaj put je objanjenje funkcioniranja
} programa neto skromnije.
}
cout << endl; Pokuajmo shvatiti kako funkcionira prog-
system("PAUSE"); ram i pokuajmo ga korigirati tako da ispie
return 0; adekvatnu obavijest, ako se traena rije
} uope ne pojavljuje. Pokuajmo isti prog-
ram napisati koritenjem rfind naredbe.

242 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Na neku poziciju unutar teks-
ta moemo dodati tekst.

Uvod
#include <cstdlib>

program
Na prvi
#include <iostream>
#include <string>

using namespace std;

Varijable
int main()
{
string tekst = "Ovo je tekst.";
string umetak = " moj";

Donoenje Grafika
tekst.insert(6,umetak);
cout << tekst << endl;
cout << endl; Naredba za dodavanje teksta.
system("PAUSE");

odluke
return 0;
}
Sadraj koji dodajemo.

Petlje
Objekt u koji dodajemo tekst. tekst.insert(6,umetak);

Polja
Pozicija na koju dodajemo tekst.
#include <cstdlib>
Obrada
teksta

#include <iostream>
#include <string>

using namespace std;


Objekti

int main()
{
string tekst = "Ovo je tekst.";
Saimanje Veliki pro-

tekst.insert(6," dobar");
grami

cout << tekst << endl;


cout << endl;
system("PAUSE");
return 0;
Naredba insert moe se napisati
}
koda

i na ovaj nain.

PRO - MIL 243


Obrada teksta

Dio teksta spremljenog u objekt klase string moemo obrisati erase naredbom.

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

using namespace std;

int main()
{
string tekst = "Ovo je dobar tekst.";
tekst.erase(7,6);
cout << tekst << endl;
cout << endl;
system("PAUSE");
return 0;
}
Pozicija od kojem po-
inje brisanje.

Naredba za brisanje.

Objekt u kojem briemo. tekst.erase(7,6);

Broj znakova koje e-


mo obrisati.

244 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Naredbom replace moemo dio teksta koji se nalazi u objektu klase string
zamijeniti nekim drugim tekstom.

Uvod
program
Na prvi
Varijable
#include <cstdlib>
#include <iostream>
#include <string>

Donoenje Grafika
using namespace std;

int main()

odluke
{
string tekst = "Ovo je dobar tekst.";
string drugi = "dodatan";
tekst.replace(7,5,drugi);
cout << tekst << endl;

Petlje
cout << endl;
system("PAUSE");
return 0; Pozicija od koje zapo-
} inje zamjena teksta.

Polja

Koliko emo znakova


Obrada
teksta

zamijeniti.
Naredba za zamjenu teksta.
Objekti

Objekt u kojem mijenja-


mo dio teksta. tekst.replace(7,5,drugi);
Saimanje Veliki pro-
grami

Sadraj kojim emo zamijeniti tekst u objektu tekst. Zamijenit emo 5 znako-
va, poevi od sedmog sa sadrajem objekta drugi. Umjesto objekta drugi
koda

mogli bismo staviti i tekst unutar navodnika.

PRO - MIL 245


Obrada teksta

Premjetanje teksta iz char polja u string

Postavlja se pitanje bismo li mo-


gli tekst iz jednog oblika pretvoriti
u drugi, ovisno o tome koji oblik
nam je pogodniji za obradu.

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

using namespace std;

int main()
{
char niz[255]; Ovdje, na nain 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 premjetamo u ob-
if (isdigit(niz[x])) jekt klase string koji smo
{ nazvali tekst.
p = 0;
} To smo uinili 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.

246 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Premjetanje teksta iz stringa u char polje

Mogue je i tekst iz objekta klase string premjestiti u polje char tipa, ali je na-

Uvod
redba kojom to izvodimo neto sloenija.

program
Na prvi
Varijable
#include <cstdlib>
#include <iostream>
#include <string>

Donoenje Grafika
using namespace std;

odluke
int main()
{
Formiramo objekt klase string i u
string tekst = "Tekst.";
njega spremamo tekst Tekst.
char *polje = (char*)tekst.c_str();

Petlje
cout << polje[0] << endl;
cout << polje[1] << endl; Tekst iz objekta selimo u char
cout << polje[2] << endl; polje koje smo nazvali polje.

Polja
cout << polje[3] << endl;
cout << polje[4] << endl;
cout << polje[5] << endl;
Ispisujemo sadraj polja da bis-
Obrada
teksta

cout << endl; mo vidjeli nalazi li se u njemu


system("PAUSE"); doista Tekst.
return 0;
}
Objekti

char *polje = (char*)tekst.c_str();


Saimanje Veliki pro-
grami

Naziv char polja u koje emo Naziv objekta iz kojeg tekst seli-
spremiti tekst iz objekta. U na- mo u char polje. U naem slua-
koda

em sluaju naziv je polje. ju naziv objekta je tekst.

PRO - MIL 247


Obrada teksta

Spremanje teksta u datoteku

Pomou objekata klase string moemo formirati liste i te liste moemo spremati u
datoteke na slian nain na koji smo spremali brojane liste

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

using namespace std;

int main()
{
int x;
string tekst[8]; Kad smo spremali brojeve, izmeu
ofstream izlaz("podaci.txt"); brojeva stavljali smo prazno mjesto
for (x = 0; x < 8; x = x + 1) da bismo znali gdje zavrava jedan
{ broj, a poinje 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 izmeu rijei.
izlaz << " # ";
}
cout << endl;
cout << "Spremanje je gotovo." << endl;
cout << endl;
system("PAUSE");
return 0;
}

Umjesto praznih mjesta, iz-


meu sadraja pojedinih e-
lija stavljamo # Na ovoj slici vidi se samo
dio datoteke podaci.txt.
Ta oznaka e nam pomoi
prilikom itanja datoteke.

248 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Programom slinim programu za itanje datoteka u kojima se nalaze brojevi
itat emo sadraj datoteke u kojoj se nalaze tekstovi.

Uvod
program
Na prvi
#include <cstdlib>
#include <iostream>

Varijable
#include <string>
#include <fstream>

using namespace std;

Donoenje Grafika
int main()
{
int x;
string tekst[8];

odluke
string privremeni;
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{
do

Petlje
{
ulaz >> privremeni;
if (privremeni != "#")
{

Polja
tekst[x] = tekst[x] + privremeni + " "; Oznaku # koristit emo
} da bismo utvrdili jesmo
} li doli do kraja sadra-
while (privremeni != "#"); ja jedne elije polja.
Obrada
teksta

}
for (x = 0; x < 8; x = x +1) Ovo rjeenje je jednos-
{ tavno, ali je manjkavo.
cout << tekst[x] << endl; Ako bi netko prilikom
}
Objekti

unosa teksta unio #


cout << endl; oznaku, poremetio bi
system("PAUSE"); ispravno funkcioniranje
return 0; programa.
Saimanje Veliki pro-

}
grami

Zbog toga bi program


za unos teksta trebalo
tako modificirati da ne
dozvoljava unos # oz-
koda

nake.

PRO - MIL 249


Objekti

250 PRO - MIL


PRO - MIL
Objekti

Saimanje Veliki pro- Objekti Obrada Polja Petlje Donoenje Grafika Varijable Na prvi Uvod Sadraj
koda grami teksta odluke program

251
C++ programiranje za apsolutne poetnike
Objekti

Jednostavan primjer klase i objekata

U ovom trenutku mogla bi se manje cjeline. U tom sluaju


javiti dva pitanja koja su meu- lake se posao podijeli na vie
sobno povezana. Jedno pitanje programera. Svaki radi svoju
je imamo li na raspolaganju sa- manju cjelinu. Manje cjeline lak-
mo one klase koje su napisali e se piu i u njima se lake
autor C++ jezika ili bismo mogli pronalaze greke.
napisati svoje vlastite klase.
Ako dio programa koji se esto
Pitanje zato bismo to uope ponavlja izdvojimo u manju cjeli-
radili usko je povezano s drugim nu, koju pozivamo kad nam je
pitanjem, a to je na koji nain se potrebna, dobit emo manji pro-
piu veliki programi. Mi smo do gram u kojem se lake vre
sada pisali male programe. Piu izmjene. Lake je izmjenu unijeti
li se na isti nain programi koji u jedan dio koji se poziva na
sadre nekoliko stotina tisua vie mjesta, nego u sluaju kad
redova? Piu li se oni na nain se isti dio programa ponavlja na
da ponemo s #include desetak mjesta. U tom sluaju
<cstdlib> napiemo nekoliko trebali bi pronai svih desetak
stotina tisua redova, na kraju mjesta i na svima promijeniti
napiemo } i program je gotov. program na isti nain, to je ve-
lik posao, a postoji i velika vjero-
Naravno da ne. To bi bilo nep- jatnost da e doi do greke.
raktino iz niza razloga. U slua-
ju da program piemo na taj na- Vidimo da bi bilo dobro podijeliti
in (to je tehniki mogue), ja- program na manje dijelove pa
ko teko bismo pisanje progra- se postavlja pitanje kako emo
ma raspodijelili na vie osoba i u to uiniti. To emo uiniti kreira-
tako velikom programu jako te- njem vlastitih objekata ili preciz-
ko bismo pronalazili greke. nije reeno, kreiranjem vlastitih
klasa na temelju kojih emo for-
Postoji jo jedan problem. U mirati objekte.
veim programima esto se isti
posao mora obaviti na vie Postoji jo jedan razlog zato je
mjesta u programu. Npr. ako u dobro poznavati uporabu klasa i
telefonski imenik elimo unijeti objekata. elimo li pisati progra-
ime, prezime, ulicu, grad, zani- ma koji e se umjesto u pojed-
manje i tome slino, istu provje- nostavljenom crnom prozoru
ru, npr. provjeru je li umjesto odvijati u normalnom windows
slova netko unio brojeve morali prozoru, apsolutno je nuno ra-
bismo ponoviti prilikom svakog zumjeti uporabu klasa i objeka-
od nabrojenih unosa. ta.

Svi navedeni problemi rjeavaju


se tako da se program razdijeli u

252 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Imajmo u vidu da prednost uporabe objekata dolazi do izraaja u veim prog-
ramima. Manji programi koje emo vidjeti u ovom poglavlju mogu se elegan-
tnije napraviti bez uporabe objekata. Unato tome, mi emo vidjeti primjere

Uvod
uporabe objekata u malim programima jer emo na primjerima malih progra-
ma lake shvatiti princip uporabe objekata.

program
Na prvi
Varijable
#include <cstdlib>
#include <iostream>

using namespace std;

Donoenje Grafika
class tekst
{
public:
void pisi()

odluke
{
cout << "Ovo je nas tekst." << endl;
} Unesimo u program-
}; sku okolinu i pokreni-

Petlje
mo na prvi program
int main() koji koristi klase i ob-
{ jekte.
tekst t;
t.pisi();
cout << endl; Polja
system("PAUSE");
return 0;
Obrada

}
teksta

#include <cstdlib>
#include <iostream>
Objekti

Uoimo da taj program radi using namespace std;


potpuno isti posao kao ovaj.
int main()
Oito je da se u malim progra- {
Saimanje Veliki pro-

cout << "Ovo je nas tekst." << endl;


grami

mima ne isplati koristiti klase i


cout << endl;
objekte. Njihove prednosti do- system("PAUSE");
laze do izraaja u veim prog- return 0;
}
koda

ramima.

PRO - MIL 253


Objekti

Najprije emo pogledati zanimljive dijelove naeg programa, a zatim funkcionira-


nje programa kao cjeline.

Ovaj dio programa izrazito je slian ovom dijelu programa iz prolog poglavlja.

tekst t; string tekst;


t.pisi(); tekst.reserve(256);

U prvom redu formira se objekt U prvom redu formirali smo objekt


klase tekst koji smo nazvali t. klase string koji smo nazvali tekst.

U drugom redu nad objektom t vri U drugom redu nad objektom tekst
se operacija pisi(). Unutar zagrada izvrili smo operaciju reserve(250)
nema sadraja, jer se nita ne uno- kojom smo osigurali prostor za spre-
si u objekt t, ali su zagrade svejed- manje teksta. Izmeu naziva objekta
no obvezne. i naziva operacije nalazi se toka.

Oblik t.pisi bez zagrada nije ispra-


van.

Naziv klase na temelju Naziv objekta koji formira-


koje emo formirati ob-
tekst t ; mo na temelju klase. U
jekt. U naem sluaju naem sluaju formiramo
naziv klase je tekst. objekt t klase tekst.

t . pisi() ;
Naziv objekta iju meto-
Naziv metode koju sadri
du emo koristiti. U na-
objekt t. U naem sluaju
em sluaju koristit e-
koristimo metodu pisi().
mo metodu t.
Obvezna toka.

254 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Uvod
#include <cstdlib>
#include <iostream>

program
Na prvi
using namespace std;
Ovdje vidimo da objekt
class tekst moemo nazvati i dru-
{ gaije, npr. reci.

Varijable
public:
void pisi() Ako smo formirali ob-
{ jekt reci, onda naredba
cout << "Ovo je nas tekst." << endl; koja je do sada imala
} oblik:

Donoenje Grafika
};
t.pisi();
int main()
{ dobiva oblik:

odluke
tekst reci;
reci.pisi(); reci.pisi();
cout << endl;
system("PAUSE"); Dakle, sad se operacija
return 0;

Petlje
pisi vri nad objektom
} reci.

Polja
Obrada
teksta

#include <cstdlib>
#include <iostream>
Uoimo da postoji slinost izmeu
using namespace std; formiranja objekta reci klase tekst i
Objekti

int main() varijable a tipa int.


{ I ovdje se najprije navodi tip varija-
int a;
Saimanje Veliki pro-

a = 12; ble, a zatim naziv a.


grami

cout << a << endl; Nad varijablom moemo vriti raz-


cout << endl;
system("PAUSE"); ne operacije. U naem sluaju u
return 0; varijablu a spremamo broj 12.
}
koda

PRO - MIL 255


Objekti

#include <cstdlib>
#include <iostream>

using namespace std;

class tekst
{
public:
void pisi()
{
cout << "Ovo je nas tekst." << endl;
}
}; Kao to moemo formirati
vie varijabli int tipa, tako
int main() moemo formirati vie
{ 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(); trei.
treci.pisi();
cout << endl; Za biranje naziva objeka-
system("PAUSE"); ta vrijede slina 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.

256 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Formiranje klase za- Nakon naredbe class
poinje naredbom
class tekst slijedi naziv klase. U
class. To je naredba naem sluaju klasu

Uvod
C++ jezika i ne moe smo nazvali tekst, ali
se mijenjati. mogli smo i drugaije.

program
Na prvi
U ovoj inaici programa
#include <cstdlib>
klasu smo nazvali BrdaI-
#include <iostream>

Varijable
Doline.
using namespace std;
To je dozvoljeno, samo
to sad naredbu koja je
class BrdaIDoline
prije imala oblik:

Donoenje Grafika
{
public:
tekst t;
void pisi()
{
moramo napisati u obliku:
cout << "Ovo je nas tekst." << endl;

odluke
}
BrdaIDoline t;
};
Dakle, formiramo objekt t
int main()
klase BrdaIDoline.

Petlje
{
BrdaIDoline t;
(Drugo je to je pametno
t.pisi();
da nam naziv klase govo-
cout << endl;
ri emu klasa slui, pa je
system("PAUSE");
Polja
loginije da se klasa za
return 0;
ispis teksta zove tekst, a
}
ne BrdaIDoline.)
Obrada
teksta
Objekti
Saimanje Veliki pro-
grami

Vidimo da je rezultat rada


takvog programa potpuno
jednak kao i rezultat rada
programa u kojem smo
koda

formirali klasu tekst.

PRO - MIL 257


Objekti

public: U ovom djelu nalazi se


void pisi() popis varijabli i metoda
{ koje posjeduje neka kla-
cout << "Ovo je nas tekst." << endl; sa. Metode su mudar na-
} ziv za operacije koje neka
klasa moe izvriti.

U naem sluaju klasa ne


sadri varijable. Ima sa-
mo jednu metodu koju
smo nazivali pisi().

Popis metoda poinje


naredbom public: Pobli-
e znaenje te naredbe
vidjet emo kasnije.

void pisi()
{ Ova naa mala klasa ne
cout << "Ovo je nas tekst." << endl; sadri varijable i sadri
} samo jednu metodu od-
nosno moe napraviti
samo jednu operaciju. Tu
metodu nazvali smo pisi
().

Ispred naziva metode


nalazi se naredba void.
Njeno znaenje poblie
emo objasniti kasnije.

{ Unutar vitiastih zagrada


cout << "Ovo je nas tekst." << endl; nalaze se naredbe koje
} pojedina metoda izvrava.

Naa jednostavna metoda


samo naredbom cout ispi-
suje tekst unutar navodni-
ka na zaslon raunala.

258 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Uvod
#include <cstdlib>
#include <iostream> Kao to smo klasu mogli
nazvati drugaije, mogli

program
Na prvi
using namespace std; smo i metodu.

class tekst U ovom primjeru metodu


{ smo nazvali Pero().

Varijable
public:
void Pero() To je dozvoljeno, samo
{ to emo naredbu koju
cout << "Ovo je nas tekst." << endl; smo do sada pisali u obli-
} ku:

Donoenje Grafika
};
t.pisi();
int main()
{ pisati u obliku:

odluke
tekst t;
t.Pero(); t.Pero();
cout << endl;
system("PAUSE"); Kao i kod biranja naziva
return 0; varijabli i klasa, i ovdje je

Petlje
} pametno da nam naziv
metode govori to meto-
da radi. Zato je naziv pisi
za metodu koja ispisuje

Polja
tekst bolji od naziva Pero.
Obrada

Dok naziv metode uz


teksta

odreena ogranienja
Void naredba ispred void pisi () moemo birati po volji,
naziva metode ozna-
uje da metoda ne ove dvije zagrade se
ovdje moraju obavezno
Objekti

vraa nikakvu vrijed-


nost. nalaziti.

U kojem smislu ne
Saimanje Veliki pro-

vraa vrijednost vid- Naziv metode biramo po volji, pazei na ogra-


grami

jet emo kasnije kad nienja o kojima smo govorili kad smo govorili
ovakvu metodu us- o biranju naziva varijabli.
poredimo s onima
koje vraaju vrijed- Pametno je da naziv metode tako izaberemo
koda

nost. da nam govori emu metoda slui.

PRO - MIL 259


Objekti

Pogledajmo strukturu naeg programa.


#include <cstdlib>
#include <iostream>

using namespace std;


Poetni dio programa.
class tekst
{
public:
void pisi()
U ovom dijelu nalaze se klase
{
koje program koristi. U naem
cout << "Ovo je nas tekst." << endl;
sluaju imamo samo jednu
}
klasu, klasu pisi().
};

int main()
{
tekst t; Glavni dio programa. Sada moemo vidjeti zato
t.pisi(); smo program zapoinjali s int main() oznakom,
cout << endl; odnosno oznakom da je to glavni dio.
system("PAUSE");
return 0; Kad raunalo pokrene program, najprije e se
} pokrenuti ovaj dio, a ostali dijelovi e se koristiti
po potrebi.

Sadra klase nalazi se Klasa se moe sastojati od vie tipova sadra-


unutar vitiastih zagrada. ja. Jedan od njih je public. Kasnije emo pod-
robnije vidjeti to oznaka public oznaava.

class tekst U klasi se mogu nalazi-


{ ti varijable i metode. U
public: naem sluaju varijable
void pisi() ne koristimo, a imamo
{ jednu metodu koju smo
cout << "Ovo je nas tekst." << endl; nazvali pisi().
}
Metode su zapravo
programi koji odreuju
}; koje operacije neka
klasa moe izvesti .

260 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Unutar metode ne mora se
nalaziti program za ispis. Mo-
e se nalaziti bilo to, npr.

Uvod
program za crtanje kruga.

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

Varijable
using namespace std;

class tekst Iako program i ovako radi,


{ malo emo ga preurediti.

Donoenje Grafika
public:
void pisi() Umjesto class tekst stavit
{ emo class slika.
int gdriver = 9;

odluke
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK); Umjesto void pisi() stavit e-
mo void krug().
cleardevice();

Petlje
circle(320,240,180);
getch();
closegraph();
} Umjesto tekst t; tj. umjesto
Polja
}; naredbe formiranja objekta t
klase tekst stavimo slika cr-
int main() taj. Time emo formirati ob-
{ jekt crtaj klase slika.
Obrada
teksta

tekst t;
t.pisi();
cout << endl;
system("PAUSE");
Umjesto t.pisi(); tj. umjesto
Objekti

return 0;
} pozivanja metode pisi() u klasi
tekst stavit emo crtaj.krug();
Saimanje Veliki pro-
grami

Izbacimo naredbu cout << endl; i naredbu system("PAUSE");.


Iako program radi i s tim naredbama, bez njih e raditi neto elegantnije. Ovaj
se program odvija u grafikom prozoru pa su nepotrebni razmak i pauza u
koda

tekstualnom prozoru.

PRO - MIL 261


Objekti

Sloeniji primjeri klasa i objekata

Klasa moe sadravati vie


metoda, npr. u ovom sluaju
sadri tri metode.

#include <cstdlib>
#include <iostream>

using namespace std;

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()
{ Trea 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 toku i konano
system("PAUSE"); naziv metoda. Zagrade
return 0; na kraju te ; oznaka su
} obvezne.

262 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Program moe sadravati
vie klasa, npr. u ovom
sluaju klasu tekst1 i klasu

Uvod
tekst2.

program
Na prvi
#include <cstdlib>

Varijable
#include <iostream>

using namespace std;

class tekst1

Donoenje Grafika
{
public: Prva klasa koju smo
void pisi() nazvali tekst1.
{

odluke
cout << "Ovo je klasa tekst1." << endl;
}
};

class tekst2

Petlje
{ Druga klasa koju
public: smo nazvali tekst2.
void pisi()
{

Polja
cout << "Ovo je klasa tekst2." << endl;
}
};
Obrada
teksta

int main() Ovdje na temelju


{ svake klase formi-
cout << "Zovemo metodu klase tekst1." << endl; ramo objekt, a za-
tekst1 t1; tim pozivamo me-
todu od svake kla-
Objekti

t1.pisi();
cout << endl; se odnosno opera-
cout << "Zovemo metodu klase tekst2." << endl; ciju koju objekt
tekst2 t2; moe izvriti
Saimanje Veliki pro-

t2.pisi();
grami

cout << endl; Uoimo da je doz-


system("PAUSE"); voljeno da se me-
return 0; toda pod istim na-
} zivom pisi() nalazi
u obje klase.
koda

PRO - MIL 263


Objekti

#include <cstdlib>
#include <iostream>

using namespace std;

class tekst
{
public:
void pisi()
{
cout << "Upravo koristimo objekt." << endl;
} Jednom formirani
}; objekt moemo proi-
zvoljni broj puta kori-
int main() stiti u programu.
{
tekst t; To je jedna od pred-
cout << "Objekt koristimo 1. put." << endl; nosti koritenja 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 odreenu ope-
system("PAUSE"); raciju kad god nam
return 0; zatreba, bez potrebe
} da je ponovo pie-
mo.

Sve klase koje smo do sada formirali bile su veoma Uporaba klasa i obje-
jednostavne budui da nisu komunicirale s ostat- kata veoma je sloe-
kom programa na nain da bi bilo mogue u klasu na ideja, i kao uvijek
unijeti neke podatke ili iz klase iitati 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 moemo u klase unositi ili iz klasa iitavati po- mo velik broj primje-
datke. ra.

264 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Komunikacija s metodama

Pogledajmo sada program

Uvod
koji sadri klasu u koju je mo-
gue unijeti podatke iz drugih
dijelova programa.

program
Na prvi
Varijable
#include <cstdlib>
#include <iostream>

using namespace std;

Donoenje Grafika
class pravokutnik Klasa pravokutnik
{ sadri jednu varija-
private: blu. To je varijabla

odluke
int c; c int tipa, a nalazi
se u private grupi.
public:
void naslov()
{

Petlje
cout << "Povrsina pravokutnika." << endl;
cout << endl;
Osim varijable u
}
private grupi, kla-

Polja
int povrsina (int a, int b)
sa sadri i dvije
{
c = a * b; metode u public
return (c);
Obrada

grupi. To su meto-
teksta

}
}; da naslov() i me-
toda povrsina (int
int main()
Objekti

{ a, int b).
pravokutnik p;
p.naslov();
cout << "Povrsina je ";
Saimanje Veliki pro-

cout << p.povrsina(2,3);


grami

cout << endl << endl; U glavnom progra-


system("PAUSE"); mu formiramo ob-
return 0; jekt p klase pravo-
} kutnik i koristimo
koda

ga.

PRO - MIL 265


Objekti

#include <cstdlib>
#include <iostream>

using namespace std;


Prethodni program malo smo modificirali da bi
class pravokutnik lake mogli shvatiti razliku izmeu naredbe
{ private i naredbe public.
private:
int c;

public:
int pov; U public podruju dodali smo
void naslov() varijablu koju smo nazvali pov.
{
cout << "Povrsina pravokutnika." << endl;
cout << endl;
} Sadraj varijable c koja je formirana u
private podruju i u kojoj se nalazi re-
int povrsina (int a, int b) zultat izrauna povrine spremili smo u
{ varijablu pov koja je formirana u public
c = a * b; podruju.
pov = c;
return (c);
}
}; Ovdje vidimo da sadraju varija-
ble pov moemo pristupiti u
int main() glavnom programu, iako je for-
{ mirana u objektu. Pristupamo joj
pravokutnik p; tako da prvo napiemo naziv
p.naslov(); objekta zatim toku i na kraju
cout << "Povrsina je "; varijablu, dakle u p.pov obliku.
cout << p.povrsina(2,3);
cout << endl; Pokuamo li na isti nain pristu-
piti varijabli c, doi e do greke.
cout << "p.pov je " << p.pov << endl; (elimo li probati, maknimo //
// cout << "p.c je " << p.c << endl; oznaku na poetku reda.)
cout << endl << endl; Ve iz ovog primjera bismo mo-
system("PAUSE"); gli zakljuiti u kojem smislu je c
return 0; varijabla private, a kojem smislu
} je pov varijabla public.

266 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Naredba private oznaava podruje u kojem se nalaze varijable i metode
koje se mogu koristiti unutar klase odnosno unutar objekta, ali se njima ne
moe pristupiti iz glavnog programa, odnosno izvan objekta. U ovom progra-

Uvod
mu u private podruju imamo samo varijablu c. Mogli bismo imati i procedure.

program
Na prvi
Varijable
class pravokutnik Za razliku od private
{ podruja, svemu to
private: formiramo u public
int c; podruju moemo

Donoenje Grafika
pristupiti i izvan kla-
public: se, odnosno izvan
int pov; objekta.
void naslov()
{ To ne moemo uini-

odluke
cout << "Povrsina pravokutnika." << endl; ti tako da samo na-
cout << endl; vedemo naziv varija-
} ble ili procedure ne-
go tako da prvo na-

Petlje
int povrsina (int a, int b) vedemo naziv objek-
{ ta, zatim toku i na
c = a * b; kraju naziv varijable
pov = c; ili procedure. Ako
return (c); pristupamo procedu-
} ri, moramo navesti i Polja
}; zagrade.
Obrada
teksta
Objekti

Ovdje su formirane jo dvije varijable, varijabla a i varijabla b. Iako bi bilo


logino da tim varijablama moemo pristupiti izvan klase odnosno izvan ob-
Saimanje Veliki pro-

jekta, jer su formirane u public podruju, to ipak nije sluaj. Pokuamo li im


grami

pristupiti izvan objekta doi e do greke.

Dakle izvana moemo pristupiti samo onim varijablama koje su u public po-
druju formirane samostalno kao pov varijabla, a ne moemo onima koje su
koda

formirane unutar neke metode.

PRO - MIL 267


Objekti

private: Unutar private podruja u ovom sluaju formirali smo sa-


int c; mo varijablu c. Mogli bismo staviti i procedure, ali u tom
sluaju bismo tim procedurama mogli pristupiti samo
unutar klase odnosno samo unutar objekta. Nain pisa-
nja bio bi isti kao i unutar public podruja.

Ovdje formiramo pov varijablu int tipa. Varijable unutar klase formiramo na pot-
puno jednak nain kao i unutar glavnog programa.

public: Ovdje formiramo meto-


int pov; du za ispis teksta na
zaslon raunala. Takav
void naslov() tip procedure ve smo
{ vidjeli u prethodnim
cout << "Povrsina pravokutnika." << endl; primjerima.
cout << endl;
}
Ovdje formiramo meto-
int povrsina (int a, int b) du za izraun povrine
{ pravokutnika. Vidimo
c = a * b; da joj je oblik drugaiji
pov = c; od oblika naslov() me-
return (c); tode pa emo je poblie
} pogledati.

Do sada smo formiranje


Naziv metode. Ulazne varijable su
metode zapoinjali s void.
unutar zagrada.
Ova metoda zapoinje s int.

to to znai?

To znai da e ova metoda


biti int tipa, odnosno da e
int povrsina ( int a, int b )
rezultat njenog rada biti broj
int tipa.
Ovdje je popis varijabli koje moemo uni-
Naredbom: jeti u metodu.
cout << p.povrsina(2,3);
ispisat emo rezultat rada U ovu metodu moemo unijeti dva broja.
metode povrsina na zaslon, Prvi e biti spremljen u varijablu a, drugi u
a rezultat je broj int tipa. varijablu b, a oba su int tipa.

268 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Pogledajmo jo jednom naredbu za formiranje metode koja zapoinje void
naredbom.

Uvod
Void naredba znai da metoda Prazne zagrade znae da u ovu
naslov nee vraati nikakav re- metodu nita nije mogue unijeti

program
Na prvi
zultat rada. na nain da se napie:

Sad e netko upitati, kako ne p.naslov(2,3);


vraa kad ispisuje tekst na zas-

Varijable
lon. Mogue je unutar metode staviti
cin naredbu pa neto unijeti npr.
Ispisuje, ali se ispisivanje zbiva preko tipkovnice, ali nije mogue
unutar metode. nita unijeti na gore opisan na-
in.

Donoenje Grafika
U glavnom programu mogue je
napisati:

cout << p.povrsina(2,3);

odluke
void naslov ()
ali nije mogue napisati:

cout << p.naslov();

Petlje
Mogue je jedino s:

p.naslov();

Polja
pozvati metodu naslov koja on-
da unutar sebe ispisuje tekst na
zaslon raunala.
Obrada
teksta

c = a * b; Unutar metode mogu se koristiti varijable koje smo


Objekti

pov = c; koristili za unos, varijabla a i varijabla b, te se mogu


koristiti sve one varijable koje su formirane u public
ili private podruju, dakle varijabla c i varijabla pov.
Saimanje Veliki pro-
grami

return (c); Ovom naredbom odreujemo koju vrijednost e pro-


cedura vraati u glavni program, odnosno to e
naredba cout << p.povrsina(2,3); ispisati.
koda

PRO - MIL 269


Objekti

#include <cstdlib>
#include <iostream>

using namespace std;

class racunaj
{
private:
int c;
public:
int metoda1(int a, int b)
{
c = a + b; U ovom programu moemo
return (c); lijepo vidjeti kako o naredbi
}
return ovisi to e se naredbom
int metoda2(int a, int b) r.metoda1(2,4) ispisati na zas-
{
c = a + b; lon raunala.
return (a);
}

int metoda3(int a, int b)


{
c = a + b; Ako smo u me-
return (b); todi upotrijebili
} naredbu return
}; (c), naredbom
r.metoda1(2,4)
int main() ispisat e se
{ sadraj varijable
racunaj r; c.

cout << "return(c) daje " << r.metoda1(2,4) << endl; Naredbom re-
cout << "return(a) daje " << r.metoda2(2,4) << endl; turn(a) ispisat
cout << "return(b) daje " << r.metoda3(2,4) << endl; e se sadraj
varijable a, a
system("PAUSE"); naredbom re-
return 0; turn(b) ispisat
} e se sadraj
varijable b.

270 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
#include <cstdlib>

Uvod
#include <iostream>

using namespace std;

program
Na prvi
class racunaj
{
private:
int a;

Varijable
int b;
int c;
public:
void unesi(void)
U ovom programu imamo

Donoenje Grafika
{
cout << "Unesite stranicu a." << endl; dvije void metode. Meto-
cin >> a; dom unesi unose se bro-
cout << "Unesite stranicu b." << endl; jevi u varijablu a i varijab-
cin >> b; lu b. To se vri unutar

odluke
} metode. Nije mogue
void povrsina(void) napisati naredbu:
{
c = a * b; p.povrsina(2,3);

Petlje
cout << "Povrsina je " << c << endl;
} Mogue je jedino nared-
}; bom:

int main() p.unesi();


{
pozvati metodu za unos Polja
racunaj p;
p.unesi(); brojeva.
p.povrsina();
Obrada
teksta

cout << endl;


system("PAUSE");
return 0;
}
Objekti

Metodom povrsina izra-


unava se povrina i ispi-
suje rezultat.
Saimanje Veliki pro-
grami

Rezultat se ispisuje unu-


tar metode. Nije mogua
naredba:

cout << p.povrsina();


koda

PRO - MIL 271


Objekti

#include <cstdlib>
#include <iostream>

using namespace std;


U ovom programu najprije raunamo povrinu, a
class racunaj
zatim dobiveni rezultat mnoimo sa cijenom kvad-
{
ratnog metra povrine da bismo dobili cijenu povr-
private:
ine.
int a;
int b;
int c;
Vidjeli smo da rezultat
public: izrauna unutar meto-
void unesi(void) de moemo ispisati na
{ dva naina. Ako je me-
cout << "Unesite stranicu a." << endl; toda tipa void onda se
cin >> a; rezultat ispisuje unutar
cout << "Unesite stranicu b." << endl; metode. Tada naredba
cin >> b; tipa:
}
int povrsina(void) cout << povrsina();
{
c = a * b; nije mogua.
return (c);
} Ako metoda nije void
}; Obratimo panju na tipa, nego int ili float ili
injenicu da unutar char, onda je mogue
int main() glavnog programa smi- napisati gore navedenu
{ jemo koristiti c varijab- naredbu.
int c; lu, iako c varijabla pos-
int u; toji u klasi racunaj. Postavlja se pitanje u
racunaj p; emu je razlika u fun-
p.unesi(); kcionalnosti tih dvaju
cout << "Cijena kvadratnog metra." << endl; naina ispisa.
cin >> c;
u = c * p.povrsina(); Razlika je u tome da
cout << "Cijena poda je " << u << endl; ako metoda nije void
cout << endl; tipa, onda metodu mo-
system("PAUSE"); emo koristiti unutar
return 0; izraza poput:
}
u = c * p.povrsina();

272 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Uvod
#include <cstdlib>
#include <iostream>

program
Na prvi
using namespace std;

class racunaj
{

Varijable
private:
int a;
int b;
int c;

Donoenje Grafika
int p;
int u; Ako za ispis koris-
public: timo void metodu
void unesi(void) pa uporaba nared-
{ be return nije mo-

odluke
cout << "Unesite stranicu a." << endl; gua, ispisom re-
cin >> a; zultata unutar me-
cout << "Unesite stranicu b." << endl; tode moemo ispi-
cin >> b; sati vie vrijednos-

Petlje
cout << "Cijena kvadratnog metra." << endl; ti.
cin >> c;
} U ovom sluaju u
void cijena(void) metodi cijena mi
{ ispisujemo povri-
Polja
p = a * b; nu i cijenu.
cout << "Povrsina je " << p << endl;
u = p * c; Da je to int meto-
cout << "Cijena je " << u << endl; da i da rezultat
Obrada
teksta

} vraamo return
}; naredbom, mogli
bi napisati ili return
int main() (p) ili return(u), ali
Objekti

{ ne bismo mogli
racunaj p; vratiti obje vrijed-
p.unesi(); nosti.
p.cijena();
Saimanje Veliki pro-

Ukratko, koju od
grami

cout << endl; metoda ispisa e-


system("PAUSE"); mo upotrijebiti ovi-
return 0; si o potrebama
} koje moramo za-
koda

dovoljiti.

PRO - MIL 273


Objekti

Naredba cout << p.povrsina(2,3); zbunjujua je izmeu ostalog i zato to istov-


remeno slui za unos broja 2 i broja 3 u metodu i za ispis rezultata mnoenja,
odnosno rezultata rada metode.

Kad raunalo naie na ovak-


cout << p.povrsina( 2, 3 ); vu naredbu, najprije e broj
dva i broj tri proslijediti u vari-
jablu a i varijablu b koje se
nalaze u metodi povrsina.

int povrsina ( int a, int b ) Unutar metode povr-


sina raunalo e sa-
draj varijable a i va-
{ rijable b pomnoiti, a
rezultat spremiti u
varijablu c.
c = a * b;

return ( c );

Kad raunalo naie na


naredbu return(c),
cout << p.povrsina(2,3) ; sadraj varijable c ispi-
sat e na zaslon rau-
nala.

Ova naredba tada e


funkcionirati kao da
smo u programu koji
ne sadri klase i objek-
te napisali:

cout << c;

274 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Uvod
program
Na prvi
#include <cstdlib>
#include <iostream>

Varijable
using namespace std;

class pravokutnik
{
private:

Donoenje Grafika
float c;
public:
void naslov()
{ Kao to smo ve
rekli, metode ne

odluke
cout << "Povrsina pravokutnika." << endl;
cout << endl; moraju biti int tipa.
} Mogu biti i nekog
float povrsina (float a, float b) drugog tipa. U
{ ovom programu

Petlje
c = a * b; imamo metodu
return (c); float tipa.
}
};

int main() Polja


{
float a1;
Obrada
teksta

float b1;
pravokutnik p;
p.naslov();
cout << "Unesite stranicu a." << endl;
Objekti

cin >> a1; Vidimo da nared-


cout << "Unesite stranicu b." << endl; bu:
cin >> b1;
cout << "Povrsina je "; p.povrsina(a1,b1)
Saimanje Veliki pro-

cout << p.povrsina(a1,b1);


grami

cout << endl << endl; moemo pisati i


system("PAUSE"); tako da unutar
return 0; zagrada umjesto
} konkretnih brojeva
koda

stavimo varijable.

PRO - MIL 275


Objekti

Razdvajanje deklaracije i definicije

Do sada su se metode nalazile


unutar klase. U sloenijim pro-
gramima najee je deklaraci-
ja klase odvojena od definicija
metoda.

U deklaraciji klase metode se


samo nabroje, a definicije me-
toda se nalaze drugdje.

#include <cstdlib>
#include <iostream> U deklaraciji klase samo su
nabrojeni elementi klase i po-
using namespace std; dijeljeni u private i public pod-
ruje.
class pravokutnik
{ Ovdje se nalazi samo zaglav-
private: lje metode pravokutnik u ko-
int c; jem su odreena ulazna i izla-
public: zna svojstva metode, ali ovdje
int povrsina (int a, int b);
nema sadraja metode.
};

int pravokutnik :: povrsina (int a, int b)


{ Sadraj metode pravokut-
c = a * b; nik, odnosno dio programa
return (c); kojim odreujemo to e
}; metoda pravokutnik raditi
nalazi se ovdje.
int main()
{
cout << "Povrsina pravokutnika" << endl;
cout << endl; Ovako napisanu
pravokutnik p; klasu koristimo
cout << "Povrsina je = " << p.povrsina(2,3) << endl; na isti nain kao
cout << endl; i klase koje smo
system("PAUSE"); do sada koristili.
return 0;
}

276 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Pogledajmo kako su povezane deklaracija metode i definicije metode.

Uvod
Tip vrijednosti koju e metoda Obvezna ; ozna-
vraati kao rezultat. U ovom ka
sluaju je int, a mogao bi biti i Deklaracija metode u dek-
neki drugi npr. float.

program
Na prvi
laraciji klase. Ovdje je na-
veden naziv metode i ulaz-
no-izlazna svojstva meto-
de, ali ne i program meto-
de.

Varijable
int povrsina (int a, int b) ;
Definicija me-

Donoenje Grafika
tode. Ovdje
se nalazi pro-
gram koji od-
reuje to ta
metoda radi,

odluke
odnosno svoj-
int pravokutnik :: povrsina (int a, int b) stva metode.

Petlje
Popis varijabli preko
Naziv klase. Naziv metode. kojih se brojevi mogu
unijeti u metodu.

Polja
Obvezna :: oznaka izmeu naziva klase i
naziva metode. Obrada
teksta

U veini sluajeva do sada noviji nain izrade programa bio je elegantniji


od starog. U ovom sluaju to ba ne izgleda tako. Ovakav nain pisanja
klase oigledno je manje elegantan od prethodnog. Postoji vea vjerojat-
Objekti

nost da e doi do greke budui da treba uskladiti deklaraciju metode i


definiciju metode.

Ovaj nain pisanja klasa doista je manje elegantan od naina koji smo kori-
Saimanje Veliki pro-

stili u prethodnim programima i ima ga smisla upotrebljavati samo kad eli-


grami

mo vei program razdijeliti u vie datoteka. Ako klase piemo na ovaj na-
in, tada moemo u jednu datoteku staviti sve deklaracije klasa, a u druge
datoteke definicije metoda. Ako se program nalazi u jednoj datoteci, bolje je
definiciju metode napisati unutar deklaracije metode kao to smo to inili u
koda

prethodnim programima.

PRO - MIL 277


Objekti

Uporaba konstruktora

#include <cstdlib>
#include <iostream>

using namespace std;

class pravokutnik
{ U ovom programu nalazi se nekoli-
private: ko neobinosti.
int a;
int b; Prva neobinost jest ova metoda.
public: Neobino je to to ima isti naziv
pravokutnik(void) kao i klasa. Klasu smo nazvali pra-
{ vokutnik i ova metoda zove se pra-
cout << "Stranica a:" << endl; vokutnik.
cin >> a;
cout << "Stranica b:" << endl; Druga neobinost jest to ova me-
cin >> b; toda nema nikakvu oznaku povrat-
} ne vrijednosti, nije ni void pravoku-
int povrsina(void) tnik(), ni int pravokutnik().
{
return (a * b);
}
}; Neobino 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 pravoku-
system("PAUSE"); tnik, a ve u slje-
return 0; deem redu po-
} zivamo metodu
povrsina.

Iako nigdje u programu nije vidljivo pozivanje metode pravokutnik, njen sadraj
se oigledno izvrava. Oigledno je da prije izvoenja metode povrina rauna-
lo unosi stranicu a i stranicu b. Takva metoda naziva se konstruktor, a izvrava
se u trenutku formiranja objekta. Dakle, ova metoda izvrila se u trenutku kad
smo naredbom pravokutnik.p formirali objekt p klase pravokutnik.

278 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Uvod
#include <cstdlib>
#include <iostream>

program
Na prvi
using namespace std;

class pravokutnik

Varijable
{ U ovom programu imamo
private: dva konstruktora.
int a;
int b; Jednome je ulazni dio void

Donoenje Grafika
public: tipa, to znai da se u njega
pravokutnik(void) ne moe unositi vrijednost
{ tako da napiemo:
cout << "Stranica a:" << endl;
cin >> a; pravokutnik p2(3,4);

odluke
cout << "Stranica b:" << endl;
cin >> b;
}
Drugome je ulazni dio (int a1,
pravokutnik(int a1, int b1)
int b1), to znai da se u nje-

Petlje
{
ga moe vrijednost unositi
a = a1;
tako da napiemo:
b = b1;
}
pravokutnik p2(3,4);
int povrsina(void)
Polja
{
return (a * b);
}
}; Ovdje formiramo objekt klase pravokutnik bez
Obrada
teksta

vrijednosti u zagradi. U tom sluaju primijenit


e se pravokutnik(void) konstruktor.
int main()
{
pravokutnik p1;
Objekti

cout << "Povrsina je " << p1.povrsina() << "." << endl;
cout << endl;
pravokutnik p2(3,4);
cout << "Za p2(3,4) povrsina je " << p2.povrsina() << "." << endl;
Saimanje Veliki pro-

cout << endl;


grami

system("PAUSE");
return 0; Objekt p2(3,4); u zagradi ima dva broja, pa e se u
} tom sluaju primijeniti pravokutnik(int a1, int b1) kon-
struktor. U tom sluaju povrina e se izraunati
koda

mnoenjem brojeva 3 i 4, bez unosa tipkovnicom.

PRO - MIL 279


Objekti

Nasljeivanje

#include <cstdlib>
#include <iostream>

using namespace std;

class kvadrat
Klasa kvadrat napisana je na
{
uobiajeni nain.
protected:
int br;
public:
void unos (void)
{ Klasa kub napisana je na nain koji
cout << "Unesite broj:" << endl; do sada nismo koristili.
cin >> br;
} Naredbom:
int izracun (void)
{ class kub : public kvadrat
return (br * br);
} formiramo klasu kub koja nasljeuje
}; varijable i metode klase kvadrat. Dak-
class kub : public kvadrat le klasa kub moe koristiti metodu
{ unos, iako je ona definirana u klasi
public: unos.
int izracun(void)
{
return (br * br * br);
Objekt objekt2 klase kub moe koristiti meto-
}
du unos koja se nalazi u klasi kvadrat kao da
};
je njezina klasa. To je mogue jer je klasa
kub naslijedila klasu kvadrat.
int main()
{
kvadrat objekt1;
objekt1.unos();
cout << "Kvadrat je " << objekt1.izracun() << endl; Metodu izracun
cout << endl; posjeduju obje
kub objekt2; klase. U tom slu-
objekt2.unos(); aju klasa kub ko-
cout << "Kub je " << objekt2.izracun() << endl; ristit e svoju inai-
cout << endl; cu objekta izracun.
system("PAUSE"); Inaica u klasi kub
return 0; prekrila je inaicu
} u klasi kvadrat.

280 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Pogledajmo meusobnu povezanost bitnih dijelova programa u kojem je primi-
jenjena tehnika nasljeivanja klasa.

Uvod
U klasi kvadrat definirane su
class kvadrat

program
Na prvi
dvije metode, metoda unos i
metoda izraun.
void unos (void) Klasu kvadrat moemo koristiti
na nain koji smo koristili u do-

Varijable
sadanjim primjerima.
int izracun (void)

Donoenje Grafika
Naziv nove klase. Naredba za nas-
Klasa koju klasa kub nasljeuje.
ljeivanje klase.

odluke
class kub : public kvadrat Ovako deklarirana klasa kub
nasljeuje sve varijable i me-

Petlje
tode klase kvadrat.
int izracun (void) Klasa sadri metodu izracun,
iako metodu izraun posjeduje

Polja
i klasa kvadrat koju nasljeuje.

U tom sluaju klasa kub koris-


tit e vlastitu inaicu metode
Obrada

kub objekt2;
teksta

izracun.
Objekti

objekt2.unos(); Ovdje koristimo metodu unos, iako je kla-


sa kub ne posjeduje. To je mogue jer
klasa kub nasljeuje klasu kvadrat, a kla-
sa kvadrat sadri klasu unos.
Saimanje Veliki pro-
grami

Iako metodu izracun posjeduje i klasa kva-


objekt2.izracun() drat, objekt2 koristit e vlastitu inaicu me-
koda

tode izraun.

PRO - MIL 281


Veliki programi

282 PRO - MIL


PRO - MIL
Veliki programi

Saimanje Veliki pro- Objekti Obrada Polja Petlje Donoenje Grafika Varijable Na prvi Uvod Sadraj
koda grami teksta odluke program

283
C++ programiranje za apsolutne poetnike
Veliki programi

Jednostavna igra u jednoj datoteci

#include <cstdlib> Ovaj program neto je vei od pro-


#include <iostream> grama koje smo do sada pisali, pa
#include <winbgim.h> e se zato protezati kroz nekoliko
#include <ctime> stranica.

using namespace std;


Ovdje se nalazi deklaracija klase
class objekt objekt. Sastoji se od dvije varijab-
{ le, x i kretanje; te od dvije metode,
private: pomak i crtaj.
int x;
char kretanje;
public:
objekt() Unutar deklaracije klase nalazi se
{ konstruktor koji varijabli x daje
x = 290; poetnu vrijednost 290.
}
void pomak(char); Ta varijabla odreuje poziciju ob-
void crtaj(); jekta koji pomiemo pomou tip-
}; kovnice.
void objekt :: pomak(char tipka)
{
kretanje = tipka;
if (kretanje == 75) Ovdje je sadraj metode pomak.
{
setcolor (WHITE); U metodu se unosi podatak o
rectangle(x, 432, x+60, 438); tome koja tipka je pritisnuta.
setcolor (BLACK);
x = x - 5; Metoda ispituje je li pritisnuta
} strelica u lijevu ili strelica u des-
if (kretanje == 77) nu stranu. Ako je neka od tih
{ tipki pritisnuta, vrijednost varijab-
setcolor (WHITE); le x koja odreuje poloaj objek-
rectangle(x, 432, x+60, 438); ta koji pomiemo adekvatno e
setcolor (BLACK); se poveati ili smanjiti.
x = x + 5;
}
}
void objekt :: crtaj() Ovdje je sadraj metode crtaj. Ona
{ crta objekt koji pomiemo pomou
rectangle(x, 432, x+60, 438); strelica na tipkovnici.
}

284 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Male programe moemo smjestiti u jednu datoteku. Za vee programe to nije
praktino rjeenje. Ako je veliki program u jednoj velikoj datoteci tee je pro-
nai greku, tee je napraviti izmjenu programa i tee je podijeliti posao iz-

Uvod
meu vie programera.

U ovom poglavlju vidjet emo kako podijeliti jedan neto vei program u vie
datoteka. Najprije emo program napisati u jednoj velikoj datoteci, a zatim ga

program
Na prvi
podijeliti u vie manjih datoteka.

Varijable
Ovdje se nalazi deklaracija klase bomba. Sastoji
se od varijabli x i y koje odreuju poloaj bombe na
zaslonu te metode crtanje koja crta bombu i od
metode brisanje koja brie bombu da bi se dobila
iluzija kretanje bombe.

Donoenje Grafika
class bomba
{
Deklaracija sadri konstruktor koji odreuje poet-
private:
nu poziciju bombe.
int x, y;
public:

odluke
bomba()
{
x = (static_cast <float> (rand()) / RAND_MAX) * 620;
y = -((static_cast <float> (rand()) / RAND_MAX) * 480);

Petlje
}
void crtanje();
void brisanje();
};

Polja
void bomba :: crtanje()
Sadraj metode crtanje.
{
rectangle (x,y,(x+20),(y+5));
}
Obrada

void bomba :: brisanje()


teksta

{ Sadraj metode brisanje.


setcolor(WHITE);
rectangle (x,y,(x+20),(y+5));
setcolor(BLACK);
Objekti

y = y + 5;
if (y > 490)
{
Saimanje Veliki pro-

y = -((static_cast <float> (rand()) / RAND_MAX) * 480);


grami

x = (static_cast <float> (rand()) / RAND_MAX) * 620;


}
}
koda

PRO - MIL 285


Veliki programi

Ovdje se nalazi glavni dio programa koji e koristi-


ti prije formirane klase.

Odreivanja svojstva grafike, velii-


ne grafikog prozora, boje pozadi-
int main() ne i boje objekata.
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, ""); Formiranje varijable odgovor u ko-
setbkcolor(WHITE); joj e se nalaziti podatak o trenutno
setcolor(BLACK); pritisnutoj tipki.
cleardevice();

Formiranje generatora sluajnih


brojeva kojim emo odreivati
char odgovor = 'd'; mjesto pojavljivanja bombi, odnos-
no objekata koji se kreu odozgo
prema dolje.

srand(time(NULL));
Formiranje triju objekta klase bom-
ba, bomba1, bomba2 i bomba3.
To su objekti koji se kreu odozgo
bomba bomba1, bomba2, bomba3;
prema dolje.

objekt brod; Formiranje objekata brod klase


objekt. To je objekt koji mi pomie-
mo pomou tipkovnice, koristei
strelicu u lijevo i strelicu u desno.
brod.crtaj();

Crtanje objekta koji pomiemo na


poetnoj poziciji koritenjem meto-
do de crtaj.
{
bomba1.brisanje();
bomba2.brisanje();
bomba3.brisanje(); Ovdje se u svakom objektu klase
bomba poziva metoda brisanje
bombe na staroj poziciji.

286 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Ovdje se u svakom objektu klase
bomba poziva metoda za crtanje bom-
be na novoj poziciji.

Uvod
Neprestanim brisanjem bombe na sta-
roj poziciji i crtanjem na novoj stvara
se iluzija kretanja, odnosno padanja

program
Na prvi
bomba1.crtanje(); bombi.
bomba2.crtanje();
bomba3.crtanje();

Varijable
Naredba koja zaustavlja program odre-
eno vrijeme. Slui za regulaciju brzine
igre.
delay(1);

Donoenje Grafika
Ovdje ispitujemo je li pritisnuta neka
if (kbhit()) tipka na tipkovnici.
{

odluke
Ako je pritisnuta neka tipka na tipkovni-
ci, ovdje se kod pritisnute tipke sprema
odgovor = getch(); u varijablu odgovor.

Petlje
Ovdje se poziva metoda pomak koja e
brod.pomak(odgovor);
obrisati objekt na staroj poziciji.
}

Ovdje se poziva metoda crtaj koja e Polja


brod.crtaj(); nacrtati objekt na novoj poziciji.
Obrada
teksta

Izvoenje igre prekida se pritiskom na


} tipku k.
Objekti

Ovdje se ispituje je li pritisnuta tipka k i,


ako je pritisnuta, izvoenje igre se zau-
while (odgovor != 'k'); stavlja.
Saimanje Veliki pro-
grami

return 0; Nemojmo zaboraviti da sva etiri dijela


} programa moraju biti unijeta u nau pro-
gramsku okolinu da bismo mogli pokre-
koda

nuti program.

PRO - MIL 287


Veliki programi

Jednostavna igra u vie datoteka

Pogledajmo sada kako emo prethodni program


raspodijeliti u vie datoteka.

Otvorimo novi projekt na uobiajen nain.

Prije toga otvorimo praznu mapu u koju emo


spremiti novi projekt.

Izaberemo Console Application.

288 PRO - MIL


PRO - MIL
U Parameters unesemo -lbgi -lgdi32
Izaberemo Postavke projekta.

Saimanje Veliki pro- Objekti Obrada Polja Petlje Donoenje Grafika Varijable Na prvi Uvod Sadraj
koda grami teksta odluke program

289
C++ programiranje za apsolutne poetnike
Veliki programi

1 - Desni klik na naziv pro-


jekta. U naem sluaju je
to Projekt1.

2 - Klik na Novo.

Otvorit e se nova datoteka


pod nazivom Neimenovano1.

290 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
1 - Desni klik na Neimenovano1.

Uvod
program
Na prvi
Varijable
2 - Klik na Preimenuj datoteku.

Donoenje Grafika
odluke
Datoteku preimenujemo u bom- Petlje
Polja
ba.cpp i kliknemo na OK.
Obrada
teksta
Objekti
Saimanje Veliki pro-
koda grami

PRO - MIL 291


Veliki programi

Na taj nain formirali smo


datoteku bomba.cpp.

Na slian nain formirat emo datoteke:

- bomba.h
- objekt.cpp
- objekt.h

292 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
U datoteku bomba.cpp spremimo me-
tode klase bomba; metodu crtanje i

Uvod
metodu brisanje.

program
Na prvi
Varijable
Donoenje Grafika
Ovaj dio isti je kao u programu koji

odluke
se nalazi u jednoj datoteci.

Ovom naredbom ukljuuje se Razlika je u tome to su dodane


biblioteka grafikih naredbi. dvije include naredbe.

Petlje
Ovom naredbom ukljuuje se
datoteka bomba.h u kojoj se
#include <winbgim.h>
nalazi deklaracija klase bom-
Polja
#include "bomba.h"
ba.
void bomba :: crtanje()
Ovdje ukljuujmo datoteku u
{
kojoj se nalazi deklaracija kla-
Obrada

rectangle (x,y,(x+20),(y+5));
teksta

se ije metode ovdje definira-


}
mo.
void bomba :: brisanje()
{
setcolor(WHITE);
Objekti

rectangle (x,y,(x+20),(y+5)); Ovaj dio programa isti je kao i u


setcolor(BLACK); prethodnoj inaici.
y = y + 5;
Saimanje Veliki pro-

if (y > 490)
grami

{
y = -((static_cast <float> (rand()) / RAND_MAX) * 480);
x = (static_cast <float> (rand()) / RAND_MAX) * 620;
}
}
koda

PRO - MIL 293


Veliki programi

U datoteku bomba.h spremimo


deklaraciju klase bomba.

Ovo je dio programa koji se u ovoj inaici razli-


kuje od inaice sa samo jednom datotekom.

Ako je naziv datoteke bomba.h, ovaj dio imat


e oblik:

#ifndef BOMBA_H
#define BOMBA_H
#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 poinje nared-
bom #ifndef.
#endif

294 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
U datoteku objekt.cpp spremimo
metode klase bomba; metodu

Uvod
pomak i metodu crtaj.

program
Na prvi
Varijable
Donoenje Grafika
Naredbama #include
ukljuimo grafiku biblio-
teku winbgim.h i dato-
teku objekt.h u kojoj se

odluke
nalazi deklaracija klase
#include <winbgim.h> objekt.
#include "objekt.h"
Kad bi se deklaracija klase

Petlje
void objekt :: pomak(char tipka)
{ nalazila u drugaije nazvanoj
kretanje = tipka; datoteci, npr. datoteci naziv.h,
if (kretanje == 75) morali bismo napisati:
{
Polja
setcolor (WHITE); #include "naziv.h"
rectangle(x, 432, x+60, 438);
setcolor (BLACK); Naziv datoteka moemo birati,
x = x - 5; a nastavak h je obvezan. Na
Obrada
teksta

} program naredbom:
if (kretanje == 77)
{ #include <winbgim.h>
setcolor (WHITE);
Objekti

rectangle(x, 432, x+60, 438); ukljuuje samo grafiku biblio-


setcolor (BLACK); teku jer druge biblioteke ne
x = x + 5; koristimo. Da npr. neto rau-
} namo morali bismo nared-
Saimanje Veliki pro-

} bom:
grami

void objekt :: crtaj()


{ #include <cmath>
rectangle(x, 432, x+60, 438);
} ukljuiti i matematiku biblio-
koda

teku.

PRO - MIL 295


Veliki programi

U datoteku objekt.h unosimo


deklaraciju klase objekt.

I ova deklaracija klase zapoinje naredbom


#ifndef i naredbom #define iza kojih se nalazi
naziv datoteke u kojoj je deklaracija klase.

#ifndef OBJEKT_H Budui da se deklaracija klase objekt nalazi


#define OBJEKT_H u datoteci objekt.h iza naredbe #ifndef i na-
redbe #define, pie se OBJEKT_H.
class objekt
{ Kad bi se deklaracija klase nalazila npr. u
private: datoteci klasa.h, ovaj dio imao bi oblik:
int x;
char kretanje; #ifndef KLASA_H
public: #define KLASA_H
objekt()
{
x = 290;
}
void pomak(char);
void crtaj();
};
Naredbu #endif pisat emo na kraju svake
#endif datoteke koja poinje naredbom #ifndef.

296 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
Glavni program se u ovoj #include <cstdlib>
inaici razlikuje od inaice #include <iostream>
koja se cijela nalazi u jednoj #include <winbgim.h>

Uvod
datoteci po tome to u ovoj #include <ctime>
inaici moramo osim:

#include <cstdlib>

program
Na prvi
using namespace std;
#include <iostream>
#include <winbgim.h> #include "objekt.h"
#include "bomba.h"
dodati i naredbe:

Varijable
int main()
#include "objekt.h" {
#include "bomba.h" int gdriver = 9;
int gmode = 2;
kojima se u program uklju-

Donoenje Grafika
initgraph(&gdriver, &gmode, "");
uju datoteke koje sadre setbkcolor(WHITE);
deklaracije klase objekt i setcolor(BLACK);
klase bomba. cleardevice();
char odgovor = 'd';

odluke
srand(time(NULL));
Glavni program nalazi se bomba bomba1, bomba2, bomba3;
u datoteci mani.cpp. objekt brod;
brod.crtaj();

Petlje
do
{
bomba1.brisanje();
bomba2.brisanje();
bomba3.brisanje();
bomba1.crtanje(); Polja
bomba2.crtanje();
bomba3.crtanje();
Obrada

delay(2);
teksta

if (kbhit())
{
odgovor = getch();
brod.pomak(odgovor);
Objekti

}
brod.crtaj();
}
while (odgovor != 'k');
Saimanje Veliki pro-
grami

return 0;
}
koda

PRO - MIL 297


Veliki programi

Rezultat izvoenja
naeg programa iz-
gledat e otprilike
ovako.

Ovo su bombe koje


se kreu odozgo pre-
ma dolje.

Ovo je brod koji


strelicom lijevo mo-
emo pomicati u lije-
vu stranu i strelicom
desno u desnu stra-
nu.

Prilikom prvog prevoenja i pok-


retanja ovog programa program-
ska okolina e nas upozoriti da
je dolo do pretvaranja varijable
float tipa u varijablu int tipa.

Upozorenje emo zanemariti,


budui da to nije greka, ve
smo to uinili namjerno prilikom
generiranja sluajnog broja.

Prilikom sljedeeg prevoenja i


pokretanja programa ovo upozo-
renje se vie nee pojavljivati.

298 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
main.cpp
U ovom shematskom prika-
using namespace std; zu naeg programa moe-

Uvod
mo vidjeti logiku po kojoj se
#include "objekt.h" program podijeljen u vie
datoteka povezuje u jednu

program
Na prvi
#include "bomba.h" cjelinu.

int main() Koristei ovu logiku, moe-


{ mo daleko vei program
GLAVNI PROGRAM; razdijeliti na vei broj dato-

Varijable
} teka.

Donoenje Grafika
objekt.h bomba.h

#ifndef OBJEKT_H #ifndef BOMBA_H

odluke
#define OBJEKT_H #define BOMBA_H

class objekt class bomba


{ {

Petlje
DEKLARACIJA KLASE; DEKLARACIJA KLASE;

}; };

Polja
#endif #endif
Obrada
teksta

objekt.cpp bomba.cpp

#include "objekt.h" #include "bomba.h"


Objekti

void objekt :: pomak(char tipka) void bomba :: crtanje()


{ {
SADRAJ OBJEKTA; SADRAJ OBJEKTA;
Saimanje Veliki pro-

} }
grami

void objekt :: crtaj() void bomba :: brisanje()


{ {
SADRAJ OBJEKTA; SADRAJ OBJEKTA;
koda

} }

PRO - MIL 299


Saimanje koda

300 PRO - MIL


PRO - MIL
Saimanje koda

Saimanje Veliki pro- Objekti Obrada Polja Petlje Donoenje Grafika Varijable Na prvi Uvod Sadraj
koda grami teksta odluke program

301
C++ programiranje za apsolutne poetnike
Saimanje koda

Primjeri saetog pisanja koda

Do sada smo, osim u nekoliko izuzetaka, programe pisali na kolski nain


trudei se da naredbe prije svega budu to razumljivije.

Mnoge naredbe mogu se, osim na nain koji smo do sada vidjeli, pisati na na-
in koji skrauje pisanje, ponekad ak ubrzava rad programa, ali koji je poet-
nicima moda neto manje razumljiv.

Doavi do kraja knjige, vie nismo poetnici i vrijeme je da se upoznamo s


nekim nainima skraenog pisanja programa.

Obje inaice progra-


ma radit e potpuno
isti pisao, zbrojit e
dva broja.

#include <cstdlib>
#include <iostream>
U sluaju da formi-
#include <cstdlib> ramo vie varijabli using namespace std;
#include <iostream> istog tipa, ne mo-
ramo svaku staviti int main()
using namespace std; u zasebni red, ne- {
go ih moemo 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"); moemo napisati:
return 0;
} int a, b, c;

302 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
#include <cstdlib> Umjesto:
#include <iostream> #include <cstdlib>
int a; #include <iostream>

Uvod
using namespace std; a = 12;
using namespace std;
int main() moemo napisa-
ti: int main()

program
Na prvi
{
int a; {
a = 12; int a = 12; int a = 12;
cout << a << endl; cout << a << endl;
system("PAUSE"); system("PAUSE");

Varijable
return 0; return 0;
} }

Donoenje Grafika
U if naredbi mogu se
#include <cstdlib>
izbaciti vitiaste zagra-
#include <iostream>
de, ako se unutar viti-
astih zagrada nalazi

odluke
using namespace std;
jedan red.
int main()
Ako se nalazi vie re-
{
dova, uporaba vitias-
int a;

Petlje
tih zagrada je obvezna.
cin >> a;
if (a > 12)
{
cout << "Broj je veci od 12." << endl;

Polja
}
#include <cstdlib>
else
#include <iostream>
{
cout << "Broj nije veci od 12." << endl;
Obrada

using namespace std;


teksta

}
cout << a << endl;
int main()
system("PAUSE");
{
return 0;
int a;
Objekti

}
cin >> a;
if (a > 12)
cout << "Broj je veci od 12." << endl;
else
Saimanje Veliki pro-
grami

cout << "Broj nije veci od 12." << endl;


cout << a << endl; Ova inaica prog-
system("PAUSE"); rama radit e jed-
return 0; nako kao i gornja
} inaica s vitiastim
koda

zagradama.

PRO - MIL 303


Saimanje koda

Ovo je program za vae-


#include <cstdlib> nje kvadratnog korijena.
#include <iostream> Ako je broj pozitivan, izra-
#include <cmath> unat e kvadratni kori-
jen, a ako je negativan,
using namespace std; ispisat e obavijest da je
broj negativan.
int main()
{ U ovom dijelu programa
float a, b; vitiaste zagrade moe-
cin >> a; mo izbaciti jer se unutar
if (a < 0) vitiastih zagrada nalazi
{ samo jedan red.
cout << "Broj je negativan." << endl;
} U ovom dijelu programa
else vitiaste zagrade ne mo-
{ emo izbaciti jer se unu-
b = sqrt(a); tar vitiastih zagrada na-
cout << b << endl; lazi vie od jednog reda.
}
system("PAUSE");
return 0;
}

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

using namespace std;

int main()
{
float a, b;
cin >> a;
if (a < 0)
cout << "Broj je negativan." << endl;
else
Ako bismo ovom djelu vitiaste
b = sqrt(a);
zagrade izbacili, ne bismo dobili
cout << b << endl;
obavijest o greki, ali program
system("PAUSE");
ne bi ispravno radio, ako bismo
return 0;
pokuali izraunati kvadratni
}
korijen iz negativnog broja.

304 PRO - MIL


C++ programiranje za apsolutne poetnike

Sadraj
I u petljama se moe izostaviti vitiasta zag-
#include <cstdlib>
rada ako se unutar vitiaste zagrade nalazi
#include <iostream>
samo jedan red.

Uvod
using namespace std;

int main() #include <cstdlib>

program
Na prvi
{ #include <iostream>
int x;
for (x=10; x<17; x=x+1) using namespace std;
{
cout << x << endl;

Varijable
int main()
} {
system("PAUSE"); int x;
return 0; for (x=10; x<17; x=x+1)
} cout << x << endl;

Donoenje Grafika
U ovoj inaici programa system("PAUSE");
unutar for petlje ne koriste return 0;
se vitiaste zagrade. }

odluke
#include <cstdlib> Umjesto x=x+1 moemo
#include <iostream> napisati:

Petlje
using namespace std; x++
int main() Pokrenemo li bilo koju od
{ ove tri inaice programa,
Polja
int x; dobit emo jednak rezultat.
for (x=10; x<17; x++)
cout << x << endl;
system("PAUSE");
Obrada
teksta

return 0;
}
Objekti

Na slian nain moemo


umjesto:
Saimanje Veliki pro-

x = x - 1;
grami

napisati:

x-- (Dva minusa, bez raz-


koda

maka.)

PRO - MIL 305


Saimanje koda

Umjesto x=x+5; moemo napisati x+=5;


#include <cstdlib>
#include <iostream>

using namespace std;


#include <cstdlib>
#include <iostream> int main()
{
using namespace std;
int x;
int main() for (x=5; x<51; x+=5)
{ cout << x << endl;
int x; system("PAUSE");
for (x=5; x<51; x=x+5) return 0;
cout << x << endl; }
system("PAUSE");
return 0;
}
Umjesto x=x-5 moemo napisati x-=5.

Umjesto #include <cstdlib>


#include <iostream>
if (x != 0)
using namespace std;
moemo napisati
int main()
if (x) {
int x;
cin >> x;
if (x)
#include <cstdlib> cout << "Broje nije nula." << endl;
#include <iostream> else
cout << "Broje je nula." << endl;
using namespace std; system("PAUSE");
return 0;
int main() }
{
int x;
cin >> x;
if (x != 0)
cout << "Broje nije nula." << endl;
else Korisnost nekih od navedenih kra-
cout << "Broje je nula." << endl; enja prilino je dvojbena jer u
system("PAUSE"); nekim sluajevima zbog utede
return 0; jednog znaka naruavamo itlji-
} vost programa.

306 PRO - MIL