You are on page 1of 307

 

C++ programiranje za apsolutne po č etnike

programiranje
za apsolutne početnike

PRO - MIL
 

Naslov knjige: C++ programiranje za apsolutne po četnike


 Autor: Jakopec Ratko, ing
Naklada: PRO-MIL d.o.o. za nakladu, informatiku i edukaciju, Varaždin,
R. Boškovića 20, 42000 Varaždin, tel: 042 / 203 981, 233 971,
fax: 042 / 203 991, www.pro-mil.hr
Urednik: Nenad Milijaš, dipl. inf.
Lektura: Ružica Gregurić, dipl. učitelj
Korektura: PRO-MIL d.o.o.
Recenzija: Igor Kos, dipl. inf.
Naslovnica: Brigita Jakopec, prof.
Tiskara: Tiskara Varteks , Varaždin
ISBN: 953-7156-19-2
Copyright: © PRO-MIL d.o.o. za nakladu, informatiku i edukaciju,
Varaždin

CIP – Katalogizacija u publikaciji


Nacionalna i sveučilišna knjižnica – Zagreb

UDK 004.43 C++(035)

JAKOPEC, Ratko
C++ programiranje za apsolutne po četnike / Ratko Jakopec. – Varaždin :
Pro-mil, 2006.

ISBN 953-7156-19-2

I. C++ programski jezik -- Priručnik

460125024

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

Sve o č emu smo pisali u ovoj knjizi, uspješno je primijenjeno na ra č unalima, stoga ne snosimo nikakvu
odgovornost za eventualnu štetu koja bi se mogla povezati s uputama iz knjige.

U ovoj knjizi objašnjen je program Dev C++, autora: Colin Laplace, Mike Berg, Hongli Lai. Program se
nalazi na priloženom CD-u, slobodan je za objavljivanje i umnožavanje.

Pojmovi za koje se zna da su zaštitni znakovi napisani su po četnim velikim slovom. Nakladnik ne može
provjeriti točnost niti želi utjecati na vjerodostojnost zaštitnih znakova.

2 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g

 
  a   o
  r
   N  p

   j
  e
   l
   b
  a
   j
   i
  r
  a

  a
   V

  a
   k
   i
   f

   ž
  a
  r
   G

  r
  e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o

   d
  o
   D

  e
   j
   l
   t

  a
  e
   P

  a
   j
   l

   S
  o
   P

  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 3
 

Sadržaj

Uvod 7
Što je to program, a što programiranje? 8
Je li teško naučiti programirati? 8
Zašto baš C++? 9
Zašto baš Dev-C++? 10
Kako se uči programiranje? 10
Kako dalje nakon ove knjige? 10
Instaliranje Dev-C++ programskog okruženja 12
Formiranje radne mape 20
Instalacija grafike 22
Naš prvi program 25
Formiranje projekta 26
Mogući problem 32
Pokretanje programa 34
Greška u programu 38
 Analiza programa 40
Gruba skica programa 42
Varijacije programa 43
Distribucija programa 47
Učitavanje spremljenog projekta 49
Varijable 53
Osnovne računske operacije 54
Varijable 58

4 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
 Analiza programa 60   a
   S

Varijacije programa 63    d


  o
  v
   U
Problem dijeljenja 67
   i  
Uljepšavanje programa 69   v
  r   m
  p   a
  r
   š   g
  a   o
Nekoliko primjera programa 71   r
   N  p

  e
Grafika 75    l
   b
  a
   j
   i
  r
Podešavanje programskog okruženja 76   a
   V

Naš prvi grafički program 77   a


   k
   i
   f
  a
  r
 Analiza programa 78    G
  e
   j
Varijacije programa 83   n   e
  e   k
   š   l
  u
  o   d
  n   o
Crtanje pravokutnika 86   o
   D
Crtanje crte 88   e
   j
   l
   t
  e
Crtanje točke 95    P

Ispis teksta 97   a


   j
   l
  o
   P
Donošenje odluke 103
Funkcije 104   a   a
   d   t
  a
  r   s
   b   k
  e
Donošenje odluke 108    O   t

   i
Switch naredba 126    t
   k
  e
   j
   b
Petlje 129    O
  -
  o   i
For petlja 130   r
  p
   i   m
  a
   k
   i   r
   l
Do while petlja 168   e  g
   V
  e
   j
Generator slučajnih brojeva 170   n
  a   a
  m    d
   i   o
   ž   k
Korištenje slučajnih brojeva 179   a
   S

PRO - MIL 5
 

Sadržaj

Polja 183
Jednodimenzionalna polja 184
Spremanje brojeva u datoteku 204
Dvodimenzionalna polja 212
Obrada teksta 215
String objekti 216
Polje char tipa 223
Obrada string objekata 234
Premještanje teksta iz char polja u string 246
Premještanje teksta iz stringa u char polje 247
Spremanje teksta u datoteku 248
Objekti 251
Jednostavan primjer klase i objekata 252
Složeniji primjeri klasa i objekata 262
Komunikacija s metodama 265
Razdvajanje deklaracije i definicije 276
Uporaba konstruktora 278
Nasljeđivanje 280
Veliki program 283
Jednostavna igra u jednoj datoteci 284
Jednostavna igra u više datoteka 288
Sažimanje koda 301
Primjeri sažetog pisanja koda 302

6 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
  a
   j
   i
  r
  a
   V

   d
  a
   k
   i
   f
  a
  r
   G

  o
  e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o

  v
  o
   D

  e
   j
   l
   t
  e
   P

   U   a
   j
   l
  o
   P

  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 7
 

Uvod

Što je to program, a što programiranje?

Program je niz uputa računalu o tome kako da napravi određeni posao. Posao
može bit vođenje skladišta, izračun plaće radnicima ili pretvaranje slike u boji u
crno bijelu sliku. Programiranje je pisanje tih uputa. Za pisanje uputa odnosno
programa koriste se određene naredbe. Skup naredbi koje čine cjelinu naziva se
programski jezik.

Budući da su naredbe pisane našim jezikom, a računalo “razumije” samo nule i


 jedinice, program se nakon pisanja mora prevesti u oblik razumljiv ra čunalu. Taj
postupak se naziva prevođenje. Na engleskom jeziku naziva se Compile. Hrvats-
ki programeri taj postupak obi čno nazivaju kompajliranje. U programu koji ćemo
mi koristiti, postupak prevođenja naredbi u oblik razumljiv ra čunalu naziva se
kompajlaj, a ovoj knjizi koristit ćemo izraz prevođenje.

Da bismo uspješno programirali, očigledno je da nam treba program u kojem će-


mo program pisati i program koji će napisani program prevesti u oblik razumljiv
računalu. U današnje vrijeme sve te funkcije, a i mnoge dodatne objedinjene su u
 jedan program koji ćemo u ovoj knjizi nazivati programska okolina. On će nam
omogućiti pisanje programa, prevođenje programa u oblik razumljiv ra čunalu,
traženje grešaka i pokretanje programa. Postoji cijeli niz takvih programa, a mi
ćemo koristiti Dev-C++.

Je li teško naučiti programirati?


Da, teško je. Ako mislimo da ćemo uzeti nekakav programski jezik i da ćemo za
par dana pisati programe, kao što možemo uzeti FrontPage pa za par dana napra-
viti WEB stranicu, od toga neće biti ništa.

Neki, ako ne i većina profesionalnih učitelja programiranja, započet ć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 nešto sli čno.

To su gluposti. Možda i jesmo do sada stvari radili po odre đenom algoritmu, ali
nismo o tome na taj način razmišljali, nemamo um posložen na taj način. Osim to-
ga u programiranju se upotrebljavaju malo druga čiji algoritmi nego što su algoritmi
za kuhanje kave.

Programiranje je zapravo potpuno druga čiji način razmišljanja od onog na koji smo
do sada navikli i trebat će godine rada da po čnemo razmišljati na taj način. Cijeli
problem dodatno komplicira činjenica da su današnja računala vrlo složeni sustavi i
treba nam puno vremena da barem približno po čnemo shvaćati kako računala fun-
kcioniraju.

8 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
Zbog svega toga trebat će nam dvije do tri godine svakodnevnog rada da bismo    d
  a
koliko - toliko naučili programirati. Pod pojmom naučiti programirati ne mislim na    S
dobivanje dvojke u školi ili pisanje programa za zbrajanje dva broja. Pod poj-
mom naučiti programirati mislim na to da smo u stanju napisati program koji za-    d
  o
dovoljava nečije potrebe i taj netko nam je spreman za to platiti. Nema puno   v
   U
smisla reći da znam programirati, ali ne znam napraviti ništa za što bi netko bio
spreman platiti.    i  
  v
  r   m
  p   a
  r
Zbog svega toga važno je da smo radišni i strpljivi. Nemojmo iz činjenice da prva    š   g
tri mjeseca nećemo puno toga razumjeti, zaključiti da nismo nadareni za progra-   a   o
  r
   N  p
miranje i odustati. Nakon tri mjeseca nećemo puno toga razumjeti, ali nakon tri
godine sasvim sigurno hoćemo.   e
   l
   b
  a
   j
   i
  r
Ovim uvodom vas nisam htio preplašiti, već sam vas htio ohrabriti da ustrajete u   a
učenju programiranja, iako će vam se na početku možda činiti da ništa ne razu-    V
mijete i da sporo napredujete.   a
   k
   i
   f
  a
  r
   G
Zašto baš C++?   e
   j
  n   e
  e   k
   š   l
  u
Zato što je to trenutno najrašireniji jezik, osobito u profesionalnoj uporabi. U ra-   o   d
  n   o
čunalstvu se klonite ekskluzivnosti. Ako vas veseli da budete posebni, obrijte   o
   D
glavu ili obojite kosu na zeleno. Imate bezbroj mogućnosti, ali kad su računala u
pitanju, najbolje je koristiti računalo koje koristi većina i programski jezik koji ko-   e
   j
   l
   t
risti većina.   e
   P
U tom slučaju lako dolazimo do programa, lako dolazimo do literature, puno ljudi
se razumije u to pa možemo dobiti savjet. Kona čno, ako tražimo posao u smislu   a
   j
   l
da programerska ekipa treba još jednoga (jednu), ve ća je vjerojatnost da oni već    o
koriste sustav s kojim znamo raditi.    P

Bježite od genijalnih računala, revolucionarnih sustava i drugačijih razmišljanja.   a   a


   d   t
Zamislite koliko je ugodno živjeti u malom gradu i biti jedini vlasnik takvog geni-   a
  r   s
 jalnog sustava. Nema literature, nema programa, nema savjeta i kad konačno    b   k
  e
   O   t
savladamo rad u takvom sustavu nitko nas ne treba jer svi rade na nekim drugim
sustavima.    i
   t
   k
  e
   j
Iako po mom sudu C++ ima niz prednosti u odnosu na druge jezike, nemojmo se    b
suviše opterećivati time koji ćemo jezik započeti učiti i koju inačicu tog jezika.    O
Glavni problem je naučiti jedan jezik, a kad nam to uspije, ako se ukaže potreba,   -
  o   i
  r
lako ćemo prijeći na drugi. Da bi netko tko nikad nije programirao nau čio jedan   p
 jezik, treba mu do tri godine, ali kad već jedan jezik naučimo, da bismo naučili    i   m
  a
   k
   i   r
   l
drugi, dovoljno nam je do tri mjeseca. Naučivši jedan jezik, počinjemo razumije-   e  g
   V
vati kako se programira, a to je najteže i najdulje traje. Najlakše je nau čiti nove   e
naredbe ili bolje rečeno novi način pisanja sličnih naredbi u drugom jeziku.    j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 9
 

Uvod

Zašto baš Dev-C++?


Programsko okruženje koje ćemo koristiti za pisanje naših programa naziva se Dev
-C++. Zašto sam odabrao upravo ovo okruženje? Zato što je besplatno, ugodnog
izgleda, na hrvatskom jeziku i malih dimenzija. Zbog toga što je malih dimenzija,
zadovoljavajuće će raditi i na starijim računalima, a nove inačice moguće je u prih-
vatljivom vremenu učitati s interneta i pomoću spore internetske veze.

Iako je taj program relativno malih dimenzija, posjeduje sve osobine koje su potre-
bne za učenje programiranja, a mogao bi poslužiti i za manje složeno profesional-
no programiranje.

Kako se uči programiranje?


Programiranje se ne u či tako da se nauči sadržaj neke knjige, a zatim se eventual-
no nešto radi na računalu. Programiranje se u či tako da se uključi računalo, otvori
knjiga, čita sadržaj knjige i istovremeno prikazano u knjizi nastojimo napraviti na
računalu.

Nakon što smo određenu naredbu shvatili, nismo završili s učenjem. Nakon toga
treba napraviti nekoliko desetaka manjih programa u kojima ćemo tu naredbu kori-
stiti da bismo stekli rutinu u njenom korištenju.

Kako dalje nakon ove knjige?


Ova knjiga nije zamišljena kao knjiga iz koje ćemo saznati sve tajne programiranja,
nego kao knjiga koja bi ljudima koji nikad nisu programirali i ništa o tome na znaju
trebala pomoći da započnu učenje programiranja.

Postoje velike i debele knjige s puno sitnog teksta koje na 1000 stranica objašnja-
vaju sve tajne pojedinih programskih jezika. Takve knjige su korisne i nabavite ih
ako vam se ukaže prilika, ali takve knjige nisu pogodne za početnike. Zbog mnoš-
tva detalja i šturih opisa, početnik će se u njima jako teško snaći.

Nakon što proučite ovu knjigu, imat ćete dovoljno predznanja da možete pratiti knji-
ge koje detaljno govore o programskom jeziku C++. (Ili nekom drugom program-
skom jeziku.)

Kakve knjige biste trebali nabaviti i s čime biste se trebali baviti nakon što prou čite
ovu knjigu i želite dalje napredovati?

- Svakako neku knjigu koja na barem 800 stanica detaljno opisuje programski jezik
koji želite naučiti.

- Budete li odlučili koristiti neko složenije programsko okruženje za pisanje progra-

10 PRO - MIL
 

Uvod

Instaliranje Dev-C++ programskog okruženja

Na CD-u priloženom uz knjigu


nalazi se program Dev-C++.

Ovaj izbornik trebao bi se po-


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

Instalaciju pokrećemo klikom


na Program.

Nakon klika na Program  započet ć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 možemo ga ponovo instalirati.

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


tupak instalacije i deinstalirati staru inačicu programa.

 Ako Dev-C++ nije instaliran na našem računalu, klikom na U


redu nastavljamo instalaciju.

12 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

1 - Izaberemo jezik.    d


  o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
  a
   j
   i
  r
  a
   V

  a
   k
   i
   f
  a
  r
   G
  e
   j
2  - Klikom na OK  nastavljamo   n   e
  e   k
instalaciju.    š   l
  u
  o   d
  n   o
  o
   D

  e
   j
   l
   t
  e
   P

  a
   j
   l
  o
   P

  a   a
   d   t
Klikom na Prihvaćam  izjavlju-   a
  r   s
   b   k
  e
 jemo sa se slažemo s uvjetima    O   t
korištenja programa.
   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 13
 

Uvod

Ovdje bismo mogli izabrati komponente


koje ćemo instalirati. Mi nećemo ništa
mijenjati. Samo kliknemo na Dalje.

1  - Ovdje možemo izabrati ma-


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

2 - Instaliranje nastavljamo


klikom na Instaliraj.

14 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S
Nakon klika na Instaliraj  započet
će instaliranje programa.    d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
  a
   j
   i
  r
  a
   V

  a
   k
   i
   f
  a
  r
   G
  e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D

  e
   j
   l
   t
  e
   P

Kliknemo na Da.   a


   j
   l
  o
   P

  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 15
 

Uvod

Kliknemo na Kraj.

Kliknemo na U redu.

16 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S
1  - Izaberemo
hrvatski jezik.    d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
2 - Izaberemo Use XP    N  p
Theme.   e
   l
   b
  a
   j
   i
  r
  a
   V

  a
   k
   i
   f
  a
  r
   G
  e
   j
3 - Klik na Next.   n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D

  e
   j
   l
   t
  e
   P

  a
   j
   l
  o
   P

  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
Klik na Next.   n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 17
 

Uvod

Klik na Next.

Nakon klika na Next  započet će instaliranje nekih do-


datnih funkcija. Na sporijim računalima taj proces može
trajati i do pola sata, a na bržima nekoliko minuta.

18 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
  a
   j
   i
  r
  a
   V

  a
   k
   i
   f
  a
  r
   G
  e
   j
  n   e
Na kraju klik na OK.   e   k
   š   l
  u
  o   d
  n   o
  o
   D

  e
   j
   l
   t
  e
   P

Klikom ovdje ugasimo ovaj prozor.


Time je instaliranje Dev-C++  prog-   a
   j
   l
rama završeno.   o
   P

  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 19
 

Uvod

Formiranje radne mape

Iako to nije nužno, dobro je formirati praznu


mapu u koju ćemo spremati programe.

Tu mapu možemo otvoriti na bilo kojem


disku na kojem imamo mjesta i možemo 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 slučaju na C: disk.

Kliknemo na Datoteka , zatim na Novo 


i konačno na Mapa.

20 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
  a
   j
   i
  r
  a
   V

  a
   k
   i
   f
  a
  r
   G
Unesemo naziv mape, u
mojem slučaju Radni.   e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D

  e
   j
   l
   t
  e
   P

  a
   j
   l
  o
   P

  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
 Ako je sve u redu, na C: disku trebala bi   e
   j
biti formirana mapa pod nazivom Radni.   n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 21
 

Uvod

Instalacija grafike

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


ručno 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 priloženom uz knji-

gu u mapi Grafika  nalazi se

mapa include i mapa lib.

22 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
Sadržaj mape include  na CD-u   a
   j
   i
  r
  a
kopiramo u mapu include na C:     V

  a
disku.    k
   i
   f
  a
  r
   G
  e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D

  e
   j
   l
   t
  e
   P

  a
   j
   l
  o
   P

  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t
Sadržaj mape lib  na CD-u kopi-
   i
   t
ramo u mapu lib na C: disku.    k
  e
   j
   b
   O
  -
  o   i
  r
Bude li poteškoća s instaliranjem progra-   p
   i   m
  a
   k
   i   r
ma, pogledajmo filmove na kojima može-    l
  e  g
mo vidjeti cijeli tijek instalacije, a nalaze    V
se na priloženom CD-u.   e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 23
 

Naš prvi program

24 PRO - MIL
 

  C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d

  m
  a
   S

   d
  o

  a
  v
   U

  r
   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r

  g
   N  p

  e
   l
   b
  a
   j
   i
  r

  o
  a
   V

  r
  a
   k
   i
   f
  a
  r
   G

  p
  e
   j
  n   e

 
  e   k
   š   l
  u
  o   d

   i
  n   o
  o
   D

  e

  v
   j
   l
   t
  e
   P

  r   a
   j
   l
  o

  p
   P

  a   a
   d   t
  a
  r   s
   b   k
  e
   t

   š
   O

   i
   t
   k
  e
   j

  a
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r

   N
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 25
 

Naš prvi program

Formiranje projekta

Prilikom svakog pokretanja


programa pojavit će se pro-
zor sa sugestijama koje će
nam olakšati korištenje prog-
rama.

Kliknemo ovdje da bismo


ugasili taj prozor.

1 - Kliknemo na Datoteka.

Program je dio veće 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 po č etnike

   j
  a
   ž
  r
   d
  a
Otvorit će se novi prozor koji se naziva Novi projekt i u kojem ćemo izab-    S
rati tip projekta. Najvažniji tipovi su Windows Application  i Console Ap-
plication .    d
  o
  v
   U
U čemu je razlika?
   i  
Windows Application  – izvodi se unutar klasičnog windows prozora. Pre-   v
  r   m
  p   a
  r
dnost ovog načina pisanja jest što ćemo dobiti program koji će izgledati    š   g
  a   o
  r
kao svaki drugi windows program. Nedostatak mu je što je ovaj način pisa-    N  p
nja programa nešto složeniji, pa je manje prikladan za početnike.
  e
   l
   b
Console Application   – ne izvodi se unutar klasičnog windows prozora,   a
   j
   i
  r
već unutar pojednostavljene verzije s crnom pozadinom. Nedostatak ovog   a
   V
načina pisanja programa jest što je program veoma ružan i što taj oblik
prozora ima manje mogu ćnosti od klasičnog prozora. Jedina prednost mu   a
 je što je jednostavan, pa je prikladniji za početnike.    k
   i
   f
  a
  r
   G
  e
   j
  n   e
  e   k
1 - Izaberemo Basic.    š   l
  u
  o   d
  n   o
  o
   D

  e
   j
2 - Zatim Console Application.    l
   t
  e
   P

  a
   j
   l
  o
   P
3  - Ovdje unosimo naziv pro-
 jekta. Na početku možemo   a   a
ostaviti naziv koje je predložilo    d   t
  a
  r   s
računalo, a to je Projekt1 .    b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
4  - Ovdje odredimo da    i   m
  a
   k
   i   r
5 - Biranje završavamo    l
će naš projekt sadrža-   e  g
klikom na OK.    V
vati C++ program.   e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 27
 

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 slučaju to je disk C:.


Kliknemo na njega.

(Na mojem računalu disk C nazi-


va se Podaci. Na vašem računa-
lu može imati drugačije naziv.
Naziv diska nije važan, važno 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 po č etnike

   j
  a
   ž
  r
   d
1  - Ovdje bi se trebala nalaziti oznaka diska na kojem   a
   S
smo pripremili prazni prostor za smještaj našeg projekta.
   d
  o
  v
   U
2 - Sadržaj ovog prozo-
   i  
ra na vašem računalu   v
  r   m
bit će sasvim sigurno   p   a
  r
   š   g
drugačiji nego na mo-   a   o
  r
   N  p
 jem, budući da njegov
sadržaj ovisi o progra-   e
   l
mima koji su instalirani    b
  a
   j
u računalu i načinu ko-    i
  r
  a
rištenja računala. Ne-    V
mojte brinuti zbog toga.
  a
   k
   i
   f
  a
  r
   G
  e
   j
  n   e
  e   k
3  - Pronaći ćemo mapu Radni  i kliknuti na    š   l
  u
  o   d
nju. (Ako mapu Radni niste do sada formira- 4 - Klik na Otvori .    n   o
  o
li, formirajte je prema uputama danim u uvo-    D
dnom poglavlju.
  e
   j
   l
   t
  e
   P

  a
   j
   l
  o
   P

1 - Ovdje bi se trebao nalaziti naziv prostora u koji ćemo   a   a
spremiti naš C++ projekt.    d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
2 - Klik na Spremi.    e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 29
 

Naš prvi program

Računalo će automatski
generirati jednostavan
C++ program i time je
otvaranje projekta  zavr-
šeno.

U programu bismo se lakše snalazili kad bi


se ispred svakog reda u programu nalazio
broj reda. Pogledajmo kako ćemo uključiti tu
mogućnost.

1 - Kliknemo na Alati.

2 - Kliknemo na Izgled editora.

30 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
1  - Kliknemo na karticu    d
  a
Prikaz .    S

   d
  o
  v
   U
2 - Kliknemo na kvadrati ć ispred
opcije Brojevi linije.    i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
  a
   j
   i
  r
  a
   V

3 - Kliknemo na OK.   a


   k
   i
   f
  a
  r
   G
  e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D

  e
   j
   l
   t
  e
   P

  a
   j
   l
  o
   P

  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
Vidimo da se sada is-
pred svakog reda u pro-   -
  o   i
  r
gramu automatski ispi-   p
   i   m
   k   a
suje broj reda.    i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 31
 

Naš prvi program

Mogući problem

1 - Ovo je prije spremljeni projekt.

Prilikom isprobavanja programa može nam se


dogoditi da pokušamo u prostor za spremanje
projekta spremiti novi projekt, iako projekt pod
tim nazivom već  postoji u tom prostoru. U
istom prostoru ne može biti više projekta s
istim imenom.

U tom slučaju, ako želim zadržati stari projekt,


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

3 - Klik na Spremi.

2 - Ovo je novi projekt. Ako želimo zadržati stari,


moramo mu promijeniti naziv. Ako stari projekt
ne želimo zadržati, ostavimo postojeći naziv.

1  - Ako novi projekt


ima isti naziv kao i
stari jer stari projekt
ne želimo zadržati,
računalo ć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 po č etnike

   j
  a
Unos prvog programa    ž
  r
   d
  a
   S

   d
  o
  v
   U

Umjesto programa    i  


  v
  r   m
koji je generiralo   p   a
  r
računalo prilikom    š   g
  a   o
  r
otvaranja novog    N  p
projekta, unesemo   e
   l
ovakav program.    b
  a
   j
   i
  r
To ćemo učiniti pa-   a
   V
žljivo jer i najmanja
greška može prouz-   a
   k
   i
   f
rokovati grešku u   a
  r
programu.    G
  e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D

  e
   j
   l
   t
  e
   P
Na početku će nam se često
događati da umjesto točke sa
zarezom ovdje unesemo dvo-   a
   j
   l
#include <cstdlib> toč je što će uzrokovati grešku   o
#include <iostream> u programu.    P

using namespace std;   a   a


   d   t
  a
  r   s
int main()    b   k
  e
Lijevu vitičastu zagradu dobit    O   t
{
ćemo tako da pritisnemo tipku
cout << "Ovo je moj tekst." << endl; AltGr   i ne puštajući tu tipku,    i
   t
system("PAUSE"); pritisnemo tipku b.
   k
  e
return 0;    j
   b
}    O
Desnu ćemo dobiti tako da
pritisnemo AltGr i, ne puštajući   -
  o   i
  r
tu tipku, pritisnemo tipku n.   p
   i   m
   k   a
   i   r
   l
  e  g
   V
  e
   j
Ovdje se nalazi broj nula,   n
a ne veliko slovo o.   a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 33
 

Naš prvi program

Pokretanje programa

Već smo rekli da računalo razumije samo nule i jedinice. Svi sadržaji, muzika,
filmovi, slike itd. moraju biti prevedeni u nule i jedinice da bi ih računalo ra-
zumjelo. Tako je i s programom.

Da bi računalo razumjelo naš program, najprije ga iz oblika koji smo upravo


napisali moramo prevesti u nule i jedinice, a tek nakon toga možemo narediti
računalu da ga pokrene. Taj postupak prevo đenja na engleskom se jeziku
naziva Compile, a prevoditelj našeg C++ programskog okruženja preveo je to
sa Kompajlaj. Mi ćemo u našoj knjizi za taj postupak koristiti izraz prevođe-
nje.

U našem programskom okruženju imamo tri važne naredbe vezane uz pre-


vođenje i pokretanje programa.

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


će se prevesti u oblik razumljiv računalu, ali se neće pokrenuti. Želite li
tako prevedeni program pokrenuti, morate izabrati opciju Pokreni.

Ovo je prevedeno kao Pokreni . Ovu opciju može-


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 prevođenje 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 po č etnike

   j
  a
   ž
  r
   d
  a
1 - Klikom na Kompajlaj i pokreni započet ćemo prevođenje i    S
pokretanje našeg programa.
   d
  o
  v
   U

   i  
  v
  r   m
2 - Otvara se prozor u kojem nas računalo pita kamo i   p   a
  r
   š   g
pod kojim nazivom ćemo spremiti naš program.   a   o
  r
   N  p
Računalo će predložiti da to bude ono isto mjesto u   e
   l
koje smo spremili projekt što ćemo mi prihvatiti.    b
  a
   j
   i
  r
  a
   V

  a
   k
   i
   f
  a
  r
   G
  e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D

Mjesto na koje će računalo spremiti naš   e


   j
   l
   t
program.   e
   P

  a
   j
   l
  o
3  - Prevođenje i pokretanje našeg prog-    P
rama započet ćemo klikom na Spremi.
  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
Ovdje se nalazi naziv našeg programa,    l
  e  g
main.cpp. Iako bismo taj naziv mogli    V
promijeniti, na početku je najbolje da za-   e
   j
  n
držimo naziv koji je predložilo računalo.   a   a
   d
  m
   i   o
   ž   k
  a
   S

PRO - MIL 35
 

Naš prvi program

Nakon klika na Kompajlaj i pokreni  najpri-


 je će se otvoriti prozor u kojem ćemo moći
pratiti tijek prevođenja našeg programa u
nule i jedinice razumljive računalu.

Nakon prevođenja prog-


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

Tekst Press any key to


continue   računalo je ge-
neriralo automatski i njime
nas obavještava da je
dovoljno pritisnuti bilo ko-
 ju tipku na tipkovnici i pro-
zor u kojem se izvršio naš
program će se zatvoriti.

36 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
Mogući problem    ž
  r
Tijekom rada može nam se dogoditi da nam    d
  a
   S
računalo predloži neki naziv programa, iako ve ć 
u tom prostoru postoji program s istim nazivom.    d
  o
  v
   U

U tom slučaju, ako želimo zadržati stari prog-    i  


  v
  r   m
ram, novom ćemo dati neki drugi naziv npr.   p   a
  r
   š   g
  a   o
  r
main2.cpp i kliknut ćemo na Spremi.    N  p

  e
   l
   b
 Ako stari program ne želimo sačuvati, ostavit   a
   j
   i
  r
  a
ćemo novom programu naziv main.cpp i kliknut    V

ćemo na Spremi.   a


   k
   i
   f
  a
  r
   G
  e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
main.cpp   o
   D

  e
   j
   l
   t
  e
   P
 Ako ne želimo zadržati stari prog-
ram, pa smo u prethodnom koraku
kliknuli na Spremi  bez da smo   a
   j
   l
mijenjali novom programu naziv,   o
   P
računalo će nas još jednom upozo-
riti da će stari program biti obrisan.
  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
1 - Kliknemo na  Yes. Stari program će   e
   j
   b
se obrisati, novi će se spremiti, a zatim    O
će započeti prevođenje i pokretanje   -
novog programa. Tijek prevođenja i   o   i
  r
  p
pokretanja programa možemo vidjeti    i   m
  a
   k
   i   r
na prethodnoj stranici.    l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 37
 

Naš prvi program

Greška u programu
Gotovo je nemoguće unijeti program, a da
se tijekom unosa ne pojavi greška.

Pogledajmo što će se dogoditi ako pokuša-


mo pokrenuti program u kojem je došlo do
greške prilikom unosa.

1  - Umjesto
2 - Kliknemo na Kompajlaj i pokreni. točke sa zare-
zom unesemo
dvotoč je.

1 - Kad računalo naiđe na


grešku, prevođenje prog-
rama se zaustavlja i raču-
nalo označava red u ko-
 jem je došlo do greške.

2  - Istovremeno se otvara
prozor u kojem možemo
vidjeti dodatne informacije
o uočenoj greški.

Ovdje možemo vidjeti su-


gestiju da umjesto dvotoč-
 ja treba staviti točku sa
zarezom.

3 - Uo čenu grešku uklonimo i ponov-


no kliknemo na Kompajlaj i pokreni.

38 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

Označavanje pozicije greške prili č-    d


  o
no je nepouzdano budući da raču-   v
nalo zapravo ne označava poziciju    U
greške, nego poziciju na kojoj je
   i  
greška primijećena. Pogledajmo   v
  r   m
ovaj primjer.   p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
  a
   j
   i
  r
  a
   V

  a
1  - Ovdje je došlo do greške jer    k
   i
   f
nismo unijeli točku sa zarezom.   a
  r
   G
  e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D
1  - Kad takav program pokušamo prevesti i   e
   j
   l
pokrenuti, kao pogrešan bit će označen de-    t
  e
veti red, jer je u njemu greška primije ćena,    P
iako se greška zapravo nalazi u osmom re-
du.
  a
   j
   l
  o
Zato imajmo na umu da je označavanje re-    P
dova u kojim se pojavila greška samo gruba
orijentacija, a ne precizni pokazatelj.
  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
2 - Program pokrećemo klikom na   o   i
  r
  p
Kompajlaj i pokreni.    i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 39
 

Naš prvi program

 Analiza programa

#include <cstdlib>
#include <iostream> Ove naredbe ćemo pisati na početku sva-
kog C++ programa. Zašto? C++ organizi-
ran je tako da su njegove naredbe organi-
zirane u grupe ili, kako bi programeri rek-
li, biblioteke i na početku programa mora-
mo reći računalu koje biblioteke naredbi
namjeravamo koristiti.

#include  - ovo je naredba kojom na po-


četku programa obavještavamo računalo
koje biblioteke naredbi želimo koristiti.

iostream   - skup naredbi koje nam omo-


gućuju komunikaciju s programom, npr.
ako to ne bismo uključili, ne bi bio moguć 
ispis teksta „Ovo je moj tekst.“ na ekran.

cstdlib - biblioteka standardnih naredbi.

Postoji mnoštvo biblioteka naredbi. Moglo


bi se dogoditi da se u dvije različite bibliote-
ke nađu dvije naredbe istog naziva, a razli-
čite namjene.
using namespace std;
Ovom naredbom obavještavamo prevodite-
lja da ćemo koristiti standardne nazive na-
redbi.

Naredba int main()  označava da na ovom


mjestu počinje 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 prevođenja.

40 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
{ } - Iako neveliki, ovo su jako važni dijelovi   a
   S
programa. Označuju prostor unutar kojeg se
{ nalazi program, {  označuje početak, a } kraj    d
programa.   o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
Ovaj red sadrži dvije naredbe.    b
  a
   j
   i
  r
  a
Prvom naredbom naređujemo    V
računalu da tekst koji se nalazi
unutar navodnika ispiše na   a
cout << "Ovo je moj tekst." << endl;    k
   i
zaslonu računala.    f
  a
  r
   G
Drugom naredbom nare đuje-   e
mo računalu da prijeđe u novi    j
  n   e
  e   k
red.    š   l
  u
  o   d
  n   o
  o
   D

  e
   j
   l
   t
  e
   P

Ovom naredbom naređujemo računalu   a


   j
   l
da stane i čeka tako dugo dok ne pritis-   o
   P
nemo neku tipku.
system("PAUSE"); Da bismo bolje razumjeli ovu naredbu,   a   a
   d   t
obrisat ćemo ovaj red u programu, a za-   a
  r   s
   b   k
  e
tim ćemo prevesti i pokrenuti program    O   t
klikom na Kompajlaj i pokreni.
   i
   t
   k
  e
   j
   b
   O
Ova naredba označuje kraj programa. Na-
return 0;   -
kon te naredbe program se gasi.   o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
Ova vitičasta zagrada označava kraj pros-   e
   j
}   n
tora unutar kojeg se nalazi program.   a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 41
 

Naš prvi program

Gruba skica programa

Da bismo se lakše snašli u našem programu, podijelit ćemo ga na nekoliko većih


cjelina.

#include <cstdlib> Ovo je početak programa. Ove naredbe


#include <iostream> pisat ćemo na počeku svakog našeg prog-
rama. Kasnije ćemo ovdje dodati još neke
using namespace std; naredbe.

int main() Iako smo objasnili čemu služe pojedine


{ naredbe, trenutno nije bitno da to čno poz-
najemo značenje svake od njih.

Dovoljno je da znamo da te naredbe mora-


mo napisati na počeku svakog našeg pro-
grama i da ih točno napišemo.

Ovdje se nalazi glavni dio na-


šeg programa i u ovom dijelu
određujemo što će naš prog-
ram raditi.
cout << "Ovo je moj tekst." << endl;
U idućim vježbama gornji i do-
nji dio uglavnom nećemo dirati,
a sve bitno zbivat će se u
ovom dijelu programa.

Ovo su naredbe koje pišemo na kraju prog-


rama. Slično kao što je to slučaj s naredba-
ma na početku programa, vrlo rijetko ćemo
ih mijenjati i trenutno nije bitno da u potpu-
nost razumijemo značenje 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 po č etnike

   j
  a
Varijacije programa    ž
  r
   d
  a
   S

Jedna od najboljih metoda koje nam pomažu da bolje razumijemo funkcionira-    d
nje programa i pojedinih naredbi jest da u program unosimo manje izmjene, a   o
  v
zatim opažamo kakve posljedice će takve izmjene izazvati.    U

   i  
  v
  r   m
  p   a
  r
Kao što smo već vidjeli, pok-    š   g
#include <cstdlib>   a   o
  r
   N  p
#include <iostream> renemo li ovaj program, na
  e
   l
using namespace std; zaslonu računala dobit ćemo    b
  a
   j
   i
ovakav rezultat.   r
  a
int main()    V
{   a
cout << "Ovo je moj tekst." << endl;    k
   i
   f
system("PAUSE");   a
  r
return 0;    G
}   e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D

  e
   j
   l
   t
#include <cstdlib>   e
#include <iostream>    P

using namespace std;


  a
   j
   l
  o
int main()    P
{
cout << "OVDJE STAVLJAMO TEKST." << endl;
  a   a
system("PAUSE");    d   t
  a
return 0;   r   s
   b   k
  e
   t
}    O

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
Promijenimo li ovaj red dobit ćemo ovakav rezultat.   p
   i   m
  a
   k
   i   r
   l
  e  g
Očigledno je da je funkcija ovog reda u programu    V
ispis teksta koji se nalazi unutar navodnika i da taj   e
   j
  n
tekst možemo po volji mijenjati.   a   a
   d
  m
   i   o
   ž   k
  a
   S

PRO - MIL 43
 

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.

Očigledno je da ovim redom u programa nare đujemo računalu da ispiše tekst


unutar navodnika na zaslon računala, ali da računalo ne ulazi u to ima li taj
tekst smisla ili nema.

Iako računalo ne ulazi u


smisao teksta koji smo na-
Navodnik koji
pisali unutar navodnika,
ovdje ipak postoji jedno smo dodali.
ograničenje, a to je da unu-
tar navodnika ne smijemo
koristiti navodnik.
#include <cstdlib>
Navodnici označuju početak #include <iostream>
i kraj teksta, pa bi računalo
navodnik unutar teksta using namespace std;
smatralo krajem teksta, a
sadržaj iza tog navodnika int main()
greškom. {
cout << "Jaa jesm " nism ghgh." << endl;
Preuredimo ovaj red i poku- system("PAUSE");
šajmo program pokrenuti. return 0;
Vidjet ćemo da će računalo }
dojaviti grešku.

44 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
#include <cstdlib>    U
#include <iostream>
   i  
  v
  r   m
using namespace std;   p   a
  r
   š   g
  a   o
  r
int main()    N  p
{   e
   l
cout << "Ovo je moj tekst." << endl ;    b
  a
   j
system("PAUSE");    i
  r
  a
return 0;    V
}
Vratimo naš program u   a
   k
   i
prvobitno stanje, a zatim    f
  a
ga pokrenimo klikom na   r
   G
Kompajlaj i pokreni.
Ovako će izgledati rezul-   e
   j
  n   e
#include <cstdlib> tat rada našeg programa.   e   k
   š   l
  u
  o   d
#include <iostream>   n   o
Da bismo bolje razumjeli   o
   D
using namespace std; njegovu funkciju, obriše-
mo ovaj dio programa.   e
   j
   l
   t
int main() Nova inačica programa   e
trebala bi ovako izgledati.    P
{
cout << "Ovo je moj tekst.";
system("PAUSE"); Klikom na Kompajlaj i   a
pokreni   pokrenemo pro-    j
   l
return 0;   o
} gram.    P

  a   a
   d   t
  a
  r   s
Ovako bi trebao izgledati    b   k
  e
   O   t
rezultat izvođenja ove
inačice programa.    i
   t
   k
  e
   j
Program radi i bez obri-    b
sanog dijela, ali nakon    O
ispisa našeg teksta raču-   -
nalo nije skočilo u novi   o   i
  r
  p
red, nego je sljedeći tekst    i   m
  a
   k
   i   r
nastavilo pisati u istom    l
  e  g
redu. Očigledno da je <<    V
endl  naredba za skok u   e
   j
  n
novi red.   a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 45
 

Naš prvi program

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


#include <iostream>

using namespace std;


Postavlja se pitanje ako s <<
int main() endl  naređujemo računalu da
{ skoči u novi red, bi li s više
cout << "Ovo je moj tekst." << endl; takvih naredbi u nizu više puta
cout << endl; skočilo 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 očekivali.

Između 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-
većao.

46 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Više naredbi << endl  možemo napisati i   a
#include <cstdlib>    S
unutar jednog reda.
#include <iostream>    d
Pokrenemo li ovu inačicu programa, uvje-   o
  v
using namespace std; rit ćemo se da daje isti rezultat kao i pret-    U
hodna.
int main()    i  
  v
  r   m
{   p   a
  r
cout << "Ovo je moj tekst." << endl << endl << endl << endl;    š   g
  a   o
  r
system("PAUSE");    N  p
return 0;   e
   l
}    b
  a
   j
   i
  r
  a
   V

Pogledajmo sada podrobnije red u kojem se nalaze naredbe za ispis teksta i   a
   k
   i
skok u novi red.    f
  a
  r
   G
  e
   j
  n   e
  e   k
   š   l
  u
Propisana riječ  kojom obavještavamo računalo   o   d
Ove oznake obvezno   n   o
da ćemo sadržaj koji slijedi poslati na neku izla-   o
se stavljaju ispred    D
znu jedinicu, u našem slučaju na zaslon raču-
sadržaja koji će iz
nala.   e
   j
računala ići na neku    l
   t
izlaznu jedinicu, npr.   e
Uočimo da naredbu << endl ne možemo koris-    P
titi ako prije nismo stavili naredbu cout. zaslon računala.

  a
   j
   l
  o
   P

Iako nevelik,   a   a


cout << "Ovo je moj tekst." << endl ; ovo je JAKO
   d   t
  a
  r   s
   b   k
  e
važan dio pro-    O   t
grama.
   i
   t
   k
Označava kraj   e
   j
Tekst unutar navod- naredbe ili    b
Ovom naredbom    O
nika ispisat će se na grupe naredbi
naređujemo računalu
zaslon računala. koje čine cjeli-   -
da prilikom ispisa   o   i
  r
skoči u novi red. nu.   p
   i   m
Uočimo da ovaj dio    k   a
   i   r
   l
čini cjelinu sa <<    e  g
Uočimo da ova na-    V
oznakama i da bez
redba čini cjelinu s   e
   j
tih oznaka neće fun- << oznakama.   n
  a   a
kcionirati.   m    d
  o
   i
   ž   k
  a
   S

PRO - MIL 47
 

Naš prvi program

Distribucija programa

Nakon što naše programersko remek djelo proradi, osjetit ćemo potrebu naš
program podijeliti s prijateljima ili ga staviti na internet. Postavlja se pitanje
što moramo učiniti da bi naš program proradio i na prijateljevom ra čunalu.

Prilikom prevođenja programa programsko okruženje iz našeg programa ge-


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

 A gdje se nalazi prevedena inačica našeg programa?

Otvorimo Windows Explorer i u njemu otvorimo mapu u koju smo koristili tije-
kom prevođenja programa. U našem slučaju to je Radni mapa na C disku.

Datoteka s nastavkom exe  sadrži


naš preveden program koji može
samostalno raditi u windows okru-
ženju.

Dovoljno je da tu datoteku poša-


ljemo prijatelju koji će ju pokrenuti
dvostrukim klikom miša.

48 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
Učitavanje spremljenog projekta    ž
  r
   d
  a
   S

   d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
  a
   j
   i
  r
  a
   V
 Ako pokušamo ugasiti prog-
ramsko okruženje, a da nis-   a
   k
   i
mo spremili program, raču-    f
  a
  r
Naš projekt će se spremiti prili- nalo će nas upozoriti.    G
kom prevođenja programa.
  e
   j
Klikom na Yes spremit ćemo   n   e
 Ako projekt želimo spremiti bez naš program.   e   k
   š   l
  u
da smo program preveli, kliknemo   o   d
  n   o
na ikonu Spremi.   o
   D

  e
   j
   l
   t
  e
   P

Spremljeni projekt može-   a


   j
   l
mo učitati u naše prog-   o
   P
ramsko okruženje na više
načina.
  a   a
   d   t
Na najjednostavniji način   a
  r   s
možemo učitati nekoliko    b   k
  e
1 - Kliknemo na Datoteka.    O   t
prethodnih spremanja.
   i
   t
   k
  e
   j
   b
2 - Zatim na Ponovno otvori .    O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
3 - Na ovom popisu    l
  e  g
kliknemo na projekt    V
koji želimo otvoriti.   e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 49
 

Naš prvi program

Želimo li u naše programsko okruženje


učitati program koji ne možemo učitati
na način koji smo vidjeli na prethodnoj
stranici, učitat ćemo ga na nešto slože-
niji način.

1 - Kliknemo na Datoteka.

2  - Zatim na Otvori datoteku


ili projekt.

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 učitati.


Prepoznajemo ga po nastavku dev.

4 - Kliknemo na Otvori.

50 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S
Nakon što se
   d
spremljeni projekt   o
  v
učitao, mogli bismo    U
biti zbunjeni činjeni-
com da ga ne vidi-    i  
  v
  r   m
mo u prostoru u   p   a
  r
kojem smo očeki-    š   g
  a   o
  r
vali da ćemo ga    N  p
vidjeti.
  e
   l
   b
  a
   j
   i
  r
  a
   V

  a
   k
   i
   f
  a
  r
   G
  e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D

  e
   j
   l
   t
  e
   P

  a
   j
   l
  o
   P

  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
Da bismo naš program vidjeli, ovdje kliknemo na   p
naziv programa, u našem slučaju to je main.cpp.    i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 51
 

Varijable

52 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
  e
   l
   b

   l
  a
   j
   i
  r
  a
   V

   b
  a
   k
   i
   f
  a
  r
   G

  a
  e
   j
  n   e

   j
  e   k
   š   l
  u
  o   d

   i
  n   o
  o
   D

  r
  e
   j
   l
   t
  e
   P

  a   a
   j
   l
  o
   P

   V   a   a


   d   t
  a
  r   s
   b   k
   O

   i
   t
   k
  e
   j
  e
   t

   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 53
 

Varijable

Osnovne računske operacije

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

Ovaj program zbraja


broj 2 i broj 3, a re-
zultat koji je u ovom
slučaju broj 5 ispisu-
 je na zaslon. #include <cstdlib>
#include <iostream>
Pogledajmo sada using namespace std;
strukturu našeg no-
int main()
vog programa. {
U ovom redu
cout << 2+3; naređujemo ra-
čunalu da zbroj
cout << endl; broja 2 i broja 3,
a to je broj 5,
ispiše na zaslon
system("PAUSE"); računala.
return 0;
} U ovom redu
Početak i kraj progra- naređujemo ra-
ma isti su kao i do čunalo da skoči
u novi red.
sada, dok je srednji
dio promijenjen.

54 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
Pokušajmo zbrojiti neka druga dva broja, #include <cstdlib>    S
npr. 8 i 4. #include <iostream>
   d
  o
Pokrenimo program i vidjet ćemo da će using namespace std;   v
   U
računalo zbrojiti ta dva broja.
int main()    i  
{   v
  r   m
  p   a
  r
cout << 8+4;    š   g
cout << endl;   a   o
  r
   N  p
system("PAUSE");
return 0;   e
   l
   b
}   a
   j
   i
  r
  a
   V

  a
   k
   i
   f
  a
  r
   G
  e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D

Pokušajmo neku drugu računsku opera- #include <cstdlib>   e


   j
#include <iostream>    l
   t
ciju, npr. oduzimanje.   e
   P
U ovom programu oduzet ćemo od broja using namespace std;
12 broj 8.   a
int main()    j
   l
  o
Pokrenimo program i pogledajmo naš {    P
rezultat. cout << 12-8;
cout << endl;
  a   a
system("PAUSE");    d   t
  a
  r   s
return 0;    b   k
  e
}    O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 55
 

Varijable

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


oznake uobičajene u matematici, za množe- #include <iostream>
nje ćemo koristiti zvjezdicu. Nalazi se iznad
broja devet s desne strane, na brojčanoj tip- using namespace std;
kovnici.
int main()
Množenje 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 drugačiji 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 brojčanom 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 učinit će nam se


da je program za dijeljenje is-
pravan.

56 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
#include <cstdlib> Pokušajmo ovdje umjesto 12/4 staviti 13/4.   a
   S
#include <iostream>
Pokrenimo program i pogledajmo rezultat.    d
  o
using namespace std;   v
Rezultat je očigledno pogrešan.    U

int main()    i  


{   v
  r   m
  p   a
  r
cout << 13/4;    š   g
cout << endl;   a   o
  r
   N  p
system("PAUSE");
return 0;   e
   l
   b
}   a
   j
   i
  r
  a
   V

  a
#include <cstdlib>    k
   i
   f
#include <iostream>   a
  r
   G
using namespace std;   e
   j
  n   e
  e   k
int main()    š   l
  u
  o   d
{ Pokušajmo ovdje staviti   n   o
  o
cout << 15/3; 15/3 i pokrenimo program.    D
cout << endl;   e
system("PAUSE"); Rezultat je ispravan.    j
   l
   t
  e
return 0;    P
}
  a
   j
   l
  o
   P
Umjesto 15/3 stavimo 17/3 i
pokrenimo program.
  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t
#include <cstdlib>
#include <iostream>    i
   t
   k
using namespace std; Rezultat je pogrešan. Mogli bismo   e
   j
   b
zaključiti da će dijeljenje biti isprav-    O
int main() no, ako je rezultat cjelobrojni broj.
  -
{   o   i
  r
 Ako je rezultat decimalni broj, dolazi   p
cout << 17/3;    i   m
  a
do greške.    k
   i   r
cout << endl;    l
  e  g
system("PAUSE");    V
return 0; Kako riješiti taj problem, vidjet ćemo   e
   j
nešto kasnije u ovom poglavlju.   n
}   a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 57
 

Varijable

Varijable

Vidjeli smo da osnovne računske ope-


#include <cstdlib>
racije, osim dijeljenja, funkcioniraju, ali
#include <iostream>
ne baš na način kako smo mi zamišljali
da bi program trebao raditi.
using namespace std;
Problem naših dosadašnjih programa int main()
 jest u tome što svaki program vrši ra- {
čunsku operaciju između dva konkret-
int a;
na broja i ako želimo izvršiti računsku
int b;
operaciju između 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, moguće. Unesimo, pre- }
vedimo i pokrenimo ovaj program.

Nakon pokretanja programa


ugledat ćemo zbunjujući crni
ekran bez sadržaja.

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 po č etnike

   j
  a
   ž
  r
   d
  a
Na tipkovnici izaberemo    S
drugi broj koji želimo
zbrajati, npr. broj 5  i    d
  o
zatim pritisnemo Enter   v
   U
tipku na tipkovnici.
   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p
Nakon pritiska na   e
   l
Enter   tipku na tip-    b
  a
   j
kovnici, a zaslonu    i
  r
računala ugledat   a
   V
ć emo rezultat
zbrajanja broja 3  i   a
   k
   i
   f
broja 5, a to je broj   a
  r
8.    G
  e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D

  e
   j
   l
   t
  e
   P

Pokrenimo bez ikakvih izmjena isti prog- Na sličan način kao i u   a
   j
   l
  o
ram još jednom, ali sada unesimo neke prethodnom primjeru,    P
druge brojeve, npr. broj 12 i broj 14. dakle tako da nakon sva-
kog unosa broja pritisne-   a   a
mo tipku Enter   na tipkov-    d   t
  a
  r   s
nici, unesimo brojeve 12 i    b   k
  e
   t
14.    O

   i
   t
Kao rezultat dobit ćemo    k
njihov zbroj, a to je broj   e
   j
   b
26.    O
  -
Vidimo da smo uspjeli   o   i
  r
  p
postići ono što smo želje-    i   m
  a
   k
   i   r
li. Pomoću jednog progra-    l
  e  g
ma možemo zbrajati razli-    V
čite brojeve, bez da prog-   e
   j
  n
ram moramo mijenjati.   a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 59
 

Varijable

 Analiza programa

#include <cstdlib> Početak programa.


#include <iostream>
a
using namespace std; Naredbom int  formirat
ćemo u računalu pros-
int main() tor poput posude. U taj
{ prostor možemo 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;
cin >> b; spremit ćemo broj koji smo unijeli
preko tipkovnice, npr. broj 3 i broj 5. a

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

8 3 5

cout << c;
c = a +  b

Sadržaj prostora c, a to je c
cout << endl; rezultat zbrajanja, ispišemo
na zaslon računala. 8

Skok u novi red.


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

60 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Ovom naredbom formiramo prostor u računalu u koji ćemo spremati brojeve.   a
   S

Na početku taj prostor možemo zamisliti kao posudice u koje možemo staviti    d
brojeve, iako su to zapravo rezervirana mjesta u memoriji našeg računala.   o
  v
   U

   i  
  v
  r   m
  p   a
  r
Naredba za formiranje Oznaka ;  obvezno dolazi    š   g
prostora. int a ; na kraju naredbe.   a   o
  r
   N  p

  e
   l
   b
  a
   j
   i
  r
int b; Ovdje se nalazi naziv prostora.
  a
   V
int c;   a
Zašto svaki prostor ima naziv???    k
   i
   f
  a
  r
Zato što u jednom programu može-    G
Ovim naredbama se for- mo imati više takvih prostora, pa   e
   j
miraju još dva prostora, nam naziv prostora omogućuje da ih   n   e
  e   k
prostor b i prostor c. razlikujemo.    š   l
  u
  o   d
  n   o
  o
   D

  e
   j
   l
   t
  e
   P
Nakon formiranja prostor za spremanje brojeva je prazan i bio bi nam sasvim
beskoristan kad u njega ne bismo mogli staviti neki broj.
  a
   j
U taj prostor broj možemo staviti na više načina, a jedan od njih je da ga une-    l
  o
semo pomoću tipkovnice. Za to ćemo koristiti naredbu cin.    P

  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t
Oznaka ;  obvezno dolazi
Naredba za unos. cin >> a ; na kraju naredbe.    i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
Ovdje stavljamo oznaku prostora u    k   a
   i   r
   l
koji ćemo unijeti broj. Dakle, broj   e  g
   V
Ova oznaka stavlja se ćemo unijeti u prostor a i ne u neki   e
   j
ispred naziva prostora u drugi prostor, npr. b ili c.   n
  a   a
koji ćemo unijeti broj.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 61
 

Varijable

Naredba sli čna prethodnoj, samo što će se u


cin >> b ; ovom slučaju unijeti broj spremiti u prostor b.

Osim što u te prostore možemo spremati brojeve, izme đu njih možemo izvoditi
računske operacije na isti način kao što smo ih izvodili između brojeva.

U našem slučaju zbrojit ćemo sadržaj prostora a i sadržaj prostora b, a rezultat
tog zbrajanja spremit ćemo u prostor c.

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

Znak jednakosti ima


istu funkciju kao i u Oznaka računske ope-
matematici. racije između prostora.

Naziv prvog prostora. Naziv drugog prostora.

Nakon što se naredba c = a + b; izvrši, u prostoru c nalazit će se rezultat zbra-


 janja sadržaja prostora a i prostora b, ali da korisnik vidio rezultat moramo nare-
diti računalu da sadržaj prostora c  ispiše na zaslon računala. To ćemo učiniti
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 po č etnike

   j
  a
Varijacije programa    ž
  r
   d
  a
   S

Da bismo bolje razumjeli izradu programa koji koriste prostor za spremanje    d
brojeva, napravit ćemo niz izmjena na našem programu i opažat ćemo kako te   o
  v
izmijene utječu na rad program.    U

   i  
  v
  r   m
  p   a
  r
Ovaj program ima potpuno istu struktu-    š   g
#include <cstdlib>   a   o
  r
#include <iostream> ru kao prethodni, samo što ima drugači-    N  p
 je nazive prostora za spremanje broje-   e
   l
using namespace std; va.    b
  a
   j
   i
  r
Prvi prostor više se ne naziva a, nego   a
int main()    V
{ prvi. Drugi prostor više se ne naziva b,
int prvi; nego drugi. Treći prostor više se ne   a
   k
   i
   f
int drugi; naziva c, nego rezultat.   a
  r
int rezultat;    G
cin >> prvi; Prevedimo i pokrenimo ovaj program i
  e
   j
cin >> drugi; vidjet ćemo da radi jednako kao i pret-   n   e
hodni program.   e   k
rezultat = prvi + drugi;    š   l
  u
  o   d
cout << rezultat;   n   o
  o
cout << endl;    D
system("PAUSE");
  e
   j
return 0;    l
   t
}   e
   P

  a
   j
   l
  o
Sad se postavlja pitanje po kojoj logici se biraju nazivi prostora za spre-    P
manje brojeva. Pogledajmo neka pravila i sugestije.
  a   a
- Ne smiju se koristi naredbe; npr. int aaa; je dozvoljeno, a int cout; nije.    d   t
  a
  r   s
   b   k
  e
   O   t
- Koriste se samo brojevi i slova engleske abecede, dakle bez čžš.
   i
   t
- Naziv ne smije sadržavati razmak; PrviBroj  i prvi_broj je dozvoljeno, a    k
prvi broj nije.   e
   j
   b
   O
- Ako naziv sadrži brojeve, prvi znak mora biti slovo, dakle a1 je dozvolje-   -
no, a 1a nije.   o   i
  r
  p
   i   m
  a
   k
   i   r
- Pametno je da naziv prostora govori što se u prostoru nalazi. Bolje je da    l
  e  g
prostor u koji ćemo spremati površinu nazovemo povrsina  nego qqy1.    V
  e
   j
  n
- Dva različita prostora ne mogu imati isto ime.   a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 63
 

Varijable

#include <cstdlib>
#include <iostream> Pokušamo li pokrenuti ovaj program, ra-
čunalo će dojaviti grešku.
using namespace std;
Do greške je došlo zato što smo ovdje
int main() formirali prostor A, a ovdje smo pokušali
{ unijeti broj u prostor a.
int A;
int B; Računalo razlikuje velika i mala slova pa
int c; njemu prostor a i prostor A nisu isto.
cin >> a;
cin >> b; S njegove točke gledišta mi ovdje poku-
c = a + b; šavamo unijeti broj u prostor koji ne pos-
cout << c; toji.
cout << endl;
system("PAUSE"); Zato će nas računalo u komentaru greške
return 0; upozoriti da ne zna što je to a.
}

64 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
#include <cstdlib>   a
   S
#include <iostream> U ovom programu ovu naredbu nismo napi-
sali u ispravnom obliku kao cout << c; nego
u obliku cout << "c";  dakle sadržaj koji se    d
using namespace   o
  v
std; ispisuje stavili smo u navodnike kao što    U
smo to naviknuli prilikom ispisa teksta koriš-
int main() tenjem cout naredbe.    i  
  v
  r   m
{   p   a
  r
Pokrenemo li ovaj program, on će se izvršiti    š   g
int a;   a   o
  r
int b; i računalo nam neće dojaviti nikakvu greš-    N  p
int c; ku, ali kao rezultat nećemo dobiti ono što
  e
   l
cin >> a; smo očekivali.    b
  a
   j
cin >> b;    i
  r
Vidimo da smo u prostor a unijeli 8, u pros-   a
c = a + b;    V
cout << "c"; tor b  unijeli smo 4, ali kao rezultat nismo
cout << endl; dobili broj 12, nego slovo c.   a
   k
   i
   f
system("PAUSE");   a
  r
return 0; Zašto?    G
}   e
cout << c; - ispisuje sadržaj prostora c.    j
  n   e
  e   k
   š   l
  u
cout << "c"; - ispisuje slovo c.   o   d
  n   o
  o
   D

  e
   j
   l
   t
  e
   P

  a
   j
   l
  o
   P

Ovaj tip greške veo-


ma je teško pronaći   a   a
   d   t
u složenim programi-   a
  r   s
   b   k
  e
ma, budući da raču-    O   t
nalo neće dojaviti
grešku i poziciju gre-    i
   t
   k
ške prilikom prevo-   e
   j
đenja.    b
   O

To se događa zato   -


  o   i
  r
što je program for-   p
   i   m
malno ispravno napi-    k   a
   i   r
   l
san; cout << "c";  je   e  g
   V
ispravna naredba, ali   e
   j
ne radi ono što smo   n
  a   a
htjeli.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 65
 

Varijable

#include <cstdlib> Prostore za spremanje brojeva možemo


#include <iostream> koristiti i za druge matematičke operaci-
 je.
using namespace std;
Ovdje možemo vidjeti program za oduzi-
int main() manje.
{
int broj1; Od sadržaja prostora broj1 oduzet će se
int broj2; sadržaj 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 sličan način možemo napraviti program
za množenje sadržaja dvaju prostora.
using namespace std;

int main()
{
int broj1;
int broj2;
int rezultat;
cin >> broj1;
cin >> broj2;
rezultat = broj1 * broj2;
cout << rezultat;
cout << endl;
system("PAUSE");
return 0;
}

66 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
Problem dijeljenja    ž
  r
   d
  a
   S

Ostao nam je neriješen problem dijelje-    d


#include <cstdlib>   o
nja.   v
#include <iostream>    U

using namespace std; Sadržaje prostora za spremanje broje-    i  


  v
  r   m
va možemo dijeliti, ali će kao i prošli put   p   a
  r
int main()    š   g
  a   o
  r
{ kad smo pokušali dijeliti, rezultat biti    N  p
int broj1; ispravan samo za brojeve čiji rezultat   e
   l
int broj2;    b
int rezultat; dijeljenja nije decimalni broj.   a
   j
   i
  r
cin >> broj1;   a
   V
cin >> broj2;  Ako je rezultat dijeljenja decimalni broj,
rezultat = broj1 / broj2;   a
rezultat će biti pogrešan.    k
   i
cout << rezultat;    f
  a
cout << endl;   r
   G
system("PAUSE");
return 0;   e
   j
  n   e
}   e   k
   š   l
  u
  o   d
  n   o
  o
   D

  e
   j
Problem ćemo riješiti ovako napisanim    l
   t
  e
programom. Umjesto naredbom int,    P
prostor za spremanje brojeva formirat
ćemo naredbom float; 
#include <cstdlib>   a
   j
   l
Pokrenemo li taj program, dobit ćemo   o
#include <iostream>    P
ispravan rezultat.
using namespace std;   a   a
   d   t
  a
  r   s
int main()    b   k
  e
   t
{    O
float broj1;
   i
   t
float broj2;    k
float rezultat;   e
   j
   b
cin >> broj1;    O
cin >> broj2;   -
rezultat = broj1 / broj2;   o   i
  r
  p
cout << rezultat;    i   m
  a
   k
   i   r
cout << endl;    l
  e  g
system("PAUSE");    V
return 0;   e
   j
  n
}   a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 67
 

Varijable

Ovo je još jedan način na koji možemo formirati prostor za spremanje brojeva.

U čemu je razlika između prostora formiranog int naredbom i prostora formira-


nog float naredbom???

U prostor formiran int naredbom možemo spremati samo brojeve bez decimal-


nog zareza, a u prostore formirane float naredbom možemo 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. Uočimo da iz-


među 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 pokušajmo.

Vidimo da je moguće 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 točku.

Dakle, ako želimo unijeti


npr. 3,14 unijet ćemo 3.14
korištenjem tipkovnice.

68 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
Uljepšavanje programa    ž
  r
   d
  a
   S

Naši programi doduše rade, ali su tako ružni da bi teško bili ružniji. Korisnika    d
  o
dočeka crni ekran bez ikakvih uputa. Nakon što unesemo dva broja, dobit   v
   U
ćemo treći bez ikakvog komentara što taj treći broj predstavlja.
   i  
Budući da smo mi napisali program, mi znamo da treba unijeti dva broja, da   v
  r   m
nakon svakog unosa treba pritisnuti tipku Enter   i mi znamo što predstavlja   p   a
  r
   š   g
treći broj koji smo dobili kao rezultat, ali netko drugi veoma bi teško koristio   a   o
  r
   N  p
naš program. Unesite i pokrenite ovaj program.
  e
   l
   b
  a
   j
   i
  r
  a
   V

U ovom programu na   a


   k
   i
#include <cstdlib> početku programa, te    f
  a
#include <iostream>   r
prije svakog unosa i    G
ispisa rezultata nared-
using namespace std;   e
   j
bom cout  ispisali smo   n   e
adekvatan komentar   e   k
   š   l
  u
int main()   o   d
koji pomaže korisniku   n   o
{   o
da lakše shvati čemu    D
float broj1; program služi, što mora
float broj2; unijeti i što je dobio kao   e
   j
   l
   t
float rezultat; rezultat.   e
cout << "Dijeljenje." << endl;    P
cout << "Unesite prvi broj." << endl; Ovakav program puno
cin >> broj1;  je ugodniji za upotrebu   a
   j
   l
cout << "Unesite drugi broj." << endl; od programa bez ko-   o
cin >> broj2; mentara.    P
rezultat = broj1 / broj2;
cout << "Rezultat dijeljenja je:" << endl;   a   a
cout << rezultat;    d   t
  a
  r   s
cout << endl;    b   k
  e
   O   t
system("PAUSE");
return 0;    i
   t
}    k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 69
 

Varijable

Prethodni program mogli bismo još malo uljepšati 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 po č etnike

   j
  a
Nekoliko primjera programa    ž
  r
   d
  a
   S

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


  o
// Program za izračun površine izračun površine   v
   U
// ********************************* pravokutnika. Uni-
 jet ćemo ga u ra-    i  
#include <cstdlib> čunalo i pokrenuti.   v
  r   m
  p   a
  r
#include <iostream>    š   g
Struktura je ista   a   o
  r
   N  p
using namespace std; kao i struktura
prethodnog prog-   e
   l
   b
int main() rama, ali su prila-   a
   j
   i
gođeni komentari i   r
{   a
nazivi prostora za    V
float stranica_A;
float stranica_B; spremanje broje-   a
float povrsina; va.    k
   i
   f
cout << "Povrsina." << endl;   a
  r
Jedina novost je    G
cout << endl;
cout << endl; komentar na po-   e
   j
cout << "Unesite prvu stranicu." << endl; četku programa   n   e
  e   k
koji se nalazi iza //     š   l
  u
cin >> stranica_A;   o   d
oznaka i opisuje   n   o
cout << endl;   o
cout << "Unesite drugu stranicu." << endl; namjenu progra-    D
cin >> stranica_B; ma.   e
   j
   l
cout << endl;    t
  e
povrsina = stranica_A * stranica_B;    P
cout << "Povrsina je:" << endl;
cout << povrsina;
cout << endl;   a
   j
   l
  o
cout << endl;    P
system("PAUSE");
return 0;
  a   a
}    d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
Komentar započinje  // ozna-    O
kom i pomaže nam da se
  -
lakše snađemo ako program   o   i
  r
želimo kasnije koristiti.   p
   i   m
  a
   k
   i   r
   l
  e  g
Komentirati možemo namje-    V
nu programa ili pojedine Prilikom prevođenja programa, kad prevo-   e
   j
segmente programa. ditelj naiđe na  // oznaku, skače u novi red   n
  a   a
ne prevodeći ostatak reda.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 71
 

Varijable

// ****************************** Osim što komentare


// Program za izračun brzine možemo pisati u zase-
// ******************************
bnom redu, možemo 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 služe. Ako
} smo upravo napisali prog-
ram, a program ima deset
redova, onda nam komen-
tari ne trebaju.

 Ako napišemo veći prog-


ram, a želimo ga korigirati
nakon dvije godine, onda će
nam komentari pojedinih
dijelova programa uvelike
pomoći pri snalaženju u
programu.

Komentari su korisni i ako


moramo korigirati program
koji je netko drugi pisao.

72 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
// *******************************************    S
// Program za izračun volumena kvadra
// *******************************************    d
  o
  v
   U
#include <cstdlib>
#include <iostream> Ovo je primjer programa za izra čun volu-    i  
mena kvadra.   v
  r   m
  p   a
  r
using namespace std;    š   g
Pokušajmo za vježbu sami smisliti neko-   a   o
  r
   N  p
int main() liko sličnih programa.
{   e
   l
   b
float stranica_A;   a
   j
   i
  r
float stranica_B;   a
float stranica_C;    V
float volumen;   a
cout << "Izracun volumena." << endl;    k
   i
   f
cout << endl;   a
  r
cout << "Unesite stranicu a." << endl;    G
cin >> stranica_A;   e
   j
cout << "Unesite stranicu b." << endl;   n   e
  e   k
   š   l
  u
cin >> stranica_B;   o   d
  n   o
cout << "Unesite stranicu c." << endl;   o
cin >> stranica_C;    D
cout << endl;   e
   j
volumen = stranica_A * stranica_B * stranica_C;    l
   t
  e
cout << "Volumen je:" << endl;    P
cout << volumen;
cout << endl;
cout << endl;   a
   j
   l
  o
system("PAUSE");    P
return 0;
}
  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 73
 

Grafika

74 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
  a
   j

  a
   i
  r
  a
   V

  a

   k
   k
   i
   f
  a

   i
  r
   G

   f
  e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o

  a
  o
   D

  r
  e
   j
   l
   t
  e
   P

  a
   j

   G
   l
  o
   P

  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 75
 

Grafika

Podešavanje programskog okruženja

Da bi grafika funkcionirala,
prilikom instalacije progra-
ma moramo instalirati do-
datke kojim programskom
okruženju omogućuje pri-
kaz grafike.
1 - Kliknemo na Projekt .  Ako to nismo učinili, vrati-
mo se na uvodno poglavlje
i instalirajmo potrebne do-
datke.
2 - Zatim na Postavke projekta .
Nakon toga podesit ćemo
programsko okruženje.

1 - Kliknemo na Parametes .

2 - Ovdje unesemo -lbgi -lgdi32 

Kliknemo na Ok.

76 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
Naš prvi grafički program    ž
  r
   d
  a
   S

#include <cstdlib> Unesimo i pokrenimo ovaj prog-    d


  o
#include <iostream> ram. Uočimo da su početak i kraj   v
   U
#include <winbgim.h> programa izmijenjeni.
   i  
using namespace std; Na početku dodan je ovaj red, a   v
  r   m
na kraju je izbačena naredba:   p   a
  r
   š   g
system("PAUSE");   a   o
  r
int main()    N  p
{   e
int gdriver = 9;    l
   b
  a
   j
int gmode = 2;    i
  r
initgraph(&gdriver, &gmode, "");   a
   V
setbkcolor(WHITE);
setcolor(BLACK); Klikom na Kompajlaj i pokreni pokrenemo   a
   k
   i
cleardevice(); program.
   f
  a
circle(320,240,180);   r
   G
getch(); Otvorit će se dva prozora:
closegraph();   e
   j
  n   e
return 0;   e   k
   š   l
- tekstualni koji smo do sada koristili   u
  o   d
}   n   o
  o
- grafi čki u kojem će računalo nacrtati krug.    D

  e
   j
   l
   t
  e
   P

  a
   j
   l
  o
   P

  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 77
 

Grafika

 Analiza programa

#include <cstdlib> Početak programa. Za razliku od dosa-


#include <iostream>
dašnjih programa, u ovom smo korigi-
#include <winbgim.h>
rali početak dodavši mu još jednu na-
redbu.
using namespace std;
Ovom naredbom u program uklju čuje-
int main()
mo grafičke naredbe.
{

int gdriver = 9; Ovdje određujemo veličinu grafičkog


int gmode = 2; prozora i broj boja.

initgraph(&gdriver, &gmode, ""); Otvaranje grafičkog prozora.

setbkcolor(WHITE); Određivanje boje pozadine.

setcolor(BLACK); Određivanje boje crte.

Briše stari sadržaj zaslona i stare pos-


cleardevice(); tavke boja. Pokušajmo pokrenuti prog-
ram bez ove naredbe.

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

78 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Ovom naredbom zaustavljamo izvođe-   a
   S
nje programa do trenutka dok ne priti-
  getch(); snemo neku tipku na tipkovnici. Ima    d
  o
istu namjenu kao i system(“PAUSE”)   v
u “normalnim” programima.    U

   i  
Da bismo bolje razumjeli ovu naredbu,   v
  r   m
izbacimo je iz programa i pokušajmo   p   a
  r
   š   g
pokrenuti program bez nje.   a   o
  r
   N  p

  e
   l
   b
  a
   j
   i
  r
closegraph(); Zatvaranje grafičkog prozora.   a
   V

  a
   k
   i
   f
  a
  r
Kraj programa. Uočimo da ovdje više    G
return 0; nema naredbe system(“PAUSE”);  Nje-
}   e
   j
nu funkciju sada ima getch();  naredba.   n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D

Pogledajmo sada pobliže odre đene naredbe. Ovom naredbom odre đujemo tip   e
   j
   l
   t
grafi čkog prozora.   e
   P

  a
   j
   l
  o
   P

int gdriver = 9 ; Ovaj broj može biti između 1 i   a   a


10. Ako je 9, dobit ćemo VGA    d   t
  a
  r   s
prozor čija maksimalna veličina    b   k
  e
   O   t
može biti 640 X 480 točaka i 16
boja.    i
   t
   k
  e
   j
 Ako umjesto broja 9 stavimo    b
broj 6, dobit ćemo IBM 8514    O
prozor čija maksimalna veličina   -
može biti 1024 X 768 točaka i   o   i
  r
  p
256 boja.    i   m
  a
   k
   i   r
   l
  e  g
Upotrijebimo li druge brojeve,    V
dobit ćemo manje prozore s ma-   e
   j
  n
njim brojem boja.   a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 79
 

Grafika

Nakon što smo naredbom int gdriver = 9; odabrali tip grafi čkog prozora, ovom
naredbom biramo rezoluciju grafi čkog prozora.

int gmode = 2 ; Značenje ovog broja ovisi o tipu grafi čkog pro-
zora koji smo odabrali.

 Ako smo naredbom int gdriver = 9;  odabrali


VGA prozor, stavimo li ovdje broj 0, dobit ćemo
prozor veličine 640 X 200 točaka. Stavimo li 1,
dobit ćemo prozor veličine 640 X 350 točaka, a
stavimo li broj 2 koji smo mi odabrali, dobit će-
mo prozor veličine 640 X 480 točaka.

 Ako smo naredbom int gdriver = 6;  odabrali


IBM 8514 prozor, stavimo li ovdje broj 0, dobit
ćemo prozor veličine 640 X 480 točaka, a sta-
vimo li broj 1, dobit ćemo prozor veličine 1024
X 768 točaka.

Ovom naredbom određuje se boja po- Ovdje unosimo naziv bo-


zadine. U našem slučaju bit će bijela.  je. Naziv boje može 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 po č etnike

   j
  a
   ž
  r
   d
Osim navođenja imena boja, boje možemo odrediti i navo đenjem njihove broj-   a
   S
čane vrijednosti.
   d
  o
  v
   U

   i  
  v
  r   m
setbkcolor(COLOR( 255, 255, 255 )); Plava.
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
  a
   j
Crvena. Zelena.    i
  r
  a
   V

  a
   k
   i
   f
  a
  r
Dodat ćemo naredbu COLOR iza koje se nalaze tri broja čija vrijednost mo-    G
že biti između 0 i 255.   e
   j
  n   e
  e   k
   š   l
  u
Boje u računalu sastoje se od tri boje; crvene, zelene i plave. Sve ostale   o   d
  n   o
boje nastaju miješanjem tih boja.   o
   D
Prvim brojem određujemo intenzitet crvene boje, drugim intenzitet zelene i   e
   j
   l
   t
trećim intenzitet plave boje.   e
   P
Naredbom setbkcolor(COLOR(255,255,255));   dobit ćemo bijelu boju, a
naredbom setbkcolor(COLOR(0,0,0));  dobit ćemo crnu boju.
  a
   j
   l
  o
   P

  a   a
   d   t
Ovom naredbom određuje se boja kojom crtamo. Koristimo iste nazive boja   a
  r   s
   b   k
  e
kao i u prethodnoj naredbi.    O   t

   i
   t
   k
  e
   j
   b
   O
setcolor(BLACK);   -
  o   i
  r
Kao i u prethodnoj naredbi,   p
boje možemo odrediti navo-    i   m
  a
   k
   i   r
   l
đenjem njihovog naziva, a   e  g
   V
možemo i pomoću brojeva
setcolor(COLOR (0,0,0)); upotrebom naredbe COLOR.
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 81
 

Grafika

Ovo je naredba za crtanje


kružnice.

circle( 320, 240, 180 ) ;

Udaljenost središta od Udaljenost središta od


Polumjer kružnice.
lijevog ruba prozora gornjeg ruba prozora

640

240

320 Širina prozora,


u našem slu-
čaju 640 toča-
ka.
180

480

Visina prozora, u našem


slučaju 480 točaka.

82 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
Varijacije programa    ž
  r
   d
  a
   S

#include <cstdlib> Napravit ćemo nekoliko prim-    d


  o
#include <iostream>  jera da bismo lakše razumjeli   v
kako radi naredba za crtanje    U
#include <winbgim.h>
kružnice.
   i  
using namespace std;   v
  r   m
Ovaj program sličan je pretho-   p   a
  r
   š   g
int main() dnom. Razlika je u tome što je   a   o
  r
   N  p
{ prethodni crtao samo jednu
int gdriver = 9; kružnicu, a ovaj će nacrtati   e
   l
nekoliko kružnica različitog    b
int gmode = 2;   a
   j
   i
initgraph(&gdriver, &gmode, ""); polumjera, ali sa središtem u   r
  a
setbkcolor(WHITE); istoj točki.    V
setcolor(BLACK);
  a
cleardevice(); Ovdje se nalaze četiri nared-    k
   i
   f
circle(320,240,220); be za crtanje četiri kružnice.   a
  r
circle(320,240,165);    G
circle(320,240,110); Pokrenemo li ovaj program,   e
   j
circle(320,240,55); trebali bismo dobiti ovakav   n   e
  e   k
getch(); rezultat.    š   l
  u
  o   d
closegraph();   n   o
  o
return 0;    D
}   e
   j
   l
   t
  e
   P

  a
   j
   l
  o
   P

Pokušajmo program pro-


  a   a
mijeniti tako da povećamo    d   t
  a
  r   s
ili smanjimo broj kružnica.    b   k
  e
   t
   O
Pokušajmo promijeniti
brojeve koji određuju po-    i
   t
   k
lumjer kružnice i položaj   e
   j
   b
središta kružnica.    O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 83
 

Grafika

U ovom primjeru napravit


#include <cstdlib> ćemo tri jednake kružnice,
#include <iostream>  jednu pored druge, što ćemo
#include <winbgim.h> postići promjenom udaljenos-
ti središta kružnica 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 mogućnosti.


U ovom slučaju promjenom udalje- #include <cstdlib>
nosti od gornjeg ruba prozora dobili #include <iostream>
smo tri kružnice, jednu iznad druge. #include <winbgim.h>

using namespace std;

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

84 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
#include <cstdlib>    S
#include <iostream>
   d
#include <winbgim.h>   o
  v
   U
using namespace std;
   i  
  v
  r   m
int main()   p   a
  r
{    š   g
  a   o
  r
int gdriver = 9;    N  p
int gmode = 2;
  e
   l
initgraph(&gdriver, &gmode, "");    b
setbkcolor(WHITE);   a
   j
   i
  r
setcolor(BLACK);   a
   V
cleardevice();
circle (60, 60, 60);   a
   k
   i
circle (180, 180, 60);    f
  a
circle (300, 300, 60);   r
   G
getch();
closegraph();   e
   j
  n   e
return 0;   e   k
   š   l
  u
}   o   d
  n   o
  o
   D

  e
   j
   l
   t
#include <cstdlib>   e
   P
#include <iostream>
#include <winbgim.h>
  a
   j
using namespace std;    l
  o
   P
int main()
{   a   a
   d   t
int gdriver = 9;   a
  r   s
int gmode = 2;    b   k
  e
   O   t
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);    i
   t
setcolor(BLACK);    k
  e
   j
cleardevice();    b
circle(320,240,220);    O
circle(220,140,50);   -
  o   i
circle(420,140,50);   r
  p
circle(320,240,30);    i   m
  a
   k
   i   r
   l
getch();   e  g
   V
closegraph();   e
   j
return 0;   n
  a   a
}   m    d
  o
   i
   ž   k
  a
   S

PRO - MIL 85
 

Grafika

Crtanje pravokutnika

#include <cstdlib> Osim kružnice možemo nacrtati


#include <iostream> i druge oblike, npr. pravokutnik.
#include <winbgim.h>
Ovdje u program unesemo na-
using namespace std; redbu za crtanje pravokutnika,
a na zaslonu računala 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  određu-
 jemo položaj gor-
njeg lijevog i do-
njeg desnog ugla
480 pravokutnika.

480 Funkciju pojedinih


brojeva možemo
vidjeti na crtežu.

86 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
#include <cstdlib> Međusobno možemo kombinirati   a
   S
#include <iostream> više pravokutnika.
#include <winbgim.h>    d
  o
  v
using namespace std;    U

   i  
int main()   v
  r   m
{   p   a
  r
   š   g
int gdriver = 9;   a   o
  r
   N  p
int gmode = 2;
initgraph(&gdriver, &gmode, "");   e
   l
setbkcolor(WHITE);    b
  a
   j
   i
setcolor(BLACK);   r
  a
cleardevice();    V
rectangle (160, 100, 480, 380);
  a
rectangle (190, 130, 450, 350);    k
   i
   f
rectangle (220, 160, 420, 320);   a
  r
rectangle (250, 190, 390, 290);    G
getch();   e
   j
closegraph();   n   e
  e   k
return 0;    š   l
  u
  o   d
}   n   o
  o
   D

  e
   j
   l
   t
Pravokutnik možemo kombini- #include <cstdlib>   e
   P
rati s drugim oblicima. #include <iostream>
#include <winbgim.h>
Pokušajmo za vježbu sami izmi-   a
   j
   l
sliti nekoliko primjera, npr. deb- using namespace std;   o
lo stabla nacrtamo kao pravoku-    P
tnik, a krošnju kao kružnicu. int main()
{   a   a
int gdriver = 9;    d   t
  a
  r   s
int gmode = 2;    b   k
  e
   O   t
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);    i
   t
setcolor(BLACK);    k
  e
   j
cleardevice();    b
circle (320, 240, 220);    O
circle (220, 140, 50);   -
  o   i
  r
circle (420, 140, 50);   p
circle (320, 240, 30);    i   m
  a
   k
   i   r
   l
rectangle (260, 342, 380, 338);   e  g
getch();    V
  e
   j
closegraph();   n
  a   a
return 0;   m    d
   i   o
}    ž   k
  a
   S

PRO - MIL 87
 

Grafika

Crtanje crte

Crtu možemo nacrtati na više


#include <cstdlib> načina, a uporaba naredbe line 
#include <iostream>  jedan je od njih.
#include <winbgim.h>

using namespace std;

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

Naredba za crtanje
line ( 120, 100, 500, 380 ); crte.

640
100

120 380 Naredbom line


crtamo crtu, a sa
četiri broja koji se
nalaze iza nared-
be line  određuje-
mo početak i kraj
500 crte.

Funkciju pojedinih
480 brojeva možemo
vidjeti na crtežu.

88 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Napravimo nekoliko crteža upo-   a
#include <cstdlib> rabom naredbe za crtanje crte.    S
#include <iostream>
#include <winbgim.h>    d
  o
  v
   U
using namespace std;
   i  
  v
  r   m
int main()   p   a
  r
{    š   g
  a   o
  r
int gdriver = 9;    N  p
int gmode = 2;
  e
   l
initgraph(&gdriver, &gmode, "");    b
setbkcolor(WHITE);   a
   j
   i
  r
setcolor(BLACK);   a
   V
cleardevice();
line (100, 240, 540, 240);   a
   k
   i
line (320, 20, 320, 460);    f
  a
  r
getch();
   G
closegraph();
return 0;   e
   j
  n   e
}   e   k
   š   l
  u
  o   d
  n   o
  o
   D

#include <cstdlib>   e


   j
   l
   t
#include <iostream>   e
   P
#include <winbgim.h>

using namespace std;   a


   j
   l
  o
int main()    P
{
int gdriver = 9;   a   a
   d   t
int gmode = 2;   a
  r   s
initgraph(&gdriver, &gmode, "");    b   k
  e
   O   t
setbkcolor(WHITE);
setcolor(BLACK);    i
   t
cleardevice();    k
  e
   j
circle (320, 240, 220);    b
circle (320, 240, 165);    O
circle (320, 240, 110);   -
  o   i
  r
circle (320, 240, 55);   p
line (100, 240, 540, 240);    i   m
  a
   k
   i   r
   l
line (320, 20, 320, 460);   e  g
getch();    V
  e
   j
closegraph();   n
  a   a
return 0;   m    d
   i   o
}    ž   k
  a
   S

PRO - MIL 89
 

Grafika

Osim uporabom naredbe line,


#include <cstdlib>
#include <iostream> crtu možemo nacrtati i upora-
bom naredbi moveto i lineto.
#include <winbgim.h>
Naredbom moveto  određuje-
using namespace std;
mo početak crte, a naredbom
lineto određujemo 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 određujemo


moveto ( 120, 100 ); početak crte.

Ovom naredbom odre-


640 đujemo kraj crte.
100

120 380

500 lineto ( 500, 380 );

480

90 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
#include <cstdlib> Ovaj način crtanja pogodan   a
   S
#include <iostream>  je za crtanje više crta u nep-
#include <winbgim.h> rekinutom nizu.    d
  o
  v
using namespace std; Pogledajmo ovaj primjer.    U

   i  
int main()   v
  r   m
{   p   a
  r
   š   g
int gdriver = 9;   a   o
  r
   N  p
int gmode = 2;
initgraph(&gdriver, &gmode, "");   e
   l
setbkcolor(WHITE);    b
  a
   j
setcolor(BLACK);    i
  r
  a
cleardevice();    V
moveto(160, 240);
lineto(160, 450);   a
   k
   i
   f
lineto(480, 450);   a
  r
lineto(480, 240);    G
lineto(160, 240);   e
   j
lineto(320, 120);   n   e
  e   k
lineto(480, 240);    š   l
  u
  o   d
getch();   n   o
  o
closegraph();    D
return 0;
  e
   j
}    l
   t
  e
   P

#include <cstdlib>
#include <iostream>   a
   j
   l
Pogledajmo, korak po korak, #include <winbgim.h>   o
kako je nastao ovaj crtež.    P

using namespace std;


  a   a
   d   t
  a
  r   s
int main()    b   k
  e
{    O   t
int gdriver = 9;
   i
   t
int gmode = 2;    k
initgraph(&gdriver, &gmode, "");   e
   j
   b
setbkcolor(WHITE);    O
setcolor(BLACK);   -
cleardevice();   o   i
  r
moveto(160, 240);   p
   i   m
  a
   k
   i   r
lineto(160, 450);    l
  e  g
getch();    V
closegraph();   e
   j
  n
return 0;   a   a
   d
}   m
   i   o
   ž   k
  a
   S

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 po č etnike

   j
  a
   ž
  r
   d
#include <cstdlib>   a
   S
#include <iostream>
#include <winbgim.h>    d
  o
  v
using namespace std;    U

   i  
int main()   v
  r   m
{   p   a
  r
   š   g
int gdriver = 9;   a   o
  r
   N  p
int gmode = 2;
initgraph(&gdriver, &gmode, "");   e
   l
setbkcolor(WHITE);    b
  a
   j
setcolor(BLACK);    i
  r
  a
cleardevice();    V
moveto(160, 240);
lineto(160, 450);   a
   k
   i
   f
lineto(480, 450);   a
  r
lineto(480, 240);    G
lineto(160, 240);   e
   j
getch();   n   e
  e   k
closegraph();    š   l
  u
  o   d
return 0;   n   o
  o
}    D
#include <cstdlib>
#include <iostream>   e
   j
   l
   t
#include <winbgim.h>   e
   P
using namespace std;
  a
   j
int main()    l
  o
{    P
int gdriver = 9;
int gmode = 2;   a   a
initgraph(&gdriver, &gmode, "");    d   t
  a
  r   s
setbkcolor(WHITE);    b   k
  e
   O   t
setcolor(BLACK);
cleardevice();    i
   t
moveto(160, 240);    k
  e
   j
lineto(160, 450);    b
lineto(480, 450);    O
lineto(480, 240);   -
  o   i
  r
lineto(160, 240);   p
lineto(320, 120);    i   m
  a
   k
   i   r
   l
getch();   e  g
closegraph();    V
  e
   j
return 0;   n
  a   a
}   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 93
 

Grafika

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

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 po č etnike

   j
  a
Crtanje točke    ž
  r
   d
  a
   S

Ponekad nam je potrebna samo    d


#include <cstdlib>  jedna točka, kao u ovom primje-   o
  v
#include <iostream> ru gdje smo točkom označili    U
#include <winbgim.h> središte kruga.
   i  
  v
  r   m
using namespace std;   p   a
  r
   š   g
  a   o
  r
int main()    N  p
{   e
   l
int gdriver = 9;    b
  a
   j
int gmode = 2;    i
  r
initgraph(&gdriver, &gmode, "");   a
   V
setbkcolor(WHITE);
setcolor(BLACK);   a
   k
cleardevice();    i
   f
  a
  r
circle (320, 240, 220);    G
putpixel (320, 240, BLACK);
getch();   e
   j
  n   e
closegraph();   e   k
   š   l
  u
return 0;   o   d
  n   o
}   o
   D

  e
   j
   l
   t
  e
   P

Naredba za crtanje
putpixel ( 320, 240, BLACK ); točke.
  a
   j
   l
  o
   P

  a   a
640    d   t
  a
  r   s
Ovdje unosimo boju    b   k
  e
   t
točke koju određuje-    O
240 mo na isti način kao i
boju pozadine ili boju    i
   t
   k
crte.   e
   j
   b
   O
320
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
480   e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 95
 

Grafika

Ispis teksta

#include <cstdlib> Možemo li unutar grafičkog


#include <iostream>
#include <winbgim.h> prozora staviti tekst? Može-
mo, ali nažalost, ne na način
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); kružnice stavimo naredbu za
setcolor(BLACK); ispis teksta, tekst će se ispisa-
cleardevice();
cout << "Ovo je krug." << endl; ti, ali ne unutar grafičkog pro-
circle (320, 240, 220); zora, već  unutar tekstualnog
getch();
closegraph(); prozora.
return 0;
}

96 PRO - MIL
 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
Upotrijebimo li ovu naredbu, #include <cstdlib>    S

tekst će se ispisati unutar #include <iostream>


#include <winbgim.h>    d
  o
grafičkog prozora.   v
   U
using namespace std;
   i  
  v
  r   m
int main()   p   a
  r
{    š   g
  a   o
  r
int gdriver = 9;    N  p
int gmode = 2;
  e
   l
initgraph(&gdriver, &gmode, "");    b
setbkcolor(WHITE);   a
   j
   i
  r
setcolor(BLACK);   a
   V
cleardevice();
outtext ("Ovo je krug.");   a
   k
   i
circle (320, 240, 220);    f
  a
  r
getch();
   G
closegraph();
return 0;   e
   j
  n   e
}   e   k
   š   l
  u
  o   d
  n   o
  o
   D

  e
   j
   l
   t
  e
#include <cstdlib> Naredbu za određivanje pozici-    P
#include <iostream>
#include <winbgim.h>  je početka crte možemo iskori-
  a
   j
stiti za određivanje početka    l
  o
using namespace std;    P
teksta.
int main()
  a   a
{    d   t
  a
  r   s
int gdriver = 9;    b   k
  e
int gmode = 2;    O   t
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);    i
   t
   k
setcolor(BLACK);   e
   j
   b
cleardevice();    O
moveto (320, 240);   -
outtext ("Ovo je krug.");   o   i
  r
circle (320, 240, 220);   p
   i   m
  a
   k
   i   r
getch();    l
  e  g
closegraph();    V
return 0;   e
   j
  n
}   a   a
   d
  m
   i   o
   ž   k
  a
   S

PRO - MIL 97
 

Grafika

#include <cstdlib>
#include <iostream>
#include <winbgim.h> Naredba outtextxy   objedi-
njuje naredbu za određivanje
using namespace std; pozicije teksta i naredbu za
ispis teksta.
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
outtextxy (320, 240, "Ovo je krug.");
circle (320, 240, 220);
getch();
closegraph();
return 0;
}

Brojevima određujemo 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 po č etnike

   j
  a
   ž
  r
   d
  a
#include <cstdlib>    S
#include <iostream> Naredbom settextstyle   mo-
   d
#include <winbgim.h> žemo mijenjati oblik i veličinu   o
  v
slova te smjer ispisa teksta.    U
using namespace std;
Stavljamo je prije naredbe za    i  
  v
  r   m
int main()   p   a
  r
{ ispis teksta.    š   g
  a   o
  r
int gdriver = 9;    N  p
int gmode = 2;
  e
   l
initgraph(&gdriver, &gmode, "");    b
setbkcolor(WHITE);   a
   j
   i
  r
setcolor(BLACK);   a
   V
cleardevice();
settextstyle (9, HORIZ_DIR, 1);   a
   k
   i
outtextxy (320, 240, "Ovo je krug.");    f
  a
circle (320, 240, 220);   r
   G
getch();
closegraph();   e
   j
  n   e
return 0;   e   k
   š   l
  u
}   o   d
  n   o
  o
   D

  e
   j
   l
   t
  e
Naredba za određivanje veličine i oblika slova te smjera ispisa.    P

  a
   j
   l
  o
   P
settextstyle ( 9, HORIZ_DIR, 1 );
  a   a
   d   t
  a
  r   s
   b   k
  e
Ovaj broj određuje Veličina slova.    O   t
oblik slova. Njego-
   i
   t
va vrijednost može    k
biti između 0 i 10.   e
   j
   b
   O
Smjer teksta:
  -
  o   i
  r
HORIZ_DIR - vodoravni tekst.   p
   i   m
  a
   k
   i   r
   l
  e  g
VERT_DIR - uspravni tekst od dolje prema gore.    V
  e
   j
  n
-VERT_DIR - uspravni tekst od gore prema dolje.   a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 99
 

Grafika

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

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 veličine slova.
settextstyle(9, HORIZ_DIR, 2);
outtextxy(320, 240, "Ovo je krug.");
settextstyle(9, HORIZ_DIR, 3);
outtextxy(320, 280, "Ovo je krug.");
settextstyle(9, HORIZ_DIR, 4); #include <cstdlib>
outtextxy(320, 320, "Ovo je krug."); #include <iostream>
getch(); #include <winbgim.h>
closegraph();
return 0; using namespace std;
}
int main()
{
int gdriver = 9;
Pogledajmo primjer prom- int gmode = 2;
 jene smjera ispisa teksta. initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle (320, 240, 220);
settextstyle(9, HORIZ_DIR, 1);
outtextxy(320, 240, "Ovo je krug.");
settextstyle(9, VERT_DIR, 1);
outtextxy(300, 240, "Ovo je krug.");
settextstyle(9, -VERT_DIR, 1);
outtextxy(500, 240, "Ovo je krug.");
getch();
closegraph();
return 0;
}

100 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Pogledajmo primjer promjene   a
#include <cstdlib>    S
oblika slova.
#include <iostream>    d
#include <winbgim.h>   o
  v
   U
using namespace std;
   i  
  v
  r   m
int main()   p   a
  r
{    š   g
  a   o
  r
int gdriver = 9;    N  p
int gmode = 2;   e
   l
initgraph(&gdriver, &gmode, "");    b
  a
setbkcolor(WHITE);    j
   i
  r
setcolor(BLACK);   a
   V
cleardevice();
circle (320, 240, 220);   a
   k
   i
   f
settextstyle(0, HORIZ_DIR, 3);   a
  r
outtextxy(320, 40, "Ovo je krug.");    G
settextstyle(1, HORIZ_DIR, 3);
  e
   j
outtextxy(320, 80, "Ovo je krug.");   n   e
settextstyle(2, HORIZ_DIR, 3);   e   k
   š   l
  u
outtextxy(320, 120, "Ovo je krug.");   o   d
  n   o
  o
settextstyle(3, HORIZ_DIR, 3);    D
outtextxy(320, 160, "Ovo je krug.");
settextstyle(4, HORIZ_DIR, 3);   e
   j
   l
   t
outtextxy(320, 200, "Ovo je krug.");   e
   P
settextstyle(5, HORIZ_DIR, 3);
outtextxy(320, 240, "Ovo je krug.");
settextstyle(6, HORIZ_DIR, 3);   a
   j
outtextxy(320, 280, "Ovo je krug.");    l
  o
settextstyle(7, HORIZ_DIR, 3);    P
outtextxy(320, 320, "Ovo je krug.");
settextstyle(8, HORIZ_DIR, 3);   a   a
   d   t
outtextxy(320, 360, "Ovo je krug.");   a
  r   s
settextstyle(9, HORIZ_DIR, 3);    b   k
  e
   O   t
outtextxy(320, 400, "Ovo je krug.");
settextstyle(10, HORIZ_DIR, 3);    i
   t
outtextxy(320, 440, "Ovo je krug.");    k
  e
   j
getch();    b
closegraph();    O
return 0;   -
  o   i
}   r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 101


 

Donošenje odluke

102 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

  e
   j
  a
   ž
  r
   d

   k
  a
   S

   d
  o
  v

  u
   U

   l
   i  
  v
  r   m
  p   a
  r
   š   g
  a   o

   d
  r
   N  p

  e
   l
   b
  a
   j

  o
   i
  r
  a
   V

  a
   k
   i
   f
  a
  r

  e
   G

   j
  e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
  o

  n
   D

  e
   j
   l
   t
  e

  e
   P

  a
   j

   š
   l
  o
   P

  o
  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

  n
   i
   t
   k
  e
   j
   b
   O

  o
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g

   D
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 103


 

Donošenje odluke

Funkcije

#include <cstdlib> Pojam funkcije zvuči jako


#include <iostream> pametno, ali iza tog naziva
#include <cmath> kriju se uglavnom jednos-
tavne stvari, matematičke
using namespace std; operacije poput potencira-
nja ili vađenja 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 matematičke funkci-
cout << endl;  je, moramo u program uk-
cout << "Unesite potenciju:" << endl; ljučiti 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 po č etnike

   j
  a
   ž
  r
   d
  a
Ovo je program za izra-    S
#include <cstdlib> čun sinusa.
#include <iostream>    d
  o
#include <cmath>  Ako ne znate što je to   v
   U
sinus, nemojte se time
using namespace std; opterećivati. To nije bitno    i  
za razumijevanje C++   v
  r   m
int main()   p   a
  r
programskog jezika.    š   g
{   a   o
  r
   N  p
float kut; Važno je uočiti da ova
float rezultat; funkcija veličinu kuta ne   e
   l
cout << "Kut u radijanima:" << endl;    b
izražava stupnjevima ne-   a
   j
   i
cin >> kut; go radijanima.   r
  a
cout << endl;    V
rezultat = sin(kut);
  a
cout << "Sinus kuta je:" << endl;    k
   i
   f
cout << rezultat << endl;   a
  r
cout << endl;    G
system("PAUSE");   e
   j
return 0;   n   e
  e   k
}    š   l
  u
  o   d
  n   o
  o
   D

  e
   j
   l
   t
  e
   P

  a
   j
   l
  o
   P
Varijabla u koju sprema-
mo rezultat.
  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

rezultat = sin ( kut );    i


   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
Naredba za izračun sinusa kuta.    i   m
Varijabla u koju spremamo veličinu    k   a
   i   r
   l
kuta kojem ćemo računati sinus. Kut   e  g
   V
mora biti izražen u radijanima, a ne u   e
   j
stupnjevima.   n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 105


 

Donošenje 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
negativnog broja u poziti- Varijabla u koju spremamo broj koji
ćemo iz negativnog pretvoriti u poziti-
van broj.
van.

106 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
#include <cstdlib>   o
  v
#include <iostream>    U
#include <cmath>
   i  
  v
  r   m
using namespace std;   p   a
  r
Pogledajmo program    š   g
  a   o
  r
int main() za vađenje kvadratnog    N  p
{ korijena.   e
float broj;    l
   b
  a
   j
float rezultat; Što je to uopće kvadra-    i
  r
cout << "Unesite broj:" << endl; tni korijen?   a
   V
cin >> broj;
cout << endl;  Ako je 4 puta 4, odnos-   a
   k
rezultat = sqrt(broj);    i
   f
no 4 na kvadrat, jedna-   a
cout << "Kvadratni korijen je:" << endl;   r
ko 16, onda je kvadrat-    G
cout << rezultat << endl; ni korijen od 16 jedak
cout << endl;   e
   j
4.   n   e
system("PAUSE");   e   k
   š   l
  u
return 0;   o   d
  n   o
}   o
   D
Varijabla u koju spremamo
Varijabla u koju spre- broj čiji kvadratni korijen   e
   j
   l
   t
mamo rezultat. želimo izračunati.   e
   P

Naredba za izračun kvadra-   a


   j
tnog korijena.    l
  o
rezultat = sqrt ( broj );    P

  a   a
Iako se nam na prvi    d   t
  a
  r   s
pogled može učiniti    b   k
  e
   O   t
da je program ispra-
van, to na žalost nije    i
tako. Pokušamo li    t
   k
  e
   j
kvadratni korijen iz-    b
računati iz negativ-    O
nog broja dobit ćemo   -
besmisleni rezultat.   o   i
  r
  p
Do toga dolazi zato    i   m
  a
   k
   i   r
što nije moguće izra-    l
  e  g
čunati kvadratni kori-    V
 jen iz negativnog   e
   j
  n
broja.   a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 107


 

Donošenje odluke

Donošenje odluke

Pokušajmo kvadratni korijen iz-


računati pomoću ovakvog prog-
rama.

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

using namespace std;

int main()
{
float broj; Ova inačica programa
float rezultat;
cout << "Unesite pozitivan broj." << endl; izračunava kvadratni
cin >> broj; korijen ako smo unijeli
cout << endl;
if (broj < 0) pozitivan broj ili nas
{ obavještava da je une-
cout << "Broj je negativan!" << endl;
} sen negativan broj ako
else unesemo negativan
{
rezultat = sqrt(broj); broj.
cout << "Kvadratni korijen je:" << endl;
cout << rezultat;
cout << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

108 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Pogledajmo bitne dijelo-   a
#include <cstdlib>    S
ve našeg programa.
#include <iostream>
   d
#include <cmath>   o
  v
   U
using namespace std; Uobičajen početak prog-
rama. Izvodi se prilikom    i  
svakog  pokretanja prog-   v
  r   m
int main()   p   a
  r
{ rama    š   g
  a   o
  r
   N  p

  e
   l
Formiranje varijabli i    b
  a
unos broja iz kojeg će-    j
   i
  r
mo vaditi kvadratni kori-   a
float broj;    V
float rezultat;  jen.
cout << "Unesite pozitivan broj." << endl; Izvodi se prilikom sva-   a
   k
   i
   f
cin >> broj; kog  pokretanja progra-   a
  r
cout << endl; ma.    G
Broj nula.   e
   j
  n   e
  e   k
Naredbom if   ispitujemo    š   l
  u
  o   d
  n   o
if (broj < 0)  je li sadržaj varijable ma-   o
nji od nule.    D

  e
   j
   l
   t
{   e
cout << "Broj je negativan!" << endl;    P
Ovaj dio programa izvo-
} di se samo ako je sadr-
žaj varijable broj manji   a
   j
   l
od nule.   o
   P

else
  a   a
   d   t
Naredbom else započi-   a
  r   s
   b   k
  e
nje dio programa koji    t
{    O
rezultat = sqrt(broj); se izvodi samo ako    i
   t
cout << "Kvadratni korijen je:" << endl;    k
cout << rezultat; sadržaj varijable broj    e
   j
   b
cout << endl; nije manji od nule.    O
}   -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
cout << endl; Uobičajeni kraj progra-   e
   j
system("PAUSE"); ma. Izvodi se prilikom   n
  a   a
return 0; svakog pokretanja prog-   m    d
   i   o
} rama.    ž   k
  a
   S

PRO - MIL 109


 

Donošenje odluke

Svi programi koje smo do sada vidjeli izvodili su se redom od prve do posljed-
nje naredbe. U slučaju programa za vađenje kvadratnog korijena to nam ne
odgovara jer želimo da program na jedan na čin reagira ako unesemo poziti-
van broj, a na drugi način ako unesemo negativan.

 Ako unesemo pozitivan broj, izračunat ćemo kvadratni korijen i nećemo ispisi-
vati obavijest da je broj negativan, a ako unesemo negativan broj, ispisat će-
mo obavijest da je broj negativan i ne ćemo računati kvadratni korijen, budući
da iz negativnog broja nije moguće izračunati kvadratni korijen.

Za razliku od dosadašnjih naredbi koje su se nalazile u jednom redu, naredba


koja nam omogućuje izvođenje jednog ili drugog dijela programa protežu se
kroz više redova. Pogledajmo strukturu tog sustava.

Uvjet  na temelju kojeg U našem slučaju ispituje se je li sadržaj


će ra čunalo odlučiti hoće
li se izvoditi sadržaj a ili varijable broj  manji od broja nula.
sadržaj b.

Naredbom if   za- Ovaj dio programa


počinje donoše- if ( broj < 0 ) unutar vitičastih zag-
nje odluke. rada izvršit će se ako
 je uvjet zadovoljen, tj.
{ ako  je sadržaj varija-
ble broj manji od nu-
la.
Sadržaj a  i sa-
držaj b  nalaze
sadržaj a
se unutar vitiča-
stih zagrada. } Naredbom else  za-
U početku često počinje dio programa
će nam se deša- else koji se izvršava ako
vati da izostavi- uvjet iza if   naredbe
mo vitičaste za- nije  zadovoljen, tj.
grade ili da ih { ako sadržaj varijable
krivo napišemo. broj nije  manji od
nule.
sadržaj b
U tom slučaju izvodi
se sadržaj b, a ne
}  izvodi se sadržaj a.

110 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Da bismo lakše shvatili način korištenja if ... else naredbi, napravit ćemo niz   a
   S
programa. Ti programi ne će raditi ništa osobito korisno, već će im jedina svrha
biti uvježbavanje pisanja programa unutar kojih ra čunalo donosi odluku.    d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
#include <cstdlib>   a   o
  r
   N  p
#include <iostream>
  e
   l
   b
using namespace std;   a
   j
   i
  r
  a
int main()    V
{   a
float broj;    k
   i
   f
cout << "Unesite broj." << endl;   a
  r
cin >> broj;    G
cout << endl;   e
   j
if (broj > 0)   n   e
  e   k
{    š   l
  u
  o   d
cout << "Broj je veci od nule." << endl;   n   o
  o
}    D
else Ovaj program samo   e
   j
   l
{ ispituje je li unesen    t
  e
cout << "Broj nije veci od nule." << endl;    P
} broj veći od nule.
cout << endl;
system("PAUSE");   a
   j
   l
return 0;  Ako je broj veći od   o
   P
} nule, izvodi se dio
programa koji ispisu-   a   a
   d   t
  a
  r   s
 je tekst Broj je veći    b   k
  e
   O   t
od nule.
   i
   t
   k
  e
   j
   b
 Ako broj nije veći od    O
nule, izvodi se dio   -
  o   i
  r
programa koji ispisu-   p
   i   m
  a
   k
   i   r
   l
 je tekst Broj nije   e  g
   V
veći od nule.   e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 111


 

Donošenje 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 sadržaj varijable broj
int main()
{  jednak nuli DA, izvršit će
float broj; se ovaj dio programa.
cout << "Unesite broj." << endl;
Ispisat će se poruka Broj
cin >> broj;
cout << endl;  je jednak nuli.

if (broj == 0)
{  Ako je odgovor na pitanje
cout << "Broj je jednak nuli." << endl;
 je li sadržaj varijable broj
}
else  jednak nuli NE, izvršit će
{
se ovaj dio programa.
cout << "Broj nije jednak nuli." << endl;
} Ispisat će se poruka Broj
cout << endl;
nije jednak nuli .
system("PAUSE");
return 0;
}

Da smo umjesto broj == 0 napi-


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

112 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
#include <cstdlib>    š   g
  a   o
  r
#include <iostream>    N  p

  e
   l
using namespace std;    b
  a
   j
   i
  r
int main()   a
   V
{
float broj;   a
   k
   i
cout << "Unesite broj." << endl; Vidjeli smo da možemo    f
  a
cin >> broj;   r
   G
cout << endl; ispitivati je li varijabla
if (broj < 100)   e
   j
veća, manja ili jednaka   n   e
{   e   k
   š   l
  u
cout << "Broj je manji od sto." << endl; nekom broju.   o   d
  n   o
}   o
U dosadašnjim primje-    D
else
{ rima to je bio broj nula,   e
   j
   l
cout << "Broj nije manji od sto." << endl;    t
ali to može biti bilo koji   e
}    P
cout << endl; broj, npr. broj 100 kao
system("PAUSE"); što je to slučaj u ovom   a
return 0;    j
   l
  o
} primjeru.    P

  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 113


 

Donošenje odluke

Osim varijable i broja, if   nared-


bom možemo uspoređivati dvije
varijable.

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{ Ovdje ispitujemo jesu li sa-
float prvi; držaji dviju varijabli u koje
float drugi;
cout << "Unesite prvi broj." << endl; smo prethodno unijeli broje-
cin >> prvi; ve jednaki.
cout << endl;
cout << "Unesite drugi broj." << endl;
cin >> drugi;  Ako unesemo jednake bro-
cout << endl;
if (prvi == drugi)  jeve ispisat, će se obavijest
{ Brojevi su jednaki.
cout << "Brojevi su jednaki." << endl;
}
else  Ako unesemo različite, ispi-
{
cout << "Brojevi su razliciti." << endl; sat će se obavijest Brojevi
} su različiti.
cout << endl;
system("PAUSE");
return 0;
}

114 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
U ovom primjeru ispitujemo je   a
   S
li sadržaj varijable prvi  manji
od sadržaja varijable drugi.    d
  o
  v
   U

#include <cstdlib>    i  


  v
  r   m
#include <iostream>   p   a
  r
   š   g
  a   o
  r
using namespace std;    N  p

  e
   l
int main()    b
{   a
   j
   i
  r
float prvi;   a
   V
float drugi;
cout << "Unesite prvi broj." << endl;   a
   k
   i
cin >> prvi;    f
  a
cout << endl;   r
   G
cout << "Unesite drugi broj." << endl;
cin >> drugi;   e
   j
  n   e
cout << endl;   e   k
   š   l
  u
if (prvi < drugi)   o   d
  n   o
{   o
   D
cout << "Prvi broj je manji." << endl;
}   e
   j
   l
else    t
  e
{    P
cout << "Prvi broj nije manji." << endl;
}   a
cout << endl;    j
   l
  o
system("PAUSE");    P
return 0;
}   a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 115


 

Donošenje 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, moguća
{ su i složenija
cout << "Oba broja su manja od pet." << endl; ispitivanja.
}
else
{
cout << "Oba broja nisu manja od pet." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

116 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Prilikom formiranja složenih uvjeta moramo paziti na raspored zagrada. Svaki   a
   S
uvjet, prvi i drugi nalaze se unutar svojih zagrada, a svi zajedno nalaze se
   d
unutar još jednog para zagrada.   o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
if ( (prvi < 5) && (drugi < 5) )    N  p

  e
   l
   b
  a
{    j
   i
  r
  a
   V

sadržaj a Ovdje imamo dva uvjeta, prvi uvjet i drugi   a


   k
   i
   f
  a
uvjet. Svaki od ta dva uvjeta može biti zado-   r
} voljen ili nezadovoljen.
   G
  e
   j
  n   e
  e   k
else    š   l
  u
  o   d
Moguće je da je sadržaj varijable prvi manji   n   o
  o
   D
od 5, a moguće je i da nije. Isto tako, mogu-
{
će je da je sadržaj varijable drugi manji od   e
   j
   l
   t
  e
sadržaj b 5, a moguće je i da nije.    P

  a
}  Postavlja se pitanje u kojem slučaju će se    j
   l
  o
   P
izvršavati sadržaj a, a u kojem slučaju sa-
držaj b.
  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t
Ovim oznakama naređujemo računalu da
će se sadržaj a izvoditi samo  onda kad su    i
   t
   k
zadovoljena oba uvjeta; u našem slučaju   e
   j
   b
   O
kad je sadržaj varijable prvi  manji od 5 i
  -
kad je sadržaj varijable drugi manji od 5.   o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
U svim  ostalim slučajevima izvršit će se    V
  e
   j
sadržaj b.   n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 117


 

Donošenje 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 drži-


mo lijevu AltGr   tipku, a zatim
pritisnemo W tipku.

118 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
Ovdje možemo vidjeti primjere jednostavnih ispitivanja na temelju kojih raču-    S
nalo donosi odluku koji dio programa će se izvoditi, a koji preskočiti.
   d
  o
  v
Ovo su samo neki primjeri, dok je broj mogu ćih kombinacija praktički neog-    U
raničen. Bilo koju varijablu koju koristimo u programu možemo usporediti s
bilo kojim brojem.    i  
  v
  r   m
  p   a
  r
Isto tako bilo koje dvije varijable koje se koriste u programu možemo među-    š   g
  a   o
  r
sobno uspoređivati.    N  p

  e
   l
   b
  a
   j
   i
  r
  a
   V
Primjeri jednostavnih ispitivanja
  a
   k
   i
   f
  a
  r
if (broj < 0) Ispitujemo je li sadržaj varijable broj manji od broja nula.
   G
  e
   j
  n   e
if (broj > 0) Ispitujemo je li sadržaj varijable broj veći od broja nula.   e   k
   š   l
  u
  o   d
  n   o
  o
   D
if (broj == 0) Ispitujemo je li sadržaj varijable broj jednak broju nula.
  e
   j
   l
   t
  e
Ispitujemo je li sadržaj varijable broj manji od broja pede-    P
if (broj < 50)
set.
  a
   j
   l
  o
if (broj > 50) Ispitujemo je li sadržaj varijable broj veći od broja pedeset.    P

  a   a
if (broj == 50) Ispitujemo je li sadržaj varijable broj jednak broju pedeset.    d   t
  a
  r   s
   b   k
  e
   O   t
Ispitujemo je li sadržaj varijable broj različit od broja pede-
if (broj != 50)    i
set.    t
   k
  e
   j
   b
Ispitujemo je li sadržaj varijable prvi veći od sadržaja vari-    O
if (prvi > drugi)  jable drugi.   -
  o   i
  r
  p
Ispitujemo je li sadržaj varijable prvi manji od sadržaja    i   m
  a
if (prvi < drugi)    k
   i   r
   l
varijable drugi.   e  g
   V
  e
   j
Ispitujemo je li sadržaj varijable prvi jednak sadržaju vari-   n
if (prvi == drugi)   a   a
 jable drugi.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 119


 

Donošenje odluke

Osim jednostavnih ispitivanja if naredbom, u programu možemo imati i veo-


ma složena ispitivanja.

Složena ispitivanja formiraju se korištenjem zagrada po logici sli čnoj logici u


matematici i uporabom simbola || i &&.

Simbol && između dva uvjeta znači da oba uvjeta moraju biti zadovoljena da
bi bio zadovoljen ukupni uvjet.

Simbol ||  između dva uvjeta označuje da je dovoljno da je barem jedan od


uvjeta zadovoljen da bi bio zadovoljen ukupni uvjet.

Broj mogućih kombinacija praktički je neograni čen, a koju kombinaciju ćemo


upotrijebiti ovisi o cilju koji programom želimo postići.

Primjeri složenih ispitivanja

Uvjet je zadovoljen ako je sadržaj vari-


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

Uvjet je zadovoljen ako je ili  sadržaj


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

Uvjet je zadovoljen ako je sadržaj vari-


 jable prvi  ili  sadržaj varijable drugi  ili 
if (((prvi < 5) || (drugi < 5)) && (treci < 5)) sadržaj obiju varijabli manji od 5 i ako
 je sadržaj 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 po č etnike

   j
  a
   ž
  r
   d
  a
   S

#include <cstdlib>    d


  o
#include <iostream>   v
   U

using namespace std;    i  


  v
  r   m
  p   a
  r
int main()    š   g
{   a   o
  r
   N  p
float prvi;
float drugi;   e
   l
   b
float treci;   a
   j
   i
cout << "Unesite prvi broj." <<   r
  a
endl;    V
cin >> prvi; Ovdje vidimo primjer pro-   a
cout << "Unesite drugi broj." << endl;    k
   i
grama koji možemo isko-    f
cin >> drugi;   a
  r
cout << "Unesite treci broj." << endl; ristiti za isprobavanje    G
cin >> treci;   e
   j
if (((prvi < 5) || (drugi < 5)) && (treci < 5)) kombinacija s prethodne   n   e
  e   k
{    š   l
  u
stranice.   o   d
  n   o
cout << "DA" << endl;   o
}    D
else U ovom slučaju ukupni   e
   j
   l
{    t
  e
cout << "NE" << endl; uvjet je ispunjen ako je    P
} prvi broj manji od 5 ili ako
cout << endl;
system("PAUSE");  je drugi broj manji od 5 ili   a
   j
   l
  o
return 0; ako su oba manja od 5 i    P
}
ako je treći broj manji od
  a   a
5.    d   t
  a
  r   s
   b   k
  e
   O   t
 Ako je ukupni uvjet zado-
   i
   t
voljen, izvest će se ovaj    k
  e
   j
   b
dio programa.    O
  -
  o   i
  r
 Ako ukupni uvjet nije   p
   i   m
  a
   k
   i   r
   l
zadovoljen, izvest će se   e  g
   V
ovaj dio programa.   e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 121


 

Donošenje odluke

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{ Osim što možemo u pro-
float broj; gramu imati veoma slože-
cout << "Unesite broj." << endl; na ispitivanja unutar if  
cin >> broj; naredbe, moguće je jed-
if (broj < 0) nu if   naredbu staviti unu-
{ tar druge if  naredbe.
cout << "Broj je manji od 0." << endl;
} To je nužno ako želimo
else ispitati više stvari, npr. je
{ li neki broj veći od nule ili
if (broj > 0)  jednak nuli ili je manji od
{ nule. Takvo ispitivanje ne
cout << "Broj je veci od 0." << endl; možemo napraviti s jed-
} nom if   naredbom, nego
else su nužne dvije if   nared-
{ be.
cout << "Broj je 0." << endl;
} Pogledajmo ovaj prog-
} ram.
cout << endl;
system("PAUSE");
return 0;
}

122 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
Pogledamo strukturu    S
#include <cstdlib> programa.
   d
#include <iostream>   o
  v
   U
using namespace std;
   i  
Početak programa.   v
  r   m
int main()   p   a
  r
{    š   g
  a   o
  r
float broj;    N  p
cout << "Unesite broj." << endl;   e
Prva if   naredba. Ispitu-    l
cin >> broj;    b
  a
 je je li broj manji od 0.    j
   i
  r
  a
   V
if (broj < 0)
  a
   k
   i
{    f
 Ako je uneseni broj   a
  r
cout << "Broj je manji od 0." << endl; manji od 0, izvodi se    G
} ovaj dio.   e
   j
  n   e
else   e   k
   š   l
  u
  o   d
  n   o
  o
{    D
if (broj > 0)  Ako uneseni broj nije
manji od 0, izvodi se   e
   j
   l
ovaj dio. Unutar ovog    t
{   e
dijela nalazi se druga    P
cout << "Broj je veci od 0." << endl;
} if  naredba.
  a
   j
else    l
  o
   P
 Ako je uneseni broj
{ veći od 0, izvodi se
cout << "Broj je 0." << endl; ovaj dio.   a   a
   d   t
}   a
  r   s
   b   k
  e
   O   t
}
 Ako uneseni broj nije    i
   t
   k
veći od 0, izvodi se   e
   j
cout << endl; ovaj dio.    b
system("PAUSE");    O
return 0;  Ako uneseni broj nije   -
  o   i
}   r
ni veći ni manji od   p
   i   m
nule, onda znamo da    k   a
   i   r
   l
 je nula.   e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
Kraj programa.    ž   k
  a
   S

PRO - MIL 123


 

Donošenje odluke

#include <cstdlib> Pogledamo li pažljivo ovaj


#include <iostream> program, vidjet ćemo da je
using namespace std; potpuno identičan programu s
int main() prethodne stranice. Razlika je
{  jedino u tome što pojedini re-
float broj; dovi nisu uvučeni.
cout << "Unesite broj." << endl;
cin >> broj; Pokušamo li pokrenuti ovaj
if (broj < 0) program, vidjet ćemo da radi
{ potpuno jednako kao i ina čica
cout << "Broj je manji od 0." << endl; s uvučenim redovima.
}
else U čemu je onda razlika? Zaš-
{ to bismo uopće uvlačili redove
if (broj > 0) kad program očigledno radi i
{ bez toga?
cout << "Broj je veci od 0." << endl;
} Razlika je u preglednosti. Pro-
else gram s uvučenim redovima
{ daleko je pregledniji.
cout << "Broj je 0." << endl;
} Usporedimo li program s uvu-
} čenim redovima na prethodnoj
cout << endl; stranici i ovaj bez uvučenih
system("PAUSE"); redova, vidjet ćemo da je na
return 0; inačici s uvučenim redovima
} daleko lakše uočiti gdje zapo-
činju, a gdje završavaju poje-
dine if naredbe; koje vitičaste
zagrade čine par i sl.

Preglednost programa s uvla-


čenjima redova osobito dolazi
do izražaja kod većih i slože-
nijih programa.
Ne postoje čvrsta pravila na koji način
treba uvlačiti redove. Na početku je
najbolje da u vlastitim programima
uvlačenja izvodimo slično kao u prim-
 jerima danima u knjizi.

Osnovna ideja je u tome da se uvu če


svaka cjelina za koju bi moglo biti
nejasno gdje počinje, a gdje završa-
va.

124 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
Pogledajmo strukturu    S
#include <cstdlib> uvlačenja redova.
   d
#include <iostream>   o
  v
   U
using namespace std;
Bez uvlačenja piše se    i  
  v
  r   m
int main() početak programa i dvije   p   a
  r
{ glavne vitičaste zagrade.    š   g
  a   o
  r
   N  p
float broj;   e
   l
cout << "Unesite broj." << endl;    b
  a
   j
   i
cin >> broj; Sadržaj unutar glavnih   r
  a
vitičastih zagrada uvlači    V
se u desnu stranu.
if (broj < 0)   a
   k
   i
Na toj razini piše se    f
  a
  r
{ većina jednostavnih    G
cout << "Broj je manji od 0." << endl; naredbi.
  e
   j
}   n   e
  e   k
   š   l
  u
  o   d
else   n   o
Sadržaji unutar if   na-   o
   D
{ redbe dodatno se pomi-
if (broj > 0) ču u desnu stranu.   e
   j
   l
   t
  e
To nam pomaže da    P
{
cout << "Broj je veci od 0." << endl; lakše uočimo gdje poči-
} nje, a gdje završava if  
  a
   j
naredba.    l
  o
else    P

{   a   a
 Ako se unutar jedne if      d   t
cout << "Broj je 0." << endl;   a
  r   s
} naredbe nalazi druga if      b   k
  e
   O   t
naredba, njen sadržaj
} dodatno se pomiče u    i
desnu stranu.    t
   k
  e
   j
   b
cout << endl; To nam pomaže da    O
system("PAUSE"); lakše uočimo gdje poči-   -
nje i gdje završava dru-   o   i
  r
return 0;   p
ga if   naredba te poma-    i   m
}    k   a
   i   r
   l
že da njen sadržaj lak-   e  g
še razlikujemo od sadr-    V
žaja prve if  naredbe.   e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 125


 

Donošenje odluke

Switch naredba

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
float a;
float b; If   naredba nam
int od; omogućuje gra-
cout << "Unesite 1. broj:" << endl; nanje na dvije
cin >> a; grane. Jedna će
cout << "Unesite 2. broj:" << endl; se izvršiti ako je
cin >> b; uvjet zadovo-
cout << "Brojeve cemo:" << endl; ljen, a druga ako
cout << "1 - zbrojiti" << endl; uvjet nije zado-
cout << "2 - oduzeti" << endl; voljen.
cout << "3 - mnoziti" << endl;
cout << "4 - dijeliti" << endl; Primjena nared-
cin >> od; be if   nije ele-
switch (od) gantna ako se u
{ programu javi
case 1: potreba za gra-
cout << a << " + " << b << " = " << a + b << endl; nanjem u više
break; od dvije grane.
case 2:
cout << a << " - " << b << " = " << a - b << endl;
break; U ovom progra-
case 3: mu biramo jed-
cout << a << " x " << b << " = " << a * b << endl; nu od četiri ra-
break; čunske operaci-
case 4:  je.
cout << a << " : " << b << " = " << a / b << endl;
break; Program bismo
default: mogli realizirati i
cout << "Morate unijeti 1,2,3 ili 4." << endl; uporabom više
} if naredbi, ali
cout << endl; daleko je ele-
system("PAUSE"); gantniji ako upo-
return 0; trijebimo switch 
} naredbu.

126 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Početak switch naredbe. Ovdje se nalazi int varijabla. Grana-   a
   S
nje se vrši na temelju broja koji se
nalazi u varijabli. Int tip je obvezan.    d
  o
  v
   U

Naredbom case 1: započinje dio programa koji    i  


  switch (od) će se izvršiti ako se u varijabli od nalazi broj 1.
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p
{
  e
   l
Naredbom break     b
  a
   j
case 1: završava case 1:     i
  r
  a
naredba.    V

cout << "Prvi izbor." << endl; Pokušajmo je obri-   a


   k
   i
sati. Pokrenimo    f
  a
  r
program i promat-    G
break; rajmo posljedice.
  e
   j
  n   e
  e   k
   š   l
case 2:   u
  o   d
  n   o
  o
cout << "Drugi izbor." << endl;    D
break;   e
   j
Naredbom case 2:     l
   t
započinje dio pro-   e
   P
case 3: grama koji će se
cout << "Treci izbor." << endl; izvršiti ako je sadr-
žaj varijable od    a
   j
break; broj 2.
   l
  o
   P

Na temelju slične
case 4: logike biraju se   a   a
   d   t
cout << "Cetvrti izbor." << endl; ostali case dijelovi   a
  r   s
   b   k
kojih može biti pro-   e
   t
break; izvoljni broj.
   O

   i
   t
   k
default: (U našem slučaju   e
   j
   b
imamo još case 3:     O
i case 4:.)
cout << "Greska!!!" << endl;   -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
}   e  g
   V
Ovaj dio izvršava se ako ni jedan case  uvjet   e
   j
nije zadovoljen, dakle ako u varijabli od nije bio   n
  a   a
ni broj 1, ni broj 2, ni broj 3, ni broj 4.   m    d
   i   o
Kraj switch naredbe.    ž   k
  a
   S

PRO - MIL 127


 

Petlje

128 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
  a
   j
   i
  r
  a
   V

  e
  a
   k

   j
   i
   f
  a
  r

   l
   G
  e

   t
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
  o

  e
   D

  e
   j
   l
   t
  e
   P

   P   a
   j
   l
  o
   P

  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 129


 

Petlje

For petlja

Ovaj program crta niz kružnica jedna-


#include <cstdlib> kog promjera. Svakoj je središte po-
#include <iostream> maknuto za pet točaka u desnu stranu
#include <winbgim.h> u odnosu na središte prethodne.
using namespace std; Vidimo da program funkcionira, ali nije
baš elegantan budući da moramo pu-
int main() no puta ponoviti sličnu 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 očigledno
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 po č etnike

   j
  a
   ž
  r
   d
Ključna naredba u novoj inačici programa je for naredba. Omogućuje nam   a
   S
izvršavanje dijela programa više puta. To višestruko ponavljanje dijela prog-
rama naziva se programska petlja. Slično kao if   naredba, i for   naredba je    d
veoma složena i proteže se kroz više redova programa.   o
  v
   U
Pogledajmo sastavne elemente for  naredbe.
   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
Ovdje se definira početna Petlja će se vrtjeti, odnosno petlja će po-    N  p
vrijednost varijable koju navljati dio programa, tako dugo dok je   e
   l
koristi for   naredba i koju ovaj uvjet zadovoljen; u našem slučaju,    b
  a
   j
prije for   naredbe moramo tako dugo dok je sadržaj varijable x  manji    i
  r
formirati. od 365.   a
   V

U našem slučaju početna Kad uvjet više nije zadovoljen; tj. kad x više   a
   k
vrijednost varijable x  je    i
   f
ne bude manji od 365, program će nastavit   a
  r
260. izvođenje od prve naredbe nakon druge    G
vitičaste zagrade.
  e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D

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


   j
   l
   t
  e
   P
{ Ovdje određujemo na-
čin na koji će se vrijed-   a
   j
   l
circle ( x, 240, 60 ); nost varijable x  mije-   o
   P
njati.

}  U našem slučaju nakon   a   a


   d   t
svakog ponavljanja for     a
  r   s
   b   k
  e
naredbe, vrijednost    O   t
varijable x uvećat će se
za 5, a rezultat će se    i
   t
   k
spremiti u varijablu x.   e
   j
Udaljenost središta kružnice od    b
lijevog ruba nije odre đena brojem,    O
nego vrijednošću varijable x.   -
  o   i
  r
Sadržaj unutar navodni-   p
Budući da se pri svakom ponov- ka ponavlja se svaki put    i   m
  a
   k
   i   r
   l
nom izvođenju sadržaj varijable x  kad for   naredba uveća   e  g
mijenja, jednako će se mijenjati i    V
vrijednost varijable x  i   e
udaljenost središta kružnice od    j
provjeri je li x  manji od   n
  a   a
lijevog ruba. 365.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 131


 

Petlje

Pogledajmo dijelove našeg programa.


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

using namespace std; Uobičajeni početak programa.

int main()
{

Naredbe za otvaranje grafi čkog pro-


zora, određivanje 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. Početna
cleardevice(); vrijednost varijable petlje x  je 260,
uvećavat će se za 5, a izvršavat će
se tako dugo dok je sadržaj varijable
x manji od 365.

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


Pri svakom ponavljanju petlje po-
navlja se sadržaj unutar viti častih
zagrada.

U našem slučaju na grafičkom ek-


ranu će se crtati kružnica.
{
circle(x,240,60); Udaljenost središta kružnice od
} lijevog ruba nije određena brojem,
nego vrijednošću varijable x.

Budući da vrijednost varijable x pri


svakom ponavljanju raste za 5,
središe nove kružnice bit će za pet
točaka pomaknuto u desnu stranu.
getch();
closegraph();
return 0;
}
Uobičajeni kraj programa.

132 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Nemojmo se obeshrabriti ako nam trenutno nije previše jasno ni kako for   a
   S
naredba radi, ni čemu bi to trebalo služiti. Na početku su takve nedoumice
normalne i nipošto nisu dokaz da nismo talentirani za programiranje.    d
  o
  v
   U
Takve nedoumice prevladavaju se tako da napišemo odre đenu količinu pro-
grama jer ćemo jedino na taj način do kraja shvatiti kako for   naredba radi i    i  
čemu služi.   v
  r   m
  p   a
  r
   š   g
Drugačiji je problem ako nam se ne da pisati programe. Onda bismo doista   a   o
  r
   N  p
mogli konstatirati da programiranje nije za nas i trebali bismo se pokušati
baviti nečim intelektualno manje zahtjevnim, npr. nogometom ili politikom.   e
   l
   b
  a
   j
   i
  r
  a
   V
Ovaj će nam program po-
#include <cstdlib> moći da lakše shvatimo   a
   k
   i
funkcioniranje if   naredbe.    f
#include <iostream>   a
  r
#include <winbgim.h> Vrijednost varijable x  mije-    G
njat će se od 0 do 9 po 1.   e
   j
using namespace std;   n   e
  e   k
Jedino što ovaj program    š   l
  u
  o   d
int main() radi jest ispisivanje sadržaj   n   o
  o
{ varijable x.    D
int x;
To nam omogućuje lako   e
   j
cout << "Prije for naredbe." << endl;    l
   t
for (x = 0; x < 9; x = x + 1 ) opažanje kako se sadržaj   e
   P
{ varijable x  mijenja, te koji
cout << x << endl; dio programa se ponavlja i
} koliko puta.   a
   j
   l
cout << "Nakon for naredbe." << endl;   o
   P
cout << endl; Unošenjem varijacija u taj
system("PAUSE"); program najlakše ćemo
return 0; shvatiti for  naredbu.   a   a
   d   t
}   a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
Vidimo da se ponavlja   -
  o   i
sadržaj unutar viti častih   r
  p
zagrada for  naredbe.    i   m
  a
   k
   i   r
   l
  e  g
   V
Sadržaj prije i sadržaj pos-   e
   j
lije for   naredbe ne ponav-   n
  a   a
lja se.   m
   i
   d
  o
   ž   k
  a
   S

PRO - MIL 133


 

Petlje

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

using namespace std;

int main() U prošlom primjeru vrijed-


{ nost varijable x  uvećavali
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 možemo uvećavati
} 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 slučaju vrijednost
} varijable x  raste od 0 do 9
po 2.

Mijenjati možemo početnu i #include <cstdlib>


krajnju vrijednost petlje. #include <iostream>
#include <winbgim.h>
U ovom slučaju 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 po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
   U
#include <cstdlib>
#include <iostream>    i  
#include <winbgim.h>   v
  r   m
  p   a
  r
   š   g
using namespace std;   a   o
  r
   N  p

int main()   e


   l
   b
{   a
   j
   i
int x;   r
  a
cout << "Prije for naredbe." << endl;    V
for (x = 28; x > 9; x = x - 2 )   a
{    k
   i
   f
cout << x << endl; For   naredba može brojiti i   a
  r
} unatrag.    G
cout << "Nakon for naredbe." << endl;   e
   j
cout << endl; U ovom slučaju vrijednost   n   e
  e   k
system("PAUSE"); varijable x  mijenja se od 28    š   l
  u
  o   d
return 0; do 9 po 2.   n   o
  o
}    D

  e
   j
   l
   t
  e
   P

U for   naredbi mogu se koristi- #include <cstdlib>


ti negativni brojevi. #include <iostream>   a
   j
   l
#include <winbgim.h>   o
   P

using namespace std;


  a   a
   d   t
  a
  r   s
int main()    b   k
  e
   t
{    O
int x;
cout << "Prije for naredbe." << endl;    i
   t
   k
for (x = 18; x > -9; x = x - 2 )   e
   j
   b
{    O
cout << x << endl;
  -
}   o   i
  r
cout << "Nakon for naredbe." << endl;   p
   i   m
  a
cout << endl;    k
   i   r
   l
  e  g
system("PAUSE");    V
return 0;   e
   j
  n
}   a   a
   d
  m
   i   o
   ž   k
  a
   S

PRO - MIL 135


 

Petlje

#include <cstdlib>
#include <iostream> Prilikom formiranja for   nared-
#include <winbgim.h> be moguće je napraviti grešku
koja se naziva “mrtva petlja”.
using namespace std;
Do te greške dolazi kad uvjete
int main() za kraj petlje tako formuliramo
{ da se oni nikad neće ispuniti,
int x; pa će se petlja vječno izvoditi.
cout << "Prije for naredbe." << endl;
for (x = 18; x > -9; x = x + 2 ) U ovom primjeru početna vri-
{  jednost je 18. Ta početna vri-
cout << x << endl;  jednost uvećava se za 2, a
} petlja će se ponavljati tako
cout << "Nakon for naredbe." << endl; dugo dok je x veći od –9.
cout << endl;
system("PAUSE");  Ako 18 uvećavamo za 2, x  će
return 0; uvijek biti veći od –9 i petlja se
} nikad neće prekinuti.

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 po č etnike

   j
  a
   ž
  r
   d
  a
Naredba for   ne postoji zato da bi se niz brojeva ispisao na zaslon ra čunala,    S
nego zato da bi se u programu postigli odre đeni efekti.
   d
  o
Iako to nije uvijek slučaj, najčešće se za postizanje željenih ciljeva koristi va-   v
   U
rijabla petlje. Pogledajmo nekoliko primjera.
   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
#include <cstdlib> Ovaj primjer sličan je primjeru    N  p
#include <iostream> na početku ovog poglavlja.   e
   l
#include <winbgim.h>    b
  a
   j
Razlika je u tome što su u ovom    i
  r
using namespace std;   a
slučaju drugačije početna i kraj-    V
nja vrijednost x  varijable, pa
int main() smo dobili drugačiji niz kružnica.   a
   k
   i
   f
{   a
  r
int gdriver = 9; U ovom slučaju vrijednost varija-    G
int gmode = 2; ble x mijenja se od 60 do 580 po
int x;   e
   j
5.   n   e
initgraph(&gdriver, &gmode, "");   e   k
   š   l
  u
setbkcolor (WHITE);   o   d
Pokušamo sami mijenjati vrijed-   n   o
  o
setcolor (BLACK); nosti unutar for   naredbe i pro-    D
cleardevice(); matrajmo kakve efekte će izaz-
for (x = 60; x < 580; x = x + 5 ) vati te promjene.   e
   j
   l
   t
{   e
   P
circle(x,240,60);
}
getch();   a
   j
   l
closegraph();   o
return 0;    P
}
  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

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 možemo staviti umjesto
for (x = 60; x < 390; x = x + 5 ) broja koji određuje udaljenost središ-
{
circle(320,x,60); ta od gornjeg ruba, pa će se kružni-
} ce crtati od gore prema dolje.
getch();
closegraph();
return 0;
} #include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;


Uvećavamo li varijablu x za 15 um-
 jesto za 5, pomak središta kružnica int main()
bit će veći. {

Umjesto broja 15 pokušajmo 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 po č etnike

   j
  a
   ž
  r
   d
  a
#include <cstdlib>    S
#include <iostream>
   d
#include <winbgim.h>   o
  v
   U
using namespace std;
   i  
  v
  r   m
int main()   p   a
  r
{    š   g
  a   o
  r
int gdriver = 9;    N  p
int gmode = 2;
  e
   l
int x;    b
initgraph(&gdriver, &gmode, "");   a
   j
   i
  r
setbkcolor (WHITE);   a
   V
setcolor (BLACK);
cleardevice();   a
   k
   i
for (x = 20; x < 210; x = x + 10 ) Osim pozicije središta kružnice,    f
  a
  r
{ varijablom x možemo mijenjati    G
circle(320,240,x);
} polumjer kružnice.   e
   j
  n   e
getch();   e   k
   š   l
  u
closegraph();   o   d
  n   o
return 0;   o
   D
}
#include <cstdlib>   e
   j
   l
   t
#include <iostream>   e
   P
#include <winbgim.h>

using namespace std;   a


   j
   l
Na sličan način možemo crtati ni-   o
int main()    P
zove drugih geometrijskih oblika,
npr. crta. {
int gdriver = 9;   a   a
   d   t
int gmode = 2;   a
  r   s
int x;    b   k
  e
   O   t
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);    i
   t
setcolor (BLACK);    k
  e
   j
cleardevice();    b
for (x = 10; x < 640; x = x + 10 )    O
{   -
  o   i
  r
line (x, 20, x, 400);   p
}    i   m
  a
   k
   i   r
   l
getch();   e  g
   V
closegraph();   e
return 0;    j
  n
  a   a
}   m    d
  o
   i
   ž   k
  a
   S

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 dosadašnjim programima koris-
tili smo jednu varijablu. int main()
{
U ovom primjeru koristima dvije, int gdriver = 9;
 jednom pomičemo udaljenost sre- int gmode = 2;
dišta od lijevog ruba, a drugom int x;
mijenjamo polumjer. 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 po č etnike

   j
  a
   ž
  r
   d
Pogledajmo bitne dijelove ovog programa.   a
   S

   d
  o
  v
Za razliku od dosadašnjih primje-    U
#include <cstdlib> ra, u ovom formiramo još jednu
#include <iostream> varijablu koju smo nazvali r .    i  
#include <winbgim.h>   v
  r   m
  p   a
  r
   š   g
using namespace std;   a   o
  r
   N  p

int main()   e


   l
Prije for   naredbe u varijablu r      b
{ spremimo početnu vrijednost po-   a
   j
   i
int gdriver = 9;   r
lumjera kruga. U našem slučaju   a
int gmode = 2;    V
spremili smo broj 20.
int x;   a
   k
   i
   f
int r;   a
  r
   G
initgraph(&gdriver, &gmode, ""); For   naredba mijenja vrijednost   e
   j
setbkcolor (WHITE);   n   e
varijable x od 20 do 475 po 15.   e   k
setcolor (BLACK);    š   l
  u
  o   d
cleardevice();   n   o
  o
   D
r = 20;   e
   j
   l
   t
for (x = 20; x < 475; x = x + 15 ) U naredbi za crtanje kružnice   e
   P
{ upotrijebili smo dvije varijable.

Varijablom x  određujemo udalje-   a


circle(x,240,r);    j
   l
nost središta kružnice od lijevog   o
ruba, a varijablom r   polumjer kru-    P
r = r + 5;
žnice.
  a   a
}    d   t
  a
  r   s
getch();    b   k
  e
   t
closegraph();    O
return 0;
}    i
   t
Da bi kod svakog ponavljanja    k
  e
polumjer kružnice bio veći, nakon    j
   b
što smo nacrtali kružnicu, unutar    O
vitičastih zagrada for   naredbe,   -
  o   i
I u ovom slučaju promjena pojedinih broj u varijabli r   povećavamo za   r
  p
5.    i   m
elemenata i opažanje rezultata po-    k   a
   i   r
   l
moći će nam da bolje razumijemo   e  g
Zbog toga će pri svakom ponav-    V
program; npr umjesto r = r + 5 poku-   e
ljaju polumjer kružnice biti veći.    j
šajmo staviti r = r + 10; umjesto x =   n
  a   a
x + 15 pokušajmo staviti x = x + 5.   m    d
  o
   i
   ž   k
  a
   S

PRO - MIL 141


 

Petlje

 Animacija

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

using namespace std;


 Animaciju možemo 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); obrišemo 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 inačicom programa dobit int gdriver = 9;
ćemo privid kretanja pravokutnika. int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 10; x < 620; x = x + 1 )
Pravokutnik koji se kreće {
na zaslonu računala. cleardevice();
rectangle (x, 20, x+20, 60);
}
getch();
Ovom naredbom brišemo ekran, a closegraph();
time i pravokutnik na staroj poziciji. return 0;
}

142 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
#include <cstdlib>    S
#include <iostream>
   d
#include <winbgim.h>   o
  v
   U
using namespace std;
   i  
  v
  r   m
int main()   p   a
  r
{    š   g
  a   o
  r
int gdriver = 9;    N  p
int gmode = 2;   e
   l
int x;    b
  a
   j
initgraph(&gdriver, &gmode, "");    i
  r
setbkcolor (WHITE);   a
   V
setcolor (BLACK); Sve grafičke elemente koje
cleardevice(); smo do sada mijenjali možemo   a
   k
for (x = 10; x < 200; x = x + 1 )    i
   f
animirati.   a
  r
{    G
cleardevice(); U ovom programu animiramo
circle (320, 240, x);   e
   j
širenje kružnice.   n   e
}   e   k
   š   l
  u
getch();   o   d
  n   o
closegraph();   o
   D
return 0; #include <cstdlib>
} #include <iostream>   e
   j
   l
   t
#include <winbgim.h>   e
   P
using namespace std;
  a
   j
int main()    l
  o
{    P
U ovom primjeru animiramo kružnicu
koja pada od gornjeg prema donjem int gdriver = 9;
rubu . int gmode = 2;   a   a
int x;    d   t
  a
  r   s
initgraph(&gdriver, &gmode, "");    b   k
  e
   O   t
setbkcolor (WHITE);
setcolor (BLACK);    i
   t
cleardevice();    k
  e
   j
for (x = 10; x < 465; x = x + 1 )    b
{    O
cleardevice();   -
  o   i
  r
circle (320, x, 10);   p
}    i   m
  a
   k
   i   r
   l
getch();   e  g
closegraph();    V
  e
   j
Pokušajmo sami smi- return 0;   n
sliti slične programe.   a   a
}   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 143


 

Petlje

Petlja u petlji

Slično kao što možemo unutar if  


#include <cstdlib> naredbe staviti drugu if   naredbu
#include <iostream> tako unutar for   petlje možemo stavi-
#include <winbgim.h> ti drugu for   petlju.
using namespace std; Kod ovakvih programa veoma je
važno pravilno uvlačiti redove, jer
int main() tako lakše uočavamo početak i kraj
{ pojedinih for   naredbi.
int gdriver = 9;
int gmode = 2;
int x;
int r;
initgraph(&gdriver, &gmode, ""); Ovom naredbom naređujemo 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 našem slučaju računalo će sta-
for (r = 5; r < 31; r = r + 5)  jati 100 milisekundi.
{
delay(100); Ovom naredbom usporavamo iz-
cleardevice(); vođenje animacije, ako je animaci-
circle (x, 240, r);  ja suviše brza.
}
} Na vašem računalu taj broj možete
getch(); promijeniti i tako izvođenje anima-
closegraph(); cije prilagoditi brzini svog računa-
return 0; la. (Ako imamo sporo računalo,
} ovu naredbu možemo izbaciti.)

Ovdje vidimo tijek cijele anima-


cije, iako će se tijekom anima-
cije istovremeno vidjeti samo
 jedna kružnica.

Vanjskom petljom pomičemo


središte kružnice u lijevu stra-
nu, a unutrašnjom petljom mi-
 jenjamo polumjer kružnice.

144 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
 Analiziranje ovog   a
#include <cstdlib>    S
programa pomoći
#include <iostream> će nam da u pot-    d
punosti razumije-   o
  v
using namespace std; mo način funkcio-    U
niranja petlje unu-
int main()    i  
tar petlje.   v
  r   m
{   p   a
  r
int x;    š   g
Pri tome nismo   a   o
  r
int r; ograničeni na to    N  p
cout << "Prije petlje." << endl; da možemo staviti   e
for (x = 0; x < 2; x = x + 1 )    l
 jednu petlju unutar    b
  a
   j
{ petlje. Moguće je    i
  r
cout << "Vanjska petlja. x = " << x << endl;   a
unutar petlje staviti    V
for (r = 0; r < 3; r = r + 1) petlju, a unutar te
{ petlje još jednu   a
   k
   i
cout << "Nutarnja petlja. r = " << r << endl; petlju i tako petlje    f
  a
}   r
dodavati u skladu    G
} s ciljevima koje
cout << "Nakon petlje." << endl;   e
   j
želimo postići.   n   e
cout << endl;   e   k
   š   l
  u
system("PAUSE");   o   d
  n   o
return 0;   o
   D
}
  e
   j
   l
   t
  e
   P

  a
   j
   l
  o
Da bi rezultat rada programa    P
bio bolje vidljiv, ovdje smo
naredbu cout  koristili na na-   a   a
čin na koji je do sada nismo    d   t
  a
  r   s
koristili. U ovoj inačici sadrži    b   k
  e
   O   t
tri dijela.
   i
   t
   k
  e
   j
   b
   O
cout << "Vanjska petlja. x = " << x << endl;   -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
Tekst unutar navodnika Sadržaj varijable x  ispisu-   e
Skok u novi    j
ispisuje se na zaslon raču-   n
  a   a
 je se na zaslon računala. red.    d
nala.   m
   i   o
   ž   k
  a
   S

PRO - MIL 145


 

Petlje

Niz petlji

#include <cstdlib> Osim što petlju možemo staviti unutar


#include <iostream> druge petlje, petlje možemo staviti
#include <winbgim.h>  jednu iza druge.

using namespace std; U ovom slučaju prva petlja malu kruž-


nicu pomiče od dolje prema gore, a
int main() zatim druga petlja malu kružnicu širi
{ tako da sve zajedno tvori jednostavan
int gdriver = 9; prikaz vatrometa.
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 pomoći će
for (r = 10; r < 91; r = r + 1) nam da lakše 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 po č etnike

   j
  a
Dozvoljene i nedozvoljene kombinacije petlji    ž
  r
   d
  a
   S

   d
for (x = 30; x < 610; x = x + 60)   o
  v
{    U

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


  v
  r   m
{ laziti jedna unutar   p   a
  r
   š   g
druge.   a   o
circle (x, 240, r);   r
   N  p
}   e
   l
}     b
  a
   j
   i
  r
  a
   V

  a
   k
   i
   f
  a
  r
for (x = 465; x < 100; x = x - 1)    G
{   e
   j
  n   e
circle (320, x, 10);   e   k
   š   l
  u
  o   d
} Petlje se mogu na-   n   o
  o
   D
laziti jedna iza dru-
ge
for (r = 10; r < 91; y = y + 1)   e
   j
   l
   t
  e
{    P
circle (320, x, r);
}    a
   j
   l
  o
   P

  a   a
   d   t
  a
  r   s
U ovom slučaju    b   k
for (x = 465; x < 100; x = x - 1)    O
  e
   t

{ druga for   naredba


   i
   t
circle (320, x, 10); nalazi se unutar    k
  e
   j
   b
for (r = 10; r < 91; y = y + 1) prve for  naredbe.    O
}   -
  o   i
  r
Ovakva ispreplete-   p
   i   m
   k   a
   i   r
{ nost dviju for   na-    l
  e  g
   V
circle (320, x, r); redbi nije dozvolje-   e
   j
  n
}  na.   a   a
   d
  m
   i   o
   ž   k
  a
   S

PRO - MIL 147


 

Petlje

While petlja

#include <cstdlib> Do sada smo za svaki novi proračun


#include <iostream> programe morali iznova pokretati.

using namespace std; Daleko elegantnije bilo bi kad bi nas


program nakon prora čuna pitao želi-
int main() mo li proračun ponoviti ili želimo pre-
{ kinuti izvođenje programa.
int broj;
int kvadrat; Ovaj program radi upravo tako. Une-
int odgovor; semo li nakon proračuna broj 1, pro-
odgovor = 1; račun ćemo moći ponoviti, a unese-
while (odgovor == 1) mo li 2, odnosno bilo koji broj razli čit
{ 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, budući da se dio pro-
return 0; grama može ponoviti više
} puta. Ova petlje nije realizi-
rana for   naredbom, nego
while naredbom.

U čemu je razlika?

Naredba for  pogodnija je za
točno određen broj ponav-
ljanja, a naredba while  on-
da kad unaprijed ne može-
mo znati broj ponavljanja.

(U ovom slučaju mi ne mo-


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

148 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Ključna naredba u novoj ina čici programa je while naredba. Logika uporabe   a
   S
te naredbe slična je logici uporabe for  naredbe i ako bismo se potrudili svaki
program realiziran for   naredbom mogli bismo realizirati while  naredbom i    d
  o
svaki program realiziran while  naredbom mogli bismo realizirati for   nared-   v
   U
bom.
   i  
Zašto imamo dvije naredbe ako rade isti posao?   v
  r   m
  p   a
  r
   š   g
Zato što se neke stvari mogu lakše realizirati for   naredbom, a neke while    a   o
  r
   N  p
naredbom. Pogledajmo elemente while naredbe.
  e
   l
   b
  a
   j
   i
  r
  a
   V
Prije naredbe while  Ovdje se unutar zagrada nalazi uvjet koji   a
moramo varijabli koju    k
   i
   f
  a
će while naredba koris- while naredba ispituje. Uvjeti se formiraju   r
   G
titi dati neku početnu po istoj logici kao i kod for  naredbe.
vrijednost.   e
   j
  n   e
  e   k
   š   l
  u
  o   d
 Ako je uvjet zadovoljen, izvršit će se na-   n   o
  o
   D
redbe unutar viti častih zagrada, a nakon
a = 1; toga se računalo vraća na while naredbu   e
   j
   l
   t
  e
i ponovo ispituje je li uvjet zadovoljen.    P
while (a == 1)
  a
   j
Ako jest, ponovo se izvode naredbe unu-    l
  o
{ tar vitičastih zagrada.    P

  a   a
cin >> a; Ako nije,  izvodi se prva naredba poslije
   d   t
  a
  r   s
   b   k
  e
   O   t
druge vitičaste zagrade.

   i
   t
   k
U našem slučaju ispituje se je li sadržaj   e
   j
   b
   O
varijable a  jednak broju 1. Zato prije
Da bi se ponavljanje u   -
  o   i
nekom trenutku preki- while naredbe moramo u varijablu a  sta-   r
  p
nulo, unutar viti častih    i   m
  a
viti broj jedan. Kad bi u varijabli a bio neki    k
   i   r
   l
zagrada varijabli koju   e  g
while  naredba ispituje drugi broj, računalo bi skočilo na prvi red    V
  e
   j
treba promijeniti vrijed- nakon druge vitičaste zagrade.   n
  a   a
nost.   m
   i
   d
  o
   ž   k
  a
   S

PRO - MIL 149


 

Petlje

Pogledajmo dijelove našeg programa.


#include <cstdlib>
#include <iostream>

using namespace std;


Uobičajeni početak programa i formi-
int main() ranje varijabli.
{
int broj;
int kvadrat; U varijablu odgovor   stavljamo broj 1.
int odgovor; To moramo učiniti jer naredba while 
ispituje je li u varijabli odgovor   broj
1.

odgovor = 1;
Naredba while  ispituje je li sadržaj
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;
cin >> broj; unesenog broja.
kvadrat = broj * broj;
cout << "Kvadrat unesenog broja je:" << endl; U ovom dijelu u
cout << kvadrat; varijablu odgovor
unosi se broj na
cout << endl;
temelju kojeg će
while   naredba
cout << "Ponovo = unesite 1." << endl;
odlučiti treba li
cout << "Kraj = unesite 2." << endl;
naredbe unutar
cin >> odgovor;
vitičastih zagrada
}
ponoviti.

cout << endl;


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

150 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Varijablu koju će koristiti while  naredba moramo prije while  naredbe   a
   S
formirati i moramo joj dati odgovarajuću početnu vrijednost.
   d
  o
Zašto je u našem slučaju odgovarajuća početna vrijednost 1?   v
   U
Zato što while naredba ispituje je li vrijednost varijable odgovor  1.    i  
  v
  r   m
 Ako bi vrijednost varijable odgovor   bila npr. 2, nakon while  naredbe   p   a
  r
   š   g
program bi skočio na ovu naredbu i sadržaj unutar navodnika ne bi se   a   o
  r
   N  p
izvršavao.
  e
   l
   b
  a
   j
   i
  r
  a
   V
#include <cstdlib>
  a
#include <iostream>    k
   i
   f
  a
  r
using namespace std;    G
  e
   j
int main()   n   e
  e   k
{    š   l
  u
  o   d
int odgovor;   n   o
  o
odgovor = 1;    D
cout << "Prije while naredbe." << endl;
  e
   j
while (odgovor == 1)    l
   t
{   e
   P
cout << "Prvi red bloka ponavljanja" << endl;
cout << "1 = nastavak ili 2 = kraj." << endl;
cin >> odgovor;   a
   j
   l
cout << "Zadnji red bloka ponavljanja" << endl;   o
   P
}
cout << "Nakon while naredbe." << endl;
cout << endl;   a   a
   d   t
system("PAUSE");   a
  r   s
   b   k
  e
return 0;    O   t
}
   i
   t
   k
  e
   j
   b
   O
  -
Ovdje naredbom cin  pre-   o   i
  r
ko tipkovnice unosimo   p
   i   m
  a
   k
   i   r
novu vrijednost varijable    l
  e  g
odgovor   i time biramo    V
hoćemo li petlju ponoviti ili   e
   j
  n
ćemo izaći iz programa.   a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 151


 

Petlje

U prethodnim programima korisnik je mogao izabrati ho će li program izvoditi


ponovo, ali biranje je funkcioniralo na vrlo neprirodan na čin. Nije baš logi čno
unijeti broj 1 za ponavljanje prora čuna ili broj 2 za prekid programa.

Ova inačica programa to biranje izvodi na elegantniji način. Umjesto unošenja


brojeva kao odgovora, u ovom programu unosimo slova.

Da bi to bilo moguće, upotrijebili smo novi tip varijable, varijablu char   tipa u
koju možemo spremiti jedno slovo.

#include <cstdlib>
#include <iostream>

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 po č etnike

   j
  a
   ž
  r
   d
Pogledajmo pobliže dijelove programa. Uobi čajeni početak programa.   a
   S

   d
  o
  v
   U

Formiranje varijabli koje ćemo koristiti    i  


#include <cstdlib> u programu.   v
  r   m
#include <iostream>   p   a
  r
   š   g
  a   o
  r
using namespace std;    N  p
Formiranje varijable tipa char   u koju   e
možemo spremiti jedno slovo.    l
int main()    b
  a
   j
{    i
  r
Nakon formiranja u varijablu odgo-   a
   V
int broj; vor   spremamo slovo d.
int kvadrat;   a
   k
   i
   f
  a
  r
char odgovor; While  nared-    G
odgovor = 'd'; bom ispituje-   e
   j
mo je li sadr-   n   e
  e   k
while (odgovor != 'n') žaj varijable    š   l
  u
  o   d
  n   o
odgovor   raz-   o
{ ličit od slova    D
n.   e
cout << "Unesite broj" << endl;  Ako jest, izvo-
   j
   l
   t
cin >> broj;   e
di se sadržaj    P
kvadrat = broj * broj; unutar vitičas-
cout << "Kvadrat unesenog broja je:" << endl; tih zagrada.
cout << kvadrat;   a
   j
   l
cout << endl;   o
   P
cout << "Zelite li ponovo (d/n)?" << endl;
cin >> odgovor; Ovdje se izra-   a   a
   d   t
čunava kvad-   a
  r   s
}    b   k
  e
rat unesenog    O   t
broja.
   i
   t
cout << endl;    k
  e
   j
system("PAUSE");    b
Ovdje se unosi slovo d ili slovo n  na te-    O
return 0;
} melju čega će while  naredba ponovo   -
  o   i
  r
izvesti naredbe unutar viti častih zagrada   p
   i   m
  a
   k
   i   r
   l
ako smo unijeli slovo d  ili će izvesti na-   e  g
   V
redbe nakon vitičastih zagrada ako smo   e
   j
  n
  a   a
Kraj programa. unijeli slovo n.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 153


 

Petlje

#include <cstdlib>
#include <iostream> While  naredbu možemo iskoris-
#include <winbgim.h> titi i za višestruko pokretanje
using namespace std; grafičkih programa.

int main()
{ Mala kružnica kreće se od gore
int gdriver = 9; prema dolje, a zatim nas ra ču-
int gmode = 2;
int x; nalo pita želimo li ponoviti ani-
char odgovor; maciju.
odgovor = 'd';
initgraph(&gdriver, &gmode, ""); U ovom programu koristimo dvi-
setbkcolor (WHITE);  je različite vrste petlji.
setcolor (BLACK);
while (odgovor != 'n')
{ While  naredbom ponavlja se
cleardevice();
for (x = 10; x < 465; x = x + 1 ) animacija, a for   naredbom, koja
{ se nalazi unutar while  petlje,
cleardevice();
circle (320, x, 10); animira se kretanje kružnice.
}
settextstyle(9, HORIZ_DIR, 1);
outtextxy(20, 20, "Želite li ponovo (d/n)?"); U grafičkom prozoru
odgovor = getch(); za unos slova u vari-
}  jablu odgovor  ne
closegraph(); koristi se cin  nared-
return 0; ba, nego getch()  na-
} redba.

 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 po č etnike

   j
  a
   ž
  r
   d
Pogledajmo dijelove našeg programa.   a
   S

     d
  o
#include <cstdlib>   v
Uobičajeni početak programa.    U
#include <iostream>
#include <winbgim.h>    i  
  v
  r   m
  p   a
  r
using namespace std; Formiranje varijabli.    š   g
  a   o
  r
   N  p
int main()
{   e
   l
Formiranje varijable odgovor . Ta    b
  a
varijabla je char   tipa i koristit će je    j
   i
  r
int gdriver = 9; while  petlja unutar koje se nalazi   a
   V
int gmode = 2; program za animaciju.
int x;   a
   k
   i
Služi nam za biranje ponavljanja    f
  a
char odgovor; animacije ili kraja programa. U vari-
  r
   G
odgovor = 'd';  jablu odgovor sprema se slovo d.
  e
   j
  n   e
initgraph(&gdriver, &gmode, "");   e   k
   š   l
  u
setbkcolor (WHITE);   o   d
  n   o
setcolor (BLACK);   o
   D
Otvaranje grafičkog
while (odgovor != 'n') prozora.   e
   j
   l
   t
  e
{    P
Vanjska while petlja.
cleardevice();
  a
   j
   l
  o
for (x = 10; x < 465; x = x + 1 )    P
For   petlja služi za iz-
{
cleardevice(); vođenje animacije.
  a   a
circle (320, x, 10);    d   t
  a
  r   s
}    b   k
  e
   O   t
settextstyle(9, HORIZ_DIR, 1); Nakon izvođenja ani-
   i
   t
outtextxy(20, 20, "Želite li ponovo (d/n)?"); macije unosi se odgo-    k
odgovor = getch(); vor na pitanje želimo li   e
   j
   b
ponoviti animaciju.    O
}   -
  o   i
  r
  p
closegraph();    i   m
  a
   k
   i   r
return 0;    l
  e  g
}    V
Kraj programa. Ovaj dio izvodi se kad   e
   j
while  naredba ustanovi da sadržaj   n
  a   a
varijable odgovor  nije različit od n.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 155


 

Petlje

Ovaj program omogućit će nam da lijevom i desnom strelicom na tipkovnici


kontroliramo kretanje pravokutnika u lijevu ili desnu stranu.

Program napuštamo pritiskom na tipku k.

Ovaj program već  bismo mogli smatrati jednim elementom primitivne igrice.
Dovoljno bi bilo dodati kretanje malih kružnica od gore prema dolje i broja č koji
bi brojio koliko kružnica smo ovim pravokutnikom uspjeli “uhvatiti”.

Umjesto:
int x; #include <cstdlib>
x =290; #include <iostream>
#include <winbgim.h>
možemo napisati
int x = 290; using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x = 290;
Umjesto: char odgovor = 'd';
char odgovor; initgraph(&gdriver, &gmode, "");
odgovor = ‘d’; setbkcolor (WHITE);
setcolor (BLACK);
možemo napisati cleardevice();
char odgovor = 'd'; while (odgovor != 'k')
{
rectangle(x, 432, x+60, 438);
odgovor = getch();
if (odgovor == 75)
{
x = x - 5;
Pravokutnik koji može- }
mo pomicati u lijevu i if (odgovor == 77)
desnu stranu. {
x = x + 5;
}
cleardevice();
}
closegraph();
return 0;
}

156 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Pogledajmo dijelove našeg programa.   a
   S

   d
#include <cstdlib>   o
Uobičajeni početak programa,   v
#include <iostream> formiranje varijabli i otvaranje    U
#include <winbgim.h> grafičkog prozora.
   i  
  v
  r   m
using namespace std;   p   a
  r
   š   g
  a   o
  r
int main() Cijelo vrijeme dok naša pri-    N  p
{ mitivna igrica radi, vrtjet će   e
se u ovoj while petlji.    l
int gdriver = 9;    b
  a
   j
int gmode = 2;    i
  r
 Ako pritisnemo tipku k  prog-   a
int x = 290;    V
char odgovor = 'd'; ram će izaći iz petlje i naša
initgraph(&gdriver, &gmode, ""); igrica će se ugasiti.   a
   k
   i
setbkcolor (WHITE);    f
  a
  r
setcolor (BLACK);    G
cleardevice(); Ovdje se crta pravokutnik koji   e
   j
pomičemo.   n   e
  e   k
while (odgovor != 'k')    š   l
  u
  o   d
{   n   o
  o
   D
rectangle(x, 432, x+60, 438); Ovdje program ispituje koja
tipka je pritisnuta, a rezultat   e
   j
   l
   t
odgovor = getch(); sprema u varijablu odgovor .   e
   P

if (odgovor == 75)
{  Ako pritisnemo lijevu strelicu, varija-   a
   j
   l
x = x - 5; bla x, koja određuje udaljenost pra-   o
   P
} vokutnika od lijeve strane, umanjit
će se za 5, pa će se pravokutnik
if (odgovor == 77) drugi put crtati pomaknut 5 točaka u   a   a
   d   t
{ lijevu stranu.   a
  r   s
x = x + 5;    b   k
  e
   O   t
}
   i
   t
cleardevice();  Ako pritisnemo desnu strelicu, varija-    k
bla x  će se uvećati za 5, pa će se   e
   j
   b
} pravokutnik drugi put crtati pomaknut    O
5 točaka u desnu stranu.   -
  o   i
  r
closegraph();   p
   i   m
  a
return 0;    k
   i   r
   l
} Naredbom za brisanje ekrana bri-   e  g
   V
šemo pravokutnik na staroj poziciji   e
   j
da bismo ga nacrtali na novoj.   n
  a   a
(Pokušajmo ovu naredbu izbaciti.)   m    d
Kraj programa.    i   o
   ž   k
  a
   S

PRO - MIL 157


 

Petlje

Dodamo li u prethodni program ispitivanje je li pritisnuta


strelica prema gore ili strelica prema dolje, naš pravo-
kutnik moći će se pomicati u sva četiri smjera.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
Varijablom x određujemo udaljenost
using namespace std; gornjeg lijevog ugla pravokutnika od
lijevog ruba grafičkog prozora, a
int main() varijablom y od gornjeg ruba grafič-
{ kog prozora. Brojevi 290 i 220 odre-
int gdriver = 9; đuju početnu poziciju pravokutnika.
int gmode = 2; (Pokušajmo mijenjati te brojeve.)
int x = 290;
int y = 220;
char odgovor = 'd';
initgraph(&gdriver, &gmode, ""); I u ovom slučaju 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;
} Zašto ovdje koristimo broj 72, a ne strelicu
if (odgovor == 77) prema gore?
{
x = x + 5; Zato što strelicu prema gore ne možemo 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 po č etnike

   j
  a
   ž
  r
   d
Da bismo dobili primitivni program za crtanje, dovoljno je da u prethod-   a
   S
nom programu maknemo naredbu za brisanje zaslona ra čunala.
   d
#include <cstdlib>   o
  v
#include <iostream>    U
Varijablama x  i y  određena je
#include <winbgim.h> pozicija gornjeg lijevog ugla pra-    i  
vokutnika. Varijabla x  određuje   v
  r   m
using namespace std;   p   a
  r
udaljenost od lijevog ruba, a    š   g
  a   o
  r
varijabla y od gornjeg ruba.    N  p
int main()
{   e
   l
Udaljenost donjeg desnog ugla    b
int gdriver = 9;   a
   j
   i
int gmode = 2; pravokutnika od lijevog ruba   r
  a
int x = 290;    V
int y = 220; određena je sa x + 60, a udalje-
char odgovor = 'd'; nost donjeg desnog ugla od gor-   a
   k
   i
   f
initgraph(&gdriver, &gmode, "");   a
  r
njeg ruba određena je sa y+5.
setbkcolor (WHITE);    G
setcolor (BLACK);   e
   j
cleardevice(); Širina našeg pravokutnika je 60,   n   e
  e   k
while (odgovor != 'k') a visina 5. (Pokušajmo promije-    š   l
  u
  o   d
{ niti te brojeve.)   n   o
  o
rectangle(x, y, x+60, y+5);    D
odgovor = getch();
if (odgovor == 75)   e
   j
   l
   t
{   e
   P
x = x - 5;
}
if (odgovor == 77)   a
   j
   l
{   o
   P
x = x + 5;
}
if (odgovor == 72)   a   a
   d   t
{   a
  r   s
y = y - 5;    b   k
  e
   O   t
}
if (odgovor == 80)    i
   t
{    k
  e
   j
y = y + 5;    b
 Ako ovu naredbu obrišemo, pra-    O
}
cleardevice(); vokutnik će se crtati na novoj po-   -
  o   i
  r
} ziciji, ali će ostati i na staroj pa će   p
rezultat kretanja pravokutnika biti    i   m
  a
closegraph();    k
   i   r
   l
return 0; trag na zaslonu računala.   e  g
   V
  e
   j
} Obrišimo ovu naredbu i pokreni-   n
  a   a
mo program.   m    d
  o
   i
   ž   k
  a
   S

PRO - MIL 159


 

Petlje

Želimo li napraviti program za crtanje, pogodnije je za


crtanje koristiti točku 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') točku na zaslon računala. Varijabla
{ x  određuje udaljenost točke od lije-
putpixel(x, y, BLACK); vog ruba, varijabla y  od gornjeg ru-
odgovor = getch(); ba, a BLACK određuje boju točke.
if (odgovor == 75)
{
x = x - 1;
}
if (odgovor == 77) Želimo li dobiti punu crtu, točku mo-
{ ramo pomicati za 1.
x = x + 1;
} Pokušajmo umjesto 1 staviti 2 ili 5.
if (odgovor == 72)
{
y = y - 1;
}
if (odgovor == 80)
{
y = y + 1;
}
}
closegraph();
return 0;
}

160 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Za crtanje možemo koristiti i   a
   S
kružnicu.
   d
  o
  v
   U
 
#include <cstdlib>    i  
  v
  r   m
#include <iostream>   p   a
  r
#include <winbgim.h>    š   g
  a   o
  r
   N  p
using namespace std;
  e
   l
   b
int main()   a
   j
   i
  r
{   a
   V
int gdriver = 9;
int gmode = 2;   a
   k
   i
int x = 290;    f
  a
int y = 220;   r
Ovom naredbom ispisujemo kruž-    G
char odgovor = 'd';
initgraph(&gdriver, &gmode, ""); nicu. Varijabla x  određuje udalje-   e
   j
nost središta kružnice od lijevog   n   e
setbkcolor (WHITE);   e   k
   š   l
ruba, varijabla y udaljenost središ-   u
setcolor (BLACK);   o   d
ta od gornjeg ruba, a 20 je polum-   n   o
cleardevice();   o
 jer kružnice.    D
while (odgovor != 'k')
{   e
   j
   l
circle(x, y, 20);    t
  e
odgovor = getch();    P
if (odgovor == 75)
{   a
x = x - 5; Broj 5 određuje pomak novog sre-    j
   l
  o
} dišta u odnosu na staro.    P
if (odgovor == 77)
{ Pokušajmo mijenjati taj broj.   a   a
x = x + 5;    d   t
  a
  r   s
}    b   k
  e
   O   t
if (odgovor == 72)
{    i
   t
y = y - 5;    k
} Imajmo stalno na umu da ćemo   e
   j
   b
if (odgovor == 80) razumijevanje programa i vješti-    O
{ nu pisanja vlastitih programa
  -
y = y + 5; steći jedino tako da svaki primjer   o   i
  r
programa koji je dat u ovoj knjizi   p
}    i   m
  a
mijenjamo na sve načine koji    k
   i   r
}    l
  e  g
closegraph(); nam padnu na pamet i onda pro-    V
return 0; matramo kakve posljedice izazi-   e
   j
va određena promjena.   n
}   a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 161


 

Petlje

Objekte na zaslonu računala osim tipkovnicom mo-


žemo pomicati i mišem.
#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) naređujemo
{ računalu 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 izvođenje petlje i
setcolor (BLACK); prekida se program.
cleardevice();
while (!kbhit())
{
rectangle(mousex(),mousey(),mousex()+80,mousey()+80 );
}
closegraph();
return 0;
}

Naredbom mousex()  očitava se Naredbom mousey() očitava se


udaljenost pokazivača miša od udaljenost pokazivača miša od
lijevog ruba grafi čkog prozora. gornjeg ruba grafi čkog prozora.

Gornji lijevi ugao pravokutnika


određen je položajem pokazi-
vača miša, a donji desni tako
da se udaljenost pokazivača
miša od desnog ruba uve ćava
za 80, a udaljenost pokaziva-
ča miša od gornjeg ruba uve-
ćava isto tako za 80.

Dimenzije našeg pravokutnika


su 80 puta 80.

162 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Mišem možemo pokretati bilo koji grafi čki ob-   a
   S
 jekt, npr. kružnicu.
     d
  o
#include <cstdlib>   v
Početak programa.    U
#include <iostream>
#include <winbgim.h>    i  
  v
  r   m
  p   a
  r
using namespace std; Varijable kojima određujemo tip    š   g
  a   o
  r
grafičkog prozora.    N  p
int main()
{   e
   l
   b
  a
   j
Otvaranje grafičkog prozora.    i
  r
int gdriver = 9;   a
int gmode = 2;    V

  a
initgraph(&gdriver, &gmode, ""); Unutar while  petlje stalno se    k
   i
   f
setbkcolor (WHITE); očitava pozicija pokazivača   a
  r
setcolor (BLACK); miša i crta se kružnica čije sre-    G
cleardevice(); dište određuje položaj pokazi-   e
   j
vača miša, a polumjer je 100.   n   e
  e   k
   š   l
  u
while (!kbhit())   o   d
Petlja se izvodi tako dugo dok   n   o
{   o
circle(mousex(),mousey(),100); niti jedna tipka na tipkovnici    D
} nije pritisnuta.   e
   j
   l
   t
  e
closegraph();    P
return 0; Kraj programa.
}
  a
   j
   l
  o
   P

  a   a
   d   t
  a
  r   s
Jasno je da osim postojećih    b   k
  e
   O   t
dimenzija kružnice i pravo-
kutnika možemo koristi pra-    i
vokutnike i kružnice drugih    t
   k
  e
   j
dimenzija.    b
   O
Isto tako možemo koristiti i   -
druge grafi čke elemente,   o   i
  r
  p
npr. točke ili crte.    i   m
  a
   k
   i   r
   l
  e  g
Pokušajmo sami smisliti    V
  e
   j
varijacije ovakvih programa.   n
  a   a
  m    d
   i   o
   ž   k
  a
   S

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 sadržaja while (!kbhit())
grafičkog prozora, dobit ćemo pro- {
gram koji nam omogućuje pomica- cleardevice();
nje objekta mišem. circle(mousex(),mousey(),100);
}
closegraph();
return 0;
}
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

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 sličan način možemo mišem
} pomicati nešto drugo, npr. dvije
crte koje bi u igri mogle biti nišan.

164 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S
Nedostatak prethodnih programa bio je što se
ekran briše i objekt ponovo crta, bez obzira je li    d
  o
to potrebno ili nije, odnosno bez obzira je li   v
   U
došlo do pomaka miša ili nije.
   i  
 Ako nije došlo do pomaka miša, nema potrebe   v
  r   m
  p   a
  r
objekt brisati i ponovo crtati.    š   g
  a   o
  r
   N  p
Neprestano brisanje i crtanje može na sporijim
računalima izazvati treperenje slike, što je veo-   e
   l
   b
ma neugodno.   a
   j
   i
  r
  a
   V
Ovaj program ispituje je li došlo do pomaka
miša ili nije. Ekran se briše i objekt crta na no-   a
voj poziciji jedino ako je došlo do pomicanja    k
   i
   f
    a
  r
miša.
#include <cstdlib>    G
#include <iostream>   e
   j
#include <winbgim.h>   n   e
  e   k
   š   l
  u
Ovom naredbom ispituje-   o   d
using namespace std;   n   o
  o
mo je li došlo do pomaka    D
int main() miša.
{   e
   j
   l
   t
int gdriver = 9; Sadržaj unutar vitičastih   e
zagrada izvršit će se jedi-    P
int gmode = 2;
initgraph(&gdriver, &gmode, ""); no ako je došlo do poma-
setbkcolor (WHITE); ka miša.   a
   j
   l
setcolor (BLACK);   o
U tom slučaju obrisat će    P
cleardevice();
while (!kbhit()) se sadržaj grafičkog pro-
{ zora i objekt će se nacrta-   a   a
ti na novoj poziciji.    d   t
if (ismouseclick(WM_MOUSEMOVE))   a
  r   s
   b   k
  e
   O   t
{
cleardevice();    i
   t
circle(mousex(),mousey(),100); Da bi bilo moguće novo    k
  e
   j
} očitavanje miša, rezultat    b
starog očitavanja ovom    O

clearmouseclick(WM_MOUSEMOVE); se naredbom mora obri-   -


  o   i
  r
sati.   p
   i   m
  a
}    k
   i   r
   l
closegraph(); Kad ovu naredbu ne bis-   e  g
mo upotrijebili, u progra-    V
return 0;   e
   j
} mu bi bilo moguće samo   n
  a   a
 jedno očitavanje miša.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 165


 

Petlje

Osim što možemo očitati je li došlo do pomaka miša, možemo isto tako o čitati je
li pritisnuta neka tipka na mišu. Ovaj program će nam omogućiti da pritiskom na
lijevu tipku miša nacrtamo objekt u grafi čkom prozoru.

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

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 miša.
cleardevice();
while (!kbhit())  Ako jest izvodi se sadržaj
{ unutar vitičastih zagrada.
if (ismouseclick(WM_LBUTTONDOWN))
{
cleardevice();
circle(mousex(),mousey(),100);
} Ovom naredbom brišemo
clearmouseclick(WM_LBUTTONDOWN); rezultat očitavanja lijeve
} tipke na mišu.
closegraph();
return 0; Novo očitavanje je mogu-
} će jedino nakon brisanja
starog očitavanja.

Uočimo, ako smo očitavali ismouseclick(WM_MOUSEMOVE) , brišemo


clearmouseclick(WM_MOUSEMOVE) ,

a ako smo očitavali ismouseclick(WM_LBUTTONDOWN) , brišemo


clearmouseclick(WM_LBUTTONDOWN) .

166 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S
OČITAVANJE MIŠA
   d
  o
  v
ismouseclick(WM_MOUSEMOVE) Očitavanje kretanja miša.    U

   i  
  v
  r   m
clearmouseclick(WM_MOUSEMOVE) Brisanje očitavanja kretanja miša.   p   a
  r
   š   g
  a   o
  r
   N  p
ismouseclick(WM_LBUTTONDOWN) Očitavanje lijevog klika   e
   l
   b
  a
   j
   i
  r
  a
clearmouseclick(WM_LBUTTONDOWN); Brisanje očitavanja lijevog klika.    V

  a
   k
   i
   f
  a
  r
ismouseclick(WM_LBUTTONDBLCLK) Očitavanje duplog lijevog klika.
   G
  e
   j
Brisanje očitavanja duplog lijevog   n   e
clearmouseclick(WM_LBUTTONDBLCLK)   e   k
klika.    š   l
  u
  o   d
  n   o
  o
   D
ismouseclick(WM_RBUTTONDOWN) Očitavanje desnog klika.
  e
   j
   l
   t
  e
   P
clearmouseclick(WM_RBUTTONDOWN) Brisanje očitavanja desnog klika.
  a
   j
   l
  o
ismouseclick(WM_RBUTTONDBLCLK) Očitavanje duplog desnog klika.    P

Brisanje očitavanja duplog des-   a   a


clearmouseclick(WM_RBUTTONDBLCLK)    d   t
nog klika.   a
  r   s
   b   k
  e
   O   t

ismouseclick(WM_MBUTTONDOWN) Očitavanje srednjeg klika.    i


   t
   k
  e
   j
   b
Brisanje očitavanja srednjeg kli-    O
clearmouseclick(WM_MBUTTONDOWN)
ka.   -
  o   i
  r
  p
   i   m
  a
ismouseclick(WM_MBUTTONDBLCLK) Očitavanje duplog srednjeg klika.    k
   i   r
   l
  e  g
   V
  e
   j
Brisanje očitavanja duplog sred-   n
clearmouseclick(WM_MBUTTONDBLCLK)   a   a
njeg klika.   m    d
   i   o
   ž   k
  a
   S

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 po č etnike

   j
  a
   ž
  r
   d
Usporedimo strukture while petlje i do while petlje.   a
   S

a = 1;    d
  o
Određivanje vrijednosti varijable koju će koristiti   v
while naredba.    U
while (a == 1)    i  
  v
  r   m
  p   a
  r
Ispitivanje je li uvjet zadovoljen, u našem sluča-    š   g
{  ju, je li sadržaj varijable a jednak broju 1.   a   o
  r
   N  p

  e
   l
cin >> a;    b
  a
Ovaj dio unutar vitičastih zagrada ponavlja se    j
   i
  r
dok je uvjet zadovoljen, u našem slučaju dok je   a
   V
}  sadržaj varijable a jednak broju 1.
  a
   k
   i
   f
  a
  r
Petlja do while  započinje određivanjem vrijed-    G
nosti varijable koju će koristiti while naredba.   e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
a = 1;   o
   D
Ovaj tip petlje započinje naredbom do  nakon
koje slijede vitičaste zagrade unutar kojih se   e
do nalazi dio programa koji se ponavlja dok je uv-
   j
   l
   t
  e
 jet zadovoljen    P

{
  a
   j
   l
Dio koji se ponavlja i u kojem mora postojati   o
cin >> a; mogućnost promjene vrijednosti varijable a.    P

  a   a
} Ovdje se ispituje je li zadovoljen uvjet po istoj
   d   t
  a
  r   s
   b   k
  e
logici po kojoj se ispituje i u while naredbi.    O   t
while (a == 1);    i
Uočimo da se ovdje na kraju while  naredbe    t
   k
obavezno piše ; oznaka.   e
   j
   b
   O
  -
  o   i
  r
U čemu je razlika između ovih dviju petlji, osim očigledne razlike u načinu   p
pisanja? Razlika je u tome što se sadržaj while petlje neće izvesti niti jednom    i   m
  a
   k
   i   r
   l
ako uvjet nije zadovoljen jer se ispitivanje nalazi prije djela koji se ponavlja.   e  g
   V
Sadržaj do while petlje će se bez obzira na uvjet izvesti barem jednom jer se   e
   j
najprije izvodi dio koji se ponavlja, a tek nakon toga ispituje se je li uvjet za-   n
  a   a
dovoljen.   m
   i
   d
  o
   ž   k
  a
   S

PRO - MIL 169


 

Petlje

Generator slučajnih brojeva

Ponekad, osobito u igricama, htjeli bismo da se neki dijelovi u programu pri


svakom pokretanju programa odvijaju druga čije. Ako pišemo igricu u kojoj igrač 
gađa “leteće tanjure”, htjeli bismo da se pri svakom pokretanju igre oni pojave
na drugom mjestu i da se svaki put kre ću drugačijim putanjama. Igrica će nam
brzo dosaditi ako se objekt koji trebamo gađati pri svakom pokretanju igrice
pojavljuje na istom mjestu i kreće istom putanjom.

Takve varijacije u odvijanju programa postižemo generatorom slu čajnih broje-


va. Pogledajmo kako ćemo formirati program za generiranje slu čajnih 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;
}
Slučajne brojeve generirat
ćemo naredbom rand().

Problem je u tome što će


ovako napisani program pri
svakom pokretanju generi-
rati iste “slučajne brojeve”.

Jasno, od takvih “slučajnih


brojeva” ne možemo imati
puno koristi.

Pokušajmo napisati prog-


ram koji neće svaki put ge-
nerirati isti niz brojeva.

170 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Problem koji se sastoji u tome   a
   S
da naredba rand(); uvijek gene-
rira isti niz brojeva riješit ćemo    d
naredbom srand(1); .   o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
#include <cstdlib>   a   o
  r
#include <iostream>    N  p

  e
   l
using namespace std;    b
  a
   j
   i
  r
  a
int main()    V
{ Stavimo li naredbu srand(1)   prije na-
int x;   a
redbe rand()  postići ćemo da naredba    k
   i
srand(1);    f
rand() generira neki niz brojeva.   a
  r
for (x = 0; x < 11; x = x + 1)    G
{  Ako umjesto srand(1);   stavimo srand   e
cout << rand() << endl;    j
(2);  dobit ćemo neki drugi niz brojeva.   n   e
  e   k
}    š   l
  u
Pokušajmo i vidjet ćemo da ćemo za   o   d
system("PAUSE"); srand(3);  dobit neki treći niz brojeva, a
  n   o
  o
return 0; za srand(4);  neki četvrti.    D
}
  e
   j
   l
   t
Problem je u tome što ćemo za isti broj   e
unutar zagrade dobivati uvijek isti niz.    P
Dakle srand(6)   davat će pri svakom
pokretanju isti niz brojeva, ali druga čiji
nego npr. srand(5) . Očito bi bilo dobro   a
   j
   l
  o
kad bismo na neki način broj unutar    P
#include <cstdlib> zagrade mogli mijenjati.
#include <iostream>   a   a
   d   t
  a
  r   s
using namespace std;    b   k
  e
   O   t

int main()    i


{    t
   k
int x;   e
   j
   b
srand(2);    O
for (x = 0; x < 11; x = x + 1)   -
{   o   i
  r
  p
cout << rand() << endl;    i   m
  a
   k
   i   r
}    l
  e  g
system("PAUSE");    V
return 0;   e
   j
  n
}   a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 171


 

Petlje

Da bi naredba time(NULL)   funkcionirala,


#include <cstdlib> moramo naredbom #include <ctime>   uk-
#include <iostream> ljučiti odgovarajuću biblioteku.
#include <ctime>

using namespace std;


Različite brojeve dobit ćemo naredbom
time(NULL). Iako se čini logičnim da na-
int main()
{ 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. siječnja 1970. godine.
}

Budući da program ne možemo


više puta pokrenuti u istom tre-
nutku, pri svakom pokretanju
ove naredbe dobit ćemo drugi
broj.

172 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Stavimo li u naredbu srand(1);   umjesto   a
#include <cstdlib>    S
#include <iostream> konkretnog broja jedan naredbu time
#include <ctime> (NULL)  koja će u svakom trenutku gene-    d
  o
rirati drugačiji broj, naredba rand()  pri   v
svakom će pokretanju generirati druga čiji    U
using namespace std;
brojčani niz. Sada smo već blizu onome
   i  
int main() što smo željeli, a to je generator slučajnih   v
  r   m
brojeva.   p   a
  r
{    š   g
  a   o
  r
int x;    N  p
srand(time(NULL));
for (x = 0; x < 11; x = x + 1)   e
   l
   b
{   a
   j
   i
  r
cout << rand() << endl;   a
   V
}
system("PAUSE");   a
return 0;    k
   i
   f
  a
}   r
   G
  e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D

  e
   j
   l
   t
  e
   P
U ovom rješenju problemati č-
no je to što su često početni
brojevi veoma slični. Prvi put   a
   j
   l
  o
smo dobili 6089, drugi put    P
6132, a treći put 6171.
  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
Taj problem možemo najjed-    k
   i   r
   l
nostavnije eliminirati tako da   e  g
   V
prvi broj koji generira genera-   e
   j
tor slučajnih brojeva ne koris-   n
  a   a
timo u programu.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 173


 

Petlje

#include <cstdlib> Problem koji bi mogla stvarati pojava da


#include <iostream> naš generator slučajnih brojeva generira
#include <ctime> niz brojeva u kojem prvi broj u nizu ima
sličnu vrijednost prilikom više pokretanja
using namespace std; riješit ćemo tako da prvi put pozovemo
naredbu rand();  i tako generirani broj
int main() nećemo ni za što koristiti.
{
int x;
srand(time(NULL)); Koristit ćemo slučajne brojeve koji će se
rand(); generirati prilikom sljedećih pozivanja
for (x = 0; x < 11; x = x + 1) naredbe rand();.
{
cout << rand() << endl; Na taj način postići ćemo da će pri nizu
} uzastopnih pokretanja i prvi broj u sva-
system("PAUSE"); kom od nizova bit različit.
return 0;
}

Vidimo da smo uspjeli dobiti više


doista različitih nizova.

174 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Sad kad smo konačno dobili niz slučajnih brojeva, postavlja se pitanje kako   a
   S
postići da ti slučajni brojevi budu unutar unaprijed odre đenih granica. Ako
želim da se objekt pojavi na slučajnoj poziciji unutar prozora širokog 640 to-    d
čaka, bilo bi zgodno da generator slučajnih brojeva generira slu čajni broj iz-   o
  v
među 0 i 640.    U

   i  
  v
  r   m
  p   a
  r
Najprije ćemo program preurediti    š   g
#include <cstdlib>   a   o
  r
#include <iostream> tako da generira brojeve između 0 i    N  p
#include <ctime> 1. To ćemo postići tako da generi-   e
   l
rani broj podijelimo maksimalnom    b
  a
   j
using namespace std; mogućom vrijednošću slučajnog    i
  r
broja. U tom slučaju, ako je generi-   a
   V
int main() rani slučajni broj nula, rezultat će
{ biti nula, a ako je jednak maksimal-   a
   k
   i
   f
int x; noj mogućoj vrijednosti bit će 1. Za   a
  r
float sb; sve ostale vrijednosti dobit ćemo    G
srand(time(NULL)); broj između nula i jedan.
  e
   j
rand();   n   e
  e   k
for (x = 0; x < 11; x = x + 1)    š   l
  u
  o   d
{   n   o
Maksimalnu moguću vrijednost gene-   o
sb = rand() / RAND_MAX; riranog slučajnog broja dobit ćemo    D
cout << sb << endl; naredbom RAND_MAX.   e
   j
}    l
   t
system("PAUSE");   e
   P
return 0;
} Pokrenemo li takav program kao
rezultat dobit ćemo samo nule, i   a
   j
   l
  o
možda ponekad broj 1.    P

Zašto?
  a   a
   d   t
  a
  r   s
Zato što je rezultat rada naredbe    b   k
  e
rand()  i naredbe RAND_MAX  int     O   t
tipa, tj. broj bez decimalnog zare-
   i
   t
za. Rezultat, doduše, spremamo u    k
varijablu sb  koja je float  tipa, ali   e
   j
   b
računalo radi tako da izračuna re-    O
zultat u int  formatu, a tek onda   -
broj pretvara u float.   o   i
  r
  p
   i   m
  a
   k
   i   r
Prvo podijeli dva int  broja, makne    l
  e  g
sadržaj desno od zareza, jer int tip    V
nema zarez, i tek onda rezultat   e
   j
  n
sprema u varijablu float tipa.   a   a
   d
  m
   i   o
   ž   k
  a
   S

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 riješit ćemo tako da računalu
naredimo da broj koji će generirati na-
redba rand()  i koji je int  tipa, prije dije-
ljenja s RAND_MAX pretvori u float tip.
To ćemo učiniti naredbom:

static_cast <float> (rand())

Nakon primjene te naredbe program će


Ovom naredbom naređujemo generirati slučajne brojeve između broja
računalu da jedan tip podatka 0 i broja 1.
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 izvo đ enja
pretvoriti. Mi želimo int tip pretvoriti u float, pa rand() naredbe.
smo zato ovdje napisali float.

176 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S
#include <cstdlib>
#include <iostream>    d
  o
#include <ctime>   v
   U
using namespace std;
   i  
  v
  r   m
int main()   p   a
  r
   š   g
{   a   o
  r
   N  p
int x;
float sb;   e
   l
srand(time(NULL));    b
  a
   j
   i
rand();   r
  a
for (x = 0; x < 11; x = x + 1)    V
{
  a
sb = (static_cast <float> (rand()) / RAND_MAX) * 640;    k
   i
   f
cout << sb << endl;   a
  r
}    G
system("PAUSE");   e
return 0; Kako ćemo postići da program ne generi-    j
  n   e
} ra brojeve između 0 i 1, nego između 0 i   e   k
   š   l
  u
640? Tako da slučajni broj koji računalo   o   d
  n   o
generira između 0 i 1 pomnožimo sa 640.   o
   D

 Ako je slučajni broj imao minimalnu mogu-   e


   j
   l
ću vrijednost 0, rezultat će biti nula.    t
  e
   P
Pogledajmo dio programa
kojim generiramo slučajni  Ako je slučajni broj imao maksimalnu mo-
broj između 0 i 640. guću vrijednost 1, rezultat će biti 640.   a
   j
   l
  o
Za sve ostale vrijednosti rezultat će biti    P
između 0 i 640, a to je ono što smo htjeli
postići.   a   a
Ovaj dio pretvara int slučaj-    d   t
ni broj u float tip.   a
  r   s
   b   k
  e
   O   t

   i
   t
sb = ( static_cast <float> ( rand() ) / RAND_MAX ) * 640; Množimo li    k
  e
   j
broj između    b
0 i 1 brojem    O
640, dobit   -
ćemo broje-   o   i
  r
Generira slučajne Maksimalna vrijednost   p
brojeve. koju rand()  generira. ve između 0    i   m
  a
   k
   i   r
i 640.    l
  e  g
   V
  e
   j
Dijeljenjem slučajnog broja maksimalnom mogućom vrije-   n
  a   a
dnošću dobivamo broj između broja 0 i broja 1.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 177


 

Petlje

 Ako želimo da računalo generira broj iz-


#include <cstdlib> među 0 i 640 bez decimalnog zareza, slu-
#include <iostream> čajni broj ćemo spremiti u int varijablu.
#include <ctime>
Budući da je generirani slučajni broj float 
using namespace std; tipa, računalo će nas pri prvom pokretanju
programa upozoriti da je došlo do pretva-
int main() ranja float tipa u int tip.
{
int x; Kad float tip broja spremimo u int varijab-
int sb; lu, računalo će ga automatski pretvoriti u
srand(time(NULL)); int tip tako da će mu maknuti sve brojeve
rand(); desno 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;
}

Računalo nas upozorava


da je došlo do pretvaranja
float tipa u int tip.

Budući da je to upravo
ono što smo željeli, ovo
upozorenje ćemo zane-
mariti.

178 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Korištenje slučajnih brojeva   a
   S

   d
  o
Ovaj program će generirati   v
   U
kružnice na slučajno odabra-
nim pozicijama.    i  
  v
  r   m
  p   a
  r
Na taj način u igrama može-    š   g
mo generirati objekte na slu-   a   o
  r
   N  p
čajno odabranim mjestima.
  e
   l
   b
  a
   j
   i
  r
  a
   V
#include <cstdlib>
#include <iostream>   a
   k
   i
#include <winbgim.h>    f
  a
  r
#include <ctime>    G

Budući da položaj kružnice odre-   e


   j
using namespace std;   n   e
đuju dva broja, jedan koji odre đuje   e   k
   š   l
  u
int main() udaljenost središta od desnog ru-   o   d
  n   o
ba i drugi koji određuje udaljenost   o
{    D
int x; središta od gornjeg ruba generirat
int sx; ćemo dva slučajna broja.   e
   j
   l
   t
int sy;   e
Prvi ćemo spremiti u int  varijablu    P
int gdriver = 9;
int gmode = 2; sx  i bit će između 0 i 640. Drugi
initgraph(&gdriver, &gmode, ""); ćemo spremiti u sy i bit će između
  a
   j
setbkcolor (WHITE); 0 i 480.    l
  o
setcolor (BLACK);    P
cleardevice(); (Dimenzije grafičkog prozora su
srand(time(NULL)); 640x480).   a   a
   d   t
rand();   a
  r   s
for (x = 1; x < 60; x = x + 1 )    b   k
  e
   O   t
{
sx = (static_cast <float> (rand()) / RAND_MAX) * 640;    i
   t
sy = (static_cast <float> (rand()) / RAND_MAX) * 480;    k
  e
   j
circle(sx,sy,20);    b
}    O
getch();   -
  o   i
closegraph();   r
  p
return 0;    i   m
  a
   k
   i   r
} Položaj kruga ovisit će o slučajno generiranim brojevima.    l
  e  g
   V
Ispis kružnice nalazi se unutar petlje pa će se generirati   e
   j
  n
onoliko kružnica koliko puta će se petlja izvesti.   a   a
   d
  m
   i   o
   ž   k
  a
   S

PRO - MIL 179


 

Petlje

Pogledajmo primjer sasvim jednostavne igrice. Računalo će generirati slučajni


broj između 0 i 100, a mi ćemo pokušati pogoditi koji je to broj. Ako ne pogodi-
mo, računalo će nas obavijestiti je li zamislilo veći ili manji broj, pa ćemo poga-
đati ponovo, dok ne pogodimo. Na kraju nas ra čunalo obavještava koliko poku-
šaja nam je trebalo da pogodimo zamišljeni 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 po č etnike

   j
  a
   ž
  r
   d
  a
   S
#include <cstdlib>
#include <iostream>    d
Varijablu brojcanik na početku ćemo posta-   o
  v
#include <ctime> viti za nulu, a nakon svakog pogađanja uve-    U
ćat ćemo je za jedan i tako ćemo znati koliko
using namespace std; nam je pokušaja trebalo za pogađanje zami-    i  
  v
  r   m
šljenog broja.   p   a
  r
int main()    š   g
  a   o
  r
{    N  p
int odgovor;
int slucajni_br;   e
   l
   b
Ovdje se generira slučaj-   a
   j
   i
ni broj između 0 i 100.   r
int brojcanik = 0;   a
   V
srand(time(NULL));   a
rand();    k
   i
   f
  a
  r
   G
slucajni_br = (static_cast <float> (rand()) / RAND_MAX) * 100;
  e
   j
  n   e
cout << "Zamislio sam broj od 0 do 100." << endl;   e   k
   š   l
  u
cout << "Pogodite koji je to broj" << endl;   o   d
  n   o
  o
   D
do Ovdje unosimo odgovor.
{   e
   j
   l
   t
cout << "Unestite odgovor." << endl;   e
cin >> odgovor; Pri svakom unosu odgovora    P
brojčanik povećavamo za 1.
brojcanik = brojcanik + 1;
  a
   j
   l
  o
if (slucajni_br > odgovor)    P
{ Izvodi se ako je
cout << "Zamislio sam veci broj." << endl; zamišljeni broj veći
od unesenog.   a   a
}    d   t
  a
  r   s
   b   k
  e
   O   t
if (slucajni_br < odgovor)
{ Izvodi se ako je
   i
   t
cout << "Zamislio sam manji broj." << endl; zamišljeni broj ma-    k
} nji od unesenog.   e
   j
   b
}    O
while (slucajni_br != odgovor);   -
  o   i
  r
  p
cout << "Pogodili ste " << brojcanik << ". put." << endl;    i   m
  a
Ispitivanje se    k
   i   r
system("PAUSE"); ponavlja dok
   l
  e  g
return 0; uneseni broj
   V
}   e
   j
nije jednak   n
  a   a
zamišljenom.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 181


 

Polja

182 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
  a
   j
   i
  r
  a
   V

  a

  a
   k
   i
   f
  a

   j
  r
   G

   l
  e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o

  o
  o
   D

  e
   j
   l
   t
  e

   P
   P

  a
   j
   l
  o
   P

  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 183


 

Polja

Jednodimenzionalna polja

#include <cstdlib> Zamislimo da kao pozadinu neke


#include <iostream>  jednostavne igrice želimo nacrtati
#include <winbgim.h> nešto što bi moglo asocirati na
nebodere.
using namespace std;
To možemo učiniti nizom lineto 
int main() naredbi i to rješenje funkcionira, ali
{ i sami vidimo da nije baš osobito
int gdriver = 9; elegantno.
int gmode = 2;
initgraph(&gdriver, &gmode, ""); Zamislimo koliko bi to rješenje bilo
setbkcolor (WHITE); neprakti čno ako bismo htjeli nacr-
setcolor (BLACK); tati crtež s više 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 po č etnike

   j
  a
   ž
  r
   d
  a
U ovom programu pojavljuju se Ovaj program radi isti posao kao i    S
uglate zagrade. prethodni, ali je daleko elegantniji    d
  o
od njega.   v
Dobit ćemo ih tako da držimo pri-    U
tisnutu AltGr  tipku, a zatim klikne-
mo slovo f  ili slovo g.    i  
  v
  r   m
Pogledamo li pažljivo program,   p   a
  r
   š   g
vidjet ćemo da su nam svi elemen-   a   o
  r
   N  p
ti poznati od prije, osim neobi čno
    e
   l
definirane varijable polje.    b
#include <cstdlib>   a
   j
   i
#include <iostream>   r
  a
#include <winbgim.h>    V
Dok smo u dosadašnje varijable
  a
using namespace std; mogli spremiti jedno slovo ili broj,    k
   i
   f
  a
  r
int main() čini se da u ovu varijablu možemo    G
{ spremiti mnoštvo brojeva.   e
   j
int gdriver = 9;   n   e
  e   k
int gmode = 2;    š   l
  u
  o   d
int x;   n   o
Pažljivi analitičar možda bi uočio   o
initgraph(&gdriver, &gmode, "");    D
setbkcolor (WHITE); da broj u uglatoj zagradi odgovara
  e
   j
setcolor (BLACK);    l
   t
količini brojeva u vitičastim zagra-   e
cleardevice();    P
dama.
int polje[54] =
{   a
   j
   l
0, 200, 10, 200, 10, 50, 100, 50, 100, 200,   o
   P
120, 200, 120, 150, 300, 150, 300, 200, 350, 200,
350, 30, 400, 30, 400, 200, 450, 200, 450, 20,
550, 20, 550, 200, 550, 200, 560, 200, 560, 40,   a   a
   d   t
  a
  r   s
600, 40, 600, 200, 620, 200, 620, 20, 635, 20,    b   k
  e
   t
635, 200, 640, 200    O
};
moveto (polje[0], polje[1]);    i
   t
   k
for (x = 2; x < 54; x = x + 2 )   e
   j
   b
{    O
lineto(polje[x], polje[x+1]);
  -
}   o   i
  r
getch();   p
   i   m
  a
closegraph();    k
   i   r
   l
  e  g
return 0;    V
}   e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 185


 

Polja

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int polje[5] = {10, 20, 30, 40, 50}; Detaljno objašnjenje funkcionira-
cout << polje[0] << endl; nja programa s prethodne strani-
cout << polje[1] << endl; ce vidjet ćemo kasnije, a sada
cout << polje[2] << endl; ćemo pogledati kako funkcionira-
cout << polje[3] << endl;  ju neobične varijable koje smo
cout << polje[4] << endl; uočili u prethodnom programu.
system("PAUSE");
return 0; Ovaj program pomoći će nam da
} lakše shvatimo ovaj novi tip vari-
 jable.

Naredbom int a = 12; u računalu 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 sadrži 5 pretinaca koji se
razlikuju po brojevima i u svaki od
tih pretinaca možemo spremiti
 jedan broj.

10 20 30 40 50

0 1 2 3 4

polje

186 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Novi tip varijable ima poseban naziv, naziva se polje. Ćelije polja međusobno   a
   S
razlikujemo po brojevima, a problem donekle komplicira činjenica da prvo
polje nije polje 1 nego polje 0, pa onda polje sa 5 elemenata ne sadrži polja    d
od 1 do 5 nego od 0 do 4. U po četku će nas ta činjenica često zbunjivati.   o
  v
   U

   i  
  v
  r   m
  p   a
  r
U vitičastim zagrada-    š   g
int polje[5] = {10, 20, 30, 40, 50}; ma navest ćemo vri-
  a   o
  r
   N  p
 jednosti pojedinih
  e
   l
ćelija.    b
  a
   j
Za razliku od obične varijable prilikom    i
  r
Vrijednosti ćemo me-   a
formiranja polja u uglatim zagradama    V
moramo navesti koliko ćelija sadrži po- đusobno odvojiti za-
lje. U našem slučaju polje koje smo rezima.   a
   k
   i
nazvali polje sadrži 5 ćelija.    f
  a
  r
   G
  e
   j
Sadržaj polja ispisuje se na sli-   n   e
cout << polje[1] << endl; čan način kao i sadržaj varijable.
  e   k
   š   l
  u
  o   d
  n   o
  o
   D

Razlika je u tome da je pri korištenju varijable dovoljno navesti naziv, a ovdje   e
   j
   l
osim naziva u uglatim zagradama moramo navesti broj ćelije koju želimo ispi-    t
  e
sati. U gornjem primjeru imajmo na umu da ćemo ispisati sadržaj druge ćelije,    P
a ne sadržaj prve. Prvu bismo ispisali naredbom cout << polje[0] << endl; .
  a
   j
   l
  o
   P

  a   a
   d   t
  a
  r   s
Vidimo da    b   k
  e
   O   t
#include <cstdlib>
#include <iostream> cout << polje[1] << endl;    i
   t
   k
  e
   j
using namespace std; ispisuje sadržaj druge ćelije.    b
Pokušajmo na sličan način ispi-    O
int main() sati sadržaj neke druge npr. sa:   -
{   o   i
  r
  p
int polje[5] = {10, 20, 30, 40, 50}; cout << polje[0] << endl;    i   m
  a
   k
   i   r
cout << polje[1] << endl;    l
  e  g
system("PAUSE"); sadržaj prve ćelije. (U uglatoj    V
  e
   j
return 0; zagradi nalazi se broj nula, a ne   n
} veliko slovo o.)   a   a
  m    d
   i   o
   ž   k
  a
   S

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 tre ću
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;
Sadržaj 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> Sadržaj polja ne mora se ispisivati


#include <iostream> po redu, nego se može 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 po č etnike

   j
  a
   ž
  r
   d
Polja mogu biti float tipa.   a
   S

(Uočimo da zarezom odvaja-    d


mo brojeve, a točka ima fun-   o
  v
kciju decimalnog zareza.)    U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p
#include <cstdlib>   e
   l
#include <iostream>    b
  a
   j
   i
  r
  a
using namespace std;    V

  a
int main()    k
   i
   f
{   a
  r
float polje[5] = {10.12, 20.14, 30.16, 40.18, 50.19};    G
cout << polje[0] << endl;   e
   j
cout << polje[1] << endl;   n   e
  e   k
cout << polje[2] << endl;    š   l
  u
  o   d
cout << polje[3] << endl;   n   o
  o
cout << polje[4] << endl;    D
system("PAUSE");
  e
   j
return 0;    l
   t
}   e
   P

  a
   j
   l
  o
   P
#include <cstdlib>
#include <iostream>   a   a
   d   t
  a
  r   s
using namespace std; Polja mogu biti i char  tipa.    b   k
  e
   O   t

int main() Pokušajmo iz ispisa izbaciti endl     i


{    t
naredbe:    k
  e
   j
char polje[5] = {'P', 'O', 'L', 'J', 'A'};    b
cout << polje[0] << endl; cout << polje[0] << endl;    O
cout << polje[1] << endl;   -
cout << polje[2] << endl; napišimo u obliku   o   i
  r
  p
cout << polje[3] << endl;    i   m
  a
   k
   i   r
cout << polje[4] << endl;    l
cout << polje[0];   e  g
system("PAUSE");    V
return 0;   e
   j
Samo cout << polje[4] << endl;    n
} nemojmo mijenjati.   a   a
  m    d
   i   o
   ž   k
  a
   S

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 možemo koristiti na isti način kao i


varijable, npr. za izračune.

#include <cstdlib>
Kao što je slučaj i kod varijabli, sadržaj po- #include <iostream>
lja ne moramo definirati prilikom formiranja
using namespace std;
polja.
U ovom slučaju sadržaj prve i druge ćelije int main()
{
polja unosimo cin naredbom, a u treću ćeli- int b[3];
 ju spremamo rezultat zbrajanja. cin >> b[0];
cin >> b[1];
b[2] = b[0] + b[1];
cout << b[2] << endl;
system("PAUSE");
return 0;
}

190 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Sadržaj polja možemo ispi-   a
   S
sati na ovaj način. Takav
način funkcionira, ali je nee-    d
legantan. Osobito je neprikla-   o
  v
dan ako bismo htjeli ispisati    U
veće polje.
   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
#include <cstdlib>    N  p
#include <iostream>   e
   l
   b
  a
   j
using namespace std;    i
  r
  a
   V
int main()
{   a
   k
   i
   f
int polje[5] = {10, 20, 30, 40, 50};   a
  r
cout << polje[0] << endl;    G
cout << polje[1] << endl;   e
cout << polje[2] << endl; Ovaj način ispisa sadržaja    j
  n   e
  e   k
cout << polje[3] << endl; polja daleko je elegantniji.    š   l
  u
  o   d
cout << polje[4] << endl;   n   o
  o
system("PAUSE");    D
return 0; Formirali smo petlju koja će
  e
   j
}    l
   t
se vrtjeti onoliko puta koliko   e
   P
ćelija petlje želimo ispisati.

  a
   j
   l
Varijabla petlje mijenja se od   o
   P
#include <cstdlib> početnog broja ćelije koju želi-
#include <iostream>   a   a
mo ispisati, u našem slučaju    d   t
  a
  r   s
using namespace std; od 0, do broja krajnje ćelije    b   k
  e
   O   t

int main() koju želimo ispisati, u našem


   i
   t
{ slučaju to je 4.    k
  e
   j
int polje[5] = {10, 20, 30, 40, 50};    b
int x;    O
for (x = 0; x < 5; x = x + 1) Pri ispisu umjesto polje[1] ko-   -
{   o   i
  r
cout << polje[x] << endl; ristimo polje[x] što znači da se   p
   i   m
   k   a
}    i   r
   l
ispisuje ono polje čiji broj je   e  g
system("PAUSE");    V
return 0;  jednak trenutnoj vrijednosti   e
   j
  n
} varijable x.   a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 191


 

Polja

Možemo ispisati dio ćelija


polja, npr. prvu, drugu i tre-
ću.
To ćemo postići 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)
{ Sadržaj polja možemo ispisivati i
cout << polje[x] << endl;
} unatrag. To ćemo postići tako da
system("PAUSE"); varijablu petlje x mijenjamo unat-
return 0;
} rag od četiri do nula po jedan.

192 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
#include <cstdlib> Na sličan način pomoću petlje mo-    S
#include <iostream> žemo uporabom tipkovnice unijeti
brojeve u pojedine ćelije.    d
  o
  v
using namespace std;    U

int main()    i  


  v
  r   m
{ Ovu petlju koristimo za unos   p   a
  r
int polje[5]; brojeva u polje.    š   g
  a   o
  r
int x;    N  p
cout << "Unos polja." << endl; Opet umjesto cin >> polje [0]    e
imamo cin >> polje[x], a varija-    l
   b
  a
   j
for (x = 0; x < 5; x = x + 1) blu x  petlja mijenja od nula do    i
  r
{ četiri i tako će se unijeti sadržaj   a
   V
cin >> polje[x]; cijelog polja.
}   a
   k
Kao i do sada nakon svakog    i
   f
  a
  r
cout << "Ispis polja." << endl; unosa broja pritisnemo Enter      G
tipku.
  e
   j
for (x = 0; x < 5; x = x + 1)   n   e
{   e   k
   š   l
  u
cout << polje[x] << endl;   o   d
  n   o
} Koristeći isti trik ovdje ispisujemo   o
   D
sadržaj polja.   e
system("PAUSE");    j
   l
   t
return 0; Umjesto cout << polje[0] stavili   e
   P
} smo cout << polje[x], a x  for  
petlja mijenja od nula do četiri i   a
   j
   l
tako će se ispisati sadržaj cijelog   o
   P
polja.
  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
Kao što je to vrijedilo za sve elemente programa koje   p
   i   m
smo vidjeli do sada, i za polja vrijedi da ćemo ih najbolje    k   a
   i   r
   l
shvatiti i usvojiti ako napravimo što veći broj varijacija   e  g
   V
primjera koje smo vidjeli do sada.   e
   j
  n
  a   a
Pokušajmo sami smisliti što više sličnih primjera.   m
   i
   d
  o
   ž   k
  a
   S

PRO - MIL 193


 

Polja

Pogledajmo program koji smo vidjeli na početku ovog poglavlja.

Ovdje se formira polje u kojem se nalazi položaj


točaka čijim ćemo spajanjem dobiti crtež.
#include <cstdlib>
#include <iostream> Na prvi pogled može nam se učiniti da smo to
#include <winbgim.h> ovdje učinili drugačije nego do sada. Pažljivom
analizom vidjet ćemo da nismo.
using namespace std;
Najprije imamo int polje[54] = , a zatim u vitičas-
int main() 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, određuje 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 crteža.

194 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Pogledajmo podrobnije neke detalje programa.   a
   S

   d
  o
  v
   U
int polje[5] = {10, 20, 30, 40, 50};
   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
Ovu naredbu int polje[5] = Ovaj oblik pogodniji je za    N  p
{ korištenje kad u veliko po-
možemo napi-   e
   l
10, 20, 30, 40, 50 lje želimo unijeti veliku koli-    b
sati i ovako. }; činu brojeva.   a
   j
   i
  r
  a
   V

  a
   k
   i
   f
  a
  r
Ova naredba određuje početak niza crta.    G
Udaljenost od lijevog ruba određena je   e
   j
moveto (polje[0], polje[1]); sadržajem ćelije polje[0], tj. prve ćelije, a   n   e
  e   k
udaljenost od gornjeg ruba sa polje[1], tj.    š   l
  u
  o   d
sadržajem druge ćelije.   n   o
  o
   D

  e
   j
   l
   t
Početna vrijednost   e
varijable x je 2.    P

Petlja će se izvoditi dok je x manji od 54. Budući


da se x uvećava za 2 vrijednost varijable x  će ras-   a
   j
   l
  o
ti od 2 do 52.    P

  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t
for (x = 2; x < 54; x = x + 2 ) Varijabla x uvećava se za 2. To nam
{ odgovara zato što je kraj svake crte    i
   t
lineto(polje[x], polje[x+1]); određen s dva broja, pa kad želimo    k
  e
   j
} očitati poziciju novog kraja crte, mo-    b
   O
ramo se u polju pomaknuti za dva
člana polja unaprijed.   -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
Udaljenost kraja   e
   j
crte od lijevog ruba Udaljenost kraja crte od gornjeg   n
  a   a
grafičkog prozora. ruba grafičkog prozora.   m    d
   i   o
   ž   k
  a
   S

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 uopće polja, budući da bismo
ovaj program mogli i ovako realizira-
ti, običnim varijablama.

Vidimo da ovakav pro-


#include <cstdlib>
gram možemo realizi- #include <iostream>
rati običnim varijabla-
using namespace std;
#include <cstdlib> ma, ali ovakav, koji
#include <iostream> koristi for   naredbu, ne int main()
{
using namespace std; možemo 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 po č etnike

   j
  a
   ž
  r
   d
Ne samo da uporabom polja možemo pisati elegantnije programe, nego nam   a
   S
polja omogućuju realizaciju programa koje bi bilo veoma teško realizirati na
neki drugi način. Pogledajmo nekoliko primjera takvih programa.    d
  o
  v
   U

#include <cstdlib>    i  


Polja nam omogućuju operacije sa ćelijama polja.   v
  r   m
#include <iostream>   p   a
  r
   š   g
  a   o
  r
using namespace std; Ovo je primjer programa koji pretražuje uneseno    N  p
polje i ispisuje najveći broj u polju.
  e
   l
int main()    b
  a
{    j
   i
  r
  a
int polje[5];    V
int x;
int r; Unos polja.   a
   k
   i
   f
  a
  r
cout << "Unos polja." << endl;    G
for (x = 0; x < 5; x = x + 1)
  e
   j
{ U ovom dijelu programa pretražuje   n   e
cin >> polje[x];   e   k
se uneseno polje i najveći broj na-    š   l
  u
  o   d
} đen u polju sprema se u varijablu   n   o
  o
r.    D
r = polje[0];
for (x = 1; x < 5; x = x +1)   e
   j
   l
   t
{   e
   P
if (r < polje[x])
{
U ovom dijelu ispisuje se sadržaj
r = polje[x]; varijable r , odnosno najveći broj   a
   j
}    l
  o
unesen u polje.    P
}

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


   d   t
cout << r << endl;   a
  r   s
   b   k
  e
   O   t
system("PAUSE");
return 0;    i
   t
}    k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 197


 

Polja

Pogledajmo detaljnije najzanimljiviji dio prethodnog program, dio u kojem se


pretražuje polje i najveći pronađeni broj sprema u r  varijablu.

Prvi član polja, dakle polje[0]  Pretraživanje se nastavlja unutar


sprema se u varijablu r . for   petlje, čija se varijabla x mijenja
od 1 do 5 po 1.

Zašto petlja ne počinje s nula?

Zato što smo prvu ćeliju (polje[0] )


već  pročitali pa je nećemo č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-
{
držaj varijable r  manji od polje[x] .
r = polje[x];
}
 Ako jest, znači da je u ćeliji polje
}
[x]  veći broj od onog u varijabli r ,
pa će se sadržaj ćelije polje[r]  
Ova if  naredbe je neobi čna. spremiti u varijablu r .
Nema else dijela. To je do-
zvoljeno. Ako nam else  dio  Ako nije, znači da je broj u polje[x]  
ne treba, možemo ga izos- manji i u tom slučaju neće se izvo-
taviti. diti sadržaj unutar vitičastih zagra-
da.
U tom slučaju, ako je uvjet
zadovoljen, izvodi se sadr- Na kraju, u varijabli r   ostaje najve-
žaj u vitičastim zagradama, ća vrijednost nađena u polju.
a ako nije, nastavlja se iz-
vođenje programa.

198 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
#include <cstdlib> Jednostavnim promjenama pro-    S
#include <iostream> gram koji pretražuje polje sa
ciljem da nađe najveći broj u    d
  o
polju možemo preurediti u prog-   v
using namespace std;    U
ram koji traži najmanji broj.
int main()    i  
Čemu služe takvi programski   v
  r   m
{   p   a
  r
postupci?    š   g
int polje[5];   a   o
  r
int x;    N  p
int r; Na sličan način bismo u progra-
mu za vođenje videoteke mogli   e
   l
cout << "Unos polja." << endl;    b
for (x = 0; x < 5; x = x + 1) pronaći korisnike koji nisu vratili   a
   j
   i
  r
{ film dulje od npr. tjedan dana ili   a
korisnike koji su u prošloj godini    V
cin >> polje[x];
posudili najviše filmova.   a
}    k
   i
   f
r = polje[0];   a
  r
for (x = 1; x < 5; x = x +1)    G
{ Dovoljno je da umjesto ispitivanja   e
   j
if (r > polje[x])  je li r < polje[x] stavimo ispitivanje   n   e
{   e   k
 je li r > polje[x].    š   l
  u
  o   d
r = polje[x];   n   o
  o
}    D
}
cout << "Najmanji je." << endl; Odgovaraju će preuredimo ispis   e
   j
   l
   t
cout << r << endl; obavijesti.   e
   P
system("PAUSE");
return 0;
}   a
   j
   l
  o
   P

  a   a
   d   t
  a
  r   s
Pokušajmo sami korigirati    b   k
  e
   O   t
program tako da pretražu-
 je je li u polje unesen od-
   i
   t
ređen broj ili koliko puta    k
se pojavljuje određen   e
   j
   b
broj.    O
  -
Pokušajmo napraviti slič-   o   i
  r
  p
na pretraživanja slova.    i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

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];
} Služi za sortiranje polja. Une-
semo različite brojeve u polje,
do a program će ih sortirati tako
{ da će u prvom polju biti najve ći
zamjena = 0; broj, a u posljednjem najmanji.
for (x = 0; x < 4; x = x + 1)
{
if (p[x] < p[x+1])
{ U ovom dijelu programa unosi-
privremeni = p[x]; mo brojeve u polje.
p[x] = p[x+1];
p[x+1] = privremeni;
zamjena = 1;
}
} U ovom dijelu vrši se sortiranje
} polja.
while (zamjena ==1);

cout << "Sortirano polje." << endl;


for (x = 0; x < 5; x = x +1) U ovom dijelu sortirano polje
{ ispisuje se na zaslon računala.
cout << p[x] << endl;
}

system("PAUSE");
return 0;
}

200 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Pogledamo podrobnije dio programa u kojem se vrši sortiranje.   a
   S

   d
  o
Sortiranje se odvija u do ... while  Na početku ispitivanja u varija-   v
   U
petlji. Petlja se ponavlja tako dugo blu zamjena stavlja se broj 0.
dok je varijabla zamjena  jednaka  Ako ne bude potrebno vršiti    i  
broju 1. nikakve zamjene u polju, varija-   v
  r   m
  p   a
  r
bla zamjena  ostat će jednaka    š   g
nuli i izvođenje do ... while pet-   a   o
  r
   N  p
lje će se zaustaviti.
  e
   l
   b
  a
   j
   i
  r
  do U for   petlji čita se cijelo polje, s   a
   V
time da se varijabla petlje mije-
{ nja za jedan manje od veličine   a
zamjena = 0;    k
   i
petlje; dakle u našem slučaju ne    f
  a
  r
ide do 4 nego, do 3.    G
for (x = 0; x < 4; x = x + 1)
{   e
   j
  n   e
  e   k
   š   l
  u
if (p[x] < p[x+1])   o   d
If  naredbom ispitujemo je li broj   n   o
  o
{ u nekoj ćeliji polja (p[x]) manji    D
privremeni = p[x]; od broja u sljedećoj ćeliji (p
  e
   j
[x+1] ). Ako nije, znači da ima-    l
   t
p[x] = p[x+1];   e
p[x+1] = privremeni; mo prvo veći broj, a zatim ma-    P
zamjena = 1; nji. To je ono što želimo i petlja
} se vrti dalje.
  a
   j
   l
  o
}    P

}  Ako jest, znači da imamo prvo


manji, a zatim veći broj, pa ih   a   a
   d   t
treba zamijeniti.   a
  r   s
while (zamjena ==1);    b   k
  e
   O   t
U tom slučaju u ovom dijelu će
se izvršiti zamjena.    i
   t
   k
  e
   j
   b
   O
Na kraju zamjene u varijablu zamjena stavit će se broj 1.   -
  o   i
  r
  p
Zbog toga do ... while petlja će cijeli postupak ponavljati tako dugo dok više    i   m
  a
   k
   i   r
   l
ne bude obavljena ni jedna zamjena i varijabla zamjena ostane jednaka nuli.   e  g
   V
  e
   j
To znači da nije pronađen ni jedan slučaj da je neki broj manji od sljede ćeg   n
  a   a
tj. da je sortiranje od većeg prema manjem završeno.   m
   i
   d
  o
   ž   k
  a
   S

PRO - MIL 201


 

Polja

Pogledajmo kako funkcioni-


ra zamjena sadržaja ćelija. Za zamjenu sadržaja dviju susjednih ćelija
u polju treba nam pomoćna varijabla; u
našem slučaju to je varijabla privremeni.

Zašto? Da smo odmah napravili drugu


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

Da broj koji se nalazi u p[x] ne bi nestao,


privremeno ga spremamo u varijabli priv-
remeni .

Nakon što smo u prethodnom koraku sadr-


žaj ćelije p[x] spremili u varijablu privreme-
ni, sadržaj ćelije p[x+1] spremamo u ćeliju p
p[x] = p[x+1]; [x]. Budući da p[x]  uspoređujemo sa p
[x+1] , x  mora bit za jedan manji od broja
ćelija.

Sadržaj varijable privremeni  sada vraćam u


polje, ali ne u ćeliju p[x] u kojoj se taj sadr-
žaj do sada nalazio, nego u sljede ću ćeliju,
p[x+1] = privremeni; u ćeliju p[x+1] .

Time smo sadržaje ćelija p[x] i p[x+1]  zami-


 jenili.

Na kraju zamjene u varijablu zamjena 


stavljamo broj jedan.

Time smo obavijestili računalo da je bilo


potrebno vršiti 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 slu čaju
neće dogoditi da je neka ćelija manja od
sljedeće, sortiranje je završeno.

202 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Između polja mogu se vršiti matematičke ope-   a
   S
racije kao i između varijabli.
   d
Ovaj program će zbrojiti sadržaje polja po1  i   o
  v
polja po2, a rezultat spremiti u polje po3 i za-    U
#include <cstdlib>
#include <iostream> tim ga ispisati na zaslon računala.
   i  
  v
  r   m
  p   a
  r
using namespace std;    š   g
  a   o
  r
   N  p
int main()
{   e
   l
   b
int po1[5] = {10, 15, 20, 25, 30};   a
   j
   i
int po2[5] = {35, 40, 35, 50, 55};   r
  a
int po3[5];    V
int a;   a
for (a = 0; a < 5; a = a +1)    k
   i
   f
{   a
  r
po3[a] = po1[a] + po2[a];    G
cout << po1[a] << " + " << po2[a] << " = " << po3[a] << endl;   e
   j
}   n   e
  e   k
system("PAUSE");    š   l
  u
  o   d
return 0;   n   o
  o
}    D

  e
   j
   l
   t
  e
   P

  a
   j
   l
  o
   P

  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
Pokušajmo napisati slične programe koji će vršiti neke operacije između po-    O
lje; npr. programe koji će množiti ili dijeliti članove dvaju polja i rezultat spre-   -
  o   i
  r
mati u treće polje.   p
   i   m
  a
   k
   i   r
   l
Program koji će uspoređivati pojedine ćelije dvaju polja, a zatim će u treće   e  g
   V
polje spremiti vrijednost one ćelije koja sadrži veći broj ili manji broj.   e
   j
  n
  a   a
Program koji će brojiti koliko puta se neki broj pojavljuje u nekom polju.   m    d
  o
   i
   ž   k
  a
   S

PRO - MIL 203


 

Polja

Spremanje brojeva u datoteku

Postavlja se pitanje na
koji način bismo mogli
podatke umjesto preko
tipkovnice unijeti u po-
lje iz neke datoteke. U
tu svrhu otvorit ćemo
Nopetad  (u hrvatskoj
inačici Blok za pisa-
nje) i unijet ćemo osam
različitih brojeva koji će
biti odvojeni praznim
mjestima.

Važno je napomenuti
da to moramo  učiniti
tim programom, a nipo-
što Wordom ili nekim
sličnim programom.
Te brojeve, odnosno taj tekst spre-
mit ćemo pod imenom podaci.txt  
u onu istu mapu u kojoj se nalazi
naš program.

U našem slučaju 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 po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
  a
   j
   i
  r
  a
 Ako je sve u redu, u onom istom    V

prostoru u kojem se nalazi naš   a


   k
   i
   f
projekt i naš program morala bi se   a
  r
   G
nalaziti i datoteka podaci.txt .
  e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D

  e
   j
   l
   t
  e
   P

Int  tip u slučaju da koristimo   a


   j
   l
Jasno je da možemo staviti i Dev-C++   može biti od –
  o
   P
neke druge brojeve, a možemo
2147483648 do 2147483647.
ih staviti više ili manje nego u
našem primjeru. Float  tip može imati najveću
  a   a
   d   t
-38   a
  r   s
 Ako mijenjamo količinu brojeva,
vrijednost od 3.40282 * 10 . To    b   k
  e
   O   t
se u programu piše kao
onda u programu koji će ih čitati
moramo na isti način promijeniti 3.40285e-38.
   i
   t
veličinu polja i for   petlju.    k
Mogu li se u programima koristiti   e
   j
   b
i veći brojevi? Naravno, ali taj    O
Moramo imati na umu i da broj
problem nadilazi potrebe našeg   -
koji unosimo ne može biti neog-   o   i
uvodnog priručnika.   r
raničeno velik. Koliki broj može-   p
   i   m
  a
mo unijeti u polje, odnosno u    k
   i   r
Za sada je bitno imati na umu    l
  e  g
varijablu, ovisi o svojstvima pro- da u int ili float varijablu ne mo-    V
gramskog okruženja koje koristi-   e
žemo staviti neograničeno velik    j
mo.   n
  a   a
broj.    d
  m
   i   o
   ž   k
  a
   S

PRO - MIL 205


 

Polja

Ovim programom pročitat ćemo brojeve koji su sprem-


ljeni u datoteku podaci.txt , spremit ćemo ih u polje i na
kraju ispisati na zaslon računala.
#include <cstdlib>
#include <iostream>
#include <fstream> Dodat ćemo novu biblioteku.

using namespace std;


Ovdje formiramo nešto s čime se do sada
int main() nismo sretali, a to je objekt. Trenutno nije
{ važno što je to točno objekt. Za sada će-
mo reći da je to element programa pomo-
int x; ću kojeg ćemo čitati sadržaj 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 pročitati, odnosno
ulaz >> polje[x]; koliko naše polje ima ćelija. U našem
} slučaju to je osam puta.

for (x = 0; x < 8; x = x +1)


{
cout << polje[x] << endl; Ovom naredbom sadržaj datoteke
} unosi se u polje.

system("PAUSE"); Da smo ovdje napisali:


return 0;
cin >> polje[x]; 
}
brojevi bi se u polje unosili pomo-
Ispis sadržaja polja. ću tipkovnice.

ulaz >> polje[x];

 je varijacija te naredbe i znači da


se brojevi neće u polje unositi po-
moću tipkovnice nego pomoću
objekta ulaz, a prije smo definirali
da objekt ulaz  čita iz datoteke po-
daci.txt.

206 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
Naredba za formiranje objekta pomo- Naziv objekta. Bira se po istoj logi-    S
ću kojeg ćemo čitati sadržaj datoteke. ci po kojoj biramo nazive varijabli.
   d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
Naziv datoteke koju ćemo čitati    š   g
ifstream ulaz ("podaci.txt"); pomoću objekta ulaz.   a   o
  r
   N  p

  e
   l
   b
  a
   j
   i
  r
  a
   V

  a
   k
   i
   f
  a
  r
   G
  e
   j
  n   e
#include <cstdlib>   e   k
   š   l
  u
#include <iostream>   o   d
  n   o
#include <fstream>   o
   D

using namespace std;   e


   j
   l
   t
  e
int main()    P
{
int x;
  a
   j
int polje[8];    l
  o
float a = 0;    P
ifstream ulaz("podaci.txt"); Kada učitamo brojeve u polje,
for (x = 0; x < 8; x = x + 1) s tim brojevima možemo raditi   a   a
{ sve ono što možemo raditi i s    d   t
  a
  r   s
ulaz >> polje[x]; brojevima koje smo unijeli    b   k
  e
   O   t
} preko tipkovnice.
for (x = 0; x < 8; x = x +1)    i
{ U ovom programu izračunat    t
   k
  e
   j
a = a + polje[x]; ćemo prosječnu vrijednost    b
} unesenih brojeva.    O
a = a / 8;   -
cout << "Prosjek je " << a << endl; Budemo li eksperimentirali s   o   i
  r
  p
cout << endl; drugim brojevima, imajmo na    i   m
  a
   k
   i   r
system("PAUSE"); umu da njihova ukupna suma    l
  e  g
return 0; ne smije biti veća od maksi-    V
malne dozvoljene vrijednosti   e
   j
}   n
varijable.   a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 207


 

Polja

Ovaj program omogućuje nam da sadržaj polja koji


smo unijeli preko tipkovnice spremimo u datoteku.
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std; I u ovom slučaju moramo imati uključenu


fstream biblioteku.
int main()
{
int x;
int polje[8];
ofstream izlaz("podaci.txt"); Ovdje formiramo objekt izlaz pomoću
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 uobi čajeni način unosimo brojeve


{ u polje.
izlaz << polje[x];
izlaz << " ";
}
Ovdje sadržaj 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 pomoću


objekta izlaz šaljemo u da-
toteku.

Ova naredba slična je na-


redbi:

cout << polje[x];

kojom brojeve šaljemo na


zaslon računala.

Naredbom izlaz << " "; iz-


među dva broja unosimo
prazno mjesto.

208 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Naredba za formiranje objekta pomo-   a
Naziv objekta. Bira se po istoj logi-    S
ću kojeg ćemo spremati sadržaj dato-
ci po kojoj biramo nazive varijabli.
teke.    d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
Naziv datoteke u koju ćemo    š   g
ofstream izlaz ("podaci.txt"); spremati pomoću objekta ulaz.   a   o
  r
   N  p

  e
   l
   b
  a
   j
   i
  r
  a
Što smo spremili možemo pogledati editorom, a možemo i programom koji    V
sadržaj datoteke ispisuje na zaslon računala.   a
   k
   i
   f
  a
  r
   G
  e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D

  e
   j
#include <cstdlib>    l
   t
  e
#include <iostream>    P
#include <fstream>

using namespace std;   a


   j
   l
  o
   P
int main()
{
int x;   a   a
   d   t
  a
  r   s
int polje[8];    b   k
  e
   t
ifstream ulaz("podaci.txt");    O
for (x = 0; x < 8; x = x + 1)
{    i
   t
   k
ulaz >> polje[x];   e
   j
   b
}    O
for (x = 0; x < 8; x = x +1)
  -
{   o   i
  r
cout << polje[x] << endl;   p
   i   m
  a
}    k
   i   r
   l
  e  g
system("PAUSE");    V
return 0;   e
   j
}   n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 209


 

Polja

U ovom programu nema ničeg novog. Samo smo


kao lego kocke složili elemente koje smo do sada
#include <cstdlib> upoznali.
#include <iostream>
#include <fstream> Ovaj program učitava 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
{ sadržaj datoteke i spremamo ga
ulaz >> p[x]; u polje.
}
cout << "Zapocinje sortiranje." << endl;
do
{ Doslovno sa Copy  Paste  kopi-
zamjena = 0;
ran dio programa koji sortira
for (x = 0; x < 7; x = x + 1)
sadržaj polja od najvećeg prema
{
najmanjem.
if (p[x] < p[x+1])
{
privremeni = p[x];
p[x] = p[x+1];
p[x+1] = privremeni; U ovom djelu programa sadržaj
zamjena = 1; polja sprema se u datoteku.
}
}
}
while (zamjena ==1);
ofstream izlaz("podaci.txt");
for (x = 0; x < 8; x = x + 1) Ovdje vidimo i jedan jako va-
{ žan element programiranja.
izlaz << p[x]; Ne moramo svaku stvar svaki
izlaz << " "; put kad nam treba iznova pro-
} gramirati. Segment programa
cout << "Sortiranje je zavrsilo" << endl; koji dobro radi obilno proko-
system("PAUSE"); mentiramo i spremimo, a za-
return 0; tim ga ubacujemo u programe
} kad nam zatreba, kao što smo
ovdje ubacili segment progra-
ma koji sortira sadržaj polja.

210 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
#include <cstdlib> Da bismo provjerili funkcio-   a
   S
#include <iostream> nira li naš program, najpri-
#include <fstream>  je ćemo programom koji    d
smo malo prije obradili   o
  v
unijeti brojeve u datoteku.    U
using namespace std;
   i  
int main()   v
  r   m
{   p   a
  r
   š   g
int x;   a   o
  r
   N  p
int polje[8];
ofstream izlaz("podaci.txt");   e
   l
   b
for (x = 0; x < 8; x = x + 1)   a
   j
   i
  r
{   a
cin >> polje[x];    V
}
  a
for (x = 0; x < 8; x = x + 1)    k
   i
   f
{   a
  r
#include <cstdlib>
izlaz << polje[x];    G
#include <iostream>
izlaz << " "; #include <fstream>   e
   j
}   n   e
  e   k
cout << "Spremanje je gotovo." << endl;    š   l
  u
using namespace std;   o   d
  n   o
cout << endl;   o
system("PAUSE");    D
int main()
return 0; {   e
}    j
   l
int x;    t
  e
int polje[8];    P
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
  a
   j
{    l
  o
ulaz >> polje[x];    P
}
for (x = 0; x < 8; x = x +1)   a   a
{    d   t
  a
  r   s
cout << polje[x] << endl;    b   k
  e
Nakon što smo brojeve }    O   t
unijeli u datoteku, pokrene- system("PAUSE");
mo program za sortiranje return 0;    i
   t
datoteke koji vidimo na    k
}   e
   j
lijevoj stranici.    b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
Programom za čitanje sadržaja datoteke pog-   n
  a   a
ledat ćemo rezultat sortiranja.   m    d
   i   o
   ž   k
  a
   S

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 po č etnike

   j
  a
   ž
  r
   d
  a
Tip polja u našem slučaju je int, Drugi red polja. Nalazi se    S
a moglo je biti npr. float ili char . unutar vitičastih zagrada.
   d
  o
  v
   U

Prvi red polja. Nalazi se    i  


  v
  r   m
Naziv polja. unutar vitičastih zagrada.   p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
  a
   j
   i
int polje [2] [4] = { {11, 12, 13, 14} , {21, 22, 23, 24} };   r
  a
   V

  a
   k
   i
   f
  a
  r
Cjelokupni sadržaj polja    G
nalazi se unutar poseb-   e
Broj redova polja. Broj stupaca polja. nih vitičastih zagrada.
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D

  e
   j
   l
   t
Budući da su u ovom tipu polja podaci raspoređeni u redove i stupce, prilično   e
logično je da kad želimo pristupiti nekoj ćeliji takvog polja moramo navesti u    P
uglatim zagradama broj reda i broj stupca ćelije kojoj želimo pristupiti.
  a
   j
   l
  o
   P

Broj stupca kojem pristupamo, u našem


cout << polje [0] [x] slučaju je to sadržaj varijable x.   a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
Broj reda kojem pristupamo, u našem slučaju je to prvi red koji se ozna čava    k
brojem nula. Dakle prvi red označava broj nula, a drugi broj jedan.   e
   j
   b
   O
  -
  o   i
  r
  p
Dvodimenzionalna polja koriste se Osim dvodimenzionalnih postoje i    i   m
  a
   k
   i   r
   l
na sličan način kao jednodimenzio- trodimenzionalna polja. Funkcioni-   e  g
   V
nalna. Osobito su korisna u progra- raju slično kao dvodimenzionalna,   e
mima u kojima se odvijaju složeni samo što imaju još i “dubinu”.    j
  n
  a   a
proračuni.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 213


 

Obrada teksta

214 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

  a
   d
  o
  v
   U

   t    i  
  v
  r   m
  p   a

  s
  r
   š   g
  a   o
  r
   N  p

   k
  e
   l
   b
  a
   j
   i
  r
  a
   V

  e
  a
   k

   t
   i
   f
  a
  r
   G
  e
   j
  n   e
  e   k
   š   l
  u
  o   d

  a
  n   o
  o
   D

  e
   j

   d
   l
   t
  e
   P

  a
  a
   j
   l
  o
   P

  r   a   a


   d   t
  a
  r   s

   b
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b

   O
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 215


 

Obrada teksta

String objekti

Želimo li napisati program za vođenje telefonskog imenika ili program za vođe-


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 način bismo mogli tekstove pretraživati ili sortirati.

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

using namespace std; Pogledamo li ovaj pro-


gram, učinit će nam se
int main() da smo za lakše 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 opterećivati i možemo


objekt odgovor   koristiti kao da smo formirali varijab-
lu string tipa pod nazivom odgovor .

Tek nešto veće mogućnosti koje će nam string pru-


žiti dat će nam naslutiti da se iza toga naziva krije
kompleksnija struktura od obične varijable.

216 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
#include <string> Da bi program mogao koristiti string  objekte,    S
ovu naredbu moramo staviti na početak prog-
   d
rama.   o
  v
   U
U našem programskom okruženju program će
raditi i bez ovog reda, ali je moguće da u ne-    i  
  v
  r   m
kom drugom programskom okruženju ne će.   p   a
  r
   š   g
  a   o
  r
Zbog toga ćemo stavljati tu naredbu    N  p

  e
   l
   b
  a
   j
   i
  r
  a
   V

  a
   k
   i
   f
  a
  r
   G
  e
   j
  n   e
cout << odgovor << ", dobar dan!" << endl;   e   k
Vidimo da objekt odgo-    š   l
  u
  o   d
vor   u naredbi cout  koris-   n   o
  o
timo kao da koristimo    D
varijablu.
  e
   j
   l
   t
Najprije će se ispisati   e
   P
sadržaj objekta odgovor ,
zatim tekst unutar navod-
nika i konačno skok u   a
   j
   l
novi red.   o
   P

  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O

cin >> odgovor; U naredbi cin  koju koristimo za unos preko tipkov-   -
  o   i
nice objekt odgovor   koristimo kao što bismo koris-   r
  p
tili varijablu.    i   m
  a
   k
   i   r
   l
  e  g
   V
Dok smo u varijablu char   tipa mogli spremiti jedno   e
   j
slovo, u objekt klase string  možemo spremati veći   n
  a   a
tekst.   m
   i
   d
  o
   ž   k
  a
   S

PRO - MIL 217


 

Obrada teksta

Očigledno je da u string  objekt možemo spremiti tekst i postavlja se pitanje


koliko najviše znakova smije sadržavati taj tekst.

U načelu računalo bi se samo trebalo brinuti da osigura dovoljno mjesta za


spremanje bilo kojeg teksta. U slučaju korištenja kraćih tekstova, poput imena,
naziva gradova i slično o tome ne moramo voditi brigu.

Želimo li u string objekt unijeti veću količinu teksta, da bismo bili sigurni da će
sve biti u redu, možemo unaprijed naredbom reserve rezervirati potreban pro-
stor.

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

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 slučaju
cout << endl; za spremanje imena
system("PAUSE"); osigurali veliki prostor.
return 0;
}

Operacija koja se vrši nad objektom.


Ovom naredbom se za objekt odgovor  
rezervira 256 mjesta za spremanje znako-
va.
odgovor.reserve(256)

Objekt na koji se naredba Obratimo pažnju na točku koja se obvezno


odnosi, u našem slučaju je nalazi između oznake objekta i oznake
to objekt odgovor . operacije koja se nad njim vrši.

218 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
#include <cstdlib>    U
#include <iostream>
#include <string>    i  
  v
  r   m
  p   a
  r
using namespace std;    š   g
  a   o
  r
   N  p
int main()   e
   l
{    b
  a
   j
string odgovor;    i
  r
odgovor.reserve(256);   a
   V
cout << "Unesite vase ime." << endl;
cin >> odgovor;   a
   k
cout << endl;    i
   f
  a
  r
cout << odgovor << ", dobar dan!" << endl;    G
cout << endl;
cout << "Imamo " << odgovor.size() << " slova." << endl;   e
   j
  n   e
cout << endl;   e   k
   š   l
  u
cout << "Imamo " << odgovor.capacity() << " prostora." << endl;   o   d
  n   o
cout << endl;   o
   D
system("PAUSE");
return 0;   e
   j
   l
   t
}   e
   P

  a
   j
   l
  o
   P
Naredba size()  očigledno služi za određivanje
odgovor.size() broja znakova unesenog teksta. Riječ  Stjepan
sastoji se od sedam slova.   a   a
   d   t
  a
  r   s
   b   k
  e
Objekt na koji se na-    O   t
redba odnosi.
   i
   t
Naredba capacity()  služi za određivanje    k
  e
   j
broja mjesta koja nam stoje na raspola-    b
ganju za unos znakova u objekt odgo-    O
vor .   -
odgovor.capacity()   o   i
  r
  p
Zašto ih je na raspolaganju 355, ako    i   m
  a
   k
   i   r
   l
smo naredbom odgovor.reserve(256)   e  g
rezervirali 256 mjesta? Zato što je 256    V
Objekt na koji se na-   e
   j
redba odnosi. mjesta samo polazište na temelju kojeg   n
prevoditelj rezervira nešto veći prostor.   a   a
  m    d
   i   o
   ž   k
  a
   S

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; guće u objekt odgovor  
cout << odgovor << ", dobar dan!" << endl; unijeti više odvojenih
cout << endl; riječi.
system("PAUSE");
return 0; Iako smo napisali prezi-
} me i ime, uspjeli smo
unijeti samo prezime.

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

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, moći ćemo unijeti
} više riječi u objekt odgo-
vor.

220 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
String  objekt u koji ćemo unositi tekst.   a
getline(cin, odgovor); U našem slučaju to je objekt odgovor.    S

   d
  o
  v
   U

Naredba koja nam omogućuje    i  


unos više riječi u string objekt.   v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
  a
   j
#include <cstdlib>    i
  r
#include <iostream>   a
   V
#include <string>
  a
   k
   i
using namespace std;    f
  a
  r
   G
int main()
  e
   j
{   n   e
string odgovor;   e   k
   š   l
  u
odgovor.reserve(256);   o   d
  n   o
cout << "Unesite vase ime." << endl; Jedan od problema   o
   D
cin >> odgovor; pri izradi programa
cout << endl;  javlja se kad korisnik   e
   j
   l
   t
cout << odgovor << ", dobar dan!" << endl; unese neodgovara-   e
 juću vrijednost.    P
cout << endl;
system("PAUSE");
return 0; U ovom slučaju, um-   a
   j
   l
}  jesto da unesemo   o
ime, samo smo priti-    P
snuli tipku Enter .
  a   a
   d   t
  a
  r   s
U ovom slučaju, na    b   k
  e
   O   t
mjestu gdje se očekiva-
lo da ćemo unijeti tekst,    i
mi smo unijeli brojeve.    t
   k
  e
   j
   b
Postavlja se pitanje na    O
koji bismo način mogli   -
spriječiti ili barem sma-   o   i
  r
  p
njiti mogućnost unoše-    i   m
  a
   k
   i   r
nja besmislenih odgo-    l
  e  g
vora.    V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 221


 

Obrada teksta

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

using namespace std;

int main()
{
string odgovor;

do
{ Ova inačica programa
cout << "Unesite vase ime." << endl; će zahtijevati da ponovi-
getline(cin, odgovor); mo unos ako pritisnemo
} tipku Enter , a da prije
while (odgovor.size() == 0); toga nismo ništa unijeli.
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}

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 razli čit


od nule, nastavlja se
izvođenje programa.

222 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
Polje char tipa    ž
  r
   d
  a
   S

   d
  o
  v
   U

   i  
#include <cstdlib>   v
  r   m
  p   a
  r
#include <iostream>    š   g
#include <string>   a   o
  r
   N  p

using namespace std;   e


   l
   b
  a
   j
   i
  r
int main()   a
{    V
char niz[255];   a
cout << "Unesite vase ime." << endl;    k
   i
   f
cin.getline(niz,255);   a
  r
cout << endl;    G
cout << niz << ", dobar dan!" << endl;   e
   j
cout << endl;   n   e
  e   k
   š   l
  u
system("PAUSE"); Tekst se može unijeti u prog-   o   d
  n   o
return 0; ram i obrađivati i na drugi   o
} način; uporabom polja char      D
tipa.   e
   j
   l
   t
  e
   P
Formiranje niza čije ćelije su char tipa. U svaku možemo staviti jedno slovo.
  a
   j
   l
  o
   P
Tip niza. U Broj ćelija niza. U
našem slučaju char niz[255]; našem slučaju niz
niz je char   sadrži 255 ćelija   a   a
   d   t
tipa. što znači da u taj   a
  r   s
   b   k
  e
Naziv niza, u našem slučaju na- niz možemo spre-    O   t
ziv niza je niz. miti 255 slova.
   i
   t
   k
  e
   j
   b
Ovom naredbom preko tipkovni-    O
cin.getline( niz, 255); ce unosimo tekst u niz char  tipa.   -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
Broj ćelija niza.   e  g
   V
Naredbe za   e
   j
unos tekst u   n
  a   a
char niz. Naziv niza.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 223


 

Obrada teksta

Sadržaj niza char  


cout << niz << ", dobar dan!" << endl; tipa ispisuje se na
isti način na koji se
ispisuje sadržaj
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; možemo staviti naredbu:

int main() cin >> niz;


{
char niz[255]; ali u tom slučaju moći
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 može-
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 po č etnike

   j
  a
   ž
  r
   d
U ovu inačicu programa nije moguće unijeti broj na mjestu na kojem očekuje-   a
   S
mo tekst. U slučaju da unesemo brojeve, ra čunalo će zahtijevati da ponovimo
upis.    d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p
#include <cstdlib>
#include <iostream>   e
   l
   b
#include <string>   a
   j
   i
  r
  a
using namespace std;    V

  a
int main()    k
   i
   f
{   a
  r
char niz[255];    G
int x;   e
   j
int p;   n   e
  e   k
   š   l
  u
  o   d
do   n   o
Početni dio programa i   o
{ formiranje potrebnih vari-    D
cout << "Unesite vase ime." << endl;  jabli.   e
cout << endl;    j
   l
   t
  e
cin.getline(niz,255);    P
x = 0;
p = 1;
while (niz[x] != '\0') Ovo je glavni dio prog-   a
   j
   l
{ rama. Ovdje se unosi   o
   P
if (isdigit(niz[x])) tekst i ispituje jesu li
{ unesena slova ili broje-
p = 0; vi.   a   a
   d   t
}   a
  r   s
   b   k
  e
x = x + 1;  Ako su uneseni brojevi,    O   t
} unos se ponavlja.
}    i
   t
   k
while (p == 0); Oznaku  \  dobit ćemo   e
   j
pritiskom na AltGr  i Q.    b
   O
cout << endl;
  -
cout << niz << ", dobar dan!" << endl;   o   i
  r
cout << endl;   p
   i   m
  a
system("PAUSE");    k
   i   r
   l
Završni dio programa,   e  g
return 0;    V
} ime se spaja s pozdra-   e
   j
vom i gasi se program.   n
  a   a
  m    d
   i   o
   ž   k
  a
   S

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, slo-


{ vo po slovo, dok ne dođe
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; varajućih vrijed- došli 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 uveća-
{ 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 ...
naredbom niz[x]  while  petlja se neće po-
vrijednost varijable p 
nula i ako jest, do ... čitao slijedeći navljati, odnosno upis se
while petlja se ponavlja. član niza. neće ponavljati.

226 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Ovaj program je veoma složen pa ćemo odvojeno pogledati važnije elemente   a
   S
programa. Pogledajmo prvo glavnu do ... while petlju.
   d
  o
  v
   U
Ovdje se u varijablu p 
sprema broj jedan. To je    i  
  do Ovdje počinje petlja. varijabla o kojoj ovisi   v
  r   m
{   p   a
  r
hoće li se do ... while     š   g
cout << "Unesite vase ime." << endl; petlja ponoviti ili ne.   a   o
  r
cout << endl;    N  p
cin.getline(niz,255);   e
   l
x = 0;    b
  a
p = 1;    j
   i
  r
while (niz[x] != '\0')   a
   V
{ Ovdje će se varijabla p postaviti na nula ako je
if (isdigit(niz[x]))  jedan od znakova u nizu broj. To će imati za   a
   k
   i
   f
{ posljedicu da će se do ... while petlja ponoviti,   a
  r
p = 0; odnosno da će se unos teksta ponoviti.    G
}
  e
   j
x = x + 1;   n   e
}   e   k
Ovdje se ispituje je li sadržaj varijable p jednak    š   l
  u
}   o   d
  n   o
nuli. Ako jest do ... while petlja će se ponoviti,   o
while (p == 0);    D
a to znači da će se upis ponoviti.
  e
   j
   l
   t
  e
   P
Na početku se x postavlja na nulu, što znači da će se prvi
put sa niz[x] ispitivati niz[0] odnosno prva ćelija niza.   a
   j
   l
  o
   P

x = 0; While  petlja ponavlja se tako dugo dok ćelija  niz


[x] nije jednaka oznaci za kraj. Prvi put se ispituje   a   a
p = 1;    d   t
prva ćelija odnosno ćelija niz[0].   a
  r   s
while (niz[x] != '\0')    b   k
  e
{    O   t
if (isdigit(niz[x]))
   i
   t
{ Nakon što smo while  naredbom ispitali jesmo li    k
p = 0;   e
   j
došli do kraja niza, if   naredbom ispitujemo je li    b
} ćelija koju trenutno ispitujemo jednaka nuli. Ako    O
x = x + 1;  jest, varijabla p postavlja se na nulu, što znači da   -
} će se ponoviti glavna do ... while petlja.   o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
Ovdje se varijabla x uvećava za jedan. To znači da će pri sljedećem izvođenju   e
   j
while  petlje x  biti 1, pa će se sa niz[x]  ispitivati niz[1], zatim pri sljedećem   n
  a   a
izvođenju while petlje niz[2] i tako do kraja niza.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 227


 

Obrada teksta

Ovom naredbom ispitujemo je li jedan znak


broj. Može se ispitivati varijabla char   tipa ili
 jedna ćelija niza char  tipa.
if ( isdigit ( niz [x] ) )
Ispitujemo ćeliju niza char   tipa. Broj ćelije
određen je vrijednošću varijable x.

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

using namespace std;


U ovom jednostavnom
int main() programu možemo 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, moguća su
endl; i druga ispitivanja.
}
else U tablici s desne strane
{ možemo vidjeti druge
cout << slovo << " nije broj." << endl; mogućnosti.
}
cout << endl;
system("PAUSE");
return 0;
}

Pokušajmo u gornji program


staviti ostala ispitivanja koja
možemo vidjeti u tablici.

U tom slučaju morat ćemo mo-


dificirati obavijesti koje daje pro-
gram.

228 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Osim što možemo ispitivati je li sadržaj varijable broj, ispitivati možemo i druga   a
   S
svojstva sadržaja varijable char tipa.
   d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
ISPITIVANJE ZNAKOVA    š   g
  a   o
  r
   N  p

  e
   l
if (isdigit(slovo)) Ispituje je li sadržaj varijable slovo neki broj.    b
  a
   j
   i
  r
  a
   V
Ispituje je li sadržaj varijable slovo  broj ili slovo. Odgo-
if (isalnum(slovo)) vor je negativan ako unesemo upitnik, to čku ili nešto   a
   k
   i
slično.    f
  a
  r
   G
  e
   j
if (isalpha(slovo)) Ispituje je li sadržaj varijable slovo neko slovo.   n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D
Ispituje je li sadržaj varijable slovo kontrolni znak. To je
if (iscntrl(slovo)) znak koji se dobiva ako držimo tipku Ctrl  i onda pritis-   e
   j
   l
   t
nem npr. slovo v.   e
   P
Je li sadržaj varijable slovo nešto što se ispisuje na zas-
if (isgraph(slovo)) lon računala, dakle slovo, broj ili interpunkcija. U ovu   a
   j
   l
grupu ne pripada prazno mjesto izme đu dviju riječi.   o
   P

if (islower(slovo)) Je li sadržaj varijable slovo malo slovo.   a   a


   d   t
  a
  r   s
   b   k
  e
   O   t
Je li sadržaj varijable nešto što se ispisuje. Za razliku od
   i
   t
if (isprint(slovo)) slične naredbe if (isgraph(slovo))  ovdje pripada i praz-    k
no mjesto između dviju riječi.   e
   j
   b
   O
  -
  o   i
if (isupper(slovo)) Je li sadržaj varijable slovo veliko slovo.   r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
if (ispunct(slovo)) Je li sadržaj varijable slovo neka interpunkcija.   n
  a   a
  m    d
   i   o
   ž   k
  a
   S

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 po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
   U
  if (isprint(slovo[6]))
{
   i  
cout << "Sedmi moze biti prazno mjesto." << endl;   v
  r   m
}   p   a
  r
   š   g
if (isupper(slovo[7]))   a   o
  r
   N  p
{
cout << "Osmi je veliko slovo." << endl;   e
   l
}    b
  a
   j
   i
  r
if (ispunct(slovo[8]))   a
{    V
cout << "Deveti je neka interpunkcija." << endl;
  a
}    k
   i
   f
cout << endl;   a
  r
system("PAUSE");    G
return 0;   e
   j
}   n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D

  e
   j
   l
   t
  e
   P
Ovaj malo veći program morali smo staviti na dvije
stranice.
  a
   j
   l
  o
Možemo vidjeti uporabu naredbi za ispitivanje znako-    P
va primijenjenu na polje char  tipa.
  a   a
Vidimo da ne možemo odjednom ispitivati cijelo po-    d   t
  a
  r   s
lje, nego da ispitujemo pojedine ćelije u polju.    b   k
  e
   O   t
Program možemo korigirati mijenjanjem sadržaj polja
ili tako da, umjesto stalnog sadržaja polja, sadržaj    i
   t
   k
polja unosimo preko tipkovnice.   e
   j
   b
   O
Uvijek imajmo u vidu da ćemo određenu naredbu   -
usvojiti tek kad napravimo mnoštvo primjera u kojima   o   i
  r
se ta naredba koristi. Određenu naredbu nismo usvo-   p
   i   m
  a
   k
   i   r
 jili kad smo je shvatili. Shvaćanje naredbe je samo    l
  e  g
uvjet da bismo uopće mogli početi učiti. Naredbu    V
smo usvojili tek kad smo je puno puta uspješno pri-   e
   j
  n
mijenili u raznim programima i na razne načine.   a   a
   d
  m
   i   o
   ž   k
  a
   S

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() poređivati kao i brojevi.
{
char slovo1; Na prvi pogled izgleda da se
char slovo2; uspoređuju 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; uspoređujemo 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;
}

Zašto na taj način ne možemo uspoređivati velika i mala slova?

Zato što računalo smatra da velika slova dolaze prije malih. Ako želi-
mo napisati program koji sva slova raspoređuje po abecedi, morali
bismo najprije ustanoviti je li neko slovo veliko ili malo, odnosno prog-
ram bi morao biti nešto složeniji. (Pokušajmo ga napisati.)

232 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
   U
#include <cstdlib>    i  
#include <iostream>   v
  r   m
#include <string>   p   a
  r
   š   g
  a   o
  r
   N  p
using namespace std;
  e
   l
int main() Mogla bi nas zbuniti    b
  a
uporaba znaka " i zna-    j
   i
{   r
  a
char slovo = 'A'; ka '.    V
char NizSlova[18] = "Ovo je niz slova.";
Pravilo je jednostavno,   a
cout << "Jedno slovo je " << slovo << endl;    k
   i
   f
cout << "Tekst je: " << NizSlova << endl;  jedno slovo piše se u   a
  r
cout << endl; obliku 'a', a više slova u    G
system("PAUSE"); obliku "Ovo je tekst.".
  e
   j
return 0;   n   e
  e   k
}    š   l
  u
  o   d
  n   o
  o
   D

  e
   j
   l
   t
  e
   P

#include <cstdlib>
#include <iostream>   a
   j
   l
#include <string>   o
   P

using namespace std;


  a   a
   d   t
int main()   a
  r   s
   b   k
  e
{    O   t
char slovo;
cout << "Unesite slovo." << endl;    i
   t
Slovima možemo do-    k
cin >> slovo; davati ili oduzimati   e
   j
slovo = slovo - 1;    b
brojeve.    O
cout << "Prethodni znak je " << slovo << endl;
slovo = slovo + 2;   -
  o   i
  r
cout << "slijedeci znak je " << slovo << endl;   p
   i   m
   k   a
cout << endl;    i   r
   l
system("PAUSE");   e  g
   V
return 0;   e
   j
}   n
  a   a
  m    d
   i   o
   ž   k
  a
   S

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
većim 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 možemo jed-
cout << tekst3 << endl; nostavno zbrojiti i rezultat zbraja-
cout << endl; nja spremiti u treći objekt.
system("PAUSE");
return 0;
}

234 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
#include <cstdlib>   v
   U
#include <iostream>
#include <string>    i  
  v
  r   m
  p   a
  r
using namespace std;    š   g
  a   o
  r
   N  p
int main()
{   e
   l
   b
string tekst1;   a
   j
   i
  r
string tekst2;   a
   V
cout << "Unesite prvu rijec." << endl;
cin >> tekst1;   a
cout << endl;    k
   i
   f
cout << "Unesite drugu rijec." << endl;   a
  r
Objekti klase string     G
cin >> tekst2; mogu se međusobno
cout << endl; uspoređivati.   e
   j
if (tekst1 == tekst2)   n   e
  e   k
   š   l
  u
{ U ovom programu us-   o   d
  n   o
cout << "Rijeci su jednake." << endl; poređujemo jesu li jed-   o
}    D
naki.
else   e
   j
   l
   t
{   e
cout << "Rijeci nisu jednake." << endl;    P
}
cout << endl;
system("PAUSE");   a
   j
   l
  o
return 0;    P
}
  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

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 uspoređivati i tako da
cout << endl; ispitujemo je li prvi manji od
if (tekst1 < tekst2) drugog.
{
cout << "Prva je manja." << endl; Ostaje nejasno u kojem smis-
} lu se ispituje je li prvi manji od
else drugog.
{
cout << "Prva nije manja." << endl; Očito se ne ispituje količina
} slova, nego se objekti rangira-
cout << endl;  ju po abecedi, ab je po abece-
system("PAUSE"); di nakon aaaaa, pa u tome
return 0; smislu ab nije manje nego je
} veće od aaaaa.

Kao i kod char   polja, sustav je


prilično primitivan i dobro radi
 jedino ako se ne miješaju veli-
ka i mala slova, budući da ra-
čunalo smatra da su sva velika
slova prije malih, pa su u tom
smislu manja od malih.

Zato računalo smatra da je AB


manje od aaaaa.

236 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Moguće su i složenije manipulacije nad tekstom. Ponovno pogledajmo nared-   a
   S
bu size() koju smo vidjeli na početku ovog poglavlja. Omogućuje nam određi-
vanje broja znakova koje sadrži tekst. Pri tome imajmo na umu da računalo i    d
prazno mjesto između riječi smatra jednim znakom.   o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p
#include <cstdlib>   e
   l
#include <iostream>    b
  a
#include <string>    j
   i
  r
  a
   V
using namespace std;
  a
   k
   i
int main()    f
  a
  r
{    G
string odgovor;
  e
   j
getline(cin, odgovor);   n   e
cout << "Tekst sadrzi " << odgovor.size() << " znakova." << endl;   e   k
   š   l
  u
cout << endl;   o   d
  n   o
  o
system("PAUSE");    D
return 0;
} Naredba size().   e
   j
   l
   t
  e
   P

  a
   j
   l
  o
   P

  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 237


 

Obrada teksta

Ovaj program pretražuje sadržaj objekta tekst i traži pojavljuje li se u tom objek-
tu sadržaj objekta trazi. Ako se pojavljuje, obavještava nas na kojoj poziciji za-
počinje traženi tekst. (Prva pozicija nema broj jedan nego broj nula.)

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

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 po č etnike

   j
  a
   ž
  r
   d
Ovom naredbom utvr đujemo poziciju traženog teksta, a rezultat spremamo u   a
   S
varijablu pozicija.
   d
  o
  v
   U
Varijabla u koju spre-
mamo rezultat. pozicija = tekst.find(trazi);
   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p
Naziv objekta u kojem se nalazi Naredba za Objekt koji pre-
  e
   l
tekst koji pretražujemo. pretraživanja. tražujemo.    b
  a
   j
   i
  r
  a
   V

Ovom naredbom provjeravamo je li tražena rije č nađena u pretraživanom ob-   a


   k
   i
 jektu.    f
  a
  r
   G
  e
   j
  n   e
if (pozicija != string::npos) Ovom naredbom dobivamo   e   k
   š   l
  u
oznaku koja označava da tra-   o   d
  n   o
žena riječ nije nađena.   o
   D
Uspoređujemo rezultat pretra-   e
   j
   l
   t
živanja u pozicija  varijabli i   e
U varijabli pozicija  nalazi se obavijest da tražena riječ  nije    P
rezultat pretraživanja objekta. nađena.
  a
   j
   l
  o
   P

  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

Problem ovog programa,    i


   t
odnosno ove naredbe, je u    k
  e
tome što će pronaći samo    j
   b
prvo pojavljivanje neke rije-    O
či, ako se ista riječ više puta   -
  o   i
  r
pojavljuje u tekstu.   p
   i   m
  a
   k
   i   r
   l
Želimo li ispitati sva pojavlji-   e  g
vanja neke riječi, morat će-    V
  e
   j
mo napisati malo složeniji   n
program.   a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 239


 

Obrada teksta

Ovaj program radi sli čan posao kao i prethodni, ali pretraživanje zapo činje od
kraja teksta. Ako tražimo riječ koja se pojavljuje više puta, ovaj program naći će
posljednje pojavljivanje.

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

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 računalu naredili da
getline(cin, tekst); pretraživanje započne 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 po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
   U
#include <cstdlib>
#include <iostream>    i  
  v
  r   m
#include <string>   p   a
  r
   š   g
  a   o
  r
using namespace std;    N  p

  e
   l
int main() Ovaj program smo tako korigirali da    b
  a
   j
{ smo, iako s naredbom find  započi-    i
  r
string tekst; njemo pretraživanje s lijeve strane,   a
   V
string trazi; pronašli drugo pojavljivanje tražene
int pozicija; riječi.   a
   k
cout << "Unesite tekst." << endl;    i
   f
  a
  r
getline(cin, tekst);    G
cout << endl;
cout << "Sto trazim?" << endl;   e
   j
  n   e
getline(cin, trazi);   e   k
   š   l
  u
cout << endl;   o   d
  n   o
pozicija = tekst.find(trazi,6);   o
   D
if (pozicija != string::npos)
{   e
   j
   l
   t
cout << "Pocetak je na " << pozicija << ". poziciji." << endl;   e
}    P
else
{   a
   j
   l
cout << "Nema trazene rijeci." << endl;   o
}    P
cout << endl;
system("PAUSE");   a   a
return 0; pozicija = tekst.find(trazi,6);    d   t
  a
  r   s
}    b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
U već poznatu naredbu find dodali smo broj 6 čime smo naredili računalu da    O
pretraživanje objekta tekst započne od znaka na poziciji 6.   -
  o   i
  r
  p
Budući da prva riječ  radi počinje na 5, računalo je našlo drugo pojavljivanje    i   m
  a
   k
   i   r
   l
riječi radi.   e  g
   V
  e
   j
Pomoću ove naredbe napravit ćemo program koji će pronaći sva pojavljiva-   n
  a   a
nja neke riječi, a ne samo prvo ili posljednje.   m    d
  o
   i
   ž   k
  a
   S

PRO - MIL 241


 

Obrada teksta

Ovaj program može prona ći svako pojavljivanje neke riječi 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 početka pretra-
string trazi; živanja nije određena brojem, ne-
int duljina; go sadržajem varijable trenutno .
int trenutno = 0;
int polozaj; Varijabla trenutno  je na početku
cout << "Unesite tekst." << endl; 0, da bi prvo pretraživanje po čelo
getline(cin, tekst); od početka teksta. Ako na nekoj
cout << endl; poziciji pronađemo traženu riječ,
cout << "Sto trazim?" << endl; varijablu trenutno uvećavamo za
getline(cin, trazi); tu poziciju + 1, da bi novo pretraži-
cout << endl; vanje počelo nakon početka već 
duljina = tekst.size(); nađene riječi i da bi se eventualno
while (trenutno < (duljina + 1)) pronašla nova riječ, a ne ponovo
{ ista.
polozaj = tekst.find(trazi,trenutno);
if (polozaj != string::npos)
{
cout << "Nalazi se na " << polozaj << ". mjestu." << endl;
trenutno = polozaj + 1;
}
else Budući da smo došavši do ove toče već 
{ prilično napredovali u vještini programira-
trenutno = duljina + 1; nja, ovaj put je objašnjenje funkcioniranja
} programa nešto skromnije.
}
cout << endl; Pokušajmo shvatiti kako funkcionira prog-
system("PAUSE"); ram i pokušajmo ga korigirati tako da ispiše
return 0; adekvatnu obavijest, ako se tražena riječ 
} uopće ne pojavljuje. Pokušajmo isti prog-
ram napisati korištenjem rfind naredbe.

242 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Na neku poziciju unutar teksta   a
   S
možemo dodati tekst.
   d
  o
  v
   U

#include <cstdlib>    i  


  v
  r   m
#include <iostream>   p   a
  r
#include <string>    š   g
  a   o
  r
   N  p
using namespace std;   e
   l
   b
  a
   j
int main()    i
  r
{   a
   V
string tekst = "Ovo je tekst.";
string umetak = " moj";   a
   k
   i
   f
tekst.insert(6,umetak);   a
  r
cout << tekst << endl;    G
cout << endl; Naredba za dodavanje teksta.
  e
   j
system("PAUSE");   n   e
return 0;   e   k
   š   l
  u
}   o   d
  n   o
  o
Sadržaj koji dodajemo.    D

  e
   j
   l
   t
  e
   P
Objekt u koji dodajemo tekst. tekst.insert(6,umetak);
  a
   j
   l
  o
   P
Pozicija na koju dodajemo tekst.
#include <cstdlib>   a   a
#include <iostream>    d   t
  a
  r   s
#include <string>    b   k
  e
   O   t

using namespace std;    i


   t
   k
  e
   j
int main()    b
{    O
string tekst = "Ovo je tekst.";   -
tekst.insert(6," dobar");   o   i
  r
  p
cout << tekst << endl;    i   m
  a
   k
   i   r
cout << endl;    l
  e  g
system("PAUSE");    V
return 0;   e
   j
Naredba insert može se napisati   n
}   a   a
i na ovaj način.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 243


 

Obrada teksta

Dio teksta spremljenog u objekt klase string  možemo 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 brišemo. tekst.erase(7,6);

Broj znakova koje će-


mo obrisati.

244 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Naredbom replace  možemo dio teksta koji se nalazi u objektu klase string    a
   S
zamijeniti nekim drugim tekstom.
   d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
  a
   j
   i
  r
#include <cstdlib>   a
   V
#include <iostream>
#include <string>   a
   k
   i
   f
  a
  r
using namespace std;    G
  e
   j
int main()   n   e
{   e   k
   š   l
  u
string tekst = "Ovo je dobar tekst.";   o   d
  n   o
string drugi = "dodatan";   o
   D
tekst.replace(7,5,drugi);
cout << tekst << endl;   e
   j
   l
   t
cout << endl;   e
   P
system("PAUSE");
return 0; Pozicija od koje zapo-
} činje zamjena teksta.   a
   j
   l
  o
   P

Koliko ćemo znakova   a   a


   d   t
zamijeniti.   a
  r   s
Naredba za zamjenu teksta.    b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
Objekt u kojem mijenja-    O
mo dio teksta. tekst.replace(7,5,drugi);   -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
Sadržaj kojim ćemo zamijeniti tekst u objektu tekst. Zamijenit ćemo 5 znako-   e
   j
va, počevši od sedmog sa sadržajem objekta drugi. Umjesto objekta drugi   n
  a   a
mogli bismo staviti i tekst unutar navodnika.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 245


 

Obrada teksta

Premještanje 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 način koji smo već vidjeli u ovom pog-
string tekst; lavlju, ime unosimo u char   polje i provjeravamo
tekst.reserve(256);  jesu li uneseni brojevi ili slova. Ako su uneseni
int x; brojevi, unos se ponavlja. Naredba isdigit  ne bi
int p; radila da smo koristili objekt klase string.
do
{
cout << "Unesite vase ime." << endl;
cout << endl;
cin >> niz;
x = 0;
p = 1;
while (niz[x] != '\0') Ovdje tekst iz polja tipa
{ char   premještamo u ob-
if (isdigit(niz[x]))  jekt klase string koji smo
{ nazvali tekst.
p = 0;
} To smo učinili da bismo
x = x + 1; mogli koristiti size  nared-
} bu.
}
while (p == 0);
cout << endl;
tekst = niz;
cout << "Ime " << tekst << " sadrzi " << tekst.size() << " slova." << endl;
cout << endl;
system("PAUSE");
return 0; Naredba niz.size  nije dozvoljena. Naredba
} size  radi jedino s objektima, ali ne i s poljima.

246 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
Premještanje teksta iz stringa u char polje    ž
  r
   d
  a
   S

Moguće je i tekst iz objekta klase string  premjestiti u polje char   tipa, ali je na-    d
redba kojom to izvodimo nešto složenija.   o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
  a
   j
   i
  r
  a
#include <cstdlib>    V
#include <iostream>
#include <string>   a
   k
   i
   f
  a
  r
   G
using namespace std;   e
   j
  n   e
  e   k
int main()    š   l
  u
  o   d
{ Formiramo objekt klase string   i   n   o
  o
string tekst = "Tekst."; u njega spremamo tekst    D
“Tekst” .   e
char *polje = (char*)tekst.c_str();    j
   l
   t
  e
   P
cout << polje[0] << endl;
cout << polje[1] << endl; Tekst iz objekta selimo u char  
cout << polje[2] << endl; polje koje smo nazvali polje.   a
   j
   l
cout << polje[3] << endl;   o
   P
cout << polje[4] << endl;
cout << polje[5] << endl;
Ispisujemo sadržaj polja da bis-   a   a
   d   t
cout << endl; mo vidjeli nalazi li se u njemu   a
  r   s
system("PAUSE");    b   k
  e
doista “Tekst” .    O   t
return 0;
}    i
   t
   k
  e
   j
   b
   O
  -
char *polje = (char*)tekst.c_str();   o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
Naziv char   polja u koje ćemo Naziv objekta iz kojeg tekst seli-   e
   j
spremiti tekst iz objekta. U na- mo u char   polje. U našem slu-   n
  a   a
šem slučaju naziv je polje. čaju naziv objekta je tekst.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 247


 

Obrada teksta

Spremanje teksta u datoteku

Pomoću objekata klase string možemo formirati polja i ta polja možemo sprema-


ti u datoteke na sličan način na koji smo spremali broj čana polja.

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

using namespace std;

int main()
{
int x;
string tekst[8]; Kad smo spremali brojeve, između
ofstream izlaz("podaci.txt"); brojeva stavljali smo prazno mjesto
for (x = 0; x < 8; x = x + 1) da bismo znali gdje završava jedan
{ broj, a počinje drugi.
getline(cin, tekst[x]);
} U ovom programu prazna mjesta
for (x = 0; x < 8; x = x + 1) nisu prikladna za razlikovanje sadr-
{ žaja pojedinih ćelija jer se prazna
izlaz << tekst[x]; mjesta nalaze između riječi.
izlaz << " # ";
}
cout << endl;
cout << "Spremanje je gotovo." << endl;
cout << endl;
system("PAUSE");
return 0;
}

Umjesto praznih mjesta, iz-


među sadržaja pojedinih će-
lija stavljamo " # ". Na ovoj slici vidi se samo
dio datoteke podaci.txt.
Ta oznaka će nam pomoći
prilikom čitanja datoteke.

248 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
Programom sličnim programu za čitanje datoteka u kojima se nalaze brojevi    S
čitat ćemo sadržaj datoteke u kojoj se nalaze tekstovi.
   d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
#include <cstdlib>    N  p
#include <iostream>
  e
   l
#include <string>    b
#include <fstream>   a
   j
   i
  r
  a
   V
using namespace std;
  a
   k
   i
int main()    f
  a
  r
{    G
int x;
string tekst[8];   e
   j
  n   e
string privremeni;   e   k
   š   l
  u
ifstream ulaz("podaci.txt");   o   d
  n   o
for (x = 0; x < 8; x = x + 1)   o
   D
{
do   e
   j
   l
{    t
  e
ulaz >> privremeni;    P
if (privremeni != "#")
{
  a
   j
tekst[x] = tekst[x] + privremeni + " "; Oznaku # koristit ćemo    l
  o
} da bismo utvrdili jesmo    P
} li došli do kraja sadrža-
while (privremeni != "#");  ja jedne ćelije polja.   a   a
}    d   t
  a
  r   s
for (x = 0; x < 8; x = x +1) Ovo rješenje je jednos-    b   k
  e
   O   t
{ tavno, ali je manjkavo.
cout << tekst[x] << endl;  Ako bi netko prilikom    i
}    t
unosa teksta unio #     k
  e
   j
cout << endl; oznaku, poremetio bi    b
system("PAUSE"); ispravno funkcioniranje    O
return 0; programa.   -
}   o   i
  r
  p
   i   m
  a
Zbog toga bi program    k
   i   r
   l
za unos teksta trebalo   e  g
   V
tako modificirati da ne   e
   j
dozvoljava unos #  oz-   n
  a   a
nake.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 249


 

Objekti

250 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r

 
   N  p

   i
  e
   l
   b
  a
   j

   t
   i
  r
  a
   V

  a

   k
   k
   i
   f
  a
  r
   G

  e
  e
   j
  n   e
  e   k

   j
   š   l
  u
  o   d
  n   o
  o
   D

   b
  e
   j
   l
   t
  e
   P

   O
  a
   j
   l
  o
   P

  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 251


 

Objekti

Jednostavan primjer klase i objekata

U ovom trenutku mogla bi se manje cjeline. U tom slučaju


 javiti dva pitanja koja su među- lakše se posao podijeli na više
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 pišu i u njima se lakše
autor C++ jezika ili bismo mogli pronalaze greške.
napisati svoje vlastite klase.
 Ako dio programa koji se često
Pitanje zašto bismo to uopće ponavlja izdvojimo u manju cjeli-
radili usko je povezano s drugim nu, koju pozivamo kad nam je
pitanjem, a to je na koji način se potrebna, dobit ćemo manji pro-
pišu veliki programi. Mi smo do gram u kojem se lakše vrše
sada pisali male programe. Pišu izmjene. Lakše je izmjenu unijeti
li se na isti način programi koji u jedan dio koji se poziva na
sadrže nekoliko stotina tisuća više mjesta, nego u slučaju kad
redova? Pišu li se oni na način se isti dio programa ponavlja na
da po č nemo s #include desetak mjesta. U tom slučaju
<cstdlib>  napišemo nekoliko trebali bi pronaći svih desetak
stotina tisuća redova, na kraju mjesta i na svima promijeniti
napišemo } i program je gotov. program na isti način, što je ve-
lik posao, a postoji i velika vjero-
Naravno da ne. To bi bilo nep-  jatnost da će doći do greške.
raktično iz niza razloga. U sluča-
 ju da program pišemo na taj na- Vidimo da bi bilo dobro podijeliti
čin (što je tehni čki moguće), ja- program na manje dijelove pa
ko teško bismo pisanje progra- se postavlja pitanje kako ćemo
ma raspodijelili na više osoba i u to učiniti. To ćemo učiniti kreira-
tako velikom programu jako teš- njem vlastitih objekata ili preciz-
ko bismo pronalazili greške. nije rečeno, kreiranjem vlastitih
klasa na temelju kojih ćemo for-
Postoji još jedan problem. U mirati objekte.
većim programima često se isti
posao mora obaviti na više Postoji još jedan razlog zašto 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 slično, istu provje- nostavljenom crnom prozoru
ru, npr. provjeru je li umjesto odvijati u normalnom windows
slova netko unio brojeve morali prozoru, apsolutno je nužno ra-
bismo ponoviti prilikom svakog zumjeti uporabu klasa i objeka-
od nabrojenih unosa. ta.

Svi navedeni problemi rješavaju


se tako da se program razdijeli u

252 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Imajmo u vidu da prednost uporabe objekata dolazi do izražaja u ve ćim prog-   a
   S
ramima. Manji programi koje ćemo vidjeti u ovom poglavlju mogu se elegan-
tnije napraviti bez uporabe objekata. Unato č  tome, mi ćemo vidjeti primjere    d
uporabe objekata u malim programima jer ćemo na primjerima malih progra-   o
  v
ma lakše shvatiti princip uporabe objekata.    U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
#include <cstdlib>   a
   j
   i
  r
#include <iostream>   a
   V
using namespace std;   a
   k
   i
   f
class tekst   a
  r
{    G
public:   e
   j
void pisi()   n   e
  e   k
   š   l
  u
{   o   d
  n   o
cout << "Ovo je nas tekst." << endl;   o
}    D
Unesimo u program-
}; sku okolinu i pokreni-   e
   j
   l
   t
mo naš prvi program   e
int main() koji koristi klase i ob-    P
{  jekte.
tekst t;
t.pisi();   a
   j
   l
  o
cout << endl;    P
system("PAUSE");
return 0;
  a   a
}    d   t
  a
  r   s
   b   k
  e
#include <cstdlib>    O   t
#include <iostream>
   i
   t
Uočimo da taj program radi using namespace std;    k
  e
   j
   b
potpuno isti posao kao ovaj.    O
int main()
Očito je da se u malim progra- {   -
  o   i
  r
mima ne isplati koristiti klase i cout << "Ovo je nas tekst." << endl;   p
   i   m
cout << endl;    k   a
   i   r
   l
objekte. Njihove prednosti do- system("PAUSE");   e  g
   V
laze do izražaja u većim prog- return 0;   e
   j
}   n
ramima.   a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 253


 

Objekti

Najprije ćemo pogledati zanimljive dijelove našeg programa, a zatim funkcionira-


nje programa kao cjeline.

Ovaj dio programa izrazito je sli čan ovom dijelu programa iz prošlog 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 vrši U drugom redu nad objektom tekst 
se operacija pisi(). Unutar zagrada izvršili smo operaciju reserve(250)
nema sadržaja, jer se ništa ne uno- kojom smo osigurali prostor za spre-
si u objekt t, ali su zagrade svejed- manje teksta. Između naziva objekta
no obvezne. i naziva operacije nalazi se točka.

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 našem slučaju našem slučaju formiramo
naziv klase je tekst. objekt t klase tekst.

t . pisi() ;
Naziv objekta čiju meto-
Naziv metode koju sadrži
du ćemo koristiti. U na- objekt t. U našem slučaju
šem slučaju koristit će- koristimo metodu pisi().
mo metodu t.
Obvezna točka.

254 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
#include <cstdlib>    U
#include <iostream>
   i  
  v
  r   m
using namespace std;   p   a
  r
   š   g
Ovdje vidimo da objekt   a   o
  r
class tekst možemo nazvati i dru-    N  p
{ gačije, npr. reci.   e
   l
public:    b
  a
void pisi()    j
   i
 Ako smo formirali ob-   r
  a
{  jekt reci, onda naredba    V
cout << "Ovo je nas tekst." << endl; koja je do sada imala
} oblik:   a
   k
   i
};    f
  a
  r
t.pisi();    G
int main()
  e
   j
{ dobiva oblik:   n   e
tekst reci;   e   k
   š   l
  u
  o   d
reci.pisi(); reci.pisi();   n   o
  o
cout << endl;    D
system("PAUSE"); Dakle, sad se operacija
return 0; pisi  vrši nad objektom   e
   j
   l
   t
} reci.   e
   P

  a
   j
   l
  o
   P

  a   a
#include <cstdlib>    d   t
  a
  r   s
#include <iostream>    b   k
  e
Uočimo da postoji sličnost između    O   t

using namespace std; formiranja objekta reci klase tekst i    i


   t
   k
varijable a tipa int.   e
   j
int main()    b
{ I ovdje se najprije navodi tip varija-    O
int a;   -
a = 12; ble, a zatim naziv a.   o   i
  r
  p
cout << a << endl; Nad varijablom možemo vršiti raz-    i   m
  a
   k
   i   r
cout << endl;    l
  e  g
system("PAUSE"); ne operacije. U našem slučaju u    V
return 0;   e
   j
varijablu a spremamo broj 12.   n
}   a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 255


 

Objekti

#include <cstdlib>
#include <iostream>

using namespace std;

class tekst
{
public:
void pisi()
{
cout << "Ovo je nas tekst." << endl;
}
}; Kao što možemo formirati
više varijabli int tipa, tako
int main() možemo formirati više
{ objekata klase tekst.
tekst prvi;
tekst drugi; U ovom primjeru formirali
tekst treci; smo tri objekta, objekt
prvi.pisi(); prvi, objekt drugi i objekt
drugi.pisi(); treći.
treci.pisi();
cout << endl; Za biranje naziva objeka-
system("PAUSE"); ta vrijede slična pravila
return 0; kao i za biranje naziva
} varijabli.

class tekst
{
public: Za razliku od klase string
void pisi() koju je već netko prije na-
{ pisao, a mi je samo koris-
cout << "Ovo je nas tekst." << endl; timo, klasu tekst  morali
} smo sami napisati.
};
U ovom dijelu programa
formira se klasa tekst.

256 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Formiranje klase za- Nakon naredbe class    a
po č inje naredbom
class tekst slijedi naziv klase. U
   S

class. To je naredba našem slučaju klasu    d


C++ jezika i ne može smo nazvali tekst, ali   o
  v
se mijenjati. mogli smo i drugačije.    U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
U ovoj inačici programa    N  p
#include <cstdlib> klasu smo nazvali BrdaI-
#include <iostream> Doline.
  e
   l
   b
  a
   j
   i
  r
using namespace std;   a
To je dozvoljeno, samo    V
što sad naredbu koja je
class BrdaIDoline
prije imala oblik:   a
{    k
   i
   f
public:   a
  r
tekst t;    G
void pisi()
{   e
   j
moramo napisati u obliku:   n   e
cout << "Ovo je nas tekst." << endl;   e   k
}    š   l
  u
BrdaIDoline t;   o   d
};   n   o
  o
   D
Dakle, formiramo objekt t 
int main() klase BrdaIDoline.   e
   j
   l
{    t
  e
BrdaIDoline t;    P
(Drugo je što je pametno
t.pisi();
da nam naziv klase govo-
cout << endl;
ri čemu klasa služi, pa je   a
system("PAUSE"); logičnije da se klasa za    j
   l
return 0;   o
ispis teksta zove tekst, a    P
} ne BrdaIDoline.)
  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
Vidimo da je rezultat rada    k
   i   r
   l
takvog programa potpuno   e  g
   V
 jednak kao i rezultat rada   e
   j
programa u kojem smo   n
  a   a
formirali klasu tekst.   m
   i
   d
  o
   ž   k
  a
   S

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 može izvršiti.

U našem slučaju klasa ne


sadrži varijable. Ima sa-
mo jednu metodu koju
smo nazivali pisi().

Popis metoda počinje


naredbom public: Pobli-
že značenje te naredbe
vidjet ćemo kasnije.

void pisi()
{ Ova naša mala klasa ne
cout << "Ovo je nas tekst." << endl; sadrži varijable i sadrži
} samo jednu metodu od-
nosno može napraviti
samo jednu operaciju. Tu
metodu nazvali smo pisi
().

Ispred naziva metode


nalazi se naredba void.
Njeno značenje pobliže
ćemo objasniti kasnije.

{ Unutar vitičastih zagrada


cout << "Ovo je nas tekst." << endl; nalaze se naredbe koje
} pojedina metoda izvršava.

Naša jednostavna metoda


samo naredbom cout ispi-
suje tekst unutar navodni-
ka na zaslon računala.

258 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
#include <cstdlib>    U
#include <iostream> Kao što smo klasu mogli
nazvati drugačije, mogli    i  
  v
  r   m
using namespace std; smo i metodu.   p   a
  r
   š   g
  a   o
  r
class tekst U ovom primjeru metodu    N  p
{ smo nazvali Pero().
  e
   l
public:    b
  a
void Pero() To je dozvoljeno, samo    j
   i
  r
{ što ćemo naredbu koju   a
   V
cout << "Ovo je nas tekst." << endl; smo do sada pisali u obli-
} ku:   a
   k
   i
};    f
  a
  r
t.pisi();
   G
int main()
pisati u obliku:   e
   j
{   n   e
tekst t;   e   k
   š   l
  u
t.Pero(); t.Pero();     o   d
  n   o
  o
cout << endl;    D
system("PAUSE"); Kao i kod biranja naziva
return 0; varijabli i klasa, i ovdje je   e
   j
   l
   t
} pametno da nam naziv   e
metode govori što meto-    P
da radi. Zato je naziv pisi 
za metodu koja ispisuje
  a
   j
tekst bolji od naziva Pero.    l
  o
   P

  a   a
Dok naziv metode uz    d   t
  a
  r   s
određena ograni čenja    b   k
Void  naredba ispred void pisi () možemo birati po volji,    O
  e
   t
naziva metode ozna-
čuje da metoda ne ove dvije zagrade se
ovdje moraju obavezno    i
   t
vraća nikakvu vrijed-    k
nalaziti.   e
   j
nost.    b
   O
U kojem smislu ne   -
vraća vrijednost vid-   o   i
  r
Naziv metode biramo po volji, paze ći na ogra-   p
 jet ćemo kasnije kad    i   m
ničenja o kojima smo govorili kad smo govorili    k   a
   i   r
   l
ovakvu metodu us- o biranju naziva varijabli.   e  g
poredimo s onima    V
  e
   j
koje vraćaju vrijed- Pametno je da naziv metode tako izaberemo   n
nost.   a   a
da nam govori čemu metoda služi.   m
   i
   d
  o
   ž   k
  a
   S

PRO - MIL 259


 

Objekti

Pogledajmo strukturu našeg programa.


#include <cstdlib>
#include <iostream>

using namespace std;


Početni dio programa.
class tekst
{
public:
void pisi() U ovom dijelu nalaze se klase
{ koje program koristi. U našem
cout << "Ovo je nas tekst." << endl; slučaju imamo samo jednu
} klasu, klasu pisi().
};

int main()
{
tekst t; Glavni dio programa. Sada možemo vidjeti zašto
t.pisi(); smo program započinjali s int main()  oznakom,
cout << endl; odnosno oznakom da je to glavni dio.
system("PAUSE");
return 0; Kad računalo pokrene program, najprije će se
} pokrenuti ovaj dio, a ostali dijelovi će se koristiti
po potrebi.

Sadrža klase nalazi se Klasa se može sastojati od više tipova sadrža-


unutar vitičastih zagrada.  ja. Jedan od njih je public. Kasnije ćemo pod-
robnije vidjeti što oznaka public označava.

class tekst U klasi se mogu nalazi-


{ ti varijable i metode. U
public: našem slučaju varijable
void pisi() ne koristimo, a imamo
{  jednu metodu koju smo
cout << "Ovo je nas tekst." << endl; nazvali pisi().
}
Metode su zapravo
programi koji određuju
}; koje operacije neka
klasa može izvesti .

260 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Unutar metode ne mora se   a
   S
nalaziti program za ispis. Mo-
že se nalaziti bilo što, npr.    d
program za crtanje kružnice.   o
  v
   U

   i  
  v
  r   m
  p   a
  r
#include <cstdlib>    š   g
  a   o
  r
#include <iostream>    N  p
#include <winbgim.h>   e
   l
   b
  a
   j
using namespace std;    i
  r
  a
   V
class tekst Iako program i ovako radi,
{ malo ćemo ga preurediti.   a
   k
   i
public:    f
  a
  r
void pisi() Umjesto class tekst  stavit    G
{ ćemo class slika.
  e
   j
int gdriver = 9;   n   e
int gmode = 2;   e   k
   š   l
  u
  o   d
initgraph(&gdriver, &gmode, "");   n   o
  o
setbkcolor(WHITE);    D
setcolor(BLACK); Umjesto void pisi() stavit će-
cleardevice(); mo void krug().   e
   j
   l
   t
circle(320,240,180);   e
   P
getch();
closegraph();
} Umjesto tekst t;  tj. umjesto   a
   j
   l
}; naredbe formiranja objekta t    o
   P
klase tekst stavimo slika cr-
int main() taj. Time ćemo formirati ob-
{  jekt crtaj klase slika.   a   a
   d   t
tekst t;   a
  r   s
t.pisi();    b   k
  e
   O   t
cout << endl;
system("PAUSE");    i
   t
return 0; Umjesto t.pisi();  tj. umjesto    k
pozivanja metode pisi() u klasi   e
   j
}    b
tekst stavit ćemo crtaj.krug();      O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
Izbacimo naredbu cout << endl; i naredbu system("PAUSE"); .   e  g
   V
Iako program radi i s tim naredbama, bez njih će raditi nešto elegantnije. Ovaj   e
   j
se program odvija u grafi čkom prozoru pa su nepotrebni razmak i pauza u   n
  a   a
tekstualnom prozoru.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 261


 

Objekti

Složeniji primjeri klasa i objekata

Klasa može sadržavati više


metoda, npr. u ovom slučaju
sadrži 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()
{ Treća metoda koju smo
cout << "Ovo je treca metoda." << endl; nazvali treca() .
}
};

int main()
{ Objekt formiramo jed-
tekst t; nom, a zatim pozivamo
t.prva(); metode po logici da
t.druga(); najprije navedemo na-
t.treca(); ziv objekta, zatim stavi-
cout << endl; mo točku i konačno
system("PAUSE"); naziv metoda. Zagrade
return 0; na kraju te ; oznaka su
} obvezne.

262 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Program može sadržavati   a
   S
više klasa, npr. u ovom
slučaju klasu tekst1 i klasu    d
tekst2.   o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p
#include <cstdlib>   e
   l
#include <iostream>    b
  a
   j
   i
  r
using namespace std;   a
   V

class tekst1   a


   k
   i
   f
{   a
  r
public: Prva klasa koju smo    G
void pisi() nazvali tekst1.   e
   j
{   n   e
cout << "Ovo je klasa tekst1." << endl;   e   k
   š   l
  u
}   o   d
  n   o
};   o
   D

class tekst2   e


   j
   l
Druga klasa koju    t
{   e
smo nazvali tekst2.    P
public:
void pisi()
{   a
   j
   l
cout << "Ovo je klasa tekst2." << endl;   o
}    P
};
  a   a
Ovdje na temelju    d   t
int main()   a
  r   s
{ svake klase formi-    b   k
  e
   O   t
cout << "Zovemo metodu klase tekst1." << endl; ramo objekt, a za-
tekst1 t1; tim pozivamo me-    i
todu od svake kla-    t
t1.pisi();    k
  e
se odnosno opera-    j
cout << endl;    b
cout << "Zovemo metodu klase tekst2." << endl; ciju koju objekt    O
tekst2 t2; može izvršiti   -
  o   i
  r
t2.pisi();   p
cout << endl; Uočimo da je doz-    i   m
  a
   k
   i   r
voljeno da se me-    l
system("PAUSE");   e  g
return 0; toda pod istim na-    V
zivom pisi()  nalazi   e
   j
}   n
u obje klase.   a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 263


 

Objekti

#include <cstdlib>
#include <iostream>

using namespace std;

class tekst
{
public:
void pisi()
{
cout << "Upravo koristimo objekt." << endl;
} Jednom formirani
}; objekt možemo proi-
zvoljni broj puta kori-
int main() stiti u programu.
{
tekst t; To je jedna od pred-
cout << "Objekt koristimo 1. put." << endl; nosti korištenja klasa
t.pisi(); i objekata.
cout << endl;
cout << "Objekt koristimo 2. put." << endl; Operaciju koja se u
t.pisi(); programu često po-
cout << endl; navlja stavimo u kla-
cout << "Objekt koristimo 3. put." << endl; su, u programu for-
t.pisi(); miramo objekt i pozi-
cout << endl; vamo određenu ope-
system("PAUSE"); raciju kad god nam
return 0; zatreba, bez potrebe
} da je ponovo piše-
mo.

Sve klase koje smo do sada formirali bile su veoma Uporaba klasa i obje-
 jednostavne budući da nisu komunicirale s ostat- kata veoma je slože-
kom programa na način da bi bilo moguće u klasu na ideja, i kao uvijek
unijeti neke podatke ili iz klase iščitati neke podat- do sada, imajmo na
ke, npr. brojeve ili tekst. umu da ćemo te pro-
gramske tehnike us-
U nastavku ovog poglavlja vidjet ćemo na koji na- vojiti tek kad napravi-
čin možemo u klase unositi ili iz klasa iščitavati po- mo velik broj primje-
datke. ra.

264 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
Komunikacija s metodama    ž
  r
   d
  a
   S

Pogledajmo sada program    d


  o
koji sadrži klasu u koju je mo-   v
guće unijeti podatke iz drugih    U
dijelova programa.
   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
  a
   j
#include <cstdlib>    i
  r
  a
#include <iostream>    V

using namespace std;   a


   k
   i
   f
  a
  r
class pravokutnik Klasa pravokutnik    G
{ sadrži jednu varija-   e
   j
private: blu. To je varijabla   n   e
int c;   e   k
c  int  tipa, a nalazi    š   l
  u
  o   d
se u private grupi.   n   o
  o
public:    D
void naslov()
{   e
   j
   l
   t
cout << "Povrsina pravokutnika." << endl;   e
   P
cout << endl; Osim varijable u
}
private  grupi, kla-   a
   j
   l
int povrsina (int a, int b) sa sadrži i dvije   o
{    P
c = a * b; metode u public 
return (c); grupi. To su meto-   a   a
   d   t
}   a
  r   s
}; da naslov()  i me-    b   k
  e
   O   t
toda povrsina (int
int main()    i
   t
{ a, int b).    k
  e
   j
pravokutnik p;    b
p.naslov();    O
cout << "Povrsina je ";   -
  o   i
cout << p.povrsina(2,3);   r
  p
cout << endl << endl;    i   m
  a
U glavnom progra-    k
   i   r
   l
system("PAUSE"); mu formiramo ob-   e  g
   V
return 0;  jekt p  klase pravo-   e
   j
} kutnik  i koristimo   n
  a   a
ga.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 265


 

Objekti

#include <cstdlib>
#include <iostream>

using namespace std;


Prethodni program malo smo modificirali da bi
class pravokutnik lakše mogli shvatiti razliku između naredbe
{ private i naredbe public.
private:
int c;

public:
int pov; U public područ ju dodali smo
void naslov() varijablu koju smo nazvali pov.
{
cout << "Povrsina pravokutnika." << endl;
cout << endl;
} Sadržaj varijable c  koja je formirana u
private područ ju i u kojoj se nalazi re-
int povrsina (int a, int b) zultat izračuna površine spremili smo u
{ varijablu pov koja je formirana u public
c = a * b; područ ju.
pov = c;
return (c);
}
}; Ovdje vidimo da sadržaju varija-
ble pov  možemo pristupiti u
int main() glavnom programu, iako je for-
{ mirana u objektu. Pristupamo joj
pravokutnik p; tako da prvo napišemo naziv
p.naslov(); objekta zatim točku i na kraju
cout << "Povrsina je "; varijablu, dakle u p.pov obliku.
cout << p.povrsina(2,3);
cout << endl; Pokušamo li na isti način pristu-
piti varijabli c, doći će do greške.
cout << "p.pov je " << p.pov << endl; (Želimo li probati, maknimo  //
// cout << "p.c je " << p.c << endl; oznaku na početku reda.)
cout << endl << endl; Već  iz ovog primjera bismo mo-
system("PAUSE"); gli zaključiti u kojem smislu je c
return 0; varijabla private, a kojem smislu
}  je pov varijabla public.

266 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Naredba private  označava područ je u kojem se nalaze varijable i metode   a
   S
koje se mogu koristiti unutar klase odnosno unutar objekta, ali se njima ne
može pristupiti iz glavnog programa, odnosno izvan objekta. U ovom progra-    d
mu u private područ ju imamo samo varijablu c. Mogli bismo imati i procedure.   o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
class pravokutnik Za razliku od private   a
   j
   i
{ područ ja, svemu što   r
  a
private: formiramo u public     V
int c; područ ju možemo   a
pristupiti i izvan kla-    k
   i
   f
public: se, odnosno izvan   a
  r
int pov; objekta.    G
void naslov()   e
   j
{ To ne možemo učini-   n   e
  e   k
cout << "Povrsina pravokutnika." << endl; ti tako da samo na-    š   l
  u
  o   d
cout << endl; vedemo naziv varija-   n   o
  o
} ble ili procedure ne-    D
go tako da prvo na-   e
   j
   l
int povrsina (int a, int b) vedemo naziv objek-    t
  e
{ ta, zatim točku i na    P
c = a * b; kraju naziv varijable
pov = c; ili procedure. Ako
return (c); pristupamo procedu-   a
   j
   l
} ri, moramo navesti i   o
   P
}; zagrade.
  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
Ovdje su formirane još dvije varijable, varijabla a i varijabla b. Iako bi bilo    O
logično da tim varijablama možemo pristupiti izvan klase odnosno izvan ob-   -
  o   i
  r
 jekta, jer su formirane u public područ ju, to ipak nije slučaj. Pokušamo li im   p
pristupiti izvan objekta doći će do greške.    i   m
  a
   k
   i   r
   l
  e  g
   V
Dakle izvana možemo pristupiti samo onim varijablama koje su u public po-   e
druč ju formirane samostalno kao pov varijabla, a ne možemo onima koje su    j
  n
  a   a
formirane unutar neke metode.   m    d
  o
   i
   ž   k
  a
   S

PRO - MIL 267


 

Objekti

private: Unutar private područ ja u ovom slučaju formirali smo sa-


int c; mo varijablu c. Mogli bismo staviti i procedure, ali u tom
slučaju bismo tim procedurama mogli pristupiti samo
unutar klase odnosno samo unutar objekta. Način pisa-
nja bio bi isti kao i unutar public područ ja.

Ovdje formiramo pov varijablu int tipa. Varijable unutar klase formiramo na pot-


puno jednak način kao i unutar glavnog programa.

public: Ovdje formiramo meto-


int pov; du za ispis teksta na
zaslon računala. 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 izračun površine
{ pravokutnika. Vidimo
c = a * b; da joj je oblik drugačiji
pov = c; od oblika naslov()  me-
return (c); tode pa ćemo je pobliže
} pogledati.

Do sada smo formiranje


metode započinjali s void. Naziv metode. Ulazne varijable su
Ova metoda započinje s unutar zagrada.
int.

Što to znači?
To znači da će ova metoda
biti int  tipa, odnosno da će int povrsina ( int a, int b )
rezultat njenog rada biti broj
int tipa.

Naredbom: Ovdje je popis varijabli koje možemo uni-


cout << p.povrsina(2,3);    jeti u metodu.
ispisat ćemo rezultat rada
metode povrsina  na zas- U ovu metodu možemo unijeti dva broja.
lon, a rezultat je broj int  Prvi će biti spremljen u varijablu a, drugi u
tipa. varijablu b, a oba su int tipa.

268 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Pogledajmo još jednom naredbu za formiranje metode koja zapo činje void    a
   S
naredbom.
   d
  o
  v
   U
Void  naredba znači da metoda Prazne zagrade znače da u ovu
naslov neće vraćati nikakav re- metodu ništa nije moguće unijeti    i  
  v
  r   m
zultat rada. na način da se napiše:   p   a
  r
   š   g
  a   o
  r
Sad će netko upitati, kako ne p.naslov(2,3);    N  p
vraća kad ispisuje tekst na zas-
  e
   l
lon. Moguće je unutar metode staviti    b
cin naredbu pa nešto unijeti npr.   a
   j
   i
  r
Ispisuje, ali se ispisivanje zbiva preko tipkovnice, ali nije moguće   a
   V
unutar metode. ništa unijeti na gore opisan na-
čin.   a
   k
   i
U glavnom programu moguće je    f
  a
  r
napisati:    G

cout << p.povrsina(2,3);   e


   j
  n   e
  void naslov ()   e   k
   š   l
  u
ali nije moguće napisati:   o   d
  n   o
  o
   D
cout << p.naslov();
  e
   j
   l
   t
Moguće je jedino s:   e
   P
p.naslov();
  a
   j
pozvati metodu naslov koja on-    l
  o
da unutar sebe ispisuje tekst na    P
zaslon računala.
  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

c = a * b; Unutar metode mogu se koristiti varijable koje smo    i


   t
pov = c; koristili za unos, varijabla a i varijabla b, te se mogu    k
  e
   j
koristiti sve one varijable koje su formirane u public     b
   O
ili private područ ju, dakle varijabla c i varijabla pov.
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
return (c); Ovom naredbom određujemo koju vrijednost će pro-    V
cedura vraćati u glavni program, odnosno što će   e
   j
  n
naredba cout << p.povrsina(2,3);  ispisati.   a   a
  m    d
   i   o
   ž   k
  a
   S

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 možemo
return (c); lijepo vidjeti kako o naredbi
}
return   ovisi što će se nared-
int metoda2(int a, int b) bom r.metoda1(2,4)   ispisati na
{
c = a + b; zaslon računala.
return (a);
}

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
{ sadržaj 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 sadržaj
varijable a, a
system("PAUSE"); naredbom re-
return 0; turn(b)  ispisat
} će se sadržaj
varijable b.

270 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

#include <cstdlib>    d


  o
#include <iostream>   v
   U
using namespace std;    i  
  v
  r   m
class racunaj   p   a
  r
   š   g
{   a   o
  r
   N  p
private:
int a;   e
   l
   b
int b;   a
   j
   i
int c;   r
  a
public:    V
void unesi(void)
U ovom programu imamo   a
{    k
   i
   f
cout << "Unesite stranicu a." << endl; dvije void metode. Meto-   a
  r
cin >> a; dom unesi unose se bro-    G
cout << "Unesite stranicu b." << endl;  jevi u varijablu a i varijab-   e
lu b. To se vrši unutar    j
cin >> b;   n   e
  e   k
} metode. Nije moguće    š   l
  u
  o   d
void povrsina(void) napisati naredbu:   n   o
  o
{    D
c = a * b; p.povrsina(2,3);
  e
   j
cout << "Povrsina je " << c << endl;    l
   t
Moguće je jedino nared-   e
}    P
}; bom:

int main() p.unesi();   a


   j
   l
{   o
   P
racunaj p; pozvati metodu za unos
p.unesi(); brojeva.
p.povrsina();   a   a
   d   t
cout << endl;   a
  r   s
   b   k
  e
system("PAUSE");    O   t
return 0;
}    i
   t
   k
Metodom povrsina  izra-   e
   j
   b
čunava se površina i ispi-    O
suje rezultat.
  -
  o   i
  r
Rezultat se ispisuje unu-   p
   i   m
  a
tar metode. Nije moguća    k
   i   r
   l
  e  g
naredba:    V
  e
   j
cout << p.povrsina();   n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 271


 

Objekti

#include <cstdlib>
#include <iostream>

using namespace std;


U ovom programu najprije ra čunamo površinu, a
class racunaj
zatim dobiveni rezultat množimo sa cijenom kvad-
{
ratnog metra površine da bismo dobili cijenu povr-
private:
int a; šine.
int b;
int c;
Vidjeli smo da rezultat
public: izračuna unutar meto-
void unesi(void) de možemo ispisati na
{ dva načina. 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 moguća.
return (c);
}  Ako metoda nije void 
}; Obratimo pažnju na tipa, nego int ili float ili
činjenicu da unutar char , onda je moguće
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; načina 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 po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
#include <cstdlib>    U
#include <iostream>
   i  
  v
  r   m
using namespace std;   p   a
  r
   š   g
  a   o
  r
   N  p
class racunaj
{   e
   l
private:    b
  a
   j
   i
int a;   r
  a
int b;    V
int c;
  a
int p;    k
   i
   f
int u;  Ako za ispis koris-   a
  r
public: timo void  metodu    G
void unesi(void) pa uporaba nared-   e
   j
{ be return  nije mo-   n   e
  e   k
cout << "Unesite stranicu a." << endl; guća, ispisom re-    š   l
  u
  o   d
cin >> a; zultata unutar me-   n   o
  o
cout << "Unesite stranicu b." << endl; tode možemo ispi-    D
cin >> b; sati više vrijednos-
  e
   j
cout << "Cijena kvadratnog metra." << endl; ti.    l
   t
cin >> c;   e
   P
} U ovom slučaju u
void cijena(void) metodi cijena  mi
{ ispisujemo površi-   a
   j
   l
p = a * b; nu i cijenu.   o
   P
cout << "Povrsina je " << p << endl;
u = p * c; Da je to int meto-
cout << "Cijena je " << u << endl; da i da rezultat   a   a
   d   t
} vraćamo return    a
  r   s
   b   k
  e
}; naredbom, mogli    O   t
bi napisati ili re-
int main() turn(p)  ili return    i
   t
(u), ali ne bismo    k
{   e
   j
racunaj p; mogli vratiti obje    b
   O
p.unesi(); vrijednosti.
p.cijena();   -
  o   i
  r
Ukratko, koju od   p
   i   m
  a
cout << endl; metoda ispisa će-    k
   i   r
   l
system("PAUSE"); mo upotrijebiti ovi-   e  g
   V
return 0; si o potrebama   e
   j
} koje moramo za-   n
  a   a
dovoljiti.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 273


 

Objekti

Naredba cout << p.povrsina(2,3);  zbunjujuća je između ostalog i zato što istov-
remeno služi za unos broja 2 i broja 3 u metodu i za ispis rezultata množenja,
odnosno rezultata rada metode.

Kad računalo nai đe 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  računalo će sa-
držaj varijable a i va-
{ rijable b  pomnožiti, a
rezultat spremiti u
varijablu c.
c = a * b;

return ( c );

Kad računalo naiđe na


naredbu return(c) ,
cout << p.povrsina(2,3) ; sadržaj varijable c ispi-
sat će na zaslon raču-
nala.

Ova naredba tada će


funkcionirati kao da
smo u programu koji
ne sadrži klase i objek-
te napisali:

cout << c;

274 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
#include <cstdlib>    š   g
  a   o
  r
#include <iostream>    N  p

  e
   l
using namespace std;    b
  a
   j
   i
  r
class pravokutnik   a
   V
{
private:   a
   k
float c;    i
   f
  a
  r
public:    G
void naslov()
{ Kao što smo već    e
   j
rekli, metode ne   n   e
cout << "Povrsina pravokutnika." << endl;   e   k
   š   l
  u
cout << endl; moraju biti int tipa.   o   d
  n   o
} Mogu biti i nekog   o
drugog tipa. U    D
float povrsina (float a, float b)
{ ovom programu   e
   j
imamo metodu    l
   t
c = a * b;   e
return (c); float tipa.    P
}
};   a
   j
   l
  o
int main()    P
{
float a1;   a   a
float b1;    d   t
  a
  r   s
pravokutnik p;    b   k
  e
   O   t
p.naslov();
cout << "Unesite stranicu a." << endl;    i
   t
cin >> a1;    k
  e
cout << "Unesite stranicu b." << endl;    j
   b
cin >> b1;    O
cout << "Povrsina je "; Vidimo da unutar   -
  o   i
cout << p.povrsina(a1,b1); zagrada umjesto   r
  p
cout << endl << endl; konkretnih broje-    i   m
  a
   k
   i   r
   l
system("PAUSE"); va možemo sta-   e  g
return 0; viti varijable.    V
  e
   j
}   n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 275


 

Objekti

Razdvajanje deklaracije i definicije

Do sada su se metode nalazile


unutar klase. U složenijim pro-
gramima najčešće 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 po-
druč je.
class pravokutnik
{ Ovdje se nalazi samo zaglav-
private: lje metode pravokutnik  u ko-
int c;  jem su određena ulazna i izla-
public: zna svojstva metode, ali ovdje
int povrsina (int a, int b); nema sadržaja metode.
};

int pravokutnik :: povrsina (int a, int b)


{ Sadržaj metode pravokut-
c = a * b; nik, odnosno dio programa
return (c); kojim određujemo š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 način kao
cout << endl; i klase koje smo
system("PAUSE"); do sada koristili.
return 0;
}

276 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Pogledajmo kako su povezane deklaracija metode i definicije metode.   a
   S

   d
  o
Tip vrijednosti koju će metoda Obvezna ;  ozna-   v
ka    U
vraćati kao rezultat. U ovom
slučaju je int, a mogao bi biti i Deklaracija metode u dek-    i  
neki drugi npr. float. laraciji klase. Ovdje je na-   v
  r   m
  p   a
  r
veden naziv metode i ulaz-    š   g
  a   o
  r
no-izlazna svojstva meto-    N  p
de, ali ne i program meto-
de.   e
   l
   b
  a
   j
   i
  r
  a
int povrsina (int a, int b) ;    V
Definicija me-
  a
tode. Ovdje    k
   i
   f
se nalazi pro-   a
  r
gram koji od-    G
ređuje što ta   e
   j
metoda radi,   n   e
  e   k
odnosno svoj-    š   l
  u
  o   d
int pravokutnik :: povrsina (int a, int b) stva metode.   n   o
  o
   D

  e
   j
   l
   t
Popis varijabli preko   e
Naziv klase. Naziv metode. kojih se brojevi mogu    P
unijeti u metodu.
  a
   j
   l
Obvezna ::  oznaka između naziva klase i   o
   P
naziva metode.

  a   a
   d   t
  a
  r   s
U većini slučajeva do sada noviji način izrade programa bio je elegantniji    b   k
  e
   O   t
od starog. U ovom slučaju to baš ne izgleda tako. Ovakav način pisanja
klase očigledno je manje elegantan od prethodnog. Postoji veća vjerojat-    i
   t
nost da će doći do greške budući da treba uskladiti deklaraciju metode i    k
  e
   j
definiciju metode.    b
   O
Ovaj način pisanja klasa doista je manje elegantan od načina koji smo kori-   -
stili u prethodnim programima i ima ga smisla upotrebljavati samo kad želi-   o   i
  r
  p
mo veći program razdijeliti u više datoteka. Ako klase pišemo na ovaj na-    i   m
  a
   k
   i   r
čin, tada možemo u jednu datoteku staviti sve deklaracije klasa, a u druge    l
  e  g
datoteke definicije metoda. Ako se program nalazi u jednoj datoteci, bolje je    V
  e
   j
definiciju metode napisati unutar deklaracije metode kao što smo to činili u   n
prethodnim programima.   a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 277


 

Objekti

Uporaba konstruktora

#include <cstdlib>
#include <iostream>

using namespace std;

class pravokutnik
{ U ovom programu nalazi se nekoli-
private: ko neobičnosti.
int a;
int b; Prva neobičnost jest ova metoda.
public: Neobično je to što ima isti naziv
pravokutnik(void) kao i klasa. Klasu smo nazvali pra-
{ vokutnik  i ova metoda zove se
cout << "Stranica a:" << endl; pravokutnik.
cin >> a;
cout << "Stranica b:" << endl; Druga neobi čnost jest što ova me-
cin >> b; toda nema nikakvu oznaku povrat-
} ne vrijednosti, nije ni void pravo-
int povrsina(void) kutnik() , ni int pravokutnik().
{
return (a * b);
}
}; Neobično je i to
što je nigdje ne
int main() pozivamo.
{
pravokutnik p; U ovom redu
cout << "Povrsina je " << p.povrsina() << "." << endl; formiramo objekt
cout << endl; p  klase pravo-
system("PAUSE"); kutnik, a već  u
return 0; sljedećem redu
} pozivamo meto-
du povrsina .

Iako nigdje u programu nije vidljivo pozivanje metode pravokutnik, njen sadržaj
se očigledno izvršava. Očigledno je da prije izvođenja metode površina računa-
lo unosi stranicu a i stranicu b. Takva metoda naziva se konstruktor , a izvršava
se u trenutku formiranja objekta. Dakle, ova metoda izvršila se u trenutku kad
smo naredbom pravokutnik.p  formirali objekt p klase pravokutnik.

278 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
   U
#include <cstdlib>
   i  
#include <iostream>   v
  r   m
  p   a
  r
   š   g
using namespace std;   a   o
  r
   N  p
class pravokutnik   e
   l
{    b
U ovom programu imamo   a
   j
   i
private: dva konstruktora.   r
  a
int a;    V
int b; Jednome je ulazni dio void 
  a
public: tipa, što znači da se u njega    k
   i
   f
pravokutnik(void) ne može unositi vrijednost   a
  r
{ tako da napišemo:    G
cout << "Stranica a:" << endl;   e
   j
cin >> a; pravokutnik p2(3,4);   n   e
  e   k
cout << "Stranica b:" << endl;    š   l
  u
  o   d
cin >> b;   n   o
  o
}    D
pravokutnik(int a1, int b1) Drugome je ulazni dio (int
a1, int b1), što znači da se u   e
   j
{    l
   t
a = a1; njega može vrijednost unositi   e
tako da napišemo:    P
b = b1;
}
pravokutnik p2(3,4);
int povrsina(void)   a
   j
   l
{   o
   P
return (a * b);
}
}; Ovdje formiramo objekt klase pravokutnik bez   a   a
vrijednosti u zagradi. U tom slučaju primijenit    d   t
  a
  r   s
će se pravokutnik(void) konstruktor.    b   k
  e
int main()    O   t
{
pravokutnik p1;    i
   t
   k
cout << "Povrsina je " << p1.povrsina() << "." << endl;   e
   j
cout << endl;    b
   O
pravokutnik p2(3,4);
cout << "Za p2(3,4) povrsina je " << p2.povrsina() << "." << endl;   -
  o   i
  r
cout << endl;   p
   i   m
system("PAUSE");    k   a
   i   r
   l
return 0; Objekt p2(3,4);  u zagradi ima dva broja, pa će se u   e  g
   V
} tom slučaju primijeniti pravokutnik(int a1, int b1)     e
   j
konstruktor. U tom slučaju površina će se izračunati   n
  a   a
množenjem brojeva 3 i 4, bez unosa tipkovnicom.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 279


 

Objekti

Nasljeđivanje

#include <cstdlib>
#include <iostream>

using namespace std;

class kvadrat Klasa kvadrat napisana je na


{
uobičajeni način.
protected:
int br;
public:
void unos (void)
{ Klasa kub  napisana je na način 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 nasljeđuje
}; varijable i metode klase kvadrat. Da-
class kub : public kvadrat kle klasa kub  može koristiti metodu
{ unos , iako je ona definirana u klasi
public: kvadrat .
int izracun(void)
{
return (br * br * br); Objekt objekt2   klase kub može koristiti me-
} todu unos koja se nalazi u klasi kvadrat  kao
}; da je njezina klasa. To je moguće jer je klasa
kub naslijedila klasu kvadrat .
int main()
{
kvadrat objekt1;
objekt1.unos(); Metodu izracun 
cout << "Kvadrat je " << objekt1.izracun() << endl; posjeduju obje
cout << endl; klase. U tom slu-
kub objekt2; čaju klasa kub 
objekt2.unos(); koristit će svoju
cout << "Kub je " << objekt2.izracun() << endl; ina čicu metode
cout << endl; izracun. Inačica u
system("PAUSE"); klasi kub  prekrila
return 0;  je inačicu u klasi
} kvadrat .

280 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Pogledajmo međusobnu povezanost bitnih dijelova programa u kojem je primi-   a
   S
 jenjena tehnika nasljeđivanja klasa.
   d
  o
  v
   U

class kvadrat U klasi kvadrat  definirane su    i  


dvije metode, metoda unos  i   v
  r   m
  p   a
  r
metoda izračun.    š   g
  a   o
  r
   N  p
void unos (void) Klasu kvadrat možemo koristiti
na način koji smo koristili u do-   e
   l
   b
sadašnjim primjerima.   a
   j
   i
int izracun (void)   r
  a
   V

  a
   k
   i
   f
  a
  r
Naziv nove klase. Naredba za nas-    G
Klasa koju klasa kub nasljeđuje.
ljeđivanje klase.   e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D
class kub : public kvadrat Ovako deklarirana klasa kub 
nasljeđuje sve varijable i meto-   e
   j
   l
   t
de klase kvadrat.   e
   P
int izracun (void) Klasa sadrži metodu izracun,
iako metodu izracun  posjedu-   a
   j
   l
 je i klasa kvadrat koju naslje-   o
đuje. U tom slučaju klasa kub     P
koristit će vlastitu inačicu me-
tode izracun.   a   a
kub objekt2;    d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
objekt2.unos(); Ovdje koristimo metodu unos, iako je kla-    k
  e
   j
sa kub  ne posjeduje. To je moguće jer    b
   O
klasa kub  nasljeđuje klasu kvadrat , a
klasa kvadrat  sadrži klasu unos.   -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
Iako metodu izracun  posjeduje i klasa
objekt2.izracun() kvadrat , objekt2 koristit će vlastitu inačicu
  e
   j
  n
  a   a
metode izračun.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 281


 

Veliki programi

282 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

 
   j
  a
   ž
  r

   i
   d
  a
   S

   d
  o
  v
   U

  m
   i  
  v
  r   m
  p   a
  r
   š   g

  a
  a   o
  r
   N  p

  r
  e
   l
   b
  a
   j
   i
  r
  a
   V

  g
  a
   k
   i
   f
  a
  r

  o
   G
  e
   j

  r
  n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D

  p
  e
   j
   l

 
   t
  e
   P

   i   a
   j
   l

   k
  o
   P

   i
   l
  a   a
   d   t
  a
  r   s
   b   k
   O
  e
   t

  e
   i
   t
   k
  e
   j
   b
   O

   V
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e   g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 283


 

Veliki programi

Jednostavna igra u jednoj datoteci

#include <cstdlib> Ovaj program nešto je veći 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; početnu vrijednost 290.
}
void pomak(char); Ta varijabla određuje poziciju ob-
void crtaj();  jekta koji pomičemo pomoću tip-
}; kovnice.
void objekt :: pomak(char tipka)
{
kretanje = tipka;
if (kretanje == 75) Ovdje je sadržaj 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 određuje položaj objek-
rectangle(x, 432, x+60, 438); ta koji pomičemo adekvatno će
setcolor (BLACK); se povećati ili smanjiti.
x = x + 5;
}
}
void objekt :: crtaj() Ovdje je sadržaj metode crtaj. Ona
{ crta objekt koji pomi čemo pomoću
rectangle(x, 432, x+60, 438); strelica na tipkovnici.
}

284 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Male programe možemo smjestiti u jednu datoteku. Za ve će programe to nije   a
   S
praktično rješenje. Ako je veliki program u jednoj velikoj datoteci teže je pro-
naći grešku, teže je napraviti izmjenu programa i teže je podijeliti posao iz-    d
  o
među više programera.   v
   U
U ovom poglavlju vidjet ćemo kako podijeliti jedan nešto veći program u više
   i  
datoteka. Najprije ćemo program napisati u jednoj velikoj datoteci, a zatim ga   v
  r   m
podijeliti u više manjih datoteka.   p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
Ovdje se nalazi deklaracija klase bomba. Sastoji    b
  a
se od varijabli x i y koje određuju položaj bombe na    j
   i
  r
  a
zaslonu te metode crtanje  koja crta bombu i od    V
metode brisanje koja briše bombu da bi se dobila
iluzija kretanje bombe.   a
class bomba    k
   i
   f
{   a
  r
Deklaracija sadrži konstruktor koji određuje počet-    G
private: nu poziciju bombe.
int x, y;   e
   j
public:   n   e
  e   k
   š   l
  u
bomba()   o   d
  n   o
{   o
x = (static_cast <float> (rand()) / RAND_MAX) * 620;    D
y = -((static_cast <float> (rand()) / RAND_MAX) * 480);   e
   j
   l
   t
}   e
void crtanje();    P
void brisanje();
};
void bomba :: crtanje()   a
   j
   l
Sadržaj metode crtanje.   o
{    P
rectangle (x,y,(x+20),(y+5));
}
  a   a
void bomba :: brisanje()    d   t
  a
{ Sadržaj metode brisanje.   r   s
   b   k
  e
   t
setcolor(WHITE);    O
rectangle (x,y,(x+20),(y+5));
   i
   t
setcolor(BLACK);    k
y = y + 5;   e
   j
   b
if (y > 490)    O
{   -
y = -((static_cast <float> (rand()) / RAND_MAX) * 480);   o   i
  r
x = (static_cast <float> (rand()) / RAND_MAX) * 620;   p
   i   m
  a
   k
   i   r
}    l
  e   g
}    V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 285


 

Veliki programi

Ovdje se nalazi glavni dio programa koji će koristi-


ti prije formirane klase.

Određivanja svojstva grafike, veliči-


ne grafičkog prozora, boje pozadi-
int main() ne i boje objekata.
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, ""); Formiranje varijable odgovor   u
setbkcolor(WHITE); kojoj će se nalaziti podatak o trenu-
setcolor(BLACK); tno pritisnutoj tipki.
cleardevice();

Formiranje generatora slu čajnih


brojeva kojim ćemo određivati
char odgovor = 'd'; mjesto pojavljivanja bombi, odnos-
no objekata koji se kreću odozgo
prema dolje.
srand(time(NULL));
Formiranje triju objekta klase bom-
ba, bomba1, bomba2  i bomba3.
bomba bomba1, bomba2, bomba3; To su objekti koji se kreću odozgo
prema dolje.

objekt brod; Formiranje objekata brod   klase


objekt . To je objekt koji mi pomi-
čemo pomoću tipkovnice, koristeći
strelicu u lijevo i strelicu u desno.
brod.crtaj();

Crtanje objekta koji pomičemo na


početnoj poziciji korištenjem meto-
do de crtaj.
{
bomba1.brisanje();
bomba2.brisanje();
bomba3.brisanje(); Ovdje se u svakom objektu klase
bomba  poziva metoda za brisanje
bombe na staroj poziciji.

286 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Ovdje se u svakom objektu klase   a
   S
bomba poziva metoda za crtanje bom-
be na novoj poziciji.    d
  o
  v
Neprestanim brisanjem bombe na sta-    U
roj poziciji i crtanjem na novoj stvara
   i  
se iluzija kretanja, odnosno padanja   v
  r   m
bomba1.crtanje(); bombi.   p   a
  r
   š   g
bomba2.crtanje();   a   o
  r
   N  p
bomba3.crtanje();
  e
   l
Naredba koja zaustavlja program odre-    b
  a
   j
đeno vrijeme. Služi za regulaciju brzine    i
  r
igre.   a
delay(1);    V

  a
   k
   i
   f
Ovdje ispitujemo je li pritisnuta neka   a
  r
if (kbhit()) tipka na tipkovnici.    G
{   e
   j
  n   e
  e   k
 Ako je pritisnuta neka tipka na tipkovni-    š   l
  u
  o   d
  n   o
ci, ovdje se kod pritisnute tipke sprema   o
odgovor = getch(); u varijablu odgovor .    D

  e
   j
   l
   t
  e
Ovdje se poziva metoda pomak koja će    P
brod.pomak(odgovor);
} obrisati objekt na staroj poziciji.
  a
   j
   l
  o
   P
Ovdje se poziva metoda crtaj  koja će
brod.crtaj(); nacrtati objekt na novoj poziciji.
  a   a
   d   t
  a
  r   s
   b   k
  e
   t
Izvođenje igre prekida se pritiskom na    O
} tipku k.
   i
   t
   k
Ovdje se ispituje je li pritisnuta tipka k i,   e
   j
   b
ako je pritisnuta, izvođenje igre se zau-    O
while (odgovor != 'k'); stavlja.   -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
return 0; Nemojmo zaboraviti da sva četiri dijela   e   g
   V
} programa moraju biti unijeta u našu pro-   e
   j
gramsku okolinu da bismo mogli pokre-   n
  a   a
nuti program.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 287


 

Veliki programi

Jednostavna igra u više datoteka

Pogledajmo sada kako ćemo prethodni program


raspodijeliti u više datoteka.

Otvorimo novi projekt na uobi čajen način.

Prije toga otvorimo praznu mapu u koju ćemo


spremiti novi projekt.

Izaberemo Console Application.

288 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S

   d
  o
  v
   U
Izaberemo Postavke projekta .    i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
  a
   j
   i
  r
  a
   V

  a
   k
   i
   f
  a
  r
   G
  e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D

  e
   j
   l
   t
  e
   P

  a
   j
   l
  o
   P

  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
U Parameters unesemo -lbgi -lgdi32    e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e   g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 289


 

Veliki programi

1 - Desni klik na naziv pro-


 jekta. U našem slučaju je
to Projekt1 .

2 - Klik na Novo.

Otvorit će se nova datoteka


pod nazivom Neimenovano1 .

290 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S
1 - Desni klik na Neimenovano1 .
   d
  o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
  a
   j
   i
  r
  a
   V

2 - Klik na Preimenuj datoteku .   a


   k
   i
   f
  a
  r
   G
  e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
   D

  e
   j
   l
   t
  e
   P

  a
   j
   l
  o
Datoteku preimenujemo u bom-    P
ba.cpp  i kliknemo na OK.
  a   a
   d   t
  a
  r   s
   b   k
  e
   O   t

   i
   t
   k
  e
   j
   b
   O
  -
  o   i
  r
  p
   i   m
  a
   k
   i   r
   l
  e   g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 291


 

Veliki programi

Na taj način formirali smo


datoteku bomba.cpp.

Na sličan način formirat ćemo datoteke:

- bomba.h 
- objekt.cpp  
- objekt.h 

292 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
U datoteku bomba.cpp spremimo me-    S
tode klase bomba;  metodu crtanje  i
   d
metodu brisanje.   o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
  a
   j
   i
  r
  a
   V

  a
   k
   i
   f
  a
  r
   G

Ovaj dio isti je kao u programu koji   e


   j
  n   e
se nalazi u jednoj datoteci.   e   k
   š   l
  u
  o   d
  n   o
Razlika je u tome što su dodane   o
Ovom naredbom uključuje se    D
biblioteka grafičkih naredbi. dvije include naredbe.
  e
   j
   l
   t
  e
   P
Ovom naredbom uključuje se
#include <winbgim.h> datoteka bomba.h u kojoj se
#include "bomba.h" nalazi deklaracija klase bom-   a
   j
   l
ba.   o
   P
void bomba :: crtanje()
{ Ovdje uključujmo datoteku u
rectangle (x,y,(x+20),(y+5)); kojoj se nalazi deklaracija kla-   a   a
   d   t
} se čije metode ovdje definira-   a
  r   s
mo.    b   k
  e
void bomba :: brisanje()    O   t
{
   i
   t
setcolor(WHITE);    k
rectangle (x,y,(x+20),(y+5));   e
   j
Ovaj dio programa isti je kao i u    b
setcolor(BLACK); prethodnoj inačici.    O
y = y + 5;   -
if (y > 490)   o   i
  r
{   p
   i   m
  a
   k
   i   r
y = -((static_cast <float> (rand()) / RAND_MAX) * 480);    l
  e   g
x = (static_cast <float> (rand()) / RAND_MAX) * 620;    V
}   e
   j
  n
}   a   a
   d
  m
   i   o
   ž   k
  a
   S

PRO - MIL 293


 

Veliki programi

U datoteku bomba.h spremimo


deklaraciju klase bomba.

Ovo je dio programa koji se u ovoj ina čici razli-


kuje od inačice 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 počinje nared-
bom #ifndef .
#endif

294 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
  a
   S
U datoteku objekt.cpp  spremimo
metode klase bomba; metodu    d
pomak i metodu crtaj .   o
  v
   U

   i  
  v
  r   m
  p   a
  r
   š   g
  a   o
  r
   N  p

  e
   l
   b
  a
   j
   i
  r
  a
   V

  a
   k
   i
Naredbama #include    f
  a
  r
uključimo grafičku biblio-    G
teku winbgim.h i dato-
teku objekt.h u kojoj se   e
   j
  n   e
nalazi deklaracija klase   e   k
   š   l
  u
objekt .   o   d
#include <winbgim.h>   n   o
  o
#include "objekt.h"    D

Kad bi se deklaracija klase   e


   j
void objekt :: pomak(char tipka)    l
   t
{ nalazila u drugačije nazvanoj   e
   P
kretanje = tipka; datoteci, npr. datoteci na-
ziv.h, morali bismo napisati:
if (kretanje == 75)
{   a
   j
   l
#include "naziv.h"   o
setcolor (WHITE);    P
rectangle(x, 432, x+60, 438);
setcolor (BLACK); Naziv datoteka možemo birati,
x = x - 5; a nastavak h je obvezan. Naš   a   a
   d   t
} program naredbom:   a
  r   s
   b   k
  e
if (kretanje == 77)    O   t
#include <winbgim.h>
{
setcolor (WHITE);    i
   t
rectangle(x, 432, x+60, 438); uključuje samo grafičku biblio-    k
  e
   j
setcolor (BLACK); teku jer druge biblioteke ne    b
koristimo. Da npr. nešto raču-    O
x = x + 5;
} namo morali bismo nared-   -
  o   i
  r
} bom:   p
   i   m
  a
void objekt :: crtaj()    k
   i   r
   l
{ #include <cmath>   e   g
   V
rectangle(x, 432, x+60, 438);   e
   j
} uključiti i matematičku biblio-   n
  a   a
teku.   m    d
  o
   i
   ž   k
  a
   S

PRO - MIL 295


 

Veliki programi

U datoteku objekt.h unosimo


deklaraciju klase objekt .

I ova deklaracija klase započinje naredbom


#ifndef   i naredbom #define iza kojih se na-
lazi naziv datoteke u kojoj je deklaracija kla-
se.
#ifndef OBJEKT_H
#define OBJEKT_H Budući da se deklaracija klase objekt nalazi
u datoteci objekt.h   iza naredbe #ifndef   i
class objekt naredbe #define, piše se OBJEKT_H.
{
private: Kad bi se deklaracija klase nalazila npr. u
int x; datoteci klasa.h, ovaj dio imao bi oblik:
char kretanje;
public: #ifndef KLASA_H
objekt() #define KLASA_H
{
x = 290;
}
void pomak(char);
void crtaj();
};
Naredbu #endif pisat ćemo na kraju svake
#endif datoteke koja počinje naredbom #ifndef .

296 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Glavni program se u ovoj #include <cstdlib>   a
   S
inačici razlikuje od inačice #include <iostream>
koja se cijela nalazi u jednoj #include <winbgim.h>    d
datoteci po tome što u ovoj   o
#include <ctime>   v
inačici moramo osim:    U

#include <cstdlib>    i  


using namespace std;   v
  r   m
#include <iostream>   p   a
  r
   š   g
#include <winbgim.h> #include "objekt.h"   a   o
  r
   N  p
#include "bomba.h"
dodati i naredbe:   e
   l
   b
int main()   a
   j
   i
#include "objekt.h"   r
{   a
#include "bomba.h" int gdriver = 9;    V
int gmode = 2;   a
kojima se u program uklju- initgraph(&gdriver, &gmode, "");    k
   i
   f
čuju datoteke koje sadrže setbkcolor(WHITE);   a
  r
deklaracije klase objekt  i setcolor(BLACK);    G
klase bomba. cleardevice();   e
   j
char odgovor = 'd';   n   e
  e   k
srand(time(NULL));    š   l
  u
  o   d
  n   o
Glavni program nalazi se bomba bomba1, bomba2, bomba3;   o
u datoteci mani.cpp . objekt brod;    D
brod.crtaj();   e
   j
   l
do    t
  e
{    P
bomba1.brisanje();
bomba2.brisanje();
bomba3.brisanje();   a
   j
   l
  o
bomba1.crtanje();    P
bomba2.crtanje();
bomba3.crtanje();
  a   a
delay(2);    d   t
  a
  r   s
if (kbhit())    b   k
  e
{    O   t
odgovor = getch();
brod.pomak(odgovor);    i
   t
   k
}   e
   j
   b
brod.crtaj();    O
}   -
while (odgovor != 'k');   o   i
  r
return 0;   p
   i   m
  a
   k
   i   r
}    l
  e   g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 297


 

Veliki programi

Rezultat izvođenja
našeg programa iz-
gledat će otprilike
ovako.

Ovo su “bombe” koje


se kreću 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 prevođenja i pok-


retanja ovog programa program-
ska okolina će nas upozoriti da
 je došlo do pretvaranja varijable
float tipa u varijablu int tipa.

Upozorenje ćemo zanemariti,


budući da to nije greška, već 
smo to učinili namjerno prilikom
generiranja slučajnog broja.

Prilikom sljedećeg prevođenja i


pokretanja programa ovo upozo-
renje se više neće pojavljivati.

298 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
main.cpp   a
   S
U ovom shematskom prika-
using namespace std; zu našeg programa može-    d
  o
mo vidjeti logiku po kojoj se   v
   U
#include "objekt.h" program podijeljen u više
datoteka povezuje u jednu    i  
#include "bomba.h" cjelinu.   v
  r   m
  p   a
  r
   š   g
int main() Koristeći ovu logiku, može-   a   o
  r
   N  p
{ mo daleko veći program
GLAVNI PROGRAM; razdijeliti na veći broj dato-   e
   l
   b
} teka.   a
   j
   i
  r
  a
   V

  a
   k
   i
   f
objekt.h bomba.h   a
  r
   G
#ifndef OBJEKT_H #ifndef BOMBA_H   e
   j
  n   e
#define OBJEKT_H #define BOMBA_H   e   k
   š   l
  u
  o   d
  n   o
class objekt class bomba   o
   D
{ {
  e
   j
   l
   t
DEKLARACIJA KLASE; DEKLARACIJA KLASE;   e
   P
}; };
  a
   j
#endif #endif    l
  o
   P

  a   a
   d   t
objekt.cpp bomba.cpp   a
  r   s
   b   k
  e
   O   t

#include "objekt.h" #include "bomba.h"    i


   t
   k
  e
   j
void objekt :: pomak(char tipka) void bomba :: crtanje()    b
{ {    O
SADRŽAJ OBJEKTA; SADRŽAJ OBJEKTA;   -
  o   i
} }   r
  p
   i   m
  a
   k
   i   r
   l
void objekt :: crtaj() void bomba :: brisanje()   e   g
{ {    V
  e
   j
SADRŽAJ OBJEKTA; SADRŽAJ OBJEKTA;   n
} }   a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 299


 

Sažimanje koda

300 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d

  a
  a
   S

   d
  o

   d
  v
   U

   i  
  v
  r   m

  o
  p   a
  r
   š   g
  a   o
  r
   N  p

   k
  e
   l
   b
  a
   j
   i
  r
  a
   V

  a

  e
   k
   i
   f
  a

   j
  r
   G
  e
   j
  n   e
  e   k

  n
   š   l
  u
  o   d
  n   o
  o
   D

  a
  e
   j
   l
   t
  e
   P

  a
   j

  m
   l
  o
   P

   i   a   a


   d   t

   ž
  a
  r   s
   b   k
  e
   O   t

   i
   t

  a
   k
  e
   j
   b
   O
  -
  o   i

   S
  r
  p
   i   m
  a
   k
   i   r
   l
  e  g
   V
  e
   j
  n
  a   a
  m    d
   i   o
   ž   k
  a
   S

PRO - MIL 301


 

Sažimanje koda

Primjeri sažetog pisanja koda

Do sada smo, osim u nekoliko izuzetaka, programe pisali na “školski” način


trudeći se da naredbe prije svega budu što razumljivije.

Mnoge naredbe mogu se, osim na na čin koji smo do sada vidjeli, pisati na na-
čin koji skraćuje pisanje, ponekad čak ubrzava rad programa, ali koji je po čet-
nicima možda nešto manje razumljiv.

Došavši do kraja knjige, više nismo početnici i vrijeme je da se upoznamo s


nekim načinima skraćenog pisanja programa.

Obje inačice progra-


ma radit će potpuno
isti pisao, zbrojit će
dva broja.

#include <cstdlib>
#include <iostream>
U slučaju da formi-
#include <cstdlib> ramo više varijabli using namespace std;
#include <iostream> istog tipa, ne mo-
ramo svaku staviti int main()
using namespace std; u zasebni red, ne- {
go ih možemo for- int a, b, c;
int main() mirati u jednom cin >> a;
{ redu. cin >> b;
int a; c = a + b;
int b; Dakle umjesto: cout << c << endl;
int c; system("PAUSE");
cin >> a; int a; return 0;
cin >> b; int b; }
c = a + b; int c;
cout << c << endl;
system("PAUSE"); možemo napisati:
return 0;
} int a, b, c;

302 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
Umjesto:   a
#include <cstdlib>    S
#include <iostream> #include <cstdlib>
int a; #include <iostream>    d
  o
using namespace std; a = 12;   v
using namespace std;    U

int main() možemo napisa-


   i  
{ ti: int main()   v
  r   m
{   p   a
  r
int a;    š   g
a = 12; int a = 12; int a = 12;   a   o
  r
   N  p
cout << a << endl; cout << a << endl;
system("PAUSE"); system("PAUSE");   e
   l
return 0;    b
return 0;   a
   j
   i
} }   r
  a
   V

  a
   k
   i
   f
U if   naredbi mogu se   a
  r
#include <cstdlib>    G
izbaciti vitičaste zagra- #include <iostream>
de, ako se unutar viti-   e
   j
častih zagrada nalazi   n   e
using namespace std;   e   k
 jedan red.    š   l
  u
  o   d
  n   o
int main()   o
 Ako se nalazi više re-    D
{
dova, uporaba vitičas- int a;   e
   j
   l
tih zagrada je obvezna. cin >> a;    t
  e
   P
if (a > 12)
{
cout << "Broj je veci od 12." << endl;   a
   j
   l
}   o
#include <cstdlib> else    P
#include <iostream> {
cout << "Broj nije veci od 12." << endl;   a   a
using namespace std; }    d   t
  a
  r   s
cout << a << endl;    b   k
  e
int main()    O   t
system("PAUSE");
{ return 0;
int a;    i
   t
}    k
cin >> a;   e
   j
   b
if (a > 12)    O
cout << "Broj je veci od 12." << endl;
  -
else   o   i
  r
cout << "Broj nije veci od 12." << endl;   p
   i   m
  a
cout << a << endl; Ova inačica prog-    k
   i   r
   l
rama radit će jed-   e  g
system("PAUSE");    V
return 0; nako kao i gornja   e
   j
} inačica s vitičastim   n
  a   a
zagradama.   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 303


 

Sažimanje koda

Ovo je program za vađe-


#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; vitičaste zagrade može-
cin >> a; mo izbaciti jer se unutar
if (a < 0) vitičastih zagrada nalazi
{ samo jedan red.
cout << "Broj je negativan." << endl;
} U ovom dijelu programa
else vitičaste zagrade ne mo-
{ žemo izbaciti jer se unu-
b = sqrt(a); tar vitičastih zagrada na-
cout << b << endl; lazi više 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 vitičaste
b = sqrt(a); zagrade izbacili, ne bismo dobili
cout << b << endl; obavijest o greški, ali program
system("PAUSE"); ne bi ispravno radio, ako bismo
return 0; pokušali izračunati kvadratni
} korijen iz negativnog broja.

304 PRO - MIL


 

C++ programiranje za apsolutne po č etnike

   j
  a
   ž
  r
   d
#include <cstdlib> I u petljama se može izostaviti vitičasta zag-   a
   S
#include <iostream> rada ako se unutar vitičaste zagrade nalazi
samo jedan red.    d
  o
using namespace std;   v
   U

int main() #include <cstdlib>    i  


{   v
  r   m
#include <iostream>   p   a
  r
int x;    š   g
for (x=10; x<17; x=x+1)   a   o
  r
using namespace std;    N  p
{
cout << x << endl;   e
   l
int main()    b
} {   a
   j
   i
  r
system("PAUSE"); int x;   a
return 0;    V
for (x=10; x<17; x=x+1)
} cout << x << endl;   a
   k
   i
U ovoj inačici programa system("PAUSE");    f
  a
return 0;   r
unutar for   petlje ne koriste    G
se vitičaste zagrade. }
  e
   j
  n   e
  e   k
   š   l
  u
  o   d
  n   o
  o
#include <cstdlib> Umjesto x=x+1  možemo    D
#include <iostream> napisati:   e
   j
   l
   t
using namespace std; x++   e
   P
int main() Pokrenemo li bilo koju od
{ ove tri inačice programa,   a
   j
   l
int x; dobit ćemo jednak rezultat.   o
for (x=10; x<17; x++)    P
cout << x << endl;
system("PAUSE");   a   a
   d   t
return 0;   a
  r   s
}    b   k
  e
   O   t

   i
   t
   k
  e
   j
Na sličan način možemo    b
umjesto:    O
  -
  o   i
  r
x = x - 1;   p
   i   m
  a
   k
   i   r
   l
napisati:   e  g
   V
  e
   j
x-- (Dva minusa, bez raz-   n
  a   a
maka.)   m    d
   i   o
   ž   k
  a
   S

PRO - MIL 305


 

Sažimanje koda

Umjesto x=x+5; možemo 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 možemo napisati x-=5.

Umjesto #include <cstdlib>


#include <iostream>
if (x != 0)
using namespace std;
možemo 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 prilično je dvojbena jer u
system("PAUSE"); nekim slučajevima zbog uštede
return 0;  jednog znaka narušavamo čitlji-
} vost programa.

306 PRO - MIL

You might also like