You are on page 1of 306

C++ programiranje za apsolutne poetnike

programiranje
za apsolutne poetnike

PRO - MIL

Naslov knjige:

C++ programiranje za apsolutne poetnike

Autor:

Jakopec Ratko, ing

Naklada:

PRO-MIL d.o.o. za nakladu, informatiku i edukaciju, Varadin,


R. Bokovia 20, 42000 Varadin, tel: 042 / 203 981, 233 971,
fax: 042 / 203 991, www.pro-mil.hr

Urednik:

Nenad Milija, dipl. inf.

Lektura:

Ruica Greguri, dipl. uitelj

Korektura:

PRO-MIL d.o.o.

Recenzija:

Igor Kos, dipl. inf.

Naslovnica:

Ratko Jakopec, ing., Nenad Milija, dipl. inf.

Tiskara:

Tiskara Varteks, Varadin

ISBN:

953-7156-19-2

Copyright:

PRO-MIL d.o.o. za nakladu, informatiku i edukaciju, Varadin

Sva prava pridrana. Nije dozvoljeno kopirati ili reproducirati ni jedan dio knjige u bilo kojem obliku bez
prethodne pismene dozvole nakladnika.
Sve o emu smo pisali u ovoj knjizi, uspjeno je primijenjeno na raunalima, stoga ne snosimo nikakvu
odgovornost za eventualnu tetu koja bi se mogla povezati s uputama iz knjige.
U ovoj knjizi objanjen je program Dev C++, autora: Colin Laplace, Mike Berg, Hongli Lai. Program se
nalazi na priloenom CD-u, slobodan je za objavljivanje i umnoavanje.
Pojmovi za koje se zna da su zatitni znakovi napisani su poetnim velikim slovom. Nakladnik ne moe
provjeriti tonost niti eli utjecati na vjerodostojnost zatitnih znakova.

PRO - MIL

Saimanje Veliki programi


koda

Objekti

PRO - MIL
Obrada
teksta

Polja

Petlje

Donoenje Grafika
odluke

Varijable

Sadraj

Na prvi
program

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

Sadraj

Uvod

to je to program, a to programiranje?

Je li teko nauiti programirati?

Zato ba C++?

Zato ba Dev-C++?

10

Kako se ui programiranje?

10

Kako dalje nakon ove knjige?

10

Instaliranje Dev-C++ programskog okruenja

12

Formiranje radne mape

20

Instalacija grafike

22

Na prvi program

25

Formiranje projekta

26

Mogui problem

32

Pokretanje programa

34

Greka u programu

38

Analiza programa

40

Gruba skica programa

42

Varijacije programa

43

Distribucija programa

47

Uitavanje spremljenog projekta

49

Varijable

53

Osnovne raunske operacije

54

Varijable

58

PRO - MIL

71

Grafika

75

Podeavanje programskog okruenja

76

Na prvi grafiki program

77

Analiza programa

78

Varijacije programa

83

Crtanje pravokutnika

86

Crtanje crte

88

Crtanje toke

95

Ispis teksta

97

Donoenje odluke

103

Funkcije

104

Donoenje odluke

108

Switch naredba

126

Petlje

129

For petlja

130

Do while petlja

168

Generator sluajnih brojeva

170

Koritenje sluajnih brojeva

179

PRO - MIL

Uvod

Nekoliko primjera programa

Na prvi
program

69

Varijable

Uljepavanje programa

Donoenje Grafika
odluke

67

Petlje

Problem dijeljenja

Polja

63

Obrada
teksta

Varijacije programa

Objekti

60

Saimanje Veliki programi


koda

Analiza programa

Sadraj

C++ programiranje za apsolutne poetnike

Sadraj

Polja

183

Jednodimenzionalna polja

184

Spremanje brojeva u datoteku

204

Dvodimenzionalna polja

212

Obrada teksta

215

String objekti

216

Polje char tipa

223

Obrada string objekata

234

Premjetanje teksta iz char polja u string

246

Premjetanje teksta iz stringa u char polje

247

Spremanje teksta u datoteku

248

Objekti

251

Jednostavan primjer klase i objekata

252

Sloeniji primjeri klasa i objekata

262

Komunikacija s metodama

265

Razdvajanje deklaracije i definicije

276

Uporaba konstruktora

278

Nasljeivanje

280

Veliki program

283

Jednostavna igra u jednoj datoteci

284

Jednostavna igra u vie datoteka

288

Saimanje koda

301

Primjeri saetog pisanja koda

302

PRO - MIL

Saimanje Veliki programi


koda

Objekti

Obrada
teksta

PRO - MIL
Polja

Petlje

Donoenje Grafika
odluke

Uvod

Varijable

Na prvi
program

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

Uvod

to je to program, a to programiranje?
Program je niz uputa raunalu o tome kako da napravi odreeni posao. Posao
moe bit voenje skladita, izraun plae radnicima ili pretvaranje slike u boji u
crno bijelu sliku. Programiranje je pisanje tih uputa. Za pisanje uputa odnosno
programa koriste se odreene naredbe. Skup naredbi koje ine cjelinu naziva se
programski jezik.
Budui da su naredbe pisane naim jezikom, a raunalo razumije samo nule i
jedinice, program se nakon pisanja mora prevesti u oblik razumljiv raunalu. Taj
postupak se naziva prevoenje. Na engleskom jeziku naziva se Compile. Hrvatski programeri taj postupak obino nazivaju kompajliranje. U programu koji emo
mi koristiti, postupak prevoenja naredbi u oblik razumljiv raunalu naziva se
kompajlaj, a ovoj knjizi koristit emo izraz prevoenje.
Da bismo uspjeno programirali, oigledno je da nam treba program u kojem emo program pisati i program koji e napisani program prevesti u oblik razumljiv
raunalu. U dananje vrijeme sve te funkcije, a i mnoge dodatne objedinjene su u
jedan program koji emo u ovoj knjizi nazivati programska okolina. On e nam
omoguiti pisanje programa, prevoenje programa u oblik razumljiv raunalu,
traenje greaka i pokretanje programa. Postoji cijeli niz takvih programa, a mi
emo koristiti Dev-C++.

Je li teko nauiti programirati?


Da, teko je. Ako mislimo da emo uzeti nekakav programski jezik i da emo za
par dana pisati programe, kao to moemo uzeti FrontPage pa za par dana napraviti WEB stranicu, od toga nee biti nita.
Neki, ako ne i veina profesionalnih uitelja programiranja, zapoet e poduku nekakvim algoritmima i time kako je to sve jednostavno jer mi ionako mnoge stvari
radimo po algoritmu. Npr. ako kuhamo kavu, prvo stavljamo vodu u posudu, zatim
ekamo da zavri, pa onda stavljamo ... da sad ne kompliciramo, mi smo i do sada
stvari radili po nekakvom algoritmu, a programiranje je neto slino.
To su gluposti. Moda i jesmo do sada stvari radili po odreenom algoritmu, ali
nismo o tome na taj nain razmiljali, nemamo um posloen na taj nain. Osim toga u programiranju se upotrebljavaju malo drugaiji algoritmi nego to su algoritmi
za kuhanje kave.
Programiranje je zapravo potpuno drugaiji nain razmiljanja od onog na koji smo
do sada navikli i trebat e godine rada da ponemo razmiljati na taj nain. Cijeli
problem dodatno komplicira injenica da su dananja raunala vrlo sloeni sustavi i
treba nam puno vremena da barem priblino ponemo shvaati kako raunala funkcioniraju.

PRO - MIL

U tom sluaju lako dolazimo do programa, lako dolazimo do literature, puno ljudi
se razumije u to pa moemo dobiti savjet. Konano, ako traimo posao u smislu
da programerska ekipa treba jo jednoga (jednu), vea je vjerojatnost da oni ve
koriste sustav s kojim znamo raditi.
Bjeite od genijalnih raunala, revolucionarnih sustava i drugaijih razmiljanja.
Zamislite koliko je ugodno ivjeti u malom gradu i biti jedini vlasnik takvog genijalnog sustava. Nema literature, nema programa, nema savjeta i kad konano
savladamo rad u takvom sustavu nitko nas ne treba jer svi rade na nekim drugim
sustavima.
Iako po mom sudu C++ ima niz prednosti u odnosu na druge jezike, nemojmo se
suvie optereivati time koji emo jezik zapoeti uiti i koju inaicu tog jezika.
Glavni problem je nauiti jedan jezik, a kad nam to uspije, ako se ukae potreba,
lako emo prijei na drugi. Da bi netko tko nikad nije programirao nauio jedan
jezik, treba mu do tri godine, ali kad ve jedan jezik nauimo, da bismo nauili
drugi, dovoljno nam je do tri mjeseca. Nauivi jedan jezik, poinjemo razumijevati kako se programira, a to je najtee i najdulje traje. Najlake je nauiti nove
naredbe ili bolje reeno novi nain pisanja slinih naredbi u drugom jeziku.

PRO - MIL

Uvod
Na prvi
program
Varijable
Donoenje Grafika
odluke
Petlje

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

Polja

Zato ba C++?

Obrada
teksta

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

Objekti

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

Saimanje Veliki programi


koda

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

Sadraj

C++ programiranje za apsolutne poetnike

Uvod

Zato ba Dev-C++?
Programsko okruenje koje emo koristiti za pisanje naih programa naziva se
Dev-C++. Zato sam odabrao upravo ovo okruenje? Zato to je besplatno, ugodnog izgleda, na hrvatskom jeziku i malih dimenzija. Zbog toga to je malih dimenzija, zadovoljavajue e raditi i na starijim raunalima, a nove inaice mogue je u
prihvatljivom vremenu uitati s interneta i pomou spore internetske veze.
Iako je taj program relativno malih dimenzija, posjeduje sve osobine koje su potrebne za uenje programiranja, a mogao bi posluiti i za manje sloeno profesionalno programiranje.

Kako se ui programiranje?
Programiranje se ne ui tako da se naui sadraj neke knjige, a zatim se eventualno neto radi na raunalu. Programiranje se ui tako da se ukljui raunalo, otvori
knjiga, ita sadraj knjige i istovremeno prikazano u knjizi nastojimo napraviti na
raunalu.
Nakon to smo odreenu naredbu shvatili, nismo zavrili s uenjem. Nakon toga
treba napraviti nekoliko desetaka manjih programa u kojima emo tu naredbu koristiti da bismo stekli rutinu u njenom koritenju.

Kako dalje nakon ove knjige?


Ova knjiga nije zamiljena kao knjiga iz koje emo saznati sve tajne programiranja,
nego kao knjiga koja bi ljudima koji nikad nisu programirali i nita o tome na znaju
trebala pomoi da zaponu uenje programiranja.
Postoje velike i debele knjige s puno sitnog teksta koje na 1000 stranica objanjavaju sve tajne pojedinih programskih jezika. Takve knjige su korisne i nabavite ih
ako vam se ukae prilika, ali takve knjige nisu pogodne za poetnike. Zbog mnotva detalja i turih opisa, poetnik e se u njima jako teko snai.
Nakon to prouite ovu knjigu, imat ete dovoljno predznanja da moete pratiti knjige koje detaljno govore o programskom jeziku C++. (Ili nekom drugom programskom jeziku.)
Kakve knjige biste trebali nabaviti i s ime biste se trebali baviti nakon to prouite
ovu knjigu i elite dalje napredovati?
- Svakako neku knjigu koja na barem 800 stanica detaljno opisuje programski jezik
koji elite nauiti.
- Budete li odluili koristiti neko sloenije programsko okruenje za pisanje progra-

10

PRO - MIL

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


grafiku, za obradu zvuka ili neto slino, pa je dobro nabaviti knjigu koja govori o
toj problematici.
Dakle, kad se detaljno upoznamo s nekim programskim jezikom, kad upoznamo
odreeni operacijski sustav, kad se upoznamo s programerskim tehnikama i odreenim programerskim podrujem, tek emo onda biti sposobni pisati kvalitetne
komercijalne programe, odnosno programirati za novce.
Zbog toga sam na poetku rekao da nam treba dvije do tri godine da nauimo
programirati.

Uvod
Na prvi
program
Saimanje Veliki programi
koda

Objekti

Obrada
teksta

Polja

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

Varijable

- Dobro je nabaviti i knjige koje govore openito o programiranju i o nainima


rjeavanja pojedinih programskih problema. elimo li napisati program koji sortira odreenu grupu podataka na odreeni nain, ne moramo ga izmiljati. Drugi
ljudi prije nas susreli su se s problemom sortiranja i o tom problemu napisali knjige u kojima iznose optimalna rjeenja za pojedine probleme.

Donoenje Grafika
odluke

- Programi rade unutar nekog operacijskog sustava, najee Windowsa ili


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

Petlje

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

Sadraj

C++ programiranje za apsolutne poetnike

PRO - MIL

11

Uvod

Instaliranje Dev-C++ programskog okruenja


Na CD-u priloenom uz knjigu
nalazi se program Dev-C++.
Ovaj izbornik trebao bi se pokrenuti nakon umetanja CD-a
u raunalo. Ako se to ne dogodi, pokrenite ga sami dvostrukim klikom na program meni.exe koji se nalazi na CD-ju.
Instalaciju pokreemo klikom
na Program.

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


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

Ako je Dev-C++ program ve instaliran, zaustavit emo postupak instalacije i deinstalirati staru inaicu programa.
Ako Dev-C++ nije instaliran na naem raunalu, klikom na U
redu nastavljamo instalaciju.

12

PRO - MIL

Saimanje Veliki programi


koda

Objekti

Klikom na Prihvaam izjavljujemo sa se slaemo s uvjetima


koritenja programa.

Obrada
teksta

Polja

Petlje

2 - Klikom na OK nastavljamo
instalaciju.

Donoenje Grafika
odluke

Varijable

Na prvi
program

1 - Izaberemo jezik.

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

PRO - MIL

13

Uvod

Ovdje bismo mogli izabrati komponente


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

1 - Ovdje moemo izabrati mapu u koju e se instalirati DevC++.

2 - Instaliranje nastavljamo
klikom na Instaliraj.

14

PRO - MIL

Sadraj

C++ programiranje za apsolutne poetnike

Saimanje Veliki programi


koda

Objekti

Obrada
teksta

Kliknemo na Da.

Polja

Petlje

Donoenje Grafika
odluke

Varijable

Na prvi
program

Uvod

Nakon klika na Instaliraj zapoet


e instaliranje programa.

PRO - MIL

15

Uvod

Kliknemo na Kraj.

Kliknemo na U redu.

16

PRO - MIL

Klik na Next.

PRO - MIL

Na prvi
program
Saimanje Veliki programi
koda

Objekti

Obrada
teksta

Polja

Petlje

3 - Klik na Next.

Varijable

2 - Izaberemo Use XP
Theme.

Donoenje Grafika
odluke

1 - Izaberemo
hrvatski jezik.

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

17

Uvod

Klik na Next.

Nakon klika na Next zapoet e instaliranje nekih dodatnih funkcija. Na sporijim raunalima taj proces moe
trajati i do pola sata, a na brima nekoliko minuta.

18

PRO - MIL

Saimanje Veliki programi


koda

Objekti

Obrada
teksta

Klikom ovdje ugasimo ovaj prozor.


Time je instaliranje Dev-C++ programa zavreno.

Polja

Petlje

Na kraju klik na OK.

Donoenje Grafika
odluke

Varijable

Na prvi
program

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

PRO - MIL

19

Uvod

Formiranje radne mape


Iako to nije nuno, dobro je formirati praznu
mapu u koju emo spremati programe.
Tu mapu moemo otvoriti na bilo kojem
disku na kojem imamo mjesta i moemo je
nazvati prema vlastitom izboru.
Ja u na C: disku otvoriti mapu koju u nazvati Radni.

Klik na disk na kojem elimo otvoriti novu


mapu, u mojem sluaju na C: disk.

Kliknemo na Datoteka, zatim na Novo


i konano na Mapa.

20

PRO - MIL

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


biti formirana mapa pod nazivom Radni.

PRO - MIL

Saimanje Veliki programi


koda

Objekti

Obrada
teksta

Polja

Petlje

Unesemo naziv mape, u


mojem sluaju Radni.

Donoenje Grafika
odluke

Varijable

Na prvi
program

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

21

Uvod

Instalacija grafike
Da bi Dev-C++ mogao koristiti naredbe za rad s grafikom,
runo moramo dodati nekoliko datoteka.

Nakon instaliranja programa


Dev-C++, na disku C: u mapi Dev-Cpp nalazit e se
mapa include i mapa lib.

Na CD-u priloenom uz knjigu u mapi Grafika nalazi se


mapa include i mapa lib.

22

PRO - MIL

kopiramo u mapu include na C:

Bude li potekoa s instaliranjem programa, pogledajmo filmove na kojima moemo vidjeti cijeli tijek instalacije, a nalaze
se na priloenom CD-u.

PRO - MIL

Objekti

mo u mapu lib na C: disku.

Saimanje Veliki programi


koda

Sadraj mape lib na CD-u kopira-

Obrada
teksta

Polja

Petlje

disku.

Donoenje Grafika
odluke

Sadraj mape include na CD-u

Varijable

Na prvi
program

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

23

Na prvi program

24

PRO - MIL

PRO - MIL

Saimanje Veliki programi


koda

Objekti

Obrada
teksta

Polja

Petlje

Donoenje Grafika
odluke

Varijable

Na prvi
program

Uvod

Sadraj

Na prvi program
C++ programiranje za apsolutne poetnike

25

Na prvi program

Formiranje projekta

Prilikom svakog pokretanja


programa pojavit e se prozor sa sugestijama koje e
nam olakati koritenje programa.

Kliknemo ovdje da bismo


ugasili taj prozor.

1 - Kliknemo na Datoteka.

Program je dio vee cjeline koja


se naziva projekt. Zbog toga
emo pisanje programa zapoeti formiranjem novog projekta.
Pogledajmo kako emo formirati novi projekt.

3 - Izaberemo Projekt.

2 - Izaberemo Nova.

26

PRO - MIL

Console Application ne izvodi se unutar klasinog windows prozora,


ve unutar pojednostavljene verzije s crnom pozadinom. Nedostatak ovog
naina pisanja programa jest to je program veoma ruan i to taj oblik
prozora ima manje mogunosti od klasinog prozora. Jedina prednost mu
je to je jednostavan, pa je prikladniji za poetnike.

1 - Izaberemo Basic.

5 - Biranje zavravamo
klikom na OK.

PRO - MIL

4 - Ovdje odredimo da
e na projekt sadravati C++ program.

Uvod
Na prvi
program
Saimanje Veliki programi
koda

Objekti

3 - Ovdje unosimo naziv projekta. Na poetku moemo


ostaviti naziv koje je predloilo
raunalo, a to je Projekt1.

Obrada
teksta

Polja

2 - Zatim Console Application.

Varijable

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

Donoenje Grafika
odluke

U emu je razlika?

Petlje

Otvorit e se novi prozor koji se naziva Novi projekt i u kojem emo izabrati tip projekta. Najvaniji tipovi su Windows Application i Console Application.

Sadraj

C++ programiranje za apsolutne poetnike

27

Na prvi program

Sada emo izabrati mapu u


koju emo spremiti na projekt.
Najbolje je da ga spremimo
u prije pripremljenu praznu
mapu.

Kliknemo ovdje.

1 - Izaberemo disk na koji emo


spremiti na projekt u prije pripremljenu praznu mapu.
U mojem sluaju to je disk C.
Kliknemo na njega.
(Na mojem raunalu disk C naziva se Podaci. Na vaem raunalu moe imati drugaije naziv.
Naziv diska nije vaan, vano je
da izaberemo onaj disk na kojem
smo prije toga pripremili prazni
prostor, kao to je opisano u uvodnom poglavlju ove knjige.)

2 - Kliknemo na Spremi.

28

PRO - MIL

4 - Klik na Otvori.

Varijable
Saimanje Veliki programi
koda

2 - Klik na Spremi.

Objekti

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


spremiti na C++ projekt.

Obrada
teksta

Polja

Petlje

3 - Pronai emo mapu Radni i kliknuti na


nju. (Ako mapu Radni niste do sada formirali, formirajte je prema uputama danim u uvodnom poglavlju.

Donoenje Grafika
odluke

2 - Sadraj ovog prozora na vaem raunalu


bit e sasvim sigurno
drugaiji nego na mojem, budui da njegov
sadraj ovisi o programima koji su instalirani
u raunalu i nainu koritenja raunala. Nemojte brinuti zbog toga.

Na prvi
program

Uvod

1 - Ovdje bi se trebala nalaziti oznaka diska na kojem


smo pripremili prazni prostor za smjetaj naeg projekta.

Sadraj

C++ programiranje za apsolutne poetnike

PRO - MIL

29

Na prvi program

Raunalo e automatski
generirati jednostavan
C++ program i time je
otvaranje projekta zavreno.

U programu bismo se lake snalazili kad bi


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

1 - Kliknemo na Alati.

2 - Kliknemo na Izgled editora.

30

PRO - MIL

PRO - MIL

Saimanje Veliki programi


koda

Vidimo da se sada ispred svakog reda u programu automatski ispisuje broj reda.

Objekti

Obrada
teksta

Polja

Petlje

3 - Kliknemo na OK.

Donoenje Grafika
odluke

Varijable

2 - Kliknemo na kvadrati ispred


opcije Brojevi linije.

Na prvi
program

Uvod

1 - Kliknemo na karticu
Prikaz.

Sadraj

C++ programiranje za apsolutne poetnike

31

Na prvi program

Mogui problem
1 - Ovo je prije spremljeni projekt.

Prilikom isprobavanja programa moe nam se


dogoditi da pokuamo u prostor za spremanje
projekta spremiti novi projekt, iako projekt pod
tim nazivom ve postoji u tom prostoru. U
istom prostoru ne moe biti vie projekta s
istim imenom.
U tom sluaju, ako elim zadrati stari projekt,
novom projektu moramo dati neki drugi naziv,
npr. Projekt2.dev.

3 - Klik na Spremi.
2 - Ovo je novi projekt. Ako elimo zadrati stari,
moramo mu promijeniti naziv. Ako stari projekt
ne elimo zadrati, ostavimo postojei naziv.

1 - Ako novi projekt


ima isti naziv kao i
stari jer stari projekt
ne elimo zadrati,
raunalo e nas upozoriti da e stari projekt biti obrisan.

2 - Klik na Yes i novi projekt bit e


formiran, a stari obrisan.

32

PRO - MIL

Sadraj

C++ programiranje za apsolutne poetnike

using namespace std;


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

Ovdje se nalazi broj nula,


a ne veliko slovo o.

PRO - MIL

Lijevu vitiastu zagradu dobit


emo tako da pritisnemo tipku
AltGr i ne putajui tu tipku,
pritisnemo tipku b.
Desnu emo dobiti tako da
pritisnemo AltGr i, ne putajui
tu tipku, pritisnemo tipku n.

Varijable
Donoenje Grafika
odluke
Petlje
Polja
Obrada
teksta

#include <cstdlib>
#include <iostream>

Na poetku e nam se esto


dogaati da umjesto toke sa
zarezom ovdje unesemo dvotoje to e uzrokovati greku
u programu.

Objekti

To emo uiniti paljivo jer i najmanja


greka moe prouzrokovati greku u
programu.

Saimanje Veliki programi


koda

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

Na prvi
program

Uvod

Unos prvog programa

33

Na prvi program

Pokretanje programa
Ve smo rekli da raunalo razumije samo nule i jedinice. Svi sadraji, muzika,
filmovi, slike itd. moraju biti prevedeni u nule i jedinice da bi ih raunalo razumjelo. Tako je i s programom.
Da bi raunalo razumjelo na program, najprije ga iz oblika koji smo upravo
napisali moramo prevesti u nule i jedinice, a tek nakon toga moemo narediti
raunalu da ga pokrene. Taj postupak prevoenja na engleskom se jeziku
naziva Compile, a prevoditelj naeg C++ programskog okruenja preveo je to
sa Kompajlaj. Mi emo u naoj knjizi za taj postupak koristiti izraz prevoenje.
U naem programskom okruenju imamo tri vane naredbe vezane uz prevoenje i pokretanje programa.

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


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

Ovo je prevedeno kao Pokreni. Ovu opciju moemo koristiti samo ako smo program ve preveli i
elimo ga jo jednom pokrenuti.

Ovo je prevedeno kao Kompajlaj i pokreni. Ve iz


naziva vidimo da je ovdje prevoenje i pokretanje
objedinjeno.
Izaberemo li ovu opciju, na program e se prevesti i odmah pokrenuti.
Prvi put emo odabrati ovu opciju.

34

PRO - MIL

Ovdje se nalazi naziv naeg programa,


main.cpp. Iako bismo taj naziv mogli
promijeniti, na poetku je najbolje da zadrimo naziv koji je predloilo raunalo.

PRO - MIL

Saimanje Veliki programi


koda

Objekti

Obrada
teksta

3 - Prevoenje i pokretanje naeg programa zapoet emo klikom na Spremi.

Polja

Mjesto na koje e raunalo spremiti na


program.

Petlje

Donoenje Grafika
odluke

Raunalo e predloiti da to bude ono isto mjesto u


koje smo spremili projekt to emo mi prihvatiti.

Varijable

2 - Otvara se prozor u kojem nas raunalo pita kamo i


pod kojim nazivom emo spremiti na program.

Na prvi
program

Uvod

1 - Klikom na Kompajlaj i pokreni zapoet emo prevoenje i


pokretanje naeg programa.

Sadraj

C++ programiranje za apsolutne poetnike

35

Na prvi program

Nakon klika na Kompajlaj i pokreni najprije e se otvoriti prozor u kojem emo moi
pratiti tijek prevoenja naeg programa u
nule i jedinice razumljive raunalu.

Nakon prevoenja program e se pokrenuti unutar ovakvog prozora. Ovaj


na program ispisuje tekst
Ovo je moj tekst.
Tekst Press any key to
continue raunalo je generiralo automatski i njime
nas obavjetava da je
dovoljno pritisnuti bilo koju tipku na tipkovnici i prozor u kojem se izvrio na
program e se zatvoriti.

36

PRO - MIL

U tom sluaju, ako elimo zadrati stari program, novom emo dati neki drugi naziv npr.
main2.cpp i kliknut emo na Spremi.
Ako stari program ne elimo sauvati, ostavit
emo novom programu naziv main.cpp i kliknut
emo na Spremi.

PRO - MIL

Obrada
teksta
Objekti

1 - Kliknemo na Yes. Stari program e


se obrisati, novi e se spremiti, a zatim
e zapoeti prevoenje i pokretanje
novog programa. Tijek prevoenja i
pokretanja programa moemo vidjeti
na prethodnoj stranici.

Saimanje Veliki programi


koda

Ako ne elimo zadrati stari program, pa smo u prethodnom koraku


kliknuli na Spremi bez da smo
mijenjali novom programu naziv,
raunalo e nas jo jednom upozoriti da e stari program biti obrisan.

Polja

Petlje

main.cpp

Uvod

u tom prostoru postoji program s istim nazivom.

Na prvi
program

raunalo predloi neki naziv programa, iako ve

Varijable

Tijekom rada moe nam se dogoditi da nam

Donoenje Grafika
odluke

Mogui problem

Sadraj

C++ programiranje za apsolutne poetnike

37

Na prvi program

Greka u programu
Gotovo je nemogue unijeti program, a da
se tijekom unosa ne pojavi greka.
Pogledajmo to e se dogoditi ako pokuamo pokrenuti program u kojem je dolo do
greke prilikom unosa.

2 - Kliknemo na Kompajlaj i pokreni.

1 - Umjesto
toke sa zarezom unesemo
dvotoje.

3 - Uoenu greku uklonimo i ponovno kliknemo na Kompajlaj i pokreni.

1 - Kad raunalo naie na


greku, prevoenje programa se zaustavlja i raunalo oznaava red u kojem je dolo do greke.

2 - Istovremeno se otvara
prozor u kojem moemo
vidjeti dodatne informacije
o uoenoj greki.
Ovdje moemo vidjeti sugestiju da umjesto dvotoja treba staviti toku sa
zarezom.

38

PRO - MIL

1 - Program pokreemo klikom na


Kompajlaj i pokreni.

PRO - MIL

Na prvi
program
Saimanje Veliki programi
koda

Objekti

Obrada
teksta

Zato imajmo na umu da je oznaavanje redova u kojim se pojavila greka samo gruba
orijentacija, a ne precizni pokazatelj.

Petlje

Kad takav program pokuamo prevesti i pokrenuti, kao pogrean bit e oznaen deveti
red, jer je u njemu greka primijeena, iako
se greka zapravo nalazi u osmom redu.

Polja

1 - Ovdje je dolo do greke jer


nismo unijeli toku sa zarezom.

Donoenje Grafika
odluke

Varijable

Oznaavanje pozicije greke prilino je nepouzdano budui da raunalo zapravo ne oznaava poziciju
greke, nego poziciju na kojoj je
greka primijeena. Pogledajmo
ovaj primjer.

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

39

Na prvi program

Analiza programa
#include <cstdlib>
#include <iostream>

Ove naredbe emo pisati na poetku svakog C++ programa. Zato? C++ organiziran je tako da su njegove naredbe organizirane u grupe ili, kako bi programeri rekli, biblioteke i na poetku programa moramo rei raunalu koje biblioteke naredbi
namjeravamo koristiti.
#include - ovo je naredba kojom na poetku programa obavjetavamo raunalo
koje biblioteke naredbi elimo koristiti.
iostream - skup naredbi koje nam omoguuju komunikaciju s programom, npr.
ako to ne bismo ukljuili, ne bi bio mogu
ispis teksta Ovo je moj tekst. na ekran.
cstdlib - biblioteka standardnih naredbi.

using namespace std;

Postoji mnotvo biblioteka naredbi. Moglo


bi se dogoditi da se u dvije razliite biblioteke nau dvije naredbe istog naziva, a razliite namjene.
Ovom naredbom obavjetavamo prevoditelja da emo koristiti standardne nazive naredbi.

int main()

40

Naredba int main() oznaava da na ovom


mjestu poinje sam program. Ono to smo
pisali prije te naredbe ne smatra se programom, nego uputama prevoditelju kako e
prevesti program koji slijedi, npr. koje biblioteke naredbi e koristiti prilikom prevoenja.

PRO - MIL

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

Prvom naredbom nareujemo


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

return 0;

Ova naredba oznauje kraj programa. Nakon te naredbe program se gasi.

Ova vitiasta zagrada oznaava kraj prostora unutar kojeg se nalazi program.

PRO - MIL

Uvod
Obrada
teksta

Da bismo bolje razumjeli ovu naredbu,


obrisat emo ovaj red u programu, a zatim emo prevesti i pokrenuti program
klikom na Kompajlaj i pokreni.

Objekti

system("PAUSE");

Saimanje Veliki programi


koda

Ovom naredbom nareujemo raunalu


da stane i eka tako dugo dok ne pritisnemo neku tipku.

Polja

Petlje

Drugom naredbom nareujemo raunalu da prijee u novi


red.

Donoenje Grafika
odluke

Ovaj red sadri dvije naredbe.

Varijable

Na prvi
program

{ } - Iako neveliki, ovo su jako vani dijelovi


programa. Oznauju prostor unutar kojeg se
nalazi program, { oznauje poetak, a } kraj
programa.

Sadraj

C++ programiranje za apsolutne poetnike

41

Na prvi program

Gruba skica programa


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

#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{

Ovo je poetak programa. Ove naredbe


pisat emo na poeku svakog naeg programa. Kasnije emo ovdje dodati jo neke
naredbe.
Iako smo objasnili emu slue pojedine
naredbe, trenutno nije bitno da tono poznajemo znaenje svake od njih.
Dovoljno je da znamo da te naredbe moramo napisati na poeku svakog naeg programa i da ih tono napiemo.

Ovdje se nalazi glavni dio naeg programa i u ovom dijelu


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

Ovo su naredbe koje piemo na kraju programa. Slino kao to je to sluaj s naredbama na poetku programa, vrlo rijetko emo
ih mijenjati i trenutno nije bitno da u potpunost razumijemo znaenje svake od tih
naredbi.
system("PAUSE");
return 0;
}

42

Dovoljno je da znamo da te naredbe moramo napisati na kraju programa da bi program normalno radio.

PRO - MIL

using namespace std;

renemo li ovaj program, na


zaslonu raunala dobit emo
ovakav rezultat.

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

#include <cstdlib>
#include <iostream>

Na prvi
program

Kao to smo ve vidjeli, pok-

Varijable

#include <cstdlib>
#include <iostream>

Donoenje Grafika
odluke

Jedna od najboljih metoda koje nam pomau da bolje razumijemo funkcioniranje programa i pojedinih naredbi jest da u program unosimo manje izmjene, a
zatim opaamo kakve posljedice e takve izmjene izazvati.

Petlje

Varijacije programa

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

Promijenimo li ovaj red dobit emo ovakav rezultat.


Oigledno je da je funkcija ovog reda u programu
ispis teksta koji se nalazi unutar navodnika i da taj
tekst moemo po volji mijenjati.

PRO - MIL

Obrada
teksta
Saimanje Veliki programi
koda

Objekti

int main()
{
cout << "OVDJE STAVLJAMO TEKST." << endl;
system("PAUSE");
return 0;
}

Polja

using namespace std;

43

Na prvi program

#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
cout << "Jaa jesm nism ghgh." << endl;
system("PAUSE");
return 0;
}

Promijenimo ponovno ovaj red i pokrenimo program.


Dobit emo ovakav rezultat.
Oigledno je da ovim redom u programa nareujemo raunalu da ispie tekst
unutar navodnika na zaslon raunala, ali da raunalo ne ulazi u to ima li taj
tekst smisla ili nema.

Iako raunalo ne ulazi u


smisao teksta koji smo napisali unutar navodnika,
ovdje ipak postoji jedno
ogranienje, a to je da unutar navodnika ne smijemo
koristiti navodnik.
Navodnici oznauju poetak
i kraj teksta, pa bi raunalo
navodnik unutar teksta
smatralo krajem teksta, a
sadraj iza tog navodnika
grekom.
Preuredimo ovaj red i pokuajmo program pokrenuti.
Vidjet emo da e raunalo
dojaviti greku.

44

Navodnik koji
smo dodali.

#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
cout << "Jaa jesm " nism ghgh." << endl;
system("PAUSE");
return 0;
}

PRO - MIL

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

Na prvi
program

#include <cstdlib>
#include <iostream>

Klikom na Kompajlaj i
pokreni pokrenemo program.

Ovako bi trebao izgledati


rezultat izvoenja ove
inaice programa.
Program radi i bez obrisanog dijela, ali nakon
ispisa naeg teksta raunalo nije skoilo u novi
red, nego je sljedei tekst
nastavilo pisati u istom
redu. Oigledno da je <<
endl naredba za skok u
novi red.

PRO - MIL

Donoenje Grafika
odluke
Petlje
Polja

int main()
{
cout << "Ovo je moj tekst.";
system("PAUSE");
return 0;
}

Obrada
teksta

using namespace std;

Da bismo bolje razumjeli


njegovu funkciju, obriemo ovaj dio programa.
Nova inaica programa
trebala bi ovako izgledati.

Objekti

#include <cstdlib>
#include <iostream>

Vratimo na program u
prvobitno stanje, a zatim
ga pokrenimo klikom na
Kompajlaj i pokreni.
Ovako e izgledati rezultat rada naeg programa.

Saimanje Veliki programi


koda

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

Varijable

using namespace std;

45

Na prvi program

#include <cstdlib>
#include <iostream>

Vratimo obrisanu << endl naredbu.

using namespace std;


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

Postavlja se pitanje ako s <<


endl nareujemo raunalu da
skoi u novi red, bi li s vie
takvih naredbi u nizu vie puta
skoilo u novi red.
Pogledajmo to e se dogoditi
ako u na program dodamo
jo jednu << endl naredbu.

Vidimo da se je dogodilo
ono to smo oekivali.
Izmeu prvog i drugog
reda teksta pojavio se je
jedan prazni red.
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
cout << "Ovo je moj tekst." << endl;
cout << endl;
cout << endl;
cout << endl;
system("PAUSE");
return 0;
}

Dodajmo u na program
jo nekoliko << endl naredbi.

Pokrenemo li takav program


vidimo da se je razmak izmeu dva reda u programu poveao.

46

PRO - MIL

Varijable

Na prvi
program

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

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


skok u novi red.

Propisana rije kojom obavjetavamo raunalo


da emo sadraj koji slijedi poslati na neku izlaznu jedinicu, u naem sluaju na zaslon raunala.

Ove oznake obvezno


se stavljaju ispred
sadraja koji e iz
raunala ii na neku
izlaznu jedinicu, npr.
zaslon raunala.

Uoimo da ovaj dio


ini cjelinu sa <<
oznakama i da bez
tih oznaka nee funkcionirati.

PRO - MIL

Ovom
naredbom
nareujemo raunalu
da prilikom ispisa
skoi u novi red.
Uoimo da ova naredba ini cjelinu s
<< oznakama.

Oznaava kraj
naredbe
ili
grupe naredbi
koje ine cjelinu.

Objekti

Tekst unutar navodnika ispisat e se na


zaslon raunala.

Iako nevelik,
ovo je JAKO
vaan dio programa.

Saimanje Veliki programi


koda

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

Obrada
teksta

Polja

Uoimo da naredbu << endl ne moemo koristiti ako prije nismo stavili naredbu cout.

Uvod

Pokrenemo li ovu inaicu programa, uvjerit emo se da daje isti rezultat kao i prethodna.

Donoenje Grafika
odluke

using namespace std;

Vie naredbi << endl moemo napisati i


unutar jednog reda.

Petlje

#include <cstdlib>
#include <iostream>

Sadraj

C++ programiranje za apsolutne poetnike

47

Na prvi program

Distribucija programa

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


program podijeliti s prijateljima ili ga staviti na internet. Postavlja se pitanje
to moramo uiniti da bi na program proradio i na prijateljevom raunalu.
Prilikom prevoenja programa programsko okruenje iz naeg programa generira prevedeni program koji sadri sve elemente koji su mu potrebni da bi
se samostalno pokrenuo u windows programskom okruenju kao i svaki drugi windows program.
A gdje se nalazi prevedena inaica naeg programa?
Otvorimo Windows Explorer i u njemu otvorimo mapu u koju smo koristili tijekom prevoenja programa. U naem sluaju to je Radni mapa na C disku.

Datoteka s nastavkom exe sadri


na preveden program koji moe
samostalno raditi u windows okruenju.
Dovoljno je da tu datoteku poaljemo prijatelju koji e ju pokrenuti
dvostrukim klikom mia.

48

PRO - MIL

Sadraj

C++ programiranje za apsolutne poetnike

Na projekt e se spremiti prilikom prevoenja programa.

Klikom na Yes spremit emo


na program.

1 - Kliknemo na Datoteka.
3 - Na ovom popisu
kliknemo na projekt
koji elimo otvoriti.

PRO - MIL

Saimanje Veliki programi


koda

Objekti

2 - Zatim na Ponovno otvori.

Na najjednostavniji nain
moemo uitati nekoliko
prethodnih spremanja.

Obrada
teksta

Spremljeni projekt moemo uitati u nae programsko okruenje na vie


naina.

Polja

Petlje

Ako projekt elimo spremiti bez


da smo program preveli, kliknemo
na ikonu Spremi.

Ako pokuamo ugasiti programsko okruenje, a da nismo spremili program, raunalo e nas upozoriti.

Donoenje Grafika
odluke

Varijable

Na prvi
program

Uvod

Uitavanje spremljenog projekta

49

Na prvi program

elimo li u nae programsko okruenje


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

2 - Zatim na Otvori datoteku


ili projekt.

1 - Kliknemo na Datoteka.

1 - Otvorit e se dodatni prozor u kojem emo izabrati mapu u kojoj se


nalazi projekt i naziv projekta.

2 - Ovdje biramo mapu u kojoj


se nalazi projekt.

3 - Kliknemo na projekt koji elimo uitati.


Prepoznajemo ga po nastavku dev.

4 - Kliknemo na Otvori.

50

PRO - MIL

Da bismo na program vidjeli, ovdje kliknemo na


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

PRO - MIL

Na prvi
program
Varijable
Saimanje Veliki programi
koda

Objekti

Obrada
teksta

Polja

Petlje

Donoenje Grafika
odluke

Nakon
to
se
spremljeni projekt
uitao, mogli bismo
biti zbunjeni injenicom da ga ne vidimo u prostoru u
kojem smo oekivali da emo ga
vidjeti.

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

51

Varijable

52

PRO - MIL

Saimanje Veliki programi


koda

Objekti

PRO - MIL
Obrada
teksta

Polja

Petlje

Donoenje Grafika
odluke

Varijable

Varijable

Na prvi
program

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

53

Varijable

Osnovne raunske operacije


#include <cstdlib>
#include <iostream>

Sada emo raunalo iskoristiti za raunanje.

using namespace std;

Unesimo ovaj program u C++ programsko


okruenje.

int main()
{
cout << 2+3;
cout << endl;
system("PAUSE");
return 0;
}

Klikom na Kompajlaj i pokreni ga pokrenemo. Dobit emo ovakav rezultat.

Ovaj program zbraja


broj 2 i broj 3, a rezultat koji je u ovom
sluaju broj 5 ispisu#include <cstdlib>
#include <iostream>

je na zaslon.
Pogledajmo

sada

strukturu naeg novog programa.

using namespace std;


int main()
{
cout << 2+3;
cout << endl;
system("PAUSE");
return 0;

Poetak i kraj programa isti su kao i do


sada, dok je srednji

U ovom redu
nareujemo raunalu da zbroj
broja 2 i broja 3,
a to je broj 5,
ispie na zaslon
raunala.
U ovom redu
nareujemo raunalo da skoi
u novi red.

dio promijenjen.

54

PRO - MIL

using namespace std;

Pokuajmo neku drugu raunsku operaciju, npr. oduzimanje.

#include <cstdlib>
#include <iostream>

U ovom programu oduzet emo od broja


12 broj 8.

using namespace std;


Polja
Obrada
teksta
Saimanje Veliki programi
koda

Objekti

Pokrenimo program i pogledajmo na


rezultat.

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

Petlje

Donoenje Grafika
odluke

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

Uvod

Pokrenimo program i vidjet emo da e


raunalo zbrojiti ta dva broja.

Na prvi
program

#include <cstdlib>
#include <iostream>

Varijable

Pokuajmo zbrojiti neka druga dva broja,


npr. 8 i 4.

Sadraj

C++ programiranje za apsolutne poetnike

PRO - MIL

55

Varijable

Dok smo za zbrajanje i oduzimanje koristili


oznake uobiajene u matematici, za mnoenje emo koristiti zvjezdicu. Nalazi se iznad
broja devet s desne strane, na brojanoj tipkovnici.
Mnoenje broja 2 i broja 3 zapisat emo kao
2*3.
Pogledamo rezultat.

#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
cout << 2*3;
cout << endl;
system("PAUSE");
return 0;
}

Oznaka za dijeljenje takoer ima drugaiji oblik od


onog na koji smo navikli u
matematici. Kao oznaka
dijeljenje koristi se kosa
crta koja se nalazi iznad
broja 8 s desne strane,
na brojanom dijelu tipkovnice.

#include <cstdlib>
#include <iostream>
using namespace std;

12 podijeljeno sa 4 napisat emo kao 12/4.


Pokrenimo program i pogledamo rezultat.

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

Na prvi pogled uinit e nam se


da je program za dijeljenje ispravan.

56

PRO - MIL

Rezultat je oigledno pogrean.

using namespace std;


Pokuajmo ovdje staviti
15/3 i pokrenimo program.
Rezultat je ispravan.

Polja

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

Obrada
teksta

Umjesto 15/3 stavimo 17/3 i


pokrenimo program.

#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
cout << 17/3;
cout << endl;
system("PAUSE");
return 0;
}

PRO - MIL

Petlje

#include <cstdlib>
#include <iostream>

Donoenje Grafika
odluke

Varijable

Na prvi
program

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

Uvod

Pokrenimo program i pogledajmo rezultat.

Rezultat je pogrean. Mogli bismo


zakljuiti da e dijeljenje biti ispravno, ako je rezultat cjelobrojni broj.
Ako je rezultat decimalni broj, dolazi
do greke.
Kako rijeiti taj problem, vidjet emo
neto kasnije u ovom poglavlju.

Objekti

using namespace std;

Pokuajmo ovdje umjesto 12/4 staviti 13/4.

Saimanje Veliki programi


koda

#include <cstdlib>
#include <iostream>

Sadraj

C++ programiranje za apsolutne poetnike

57

Varijable

Varijable
Vidjeli smo da osnovne raunske operacije, osim dijeljenja, funkcioniraju, ali
ne ba na nain kako smo mi zamiljali
da bi program trebao raditi.
Problem naih dosadanjih programa
jest u tome to svaki program vri raunsku operaciju izmeu dva konkretna broja i ako elimo izvriti raunsku
operaciju izmeu druga dva broja, program moramo iznova pisati i prevoditi.
Postavlja se pitanje bismo li mogli napisati npr. program za zbrajanje koji ne bi
zbrajao dva konkretna broja, nego bi
mogao zbrojiti bilo koja dva broja.
To je, naravno, mogue. Unesimo, prevedimo i pokrenimo ovaj program.

#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int a;
int b;
int c;
cin >> a;
cin >> b;
c = a + b;
cout << c;
cout << endl;
system("PAUSE");
return 0;
}

Nakon pokretanja programa


ugledat emo zbunjujui crni
ekran bez sadraja.

Na tipkovnici izaberemo prvi broj


koji elimo zbrajati,
npr. broj 3 i zatim
pritisnemo Enter
tipku na tipkovnici.

58

PRO - MIL

PRO - MIL

Uvod
Donoenje Grafika
odluke
Obrada
teksta

Kao rezultat dobit emo


njihov zbroj, a to je broj
26.

Objekti

Na slian nain kao i u


prethodnom primjeru,
dakle tako da nakon svakog unosa broja pritisnemo tipku Enter na tipkovnici, unesimo brojeve 12 i
14.

Vidimo da smo uspjeli


postii ono to smo eljeli. Pomou jednog programa moemo zbrajati razliite brojeve, bez da program moramo mijenjati.

Saimanje Veliki programi


koda

Pokrenimo bez ikakvih izmjena isti program jo jednom, ali sada unesimo neke
druge brojeve, npr. broj 12 i broj 14.

Polja

Petlje

Nakon pritiska na
Enter tipku na tipkovnici, a zaslonu
raunala ugledat
em o
r e zu lt at
zbrajanja broja 3 i
broja 5, a to je broj
8.

Varijable

Na prvi
program

Na tipkovnici izaberemo
drugi broj koji elimo
zbrajati, npr. broj 5 i
zatim pritisnemo Enter
tipku na tipkovnici.

Sadraj

C++ programiranje za apsolutne poetnike

59

Varijable

Analiza programa
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{

Poetak programa.
a

Naredbom int formirat


emo u raunalu prostor poput posude. U taj
prostor moemo spremati brojeve.

Formirat emo tri prostora, prostor a, prostor


b i prostor c.

int a;
int b;
int c;

cin >> a;
cin >> b;

Naredbom cin u prostor a i prostor b


spremit emo broj koji smo unijeli
preko tipkovnice, npr. broj 3 i broj 5.

c = a + b;

Zbrojimo sadraj prostora a i prostora


b, a rezultat spremimo u prostor c.

8
cout << c;

cout << endl;

system("PAUSE");
return 0;
}

60

3
a
5
b

3
=

Sadraj prostora c, a to je
rezultat zbrajanja, ispiemo
na zaslon raunala.

5
+

c
8

Skok u novi red.

Kraj programa.

PRO - MIL

int b;
int c;

Ovdje se nalazi naziv prostora.


Zato svaki prostor ima naziv???

Ovim naredbama se formiraju jo dva prostora,


prostor b i prostor c.

Zato to u jednom programu moemo imati vie takvih prostora, pa


nam naziv prostora omoguuje da ih
razlikujemo.

Nakon formiranja prostor za spremanje brojeva je prazan i bio bi nam sasvim


beskoristan kad u njega ne bismo mogli staviti neki broj.

Ova oznaka stavlja se


ispred naziva prostora u
koji emo unijeti broj.

PRO - MIL

cin >> a ;

Oznaka ; obvezno dolazi


na kraju naredbe.

Ovdje stavljamo oznaku prostora u


koji emo unijeti broj. Dakle, broj
emo unijeti u prostor a i ne u neki
drugi prostor, npr. b ili c.

Uvod
Saimanje Veliki programi
koda

Naredba za unos.

Objekti

Obrada
teksta

U taj prostor broj moemo staviti na vie naina, a jedan od njih je da ga unesemo pomou tipkovnice. Za to emo koristiti naredbu cin.

Na prvi
program

Oznaka ; obvezno dolazi


na kraju naredbe.

Varijable

int a ;

Donoenje Grafika
odluke

Naredba za formiranje
prostora.

Petlje

Na poetku taj prostor moemo zamisliti kao posudice u koje moemo staviti
brojeve, iako su to zapravo rezervirana mjesta u memoriji naeg raunala.

Polja

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

Sadraj

C++ programiranje za apsolutne poetnike

61

Varijable

Naredba slina prethodnoj, samo to e se u


ovom sluaju unijeti broj spremiti u prostor b.

cin >> b ;

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


raunske operacije na isti nain kao to smo ih izvodili izmeu brojeva.
U naem sluaju zbrojit emo sadraj prostora a i sadraj prostora b, a rezultat
tog zbrajanja spremit emo u prostor c.

Prostor c u koji emo spremiti rezultat.

Znak jednakosti ima


istu funkciju kao i u
matematici.

Oznaka ; obvezno
dolazi na kraju naredbe.

c = a + b ;

Oznaka raunske operacije izmeu prostora.

Naziv prvog prostora.

Naziv drugog prostora.

Nakon to se naredba c = a + b; izvri, u prostoru c nalazit e se rezultat zbrajanja sadraja prostora a i prostora b, ali da korisnik vidio rezultat moramo narediti raunalu da sadraj prostora c ispie na zaslon raunala. To emo uiniti
ovom naredbom.

Naredba za ispis.

Oznaka ispred sadraja koji ispisujemo.

62

cout << c ;

Oznaka ; obavezno
dolazi na kraju naredbe.

Prostor c u koji emo spremiti rezultat.

PRO - MIL

Prevedimo i pokrenimo ovaj program i


vidjet emo da radi jednako kao i prethodni program.

Sad se postavlja pitanje po kojoj logici se biraju nazivi prostora za spremanje brojeva. Pogledajmo neka pravila i sugestije.
- Ne smiju se koristi naredbe; npr. int aaa; je dozvoljeno, a int cout; nije.
- Koriste se samo brojevi i slova engleske abecede, dakle bez .
- Naziv ne smije sadravati razmak; PrviBroj i prvi_broj je dozvoljeno, a
prvi broj nije.
- Ako naziv sadri brojeve, prvi znak mora biti slovo, dakle a1 je dozvoljeno, a 1a nije.
- Pametno je da naziv prostora govori to se u prostoru nalazi. Bolje je da
prostor u koji emo spremati povrinu nazovemo povrsina nego qqy1.
- Dva razliita prostora ne mogu imati isto ime.

PRO - MIL

Na prvi
program
Varijable
Donoenje Grafika
odluke

Prvi prostor vie se ne naziva a, nego


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

Petlje

int main()
{
int prvi;
int drugi;
int rezultat;
cin >> prvi;
cin >> drugi;
rezultat = prvi + drugi;
cout << rezultat;
cout << endl;
system("PAUSE");
return 0;
}

Polja

using namespace std;

Ovaj program ima potpuno istu strukturu kao prethodni, samo to ima drugaije nazive prostora za spremanje brojeva.

Obrada
teksta

#include <cstdlib>
#include <iostream>

Objekti

Da bismo bolje razumjeli izradu programa koji koriste prostor za spremanje


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

Saimanje Veliki programi


koda

Varijacije programa

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

63

Varijable

#include <cstdlib>
#include <iostream>

Pokuamo li pokrenuti ovaj program, raunalo e dojaviti greku.

using namespace std;


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

64

Do greke je dolo zato to smo ovdje


formirali prostor A, a ovdje smo pokuali
unijeti broj u prostor a.
Raunalo razlikuje velika i mala slova pa
njemu prostor a i prostor A nisu isto.
S njegove toke gledita mi ovdje pokuavamo unijeti broj u prostor koji ne postoji.
Zato e nas raunalo u komentaru greke
upozoriti da ne zna to je to a.

PRO - MIL

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

Pokrenemo li ovaj program, on e se izvriti


i raunalo nam nee dojaviti nikakvu greku, ali kao rezultat neemo dobiti ono to
smo oekivali.
Vidimo da smo u prostor a unijeli 8, u prostor b unijeli smo 4, ali kao rezultat nismo
dobili broj 12, nego slovo c.
Zato?
cout << c; - ispisuje sadraj prostora c.

To se dogaa zato
to je program formalno ispravno napisan; cout << "c"; je
ispravna naredba, ali
ne radi ono to smo
htjeli.

PRO - MIL

Uvod
Objekti
Saimanje Veliki programi
koda

Ovaj tip greke veoma je teko pronai


u sloenim programima, budui da raunalo nee dojaviti
greku i poziciju greke prilikom prevoenja.

Obrada
teksta

Polja

Petlje

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

Na prvi
program

namespace

Varijable

using
std;

U ovom programu ovu naredbu nismo napisali u ispravnom obliku kao cout << c; nego
u obliku cout << "c"; dakle sadraj koji se
ispisuje stavili smo u navodnike kao to
smo to naviknuli prilikom ispisa teksta koritenjem cout naredbe.

Donoenje Grafika
odluke

#include <cstdlib>
#include <iostream>

Sadraj

C++ programiranje za apsolutne poetnike

65

Varijable

#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int broj1;
int broj2;
int rezultat;
cin >> broj1;
cin >> broj2;
rezultat = broj1 - broj2;
cout << rezultat;
cout << endl;
system("PAUSE");
return 0;
}

#include <cstdlib>
#include <iostream>
using namespace std;

Prostore za spremanje brojeva moemo


koristiti i za druge matematike operacije.
Ovdje moemo vidjeti program za oduzimanje.
Od sadraja prostora broj1 oduzet e se
sadraj prostora broj2, a rezultat e se
spremiti u prostor rezultat.

Na slian nain moemo napraviti program


za mnoenje sadraja dvaju prostora.

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

Ostao nam je nerijeen problem dijeljenja.

using namespace std;

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

using namespace std;


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

PRO - MIL

Pokrenemo li taj program, dobit emo


ispravan rezultat.

Petlje
Polja

#include <cstdlib>
#include <iostream>

Obrada
teksta

Problem emo rijeiti ovako napisanim


programom. Umjesto naredbom int,
prostor za spremanje brojeva formirat
emo naredbom float;

Objekti

rezultat e biti pogrean.

Donoenje Grafika
odluke

Ako je rezultat dijeljenja decimalni broj,

Saimanje Veliki programi


koda

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

Na prvi
program

#include <cstdlib>
#include <iostream>

Varijable

Problem dijeljenja

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

67

Varijable

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


U emu je razlika izmeu prostora formiranog int naredbom i prostora formiranog float naredbom???
U prostor formiran int naredbom moemo spremati samo brojeve bez decimalnog zareza, a u prostore formirane float naredbom moemo spremati brojeve
s decimalnim zarezom.

Naredba za formiranje prostora za


spremanje brojeva
s decimalnim zarezom.

Oznaka ; obvezno
dolazi na kraju naredbe.

float broj1 ;

Naziv prostora. Uoimo da izmeu broj i 1 nema razmaka.

Postavlja se pitanje bismo li mogli u na program unijeti broj s decimalnim zarezom. Pokrenimo jo jednom program iz prethodnog primjera i pokuajmo.

Vidimo da je mogue unijeti


decimalne brojeve u na
program.
Broj 16,25 podijelili smo
brojem 2,5 i kao rezultat
ispravno dobili 6,5.
Pri tome moramo imati u
vidu da C++ kao decimalni
zarez zapravo ne koristi
zarez, nego toku.
Dakle, ako elimo unijeti
npr. 3,14 unijet emo 3.14
koritenjem tipkovnice.

68

PRO - MIL

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

Petlje
Polja

Ovakav program puno


je ugodniji za upotrebu
od programa bez komentara.

Saimanje Veliki programi


koda

int main()
{
float broj1;
float broj2;
float rezultat;
cout << "Dijeljenje." << endl;
cout << "Unesite prvi broj." << endl;
cin >> broj1;
cout << "Unesite drugi broj." << endl;
cin >> broj2;
rezultat = broj1 / broj2;
cout << "Rezultat dijeljenja je:" << endl;
cout << rezultat;
cout << endl;
system("PAUSE");
return 0;
}

Obrada
teksta

using namespace std;

U ovom programu na
poetku programa, te
prije svakog unosa i
ispisa rezultata naredbom cout ispisali smo
adekvatan komentar
koji pomae korisniku
da lake shvati emu
program slui, to mora
unijeti i to je dobio kao
rezultat.

Objekti

#include <cstdlib>
#include <iostream>

Donoenje Grafika
odluke

Varijable

Budui da smo mi napisali program, mi znamo da treba unijeti dva broja, da


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

Na prvi
program

Uljepavanje programa

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

PRO - MIL

69

Varijable

Prethodni program mogli bismo jo malo uljepati dodavanjem praznih redova.


Unesimo i pokrenimo ovaj program.

#include <cstdlib>
#include <iostream>

Naslov programa.

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;
Prazni red.
cout << endl;
cout << "Unesite drugi broj." << endl;
cin >> broj2;
Komentar drugog unosa.
cout << endl;
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.

70

Ispis rezultata.

PRO - MIL

Jedina novost je
komentar na poetku
programa
koji se nalazi iza //
oznaka i opisuje
namjenu programa.

Komentar zapoinje // oznakom i pomae nam da se


lake snaemo ako program
elimo kasnije koristiti.
Komentirati moemo namjenu programa ili pojedine
segmente programa.

PRO - MIL

Prilikom prevoenja programa, kad prevoditelj naie na // oznaku, skae u novi red
ne prevodei ostatak reda.

Na prvi
program
Varijable
Saimanje Veliki programi
koda

Objekti

int main()
{
float stranica_A;
float stranica_B;
float povrsina;
cout << "Povrsina." << endl;
cout << endl;
cout << endl;
cout << "Unesite prvu stranicu." << endl;
cin >> stranica_A;
cout << endl;
cout << "Unesite drugu stranicu." << endl;
cin >> stranica_B;
cout << endl;
povrsina = stranica_A * stranica_B;
cout << "Povrsina je:" << endl;
cout << povrsina;
cout << endl;
cout << endl;
system("PAUSE");
return 0;
}

Donoenje Grafika
odluke

using namespace std;

Struktura je ista
kao i struktura
prethodnog programa, ali su prilagoeni komentari i
nazivi prostora za
spremanje brojeva.

Petlje

#include <cstdlib>
#include <iostream>

Polja

Ovo je program za
izraun povrine
pravokutnika. Unijet emo ga u raunalo i pokrenuti.

// *********************************
// Program za izraun povrine
// *********************************

Obrada
teksta

Nekoliko primjera programa

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

71

Varijable

// ******************************
// Program za izraun brzine
// ******************************
#include <cstdlib>
#include <iostream>

Osim

to

komentare

moemo pisati u zasebnom redu, moemo ih


pisati i na kraju naredbi.

using namespace std;


int main()
{
float put;
// prostor za put
float vrijeme; // prostor za vrijeme
float brzina; // prostor za brzinu
cout << "Brzina." << endl;
cout << endl;
cout << endl;
cout << "Unesite prevaljeni put." << endl;
cin >> put;
cout << endl;
cout << "Unesite vrijeme." << endl;
cin >> vrijeme;
cout << endl;
brzina = put / vrijeme;
cout << "Brzina je:" << endl;
cout << brzina;
cout << endl;
cout << endl;
system("PAUSE");
return 0;
}

Pri tome imajmo na


umu da je
float put; // komentar
ispravno, ali
// komentar float put;
ili
float // komentar put;
nije. Dakle, ako komentar unosimo u red
s naredbom, komentar
mora biti na kraju reda.

Postavlja se pitanje emu


takvi komentari slue. Ako
smo upravo napisali program, a program ima deset
redova, onda nam komentari ne trebaju.
Ako napiemo vei program, a elimo ga korigirati
nakon dvije godine, onda e
nam komentari pojedinih
dijelova programa uvelike
pomoi pri snalaenju u
programu.
Komentari su korisni i ako
moramo korigirati program
koji je netko drugi pisao.

72

PRO - MIL

Uvod
Na prvi
program
Varijable
Saimanje Veliki programi
koda

Objekti

Pokuajmo za vjebu sami smisliti nekoint main()


liko slinih programa.
{
float stranica_A;
float stranica_B;
float stranica_C;
float volumen;
cout << "Izracun volumena." << endl;
cout << endl;
cout << "Unesite stranicu a." << endl;
cin >> stranica_A;
cout << "Unesite stranicu b." << endl;
cin >> stranica_B;
cout << "Unesite stranicu c." << endl;
cin >> stranica_C;
cout << endl;
volumen = stranica_A * stranica_B * stranica_C;
cout << "Volumen je:" << endl;
cout << volumen;
cout << endl;
cout << endl;
system("PAUSE");
return 0;
}

Donoenje Grafika
odluke

using namespace std;

Petlje

Ovo je primjer programa za izraun volumena kvadrata.

Polja

#include <cstdlib>
#include <iostream>

Obrada
teksta

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

Sadraj

C++ programiranje za apsolutne poetnike

PRO - MIL

73

Grafika

74

PRO - MIL

Saimanje Veliki programi


koda

Objekti

PRO - MIL
Obrada
teksta

Polja

Petlje

Donoenje Grafika
odluke

Varijable

Grafika

Na prvi
program

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

75

Grafika

Podeavanje programskog okruenja


Da bi grafika funkcionirala,
prilikom instalacije programa moramo instalirati dodatke kojim programskom
okruenju omoguuje prikaz grafike.
1 - Kliknemo na Projekt.

2 - Zatim na Postavke projekta.

Ako to nismo uinili, vratimo se na uvodno poglavlje


i instalirajmo potrebne dodatke.
Nakon toga podesit emo
programsko okruenje.

1 - Kliknemo na Parametes.
2 - Ovdje unesemo -lbgi -lgdi32

Kliknemo na Ok.

76

PRO - MIL

Na poetku dodan je ovaj red, a


na kraju je izbaena naredba:
system("PAUSE");

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
Klikom na Kompajlaj i pokreni pokrenemo
cleardevice();
program.
circle(320,240,180);
getch();
Otvorit e se dva prozora:
closegraph();
return 0;
- tekstualni koji smo do sada koristili
}

Saimanje Veliki programi


koda

Objekti

Obrada
teksta

Polja

Petlje

- grafiki u kojem e raunalo nacrtati krug.

Na prvi
program

using namespace std;

Unesimo i pokrenimo ovaj program. Uoimo da su poetak i kraj


programa izmijenjeni.

Varijable

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

Donoenje Grafika
odluke

Na prvi grafiki program

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

PRO - MIL

77

Grafika

Analiza programa
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;
int main()
{

Poetak programa. Za razliku od dosadanjih programa, u ovom smo korigirali poetak dodavi mu jo jednu naredbu.
Ovom naredbom u program ukljuujemo grafike naredbe.

int gdriver = 9;
int gmode = 2;

Ovdje odreujemo veliinu grafikog


prozora i broj boja.

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

Otvaranje grafikog prozora.

setbkcolor(WHITE);

Odreivanje boje pozadine.

setcolor(BLACK);

Odreivanje boje crte.

cleardevice();

Brie stari sadraj zaslona i stare postavke boja. Pokuajmo pokrenuti program bez ove naredbe.

circle(320,240,180);

Naredba za crtanje kruga.

78

PRO - MIL

return 0;
}

Zatvaranje grafikog prozora.

Kraj programa. Uoimo da ovdje vie


nema naredbe system(PAUSE); Njenu
funkciju sada ima getch(); naredba.

Ako umjesto broja 9 stavimo


broj 6, dobit emo IBM 8514
prozor ija maksimalna veliina
moe biti 1024 X 768 toaka i
256 boja.
Upotrijebimo li druge brojeve,
dobit emo manje prozore s manjim brojem boja.

PRO - MIL

Uvod
Na prvi
program
Objekti

Ovaj broj moe biti izmeu 1 i


10. Ako je 9, dobit emo VGA
prozor ija maksimalna veliina
moe biti 640 X 480 toaka i 16
boja.

Saimanje Veliki programi


koda

int gdriver = 9 ;

Obrada
teksta

Polja

Pogledajmo sada poblie odreene naredbe. Ovom naredbom odreujemo tip


grafikog prozora.

Varijable

closegraph();

Donoenje Grafika
odluke

Da bismo bolje razumjeli ovu naredbu,


izbacimo je iz programa i pokuajmo
pokrenuti program bez nje.

Petlje

getch();

Ovom naredbom zaustavljamo izvoenje programa do trenutka dok ne pritisnemo neku tipku na tipkovnici. Ima
istu namjenu kao i system(PAUSE)
u normalnim programima.

Sadraj

C++ programiranje za apsolutne poetnike

79

Grafika

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

int gmode = 2 ;

Znaenje ovog broja ovisi o tipu grafikog prozora koji smo odabrali.
Ako smo naredbom int gdriver = 9; odabrali
VGA prozor, stavimo li ovdje broj 0, dobit emo
prozor veliine 640 X 200 toaka. Stavimo li 1,
dobit emo prozor veliine 640 X 350 toaka, a
stavimo li broj 2 koji smo mi odabrali, dobit emo prozor veliine 640 X 480 toaka.
Ako smo naredbom int gdriver = 6 ; odabrali
IBM 8514 prozor, stavimo li ovdje broj 0, dobit
emo prozor veliine 640 X 480 toaka, a stavimo li broj 1, dobit emo prozor veliine 1024
X 768 toaka.

Ovom naredbom odreuje se boja pozadine. U naem sluaju bit e bijela.

setbkcolor( WHITE );

80

Ovdje unosimo naziv boje. Naziv boje moe biti:


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

PRO - MIL

Dodat emo naredbu COLOR iza koje se nalaze tri broja ija vrijednost moe biti izmeu 0 i 255.
Boje u raunalu sastoje se od tri boje; crvene, zelene i plave. Sve ostale
boje nastaju mijeanjem tih boja.
Prvim brojem odreujemo intenzitet crvene boje, drugim intenzitet zelene i
treim intenzitet plave boje.

Varijable

Zelena.

Donoenje Grafika
odluke

Crvena.

Plava.

Petlje

setbkcolor(COLOR( 255, 255, 255 ));

Na prvi
program

Uvod

Osim navoenja imena boja, boje moemo odrediti i navoenjem njihove brojane vrijednosti.

Sadraj

C++ programiranje za apsolutne poetnike

setcolor(BLACK);

setcolor(COLOR (0,0,0));

PRO - MIL

Kao i u prethodnoj naredbi,


boje moemo odrediti navoenjem njihovog naziva, a
moemo i pomou brojeva
upotrebom naredbe COLOR.

Saimanje Veliki programi


koda

Objekti

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

Obrada
teksta

Polja

Naredbom setbkcolor(COLOR(255,255,255)); dobit emo bijelu boju, a naredbom setbkcolor(COLOR(0,0,0)); dobit emo crnu boju.

81

Grafika

Ovo je naredba za crtanje kruga.

circle( 320, 240, 180 ) ;

Udaljenost sredita od
lijevog ruba prozora

Udaljenost sredita od
gornjeg ruba prozora

Polumjer kruga.

640

240
320

180

irina prozora,
u naem sluaju 640 toaka.

480

Visina prozora, u naem


sluaju 480 toaka.

82

PRO - MIL

Ovdje se nalaze etiri naredbe za crtanje etiri kruga.


Pokrenemo li ovaj program,
trebali bismo dobiti ovakav
rezultat.

Na prvi
program

Ovaj program slian je prethodnom. Razlika je u tome to je


prethodni crtao samo jedan
krug, a ovaj e nacrtati nekoliko krugova razliitog polumjera, ali sa sreditem u istoj toki.

Saimanje Veliki programi


koda

Pokuajmo promijeniti
brojeve koji odreuju polumjer kruga i poloaj sredita kruga.

Objekti

Pokuajmo program promijeniti tako da poveamo


ili smanjimo broj krugova.

Obrada
teksta

Polja

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle(320,240,220);
circle(320,240,165);
circle(320,240,110);
circle(320,240,55);
getch();
closegraph();
return 0;
}

Varijable

using namespace std;

Napravit emo nekoliko primjera da bismo lake razumjeli


kako radi naredba za crtanje
kruga.

Donoenje Grafika
odluke

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

Petlje

Varijacije programa

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

PRO - MIL

83

Grafika

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

U ovom primjeru napravit


emo tri jednaka kruga, jedan pored drugoga, to emo
postii promjenom udaljenosti sredita krugova od lijevog
ruba prozora.

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle(160,140,80);
circle(320,140,80);
circle(480,140,80);
getch();
closegraph();
return 0;
}

Pogledajmo jo nekoliko mogunosti.


U ovom sluaju promjenom udaljenosti od gornjeg ruba prozora dobili
smo tri kruga, jedan iznad drugoga.

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

84

PRO - MIL

Uvod

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

Sadraj

C++ programiranje za apsolutne poetnike

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle(320,240,220);
circle(220,140,50);
circle(420,140,50);
circle(320,240,30);
getch();
closegraph();
return 0;
}

PRO - MIL

Varijable
Donoenje Grafika
odluke
Petlje
Polja
Obrada
teksta

using namespace std;

Objekti

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

Saimanje Veliki programi


koda

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

Na prvi
program

using namespace std;

85

Grafika

Crtanje pravokutnika
Osim krunice moemo nacrtati
i druge oblike, npr. pravokutnik.

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

Ovdje u program unesemo naredbu za crtanje pravokutnika,


a na zaslonu raunala dobit
emo ovakav rezultat.

using namespace std;


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

rectangle ( 160, 100, 480, 380 );

640
100
380

160

480
480

86

Naredba za crtanje
pravokutnika.

Naredbom rectangle crtamo pravokutnik, a sa etiri


broja koji se nalaze iza naredbe
rectangle odreujemo poloaj gornjeg lijevog i donjeg desnog ugla
pravokutnika.
Funkciju pojedinih
brojeva moemo
vidjeti na crteu.

PRO - MIL

Uvod

Meusobno moemo kombinirati


vie pravokutnika.

using namespace std;

PRO - MIL

Varijable
Petlje

Donoenje Grafika
odluke
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle (320, 240, 220);
circle (220, 140, 50);
circle (420, 140, 50);
circle (320, 240, 30);
rectangle (260, 342, 380, 338);
getch();
closegraph();
return 0;
}

Polja

using namespace std;

Obrada
teksta

Pokuajmo za vjebu sami izmisliti nekoliko primjera, npr.


deblo stabla nacrtamo kao pravokutnik, a kronju kao krug.

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

Objekti

Pravokutnik moemo kombinirati s drugim oblicima.

Na prvi
program

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
rectangle (160, 100, 480, 380);
rectangle (190, 130, 450, 350);
rectangle (220, 160, 420, 320);
rectangle (250, 190, 390, 290);
getch();
closegraph();
return 0;
}

Saimanje Veliki programi


koda

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

Sadraj

C++ programiranje za apsolutne poetnike

87

Grafika

Crtanje crte
Crtu moemo nacrtati na vie
naina, a uporaba naredbe line
jedan je od njih.

#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
line (120, 100, 500, 380);
getch();
closegraph();
return 0;
}

line ( 160, 100, 480, 380 );

Naredba za crtanje
crte.

640
100
380

120

500

480

88

Naredbom
line
crtamo crtu, a sa
etiri broja koji se
nalaze iza naredbe line odreujemo poetak i kraj
crte.
Funkciju pojedinih
brojeva moemo
vidjeti na crteu.

PRO - MIL

Uvod

Napravimo nekoliko crtea uporabom naredbe za crtanje crte.

Na prvi
program

using namespace std;

PRO - MIL

Polja

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle (320, 240, 220);
circle (320, 240, 165);
circle (320, 240, 110);
circle (320, 240, 55);
line (100, 240, 540, 240);
line (320, 20, 320, 460);
getch();
closegraph();
return 0;
}

Obrada
teksta

using namespace std;

Objekti

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

Petlje

Donoenje Grafika
odluke

Varijable

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
line (100, 240, 540, 240);
line (320, 20, 320, 460);
getch();
closegraph();
return 0;
}

Saimanje Veliki programi


koda

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

Sadraj

C++ programiranje za apsolutne poetnike

89

Grafika

Osim uporabom naredbe line,


crtu moemo nacrtati i uporabom naredbi moveto i lineto.

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

Naredbom moveto odreujemo poetak crte, a naredbom


lineto odreujemo kraj crte.

using namespace std;


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

Ovom naredbom odreujemo


poetak crte.

moveto ( 120, 100 );

640
100

Ovom naredbom odreujemo kraj crte.

380

120

500

lineto ( 500, 380 );

480

90

PRO - MIL

Varijable
Donoenje Grafika
odluke
Petlje
using namespace std;
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto(160, 240);
lineto(160, 450);
getch();
closegraph();
return 0;
}

PRO - MIL

Polja

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

Obrada
teksta

Pogledajmo, korak po korak,


kako je nastao ovaj crte.

Na prvi
program

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

Uvod

Pogledajmo ovaj primjer.

Objekti

using namespace std;

Ovaj nain crtanja pogodan


je za crtanje vie crta u neprekinutom nizu.

Saimanje Veliki programi


koda

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

Sadraj

C++ programiranje za apsolutne poetnike

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

Sadraj

C++ programiranje za apsolutne poetnike

Uvod

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

Varijable
Donoenje Grafika
odluke

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

Petlje

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

Na prvi
program

using namespace std;

PRO - MIL

Obrada
teksta
Objekti
Saimanje Veliki programi
koda

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

Polja

using namespace std;

93

Grafika

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

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

94

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

PRO - MIL

Crtanje toke
Ponekad nam je potrebna samo
jedna toka, kao u ovom primjeru gdje smo tokom oznaili
sredite kruga.

Na prvi
program

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

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

using namespace std;

500

480

PRO - MIL

Obrada
teksta

380

Ovdje unosimo boju


toke koju odreujemo na isti nain kao i
boju pozadine ili boju
crte.

Objekti

640

Naredba za crtanje
toke.

Saimanje Veliki programi


koda

putpixel ( 320, 240, BLACK );

Polja

Petlje

Donoenje Grafika
odluke

Varijable

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

95

Grafika

Ispis teksta
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
cout << "Ovo je krug." << endl;
circle (320, 240, 220);
getch();
closegraph();
return 0;
}

96

Moemo li unutar grafikog


prozora staviti tekst? Moemo, ali naalost, ne na nain
na koji smo to do sada navikli
raditi.
Ako prije naredbe za crtanje
kruga stavimo naredbu i za
ispis teksta, tekst e se ispisati, ali ne unutar grafikog prozora, ve unutar tekstualnog
prozora.

PRO - MIL

using namespace std;


int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto (320, 240);
outtext ("Ovo je krug.");
circle (320, 240, 220);
getch();
closegraph();
return 0;
}

PRO - MIL

Naredbu za odreivanje pozici-

Uvod
Na prvi
program
Varijable

je poetka crte moemo iskoristiti za odreivanje poetka


teksta.

Polja

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

Donoenje Grafika
odluke

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
outtext ("Ovo je krug.");
circle (320, 240, 220);
getch();
closegraph();
return 0;
}

Petlje

using namespace std;

Obrada
teksta

grafikog prozora.

Objekti

tekst e se ispisati unutar

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

Saimanje Veliki programi


koda

Upotrijebimo li ovu naredbu,

Sadraj

C++ programiranje za apsolutne poetnike

97

Grafika

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

Naredba outtextxy objedinjuje naredbu za odreivanje


pozicije teksta i naredbu za
ispis teksta.

using namespace std;


int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
outtextxy (320, 240, "Ovo je krug.");
circle (320, 240, 220);
getch();
closegraph();
return 0;
}

Brojevima odreujemo
poziciju ispisa.

Unutar navodnika je
tekst koji ispisujemo.

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

640
240

320

Ovo je krug.

480

98

PRO - MIL

slova te smjer ispisa teksta.


Stavljamo je prije naredbe za

Petlje

Donoenje Grafika
odluke

Varijable

ispis teksta.

Polja

Naredba za odreivanje veliine i oblika slova te smjera ispisa.

settextstyle ( 9, HORIZ_DIR, 1 );
Veliina slova.

Ovaj broj odreuje


oblik slova. Njegova vrijednost moe
biti izmeu 0 i 10.
Smjer teksta:
HORIZ_DIR - vodoravni tekst.

VERT_DIR - uspravni tekst od dolje prema gore.


-VERT_DIR - uspravni tekst od gore prema dolje.

PRO - MIL

Obrada
teksta

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
settextstyle (9, HORIZ_DIR, 1);
outtextxy (320, 240, "Ovo je krug.");
circle (320, 240, 220);
getch();
closegraph();
return 0;
}

Objekti

using namespace std;

Uvod

emo mijenjati oblik i veliinu

Na prvi
program

Naredbom settextstyle mo-

Saimanje Veliki programi


koda

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

Sadraj

C++ programiranje za apsolutne poetnike

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);
outtextxy(320, 200, "Ovo je krug.");
settextstyle(9, HORIZ_DIR, 2);
outtextxy(320, 240, "Ovo je krug.");
settextstyle(9, HORIZ_DIR, 3);
outtextxy(320, 280, "Ovo je krug.");
settextstyle(9, HORIZ_DIR, 4);
outtextxy(320, 320, "Ovo je krug.");
getch();
closegraph();
return 0;
}

Pogledajmo primjer promjene smjera ispisa teksta.

100

Pogledajmo primjer promjene veliine slova.

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

PRO - MIL

Pogledajmo primjer promjene


oblika slova.

Uvod

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

Sadraj

C++ programiranje za apsolutne poetnike

PRO - MIL

Varijable
Donoenje Grafika
odluke
Petlje
Polja
Obrada
teksta
Objekti
Saimanje Veliki programi
koda

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle (320, 240, 220);
settextstyle(0, HORIZ_DIR, 3);
outtextxy(320, 40, "Ovo je krug.");
settextstyle(1, HORIZ_DIR, 3);
outtextxy(320, 80, "Ovo je krug.");
settextstyle(2, HORIZ_DIR, 3);
outtextxy(320, 120, "Ovo je krug.");
settextstyle(3, HORIZ_DIR, 3);
outtextxy(320, 160, "Ovo je krug.");
settextstyle(4, HORIZ_DIR, 3);
outtextxy(320, 200, "Ovo je krug.");
settextstyle(5, HORIZ_DIR, 3);
outtextxy(320, 240, "Ovo je krug.");
settextstyle(6, HORIZ_DIR, 3);
outtextxy(320, 280, "Ovo je krug.");
settextstyle(7, HORIZ_DIR, 3);
outtextxy(320, 320, "Ovo je krug.");
settextstyle(8, HORIZ_DIR, 3);
outtextxy(320, 360, "Ovo je krug.");
settextstyle(9, HORIZ_DIR, 3);
outtextxy(320, 400, "Ovo je krug.");
settextstyle(10, HORIZ_DIR, 3);
outtextxy(320, 440, "Ovo je krug.");
getch();
closegraph();
return 0;
}

Na prvi
program

using namespace std;

101

Donoenje odluke

102

PRO - MIL

PRO - MIL

Saimanje Veliki programi


koda

Objekti

Obrada
teksta

Polja

Petlje

Donoenje Grafika
odluke

Varijable

Na prvi
program

Uvod

Sadraj

Donoenje odluke
C++ programiranje za apsolutne poetnike

103

Donoenje odluke

Funkcije
#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float broj;
float potencija;
float rezultat;
cout << "Unesite broj:" << endl;
cin >> broj;
cout << endl;
cout << "Unesite potenciju:" << endl;
cin >> potencija;
cout << endl;
rezultat = pow(broj,potencija);
cout << "Rezultat je:" << endl;
cout << rezultat << endl;
cout << endl;
system("PAUSE");
return 0;
}

Pojam funkcije zvui jako


pametno, ali iza tog naziva
kriju se uglavnom jednostavne stvari, matematike
operacije poput potenciranja ili vaenja kvadratnog
korijena.
Pogledajmo program
potenciranje.

za

Da bismo u programu mogli


koristiti matematike funkcije, moramo u program ukljuiti biblioteku matematikih funkcija.

Varijabla u koju spremamo rezultat potenciranja.

rezultat = pow ( broj, potencija );

Naredba za potenciranje.

104

Potencija na koju
potenciramo.

Broj koji potenciramo.

PRO - MIL

Uvod
Na prvi
program

Vano je uoiti da ova


funkcija veliinu kuta ne
izraava stupnjevima nego radijanima.

Polja

Petlje

int main()
{
float kut;
float rezultat;
cout << "Kut u radijanima:" << endl;
cin >> kut;
cout << endl;
rezultat = sin(kut);
cout << "Sinus kuta je:" << endl;
cout << rezultat << endl;
cout << endl;
system("PAUSE");
return 0;
}

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

Varijable

using namespace std;

Ovo je program za izraun sinusa.

Donoenje Grafika
odluke

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

Sadraj

C++ programiranje za apsolutne poetnike

Naredba za izraun sinusa kuta.

PRO - MIL

Varijabla u koju spremamo veliinu


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

Saimanje Veliki programi


koda

rezultat = sin ( kut );

Objekti

Obrada
teksta

Varijabla u koju spremamo rezultat.

105

Donoenje odluke

Ponekad je u programu
potrebno negativan broj
pretvoriti u pozitivan.

#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float broj;
float rezultat;
cout << "Unesite negativni broj:" << endl;
cin >> broj;
cout << endl;
rezultat = abs(broj);
cout << "Broj bez minusa:" << endl;
cout << rezultat << endl;
cout << endl;
system("PAUSE");
return 0;
}

Varijabla u koju spremamo rezultat.

rezultat = abs ( broj );

Naredba za pretvaranje
negativnog broja u pozitivan broj.

106

Varijabla u koju spremamo broj koji


emo iz negativnog pretvoriti u pozitivan.

PRO - MIL

rezultat = sqrt ( broj );

Varijabla u koju spremamo


broj iji kvadratni korijen
elimo izraunati.

Naredba za izraun kvadratnog korijena.

Iako se nam na prvi


pogled moe uiniti
da je program ispravan, to na alost nije
tako. Pokuamo li
kvadratni korijen izraunati iz negativnog broja dobit emo
besmisleni rezultat.
Do toga dolazi zato
to nije mogue izraunati kvadratni korijen iz negativnog
broja.

PRO - MIL

Varijable
Donoenje Grafika
odluke

Ako je 4 puta 4, odnosno 4 na kvadrat, jednako 16, onda je kvadratni korijen od 16 jedak
4.

Petlje

to je to uope kvadrati
korijen?

Polja

Varijabla u koju spremamo rezultat.

Pogledajmo program
za vaenje kvadratnog
korijena.

Obrada
teksta

int main()
{
float broj;
float rezultat;
cout << "Unesite broj:" << endl;
cin >> broj;
cout << endl;
rezultat = sqrt(broj);
cout << "Kvadratni korijen je:" << endl;
cout << rezultat << endl;
cout << endl;
system("PAUSE");
return 0;
}

Objekti

using namespace std;

Saimanje Veliki programi


koda

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

Na prvi
program

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

107

Donoenje odluke

Donoenje odluke
Pokuajmo kvadrati korijen izraunati pomou ovakvog programa.

#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float broj;
float rezultat;
cout << "Unesite pozitivan broj." << endl;
cin >> broj;
cout << endl;
if (broj < 0)
{
cout << "Broj je negativan!" << endl;
}
else
{
rezultat = sqrt(broj);
cout << "Kvadratni korijen je:" << endl;
cout << rezultat;
cout << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

108

Ova inaica programa


izraunava

kvadratni

korijen ako smo unijeli


pozitivan broj ili nas
obavjetava da je unesen negativan broj ako
unesemo

negativan

broj.

PRO - MIL

Broj nula.
if (broj < 0)

Naredbom if ispitujemo
je li sadraj varijable manji od nule.

{
cout << "Broj je negativan!" << endl;
}

Ovaj dio programa izvodi se samo ako je sadraj varijable broj manji
od nule.

Uvod
Na prvi
program
Varijable

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

Formiranje varijabli i
unos broja iz kojeg emo vaditi kvadratni korijen.
Izvodi se prilikom svakog pokretanja programa.

Donoenje Grafika
odluke

int main()
{

Uobiajen poetak programa. Izvodi se prilikom


svakog pokretanja programa

Petlje

using namespace std;

Pogledajmo bitne dijelove naeg programa.

Polja

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

Sadraj

C++ programiranje za apsolutne poetnike

rezultat = sqrt(broj);
cout << "Kvadratni korijen je:" << endl;
cout << rezultat;
cout << endl;
}

cout << endl;


system("PAUSE");
return 0;
}

PRO - MIL

se izvodi samo ako


sadraj varijable broj
nije manji od nule.

Uobiajeni kraj programa. Izvodi se prilikom


svakog pokretanja programa.

Objekti

nje dio programa koji

Saimanje Veliki programi


koda

Naredbom else zapoi-

Obrada
teksta

else

109

Donoenje odluke

Svi programi koje smo do sada vidjeli izvodili su se redom od prve do posljednje naredbe. U sluaju programa za vaenje kvadratnog korijena to nam ne
odgovara jer elimo da program na jedan nain reagira ako unesemo pozitivan broj, a na drugi nain ako unesemo negativan.
Ako unesemo pozitivan broj, izraunat emo kvadratni korijen i neemo ispisivati obavijest da je broj negativan, a ako unesemo negativan broj, ispisat emo obavijest da je broj negativan i neemo raunati kvadratni korijen, budui
da iz negativnog broja nije mogue izraunati kvadratni korijen.
Za razliku od dosadanjih naredbi koje su se nalazile u jednom redu, naredba
koja nam omoguuje izvoenje jednog ili drugog dijela programa proteu se
kroz vie redova. Pogledajmo strukturu tog sustava.

Uvjet na temelju kojeg


e raunalo odluiti hoe
li se izvoditi sadraj a ili
sadraj b.

Naredbom if zapoinje donoenje odluke.

U naem sluaju ispituje se je li sadraj


varijable broj manji od broja nula.

if ( broj < 0 )
{

Sadraj a i sadraj b nalaze


se unutar vitiastih zagrada.
U poetku esto
e nam se deavati da izostavimo vitiaste zagrade ili da ih
krivo napiemo.

sadraj a
}
else
{
sadraj b
}

110

Ovaj dio programa


unutar vitiastih zagrada izvrit e se ako
je uvjet zadovoljen,
tj. ako je sadraj varijable broj manji od
nula.

Naredbom else zapoinje dio programa


koji se izvrava ako
uvjet iza if naredbe
nije zadovoljen, tj.
ako sadraj varijable
broj nije manji od
nule.
U tom sluaju izvodi
se sadraj b, a ne
izvodi se sadraj a.

PRO - MIL

Varijable

#include <cstdlib>
#include <iostream>

Ovaj program samo


ispituje je li unesen

Petlje

Donoenje Grafika
odluke

using namespace std;

Ako je broj vei od

Polja

broj vei od nule.

nule, izvodi se dio


programa koji ispisuje tekst Broj je vei

Obrada
teksta

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

Uvod
Na prvi
program

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

Sadraj

C++ programiranje za apsolutne poetnike

nule, izvodi se dio


programa koji ispisuje tekst Broj
vei od nule.

PRO - MIL

nije

Saimanje Veliki programi


koda

Ako broj nije vei od

Objekti

od nule.

111

Donoenje odluke

U ovom programu ispitivat emo je li unesen broj jednak nuli.


Za to ispitivanje koristit emo
dvostruki znak jednakosti.

#include <cstdlib>
#include <iostream>
using namespace std;

Ako je odgovor na pitanje


je li sadraj varijable broj

int main()
{
float broj;
cout << "Unesite broj." << endl;
cin >> broj;
cout << endl;
if (broj == 0)
{
cout << "Broj je jednak nuli." << endl;
}
else
{
cout << "Broj nije jednak nuli." << endl;
}
cout << endl;
system("PAUSE");
return 0;

jednak nuli DA, izvrit e


se ovaj dio programa.
Ispisat e se poruka Broj
je jednak nuli.
Ako je odgovor na pitanje
je li sadraj varijable broj
jednak nuli NE, izvrit e
se ovaj dio programa.
Ispisat e se poruka Broj
nije jednak nuli.

Da smo umjesto broj == 0 napisali broj = 0 program ne bi ispitivao je li sadraj varijable broj
jednak nuli, nego bi broj nula
stavio u varijablu broj.

112

PRO - MIL

Na prvi
program

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

Vidjeli smo da moemo


ispitivati je li varijabla
vea, manja ili jednaka
nekom broju.
U dosadanjim primjerima to je bio broj nula,
ali to moe biti bilo koji
to je to sluaj u ovom
primjeru.

Polja

broj, npr. broj 100 kao

Saimanje Veliki programi


koda

Objekti

Obrada
teksta

int main()
{
float broj;
cout << "Unesite broj." << endl;
cin >> broj;
cout << endl;
if (broj < 100)
{
cout << "Broj je manji od sto." << endl;
}
else
{
cout << "Broj nije manji od sto." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

Petlje

using namespace std;

Donoenje Grafika
odluke

Varijable

#include <cstdlib>
#include <iostream>

PRO - MIL

113

Donoenje odluke

Osim varijable i broja, if naredbom moemo usporeivati dvije


varijable.

#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
float prvi;
float drugi;
cout << "Unesite prvi broj." << endl;
cin >> prvi;
cout << endl;
cout << "Unesite drugi broj." << endl;
cin >> drugi;
cout << endl;
if (prvi == drugi)
{
cout << "Brojevi su jednaki." << endl;
}
else
{
cout << "Brojevi su razliciti." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

114

Ovdje ispitujemo jesu li sadraji dviju varijabli u koje


smo prethodno unijeli brojeve jednaki.
Ako unesemo jednake brojeve ispisat, e se obavijest
Brojevi su jednaki.
Ako unesemo razliite, ispisat e se obavijest Brojevi
su razliiti.

PRO - MIL

Uvod
Na prvi
program
Varijable
Donoenje Grafika
odluke
Saimanje Veliki programi
koda

Objekti

int main()
{
float prvi;
float drugi;
cout << "Unesite prvi broj." << endl;
cin >> prvi;
cout << endl;
cout << "Unesite drugi broj." << endl;
cin >> drugi;
cout << endl;
if (prvi < drugi)
{
cout << "Prvi broj je manji." << endl;
}
else
{
cout << "Prvi broj nije manji." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

Petlje

using namespace std;

Polja

#include <cstdlib>
#include <iostream>

Obrada
teksta

U ovom primjeru ispitujemo je


li sadraj varijable prvi manji
od sadraja varijable drugi.

Sadraj

C++ programiranje za apsolutne poetnike

PRO - MIL

115

Donoenje odluke

#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
float prvi;
float drugi;
cout << "Unesite prvi broj." << endl;
cin >> prvi;
cout << endl;
cout << "Unesite drugi broj." << endl;
cin >> drugi;
cout << endl;
if ((prvi < 5) && (drugi < 5))
{
cout << "Oba broja su manja od pet." << endl;
}
else
{
cout << "Oba broja nisu manja od pet." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

116

Osim jednostavnih ispitivanja if naredbom, mogua


su i sloenija
ispitivanja.

PRO - MIL

Prilikom formiranja sloenih uvjeta moramo paziti na raspored zagrada. Svaki

Sadraj

C++ programiranje za apsolutne poetnike

unutar jo jednog para zagrada.

else

Mogue je da je sadraj varijable prvi manji


od 5, a mogue je i da nije. Isto tako, mogu-

e je da je sadraj varijable drugi manji od

sadraj b
}

5, a mogue je i da nije.
Postavlja se pitanje u kojem sluaju e se
izvravati sadraj a, a u kojem sluaju sadraj b.
Ovim oznakama nareujemo raunalu da
e se sadraj a izvoditi samo onda kad su
zadovoljena oba uvjeta; u naem sluaju
kad je sadraj varijable prvi manji od 5 i kad
je sadraj varijable drugi manji od 5.
U svim ostalim sluajevima izvrit e se
sadraj b.

PRO - MIL

Petlje

voljen ili nezadovoljen.

Polja

uvjet. Svaki od ta dva uvjeta moe biti zado-

Obrada
teksta

Ovdje imamo dva uvjeta, prvi uvjet i drugi

Objekti

sadraj a

Saimanje Veliki programi


koda

Donoenje Grafika
odluke

Varijable

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

Na prvi
program

Uvod

uvjet, prvi i drugi nalaze se unutar svojih zagrada, a svi zajedno nalaze se

117

Donoenje odluke

#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
float prvi;
float drugi;
cout << "Unesite prvi broj." << endl;
cin >> prvi;
cout << endl;
cout << "Unesite drugi broj." << endl;
cin >> drugi;
cout << endl;
if ((prvi < 5) || (drugi < 5))
{
cout << "Barem jedan je manji od 5." << endl;
}
else
{
cout << "Niti jedan nije manji od 5." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

Ako umjesto oznaka && stavimo


oznake || ukupni
uvjet bit e zadovoljen ako je barem jedan od dva
uvjeta zadovoljen.

Oznaku | dobijemo tako da drimo lijevu AltGr tipku, a zatim


pritisnemo W tipku.

118

PRO - MIL

if (broj > 0)

Ispitujemo je li sadraj varijable broj vei od broja nula.

if (broj == 0)

Ispitujemo je li sadraj varijable broj jednak broju nula.

if (broj < 50)

Ispitujemo je li sadraj varijable broj manji od broja pedeset.

if (broj > 50)

Ispitujemo je li sadraj varijable broj vei od broja pedeset.

if (broj == 50)

Ispitujemo je li sadraj varijable broj jednak broju pedeset.

if (broj != 50)

Ispitujemo je li sadraj varijable broj razliit od broja pedeset.

if (prvi > drugi)

Ispitujemo je li sadraj varijable prvi vei od sadraja varijable drugi.

if (prvi < drugi)

Ispitujemo je li sadraj varijable prvi manji od sadraja


varijable drugi.

if (prvi == drugi)

Ispitujemo je li sadraj varijable prvi jednak sadraju varijable drugi.

PRO - MIL

Uvod
Na prvi
program
Varijable
Donoenje Grafika
odluke

Ispitujemo je li sadraj varijable broj manji od broja nula.

Petlje

if (broj < 0)

Polja

Primjeri jednostavnih ispitivanja

Obrada
teksta

Isto tako bilo koje dvije varijable koje se koriste u programu moemo meusobno usporeivati.

Objekti

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

Saimanje Veliki programi


koda

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

Sadraj

C++ programiranje za apsolutne poetnike

119

Donoenje odluke

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


sloena ispitivanja.
Sloena ispitivanja formiraju se koritenjem zagrada po logici slinoj logici u
matematici i uporabom simbola || i &&.
Simbol && izmeu dva uvjeta znai da oba uvjeta moraju biti zadovoljena da
bi bio zadovoljen ukupni uvjet.
Simbol || izmeu dva uvjeta oznauje da je dovoljno da je barem jedan od
uvjeta zadovoljen da bi bio zadovoljen ukupni uvjet.
Broj moguih kombinacija praktiki je neogranien, a koju kombinaciju emo
upotrijebiti ovisi o cilju koji programom elimo postii.

Primjeri sloenih ispitivanja

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

Uvjet je zadovoljen ako je sadraj varijable prvi manji od 5 i ako je sadraj


varijable drugi manji od 5.

if ((prvi < 5) || (drugi < 5))

Uvjet je zadovoljen ako je ili sadraj


varijable prvi manji od 5, ili ako je sadraj varijable drugi manji od 5, ili ako
su obje varijable manje od 5.

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

if ((prvi < 5) || (drugi < 5) || (treci < 5))

Uvjet je zadovoljen ako je barem jedna


od triju varijabli manja od pet, ili ako su
dvije manje od 5, ili ako su sve tri manje od 5.

Uvjet je zadovoljen ako su sve tri varijable manje od pet. Dovoljno je da jedif ((prvi < 5) && (drugi < 5) && (treci < 5))
na varijabla nije manja od 5 i uvjet nije
ispunjen.

120

PRO - MIL

Sadraj

C++ programiranje za apsolutne poetnike

Uvod

#include <cstdlib>
#include <iostream>

Varijable
ristiti

za

isprobavanje

kombinacija s prethodne
stranice.
U ovom sluaju ukupni
uvjet je ispunjen ako je

Donoenje Grafika
odluke

grama koji moemo isko-

Petlje

Ovdje vidimo primjer pro-

je drugi broj manji od 5 ili


ako su oba manja od 5 i

Polja

prvi broj manji od 5 ili ako

ako je trei broj manji od


Obrada
teksta

int main()
{
float prvi;
float drugi;
float treci;
cout << "Unesite prvi broj." <<
endl;
cin >> prvi;
cout << "Unesite drugi broj." << endl;
cin >> drugi;
cout << "Unesite treci broj." << endl;
cin >> treci;
if (((prvi < 5) || (drugi < 5)) && (treci < 5))
{
cout << "DA" << endl;
}
else
{
cout << "NE" << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

Na prvi
program

using namespace std;

5.

dio programa.
Ako

ukupni uvjet nije

zadovoljen, izvest e se
ovaj dio programa.

PRO - MIL

Saimanje Veliki programi


koda

voljen, izvest e se ovaj

Objekti

Ako je ukupni uvjet zado-

121

Donoenje odluke

#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
float broj;
cout << "Unesite broj." << endl;
cin >> broj;
if (broj < 0)
{
cout << "Broj je manji od 0." << endl;
}
else
{
if (broj > 0)
{
cout << "Broj je veci od 0." << endl;
}
else
{
cout << "Broj je 0." << endl;
}
}
cout << endl;
system("PAUSE");
return 0;
}

122

Osim to moemo u programu imati veoma sloena ispitivanja unutar if


naredbe, mogue je jednu if naredbu staviti unutar druge if naredbe.
To je nuno ako elimo
ispitati vie stvari, npr. je
li neki broj vei od nule ili
jednak nuli ili je manji od
nule. Takvo ispitivanje ne
moemo napraviti s jednom if naredbom, nego
su nune dvije if naredbe.
Pogledajmo
ram.

ovaj

prog-

PRO - MIL

strukturu

Uvod

#include <cstdlib>
#include <iostream>

Pogledamo
programa.

Sadraj

C++ programiranje za apsolutne poetnike

Poetak programa.

Prva if naredba. Ispituje je li broj manji od 0.

Varijable

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

Na prvi
program

using namespace std;

if (broj > 0)
{
cout << "Broj je veci od 0." << endl;
}

Ako uneseni broj nije


manji od 0, izvodi se
ovaj dio. Unutar ovog
dijela nalazi se druga
if naredba.

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

Ako je uneseni broj


vei od 0, izvodi se
ovaj dio.

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

Ako uneseni broj nije


vei od 0, izvodi se
ovaj dio.
Ako uneseni broj nije
ni vei ni manji od
nule, onda znamo da
je nula.

Kraj programa.

PRO - MIL

Petlje

Polja

else

Obrada
teksta

Ako je uneseni broj


manji od 0, izvodi se
ovaj dio.

Objekti

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

Saimanje Veliki programi


koda

Donoenje Grafika
odluke

if (broj < 0)

123

Donoenje odluke

#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
float broj;
cout << "Unesite broj." << endl;
cin >> broj;
if (broj < 0)
{
cout << "Broj je manji od 0." << endl;
}
else
{
if (broj > 0)
{
cout << "Broj je veci od 0." << endl;
}
else
{
cout << "Broj je 0." << endl;
}
}
cout << endl;
system("PAUSE");
return 0;
}

Pogledamo li paljivo ovaj


program, vidjet emo da je
potpuno identian programu s
prethodne stranice. Razlika je
jedino u tome to pojedini redovi nisu uvueni.
Pokuamo li pokrenuti ovaj
program, vidjet emo da radi
potpuno jednako kao i inaica
s uvuenim redovima.
U emu je onda razlika? Zato bismo uope uvlaili redove
kad program oigledno radi i
bez toga?
Razlika je u preglednosti. Program s uvuenim redovima
daleko je pregledniji.
Usporedimo li program s uvuenim redovima na prethodnoj
stranici i ovaj bez uvuenih
redova, vidjet emo da je na
inaici s uvuenim redovima
daleko lake uoiti gdje zapoinju, a gdje zavravaju pojedine if naredbe; koje vitiaste
zagrade ine par i sl.
Preglednost programa s uvlaenjima redova osobito dolazi
do izraaja kod veih i sloenijih programa.

Ne postoje vrsta pravila na koji nain


treba uvlaiti redove. Na poetku je
najbolje da u vlastitim programima
uvlaenja izvodimo slino kao u primjerima danima u knjizi.
Osnovna ideja je u tome da se uvue
svaka cjelina za koju bi moglo biti
nejasno gdje poinje, a gdje zavrava.

124

PRO - MIL

{
cout << "Broj je manji od 0." << endl;
}
else
{
if (broj > 0)
{
cout << "Broj je veci od 0." << endl;
}

Sadraji unutar if naredbe dodatno se pomiu u desnu stranu.


To nam pomae da
lake uoimo gdje poinje, a gdje zavrava if
naredba.

else
{
cout << "Broj je 0." << endl;
}
}
cout << endl;
system("PAUSE");
return 0;
}

PRO - MIL

Ako se unutar jedne if


naredbe nalazi druga if
naredba, njen sadraj
dodatno se pomie u
desnu stranu.
To nam pomae da
lake uoimo gdje poinje i gdje zavrava druga if naredba te pomae da njen sadraj lake razlikujemo od sadraja prve if naredbe.

Varijable

Na prvi
program

Uvod
Na toj razini pie se
veina
jednostavnih
naredbi.

Donoenje Grafika
odluke

if (broj < 0)

Petlje

Sadraj unutar glavnih


vitiastih zagrada uvlai
se u desnu stranu.

Polja

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

Bez uvlaenja pie se


poetak programa i dvije
glavne vitiaste zagrade.

Obrada
teksta

int main()
{

Objekti

using namespace std;

Saimanje Veliki programi


koda

#include <cstdlib>
#include <iostream>

Pogledajmo strukturu
uvlaenja redova.

Sadraj

C++ programiranje za apsolutne poetnike

125

Donoenje odluke

Switch naredba

#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
float a;
float b;
int od;
cout << "Unesite 1. broj:" << endl;
cin >> a;
cout << "Unesite 2. broj:" << endl;
cin >> b;
cout << "Brojeve cemo:" << endl;
cout << "1 - zbrojiti" << endl;
cout << "2 - oduzeti" << endl;
cout << "3 - mnoziti" << endl;
cout << "4 - dijeliti" << endl;
cin >> od;
switch (od)
{
case 1:
cout << a << " + " << b << " = " << a + b << endl;
break;
case 2:
cout << a << " - " << b << " = " << a - b << endl;
break;
case 3:
cout << a << " x " << b << " = " << a * b << endl;
break;
case 4:
cout << a << " : " << b << " = " << a / b << endl;
break;
default:
cout << "Morate unijeti 1,2,3 ili 4." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

126

If naredba nam
omoguuje grananje na dvije
grane. Jedna e
se izvriti ako je
uvjet
zadovoljen, a druga ako
uvjet nije zadovoljen.
Primjena naredbe if nije elegantna ako se u
programu
javi
potreba za grananjem u vie
od dvije grane.

U ovom programu biramo jednu od etiri raunske operacije.


Program bismo
mogli realizirati i
uporabom vie
if naredbi, ali
daleko je elegantniji ako upotrijebimo switch
naredbu.

PRO - MIL

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


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

Pokuajmo je obrisati.
Pokrenimo
program i promatrajmo posljedice.

Naredbom case 2:
zapoinje dio programa koji e se
izvriti ako je sadraj varijable od
broj 2.

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

Na temelju sline
logike biraju se
ostali case dijelovi
kojih moe biti proizvoljni broj.

default:

(U naem sluaju
imamo jo case 3:
i case 4:.)

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


}

Ovaj dio izvrava se ako ni jedan case uvjet


nije zadovoljen, dakle ako u varijabli od nije bio
ni broj 1, ni broj 2, ni broj 3, ni broj 4.
Kraj switch naredbe.

PRO - MIL

Uvod
Na prvi
program
Varijable
Donoenje Grafika
odluke

Naredbom break
zavrava case 1:
naredba.

case 1:

Petlje

Polja

e se izvriti ako se u varijabli od nalazi broj 1.

Obrada
teksta

Naredbom case 1: zapoinje dio programa koji

Objekti

switch (od)

Ovdje se nalazi int varijabla. Grananje se vri na temelju broja koji se


nalazi u varijabli. Int tip je obvezan.

Saimanje Veliki programi


koda

Poetak switch naredbe.

Sadraj

C++ programiranje za apsolutne poetnike

127

Petlje

128

PRO - MIL

Saimanje Veliki programi


koda

Objekti

Obrada
teksta

PRO - MIL
Polja

Petlje

Donoenje Grafika
odluke

Petlje

Varijable

Na prvi
program

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

129

Petlje

For petlja
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;

Ovaj program crta niz krugova jednakog promjera. Svakome je sredite


pomaknuto za pet toaka u desnu
stranu u odnosu na sredite prethodnog.

Vidimo da program funkcionira, ali nije


int main()
ba elegantan budui da moramo pu{
no puta ponoviti slinu naredbu.
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
#include <cstdlib>
cleardevice();
#include <iostream>
Ovaj program radi isti
circle(260,240,60);
#include <winbgim.h>
posao, ali je oigledno
circle(265,240,60);
daleko elegantniji.
circle(270,240,60);
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

Uvod

Kljuna naredba u novoj inaici programa je for naredba. Omoguuje nam


izvravanje dijela programa vie puta. To viestruko ponavljanje dijela programa naziva se programska petlja. Slino kao if naredba, i for naredba je
veoma sloena i protee se kroz vie redova programa.

Sadraj

C++ programiranje za apsolutne poetnike

x < 365 ;

{
circle ( x, 240, 60 );
}

Udaljenost sredita kruga od lijevog ruba nije odreena brojem,


nego vrijednou varijable x.
Budui da se pri svakom ponovnom izvoenju sadraj varijable x
mijenja, jednako e se mijenjati i
udaljenost sredita kruga od lijevog ruba.

PRO - MIL

x=x+5 )
Ovdje odreujemo nain na koji e se vrijednost varijable x mijenjati.
U naem sluaju nakon
svakog ponavljanja for
naredbe,
vrijednost
varijable x uveat e se
za 5, a rezultat e se
spremiti u varijablu x.

Sadraj unutar navodnika ponavlja se svaki put


kad for naredba uvea
vrijednost varijable x i
provjeri je li x manji od
365.

Varijable
Donoenje Grafika
odluke
Petlje

for ( x = 260 ;

Polja

Kad uvjet vie nije zadovoljen; tj. kad x vie


ne bude manji od 365, program e nastavit
izvoenje od prve naredbe nakon druge
vitiaste zagrade.

Obrada
teksta

U naem sluaju poetna


vrijednost varijable x je
260.

Objekti

Petlja e se vrtjeti, odnosno petlja e ponavljati dio programa, tako dugo dok je
ovaj uvjet zadovoljen; u naem sluaju,
tako dugo dok je sadraj varijable x manji
od 365.

Saimanje Veliki programi


koda

Ovdje se definira poetna


vrijednost varijable koju
koristi for naredba i koju
prije for naredbe moramo
formirati.

Na prvi
program

Pogledajmo sastavne elemente for naredbe.

131

Petlje

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

Pogledajmo dijelove naeg programa.

Uobiajeni poetak programa.

int main()
{

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

Naredbe za otvaranje grafikog prozora, odreivanje svojstava grafike i


formiranje varijable x koju koristimo u
for naredbi.

Ovdje definiramo petlju. Poetna


vrijednost varijable petlje x je 260,
uveavat e se za 5, a izvravat e
se tako dugo dok je sadraj varijable
x manji od 365.

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


Pri svakom ponavljanju petlje ponavlja se sadraj unutar vitiastih
zagrada.
U naem sluaju na grafikom ekranu e se crtati krug.
{
circle(x,240,60);
}

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

132

Udaljenost sredita kruga od lijevog ruba nije odreena brojem,


nego vrijednou varijable x.
Budui da vrijednost varijable x pri
svakom ponavljanju raste za 5,
sredie novog kruga bit e za pet
toaka pomaknuto u desnu stranu.

Uobiajeni kraj programa.

PRO - MIL

using namespace std;

Jedino to ovaj program


radi jest ispisivanje sadraj
varijable x.
To nam omoguuje lako
opaanje kako se sadraj
varijable x mijenja, te koji
dio programa se ponavlja i
koliko puta.
Unoenjem varijacija u taj
program najlake emo
shvatiti for naredbu.

Vidimo da se ponavlja
sadraj unutar vitiastih
zagrada for naredbe.
Sadraj prije i sadraj poslije for naredbe ne ponavlja se.

PRO - MIL

Uvod
Na prvi
program
Varijable
Saimanje Veliki programi
koda

Objekti

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;
}

Ovaj e nam program pomoi da lake shvatimo


funkcioniranje if naredbe.
Vrijednost varijable x mijenjat e se od 0 do 9 po 1.

Donoenje Grafika
odluke

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

Petlje

Drugaiji je problem ako nam se ne da pisati programe. Onda bismo doista


mogli konstatirati da programiranje nije za nas i trebali bismo se pokuati
baviti neim intelektualno manje zahtjevnim, npr. nogometom ili politikom.

Polja

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

Obrada
teksta

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

Sadraj

C++ programiranje za apsolutne poetnike

133

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 + 2 )
{
cout << x << endl;
}
cout << "Nakon for naredbe." << endl;
cout << endl;
system("PAUSE");
return 0;
}

Mijenjati moemo poetnu i


krajnju vrijednost petlje.
U ovom sluaju x e se mijenjati od 10 do 29.

U prolom primjeru vrijednost varijable x uveavali


smo za 1, a u primjeru prije
toga za 5.
Vrijednost varijable x u for
naredbi moemo uveavati
za bilo koju vrijednost koja
nam u programu treba, npr.
za 2.
U ovom sluaju vrijednost
varijable x raste od 0 do 9
po 2.

#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;
int main()
{
int x;
cout << "Prije for naredbe." << endl;
for (x = 10; x < 29; x = x + 2 )
{
cout << x << endl;
}
cout << "Nakon for naredbe." << endl;
cout << endl;
system("PAUSE");
return 0;
}

134

PRO - MIL

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

Na prvi
program

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

U ovom sluaju vrijednost


varijable x mijenja se od 28
do 9 po 2.

Donoenje Grafika
odluke

For naredba moe brojiti i


unatrag.

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

PRO - MIL

Obrada
teksta

using namespace std;

Objekti

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

Saimanje Veliki programi


koda

U for naredbi mogu se koristiti i negativni brojevi.

Polja

Petlje

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

Varijable

using namespace std;

135

Petlje

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

Prilikom formiranja for naredbe mogue je napraviti greku


koja se naziva mrtva petlja.

using namespace std;


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

Pogledajmo jo jedan primjer


mrtve petlje.

Do te greke dolazi kad uvjete


za kraj petlje tako formuliramo
da se oni nikad nee ispuniti,
pa e se petlja vjeno izvoditi.
U ovom primjeru poetna vrijednost je 18. Ta poetna vrijednost uveava se za 2, a
petlja e se ponavljati tako
dugo dok je x vei od 9.
Ako 18 uveavamo za 2, x e
uvijek biti vei od 9 i petlja se
nikad nee prekinuti.

#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;
int main()
{
int x;
cout << "Prije for naredbe." << endl;
for (x = 0; x < 9; x = x - 1 )
{
cout << x << endl;
}
cout << "Nakon for naredbe." << endl;
cout << endl;
system("PAUSE");
return 0;
}

136

PRO - MIL

Pokuamo sami mijenjati vrijednosti unutar for naredbe i promatrajmo kakve efekte e izazvati te promjene.

Varijable
Donoenje Grafika
odluke

U ovom sluaju vrijednost varijable x mijenja se od 60 do 580 po


5.

Saimanje Veliki programi


koda

Objekti

Obrada
teksta

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 60; x < 580; x = x + 5 )
{
circle(x,240,60);
}
getch();
closegraph();
return 0;
}

Razlika je u tome to su u ovom


sluaju drugaije poetna i krajnja vrijednost x varijable, pa
smo dobili drugaiji niz krugova.

Petlje

using namespace std;

Ovaj primjer slian je primjeru


na poetku ovog poglavlja.

Polja

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

Na prvi
program

Iako to nije uvijek sluaj, najee se za postizanje eljenih ciljeva koristi varijabla petlje. Pogledajmo nekoliko primjera.

Uvod

Naredba for ne postoji zato da bi se niz brojeva ispisao na zaslon raunala,


nego zato da bi se u programu postigli odreeni efekti.

Sadraj

C++ programiranje za apsolutne poetnike

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();
for (x = 60; x < 390; x = x + 5 )
{
circle(320,x,60);
}
getch();
closegraph();
return 0;
}

Varijablu x moemo staviti umjesto


broja koji odreuje udaljenost sredita od gornjeg ruba, pa e se krugovi
crtati od gore prema dolje.

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

Uveavamo li varijablu x za 15 umjesto za 5, pomak sredita krugova


bit e vei.

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

Umjesto broja 15 pokuajmo staviti


10, a zatim 20.

138

PRO - MIL

Sadraj

C++ programiranje za apsolutne poetnike

Uvod

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

Na slian nain moemo crtati nizove drugih geometrijskih oblika,


npr. crta.

PRO - MIL

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 10; x < 640; x = x + 10 )
{
line (x, 20, x, 400);
}
getch();
closegraph();
return 0;
}

Donoenje Grafika
odluke

Varijable
using namespace std;

Petlje

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

Polja

polumjer kruga.

Obrada
teksta

varijablom x moemo mijenjati

Objekti

Osim pozicije sredita kruga,

Saimanje Veliki programi


koda

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 20; x < 210; x = x + 10 )
{
circle(320,240,x);
}
getch();
closegraph();
return 0;
}

Na prvi
program

using namespace std;

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();
for (x = 10; x < 640; x = x + 30 )
{
rectangle (x, 20, x+20, 380);
}
getch();
closegraph();
return 0;
}

Ovo je primjer programa koji crta


niz pravokutnika.

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

U dosadanjim programima koristili smo jednu varijablu.


U ovom primjeru koristima dvije,
jednom pomiemo udaljenost sredita od lijevog ruba, a drugom
mijenjamo promjer.

140

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
int r;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
r = 20;
for (x = 20; x < 475; x = x + 15 )
{
circle(x,240,r);
r = r + 5;
}
getch();
closegraph();
return 0;
}

PRO - MIL

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

For naredba mijenja vrijednost


varijable x o 20 do 475 po 15.

r = 20;

circle(x,240,r);
r = r + 5;

U naredbi za crtanje kruga upotrijebili smo dvije varijable.


Varijablom x odreujemo udaljenost sredita kruga od lijevog ruba, a varijablom r polumjer kruga.

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

I u ovom sluaju promjena pojedinih


elemenata i opaanje rezultata pomoi e nam da bolje razumijemo
program; npr umjesto r = r + 5 pokuajmo staviti r = r + 10; umjesto x = x
+ 15 pokuajmo staviti x = x + 5.

PRO - MIL

Na prvi
program
Obrada
teksta

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


{

Varijable

Prije for naredbe u varijablu r spremimo poetnu vrijednost polumjera kruga. U naem sluaju spremili
smo broj 20.

Da bi kod svakog ponavljanja


polumjer kruga bio vei, nakon
to smo nacrtali krug, unutar vitiastih zagrada for naredbe, broj
u varijabli r poveavamo za 5.
Zbog toga e pri svakom ponavljaju polumjer kruga biti vei.

Objekti

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

Donoenje Grafika
odluke

using namespace std;

Petlje

Za razliku od dosadanjih primjera, u ovom formiramo jo jednu


varijablu koju smo nazvali r.

Saimanje Veliki programi


koda

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

Polja

Pogledajmo bitne dijelove ovog programa.

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

141

Petlje

Animacija

#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;
int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 10; x < 620; x = x + 30 )
{
rectangle (x, 20, x+20, 60);
}
getch();
closegraph();
return 0;
}

Ovom inaicom programa dobit


emo privid kretanja pravokutnika.

Pravokutnik koji se kree


na zaslonu raunala.

Ovom naredbom briemo ekran, a


time i pravokutnik na staroj poziciji.

142

Animaciju moemo napraviti


veoma jednostavno.
Ovaj program crta niz pravokutnika.
Dovoljno je da pravokutnik
prije crtanja na novoj poziciji
obriemo na staroj i dobit emo iluziju kretanja.

#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;
int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 10; x < 620; x = x + 1 )
{
cleardevice();
rectangle (x, 20, x+20, 60);
}
getch();
closegraph();
return 0;
}

PRO - MIL

Sadraj

C++ programiranje za apsolutne poetnike

Uvod

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

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

Donoenje Grafika
odluke

Sve grafike elemente koje smo


do sada mijenjali moemo animirati.
U ovom programu animiramo
irenje kruga.

Petlje

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 10; x < 200; x = x + 1 )
{
cleardevice();
circle (320, 240, x);
}
getch();
closegraph();
return 0;
}

Na prvi
program

using namespace std;

Pokuajmo sami smisliti sline programe.

PRO - MIL

Obrada
teksta
Objekti

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 10; x < 465; x = x + 1 )
{
cleardevice();
circle (320, x, 10);
}
getch();
closegraph();
return 0;
}

Saimanje Veliki programi


koda

U ovom primjeru animiramo krug


koji pada od gornjeg prema donjem rubu .

Polja

using namespace std;

143

Petlje

Petlja u petlji

#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;
int main()
{
int gdriver = 9;
int gmode = 2;
int x;
int r;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 30; x < 610; x = x + 60 )
{
for (r = 5; r < 31; r = r + 5)
{
delay(100);
cleardevice();
circle (x, 240, r);
}
}
getch();
closegraph();
return 0;
}

Slino kao to moemo unutar if


naredbe staviti drugu if naredbu
tako unutar for petlje moemo staviti drugu for petlju.
Kod ovakvih programa veoma je
vano pravilno uvlaiti redove, jer
tako lake uoavamo poetak i kraj
pojedinih for naredbi.

Ovom naredbom nareujemo raunalu da na ovom mjestu stoji


onoliko milisekundi koliki broj smo
stavili u zagradu.
U naem sluaju raunalo e stajati 100 milisekundi.
Ovom naredbom usporavamo izvoenje animacije, ako je animacija suvie brza.
Na vaem raunalu taj broj moete
promijeniti i tako izvoenje animacije prilagoditi brzini svog raunala. (Ako imamo sporo raunalo,
ovu naredbu moemo izbaciti.)

Ovdje vidimo tijek cijele animacije, iako e se tijekom animacije istovremeno vidjeti samo
jedan krug.
Vanjskom petljom pomiemo
sredite kruga u lijevu stranu,
a unutranjom petljom mijenjamo polumjer kruga.

144

PRO - MIL

Uvod
Na prvi
program

Pri tome nismo


ogranieni na to
da moemo staviti
jednu petlju unutar
petlje. Mogue je
unutar petlje staviti
petlju, a unutar te
petlje jo jednu
petlju i tako petlje
dodavati u skladu
s ciljevima koje
elimo postii.

Polja

Petlje

int main()
{
int x;
int r;
cout << "Prije petlje." << endl;
for (x = 0; x < 2; x = x + 1 )
{
cout << "Vanjska petlja. x = " << x << endl;
for (r = 0; r < 3; r = r + 1)
{
cout << "Nutarnja petlja. r = " << r << endl;
}
}
cout << "Nakon petlje." << endl;
cout << endl;
system("PAUSE");
return 0;
}

Varijable

using namespace std;

Analiziranje ovog
programa pomoi
e nam da u potpunosti razumijemo nain funkcioniranja petlje unutar petlje.

Donoenje Grafika
odluke

#include <cstdlib>
#include <iostream>

Sadraj

C++ programiranje za apsolutne poetnike

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

Tekst unutar navodnika


ispisuje se na zaslon raunala.

PRO - MIL

Sadraj varijable x ispisuje se na zaslon raunala.

Skok u novi
red.

Saimanje Veliki programi


koda

Objekti

Obrada
teksta

Da bi rezultat rada programa


bio bolje vidljiv, ovdje smo
naredbu cout koristili na nain na koji je do sada nismo
koristili. U ovoj inaici sadri
tri dijela.

145

Petlje

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

Osim to petlju moemo staviti unutar


druge petlje, petlje moemo staviti
jednu iza druge.

using namespace std;

U ovom sluaju prva petlja mali krug


pomie od dolje prema gore, a zatim
druga petlja mali krug iri tako da sve
zajedno tvori jednostavan prikaz vatrometa.

int main()
{
int gdriver = 9;
int gmode = 2;
int x;
int r;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 465; x > 100; x = x - 1 )
{
cleardevice();
Analiza ovog progcircle (320, x, 10);
rama pomoi e
}
nam da lake razufor (r = 10; r < 91; r = r + 1)
#include <cstdlib>
mijemo funkcionira{
#include <iostream>
nje niza petlji.
cleardevice();
circle (320, x, r);
using namespace std;
}
getch();
int main()
closegraph();
{
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

Sadraj

C++ programiranje za apsolutne poetnike

for (x = 465; x < 100; x = x - 1)


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

sluaju

PRO - MIL

Na prvi
program

druga for naredba


nalazi se unutar
prve for naredbe.

nost dviju for na-

circle (320, x, r);

Donoenje Grafika
odluke

Varijable
ovom

Ovakva ispreplete-

Petlje
Polja

Obrada
teksta

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


{
circle (320, x, r);
}

Petlje se mogu nalaziti jedna iza druge

redbi nije dozvoljena.

Objekti

for (x = 465; x < 100; x = x - 1)


{
circle (320, x, 10);
}

Petlje se mogu nalaziti jedna unutar


druge.

Saimanje Veliki programi


koda

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


{
for (r = 5; r < 31; r = r + 5)
{
circle (x, 240, r);
}
}

Uvod

Dozvoljene i nedozvoljene kombinacije petlji

147

Petlje

While petlja

#include <cstdlib>
#include <iostream>

Do sada smo za svaki novi proraun


programe morali iznova pokretati.

using namespace std;

Daleko elegantnije bilo bi kad bi nas


program nakon prorauna pitao elimo li proraun ponoviti ili elimo prekinuti izvoenje programa.

int main()
{
int broj;
int kvadrat;
Ovaj program radi upravo tako. Uneint odgovor;
semo li nakon prorauna broj 1, proodgovor = 1;
raun emo moi ponoviti, a unesewhile (odgovor == 1)
mo li 2, odnosno bilo koji broj razliit
{
od 1 program e se zaustaviti.
cout << "Unesite broj" << endl;
cin >> broj;
kvadrat = broj * broj;
cout << "Kvadrat unesenog broja je:" << endl;
cout << kvadrat;
cout << endl;
cout << "Ponovo = unesite 1." << endl;
cout << "Kraj = unesite 2." << endl;
cin >> odgovor;
}
cout << endl;
U ovom programu koristi se
system("PAUSE");
petlja, budui da se dio proreturn 0;
grama moe ponoviti vie
}
puta. Ova petlje nije realizirana for naredbom, nego
while naredbom.
U emu je razlika?
Naredba for pogodnija je za
tono odreen broj ponavljanja, a naredba while onda kad unaprijed ne moemo znati broj ponavljanja.
(U ovom sluaju mi ne moemo unaprijed znati koliko
puta e korisnik htjeti kvadrirati neki broj.)

148

PRO - MIL

Zato imamo dvije naredbe ako rade isti posao?

Ovdje se unutar zagrada nalazi uvjet koji


while naredba ispituje. Uvjeti se formiraju
po istoj logici kao i kod for naredbe.
Ako je uvjet zadovoljen, izvrit e se naredbe unutar vitiastih zagrada, a nakon

a = 1;

toga se raunalo vraa na while naredbu i


ponovo ispituje je li uvjet zadovoljen.

Uvod
Petlje

Prije naredbe while moramo varijabli koju e


while naredba koristiti
dati neku poetnu vrijednost.

Donoenje Grafika
odluke

Varijable

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

Na prvi
program

Kljuna naredba u novoj inaici programa je while naredba. Logika uporabe


te naredbe slina je logici uporabe for naredbe i ako bismo se potrudili svaki
program realiziran for naredbom mogli bismo realizirati while naredbom i
svaki program realiziran while naredbom mogli bismo realizirati for naredbom.

Sadraj

C++ programiranje za apsolutne poetnike

cin >> a;
}

Ako nije, izvodi se prva naredba poslije


druge vitiaste zagrade.
U naem sluaju ispituje se je li sadraj

Da bi se ponavljanje u
nekom trenutku prekinulo, unutar vitiastih
zagrada varijabli koju
while naredba ispituje
treba promijeniti vrijednost.

PRO - MIL

varijable a jednak broju 1. Zato prije while


naredbe moramo u varijablu a staviti broj
jedan. Kad bi u varijabli a bio neki drugi
broj, raunalo bi skoilo na prvi red nakon
druge vitiaste zagrade.

Obrada
teksta

tar vitiastih zagrada.

Objekti

Saimanje Veliki programi


koda

Ako jest, ponovo se izvode naredbe unu-

Polja

while (a == 1)

149

Petlje

Pogledajmo dijelove naeg programa.


#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int broj;
int kvadrat;
int odgovor;

Uobiajeni poetak programa i formiranje varijabli.

U varijablu odgovor stavljamo broj 1.


To moramo uiniti jer naredba while
ispituje je li u varijabli odgovor broj
1.

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

Ako jest, izvode se ove naredbe.

{
cout << "Unesite broj" << endl;
cin >> broj;
kvadrat = broj * broj;
cout << "Kvadrat unesenog broja je:" << endl;
cout << kvadrat;
cout << endl;
cout << "Ponovo = unesite 1." << endl;
cout << "Kraj = unesite 2." << endl;
cin >> odgovor;
}

cout << endl;


system("PAUSE");
return 0;
}

150

U ovom djelu izraunava se kvadrat


unesenog broja.
U ovom dijelu u
varijablu odgovor
unosi se broj na
temelju kojeg e
while naredba odluiti treba li naredbe unutar vitiastih
zagrada ponoviti.

Kraj programa. Izvodit e se kad


while naredba ustanovi da sadraj
varijable odgovor nije broj 1.

PRO - MIL

Zato je u naem sluaju odgovarajua poetna vrijednost 1?

Uvod

Varijablu koju e koristiti while naredba moramo prije while naredbe


formirati i moramo joj dati odgovarajuu poetnu vrijednost.

Sadraj

C++ programiranje za apsolutne poetnike

Ovdje naredbom cin preko tipkovnice unosimo


novu vrijednost varijable
odgovor i time biramo hoemo li petlju ponoviti ili
emo izai iz programa.

PRO - MIL

Petlje
Saimanje Veliki programi
koda

Objekti

int main()
{
int odgovor;
odgovor = 1;
cout << "Prije while naredbe." << endl;
while (odgovor == 1)
{
cout << "Prvi red bloka ponavljanja" << endl;
cout << "1 = nastavak ili 2 = kraj." << endl;
cin >> odgovor;
cout << "Zadnji red bloka ponavljanja" << endl;
}
cout << "Nakon while naredbe." << endl;
cout << endl;
system("PAUSE");
return 0;
}

Polja

using namespace std;

Obrada
teksta

#include <cstdlib>
#include <iostream>

Donoenje Grafika
odluke

Varijable

Ako bi vrijednost varijable odgovor bila npr. 2, nakon while naredbe


program bi skoio na ovu naredbu i sadraj unutar navodnika ne bi se
izvravao.

Na prvi
program

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

151

Petlje

U prethodnim programima korisnik je mogao izabrati hoe li program izvoditi


ponovo, ali biranje je funkcioniralo na vrlo neprirodan nain. Nije ba logino
unijeti broj 1 za ponavljanje prorauna ili broj 2 za prekid programa.
Ova inaica programa to biranje izvodi na elegantniji nain. Umjesto unoenja
brojeva kao odgovora, u ovom programu unosimo slova.
Da bi to bilo mogue, upotrijebili smo novi tip varijable, varijablu char tipa u
koju moemo spremiti jedno slovo.

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

152

PRO - MIL

Uobiajeni poetak programa.

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;
}

Ako jest, izvodi se sadraj


unutar vitiastih zagrada.

Ovdje se izraunava kvadrat unesenog


broja.

Ovdje se unosi slovo d ili slovo n na temelju ega e while naredba ponovo izvesti naredbe unutar vitiastih zagrada
ako smo unijeli slovo d ili e izvesti naredbe nakon vitiastih zagrada ako smo

Kraj programa.

PRO - MIL

unijeli slovo n.

Varijable
Donoenje Grafika
odluke

while naredbom ispitujemo je li sadraj varijable


odgovor razliit od slova n.

Petlje

char odgovor;
odgovor = 'd';

Polja

int broj;
int kvadrat;

Nakon formiranja u varijablu odgovor spremamo slovo d.

Obrada
teksta

int main()
{

Formiranje varijable tipa char u koju


moemo spremiti jedno slovo.

Objekti

using namespace std;

Formiranje varijabli koje emo koristiti


u programu.

Saimanje Veliki programi


koda

#include <cstdlib>
#include <iostream>

Na prvi
program

Uvod

Pogledajmo poblie dijelove programa.

Sadraj

C++ programiranje za apsolutne poetnike

153

Petlje

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

While naredbu moemo iskoris-

using namespace std;

grafikih programa.

titi i za viestruko pokretanje

int main()
Mali krug kree se od gore pre{
int gdriver = 9;
ma dolje, a zatim nas raunalo
int gmode = 2;
pita elimo li ponoviti animaciju.
int x;
char odgovor;
odgovor = 'd';
U ovom programu koristimo dviinitgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
je razliite vrste petlji.
setcolor (BLACK);
while (odgovor != 'n')
{
While naredbom ponavlja se
cleardevice();
animacija, a for naredbom, koja
for (x = 10; x < 465; x = x + 1 )
{
se nalazi unutar while petlje,
cleardevice();
animira se kretanje kruga.
circle (320, x, 10);
}
settextstyle(9, HORIZ_DIR, 1);
outtextxy(20, 20, "elite li ponovo (d/n)?");
U grafikom prozoru
odgovor = getch();
za unos slova u vari}
jablu odgovor ne
closegraph();
koristi se cin naredreturn 0;
ba, nego getch() na}
redba.

Ako koristimo getch() naredbu, nakon unosa ne


koristima Enter tipku.
Dovoljno je pritisnuti slovo
d ili slovo n.

154

PRO - MIL

Pogledajmo dijelove naeg programa.

Uobiajeni poetak programa.

using namespace std;

Formiranje varijabli.

Otvaranje
prozora.

while (odgovor != 'n')

grafikog

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


{
cleardevice();
circle (320, x, 10);
}

Obrada
teksta

For petlja slui za izvoenje animacije.

settextstyle(9, HORIZ_DIR, 1);


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

Nakon izvoenja animacije unosi se odgovor na pitanje elimo li


ponoviti animaciju.

}
closegraph();
return 0;

PRO - MIL

Varijable

Vanjska while petlja.

cleardevice();

Donoenje Grafika
odluke

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


setbkcolor (WHITE);
setcolor (BLACK);

Petlje

Slui nam za biranje ponavljanja


animacije ili kraja programa. U varijablu odgovor sprema se slovo d.

Polja

char odgovor;
odgovor = 'd';

Kraj programa. Ovaj dio izvodi se kad


while naredba ustanovi da sadraj
varijable odgovor nije razliit od n.

Objekti

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

Formiranje varijable odgovor. Ta


varijabla je char tipa i koristit e je
while petlja unutar koje se nalazi
program za animaciju.

Saimanje Veliki programi


koda

int main()
{

Na prvi
program

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

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

155

Petlje

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


kontroliramo kretanje pravokutnika u lijevu ili desnu stranu.
Program naputamo pritiskom na tipku k.
Ovaj program ve bismo mogli smatrati jednim elementom primitivne igrice.
Dovoljno bi bilo dodati kretanje malih krugova od gore prema dolje i broja koji
bi brojio koliko krugova smo ovim pravokutnikom uspjeli uhvatiti.

Umjesto:
int x;
x =290;
moemo napisati
int x = 290;

Umjesto:
char odgovor;
odgovor = d;
moemo napisati
char odgovor = 'd';

Pravokutnik koji moemo pomicati u lijevu i


desnu stranu.

156

#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;
int main()
{
int gdriver = 9;
int gmode = 2;
int x = 290;
char odgovor = 'd';
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
while (odgovor != 'k')
{
rectangle(x, 432, x+60, 438);
odgovor = getch();
if (odgovor == 75)
{
x = x - 5;
}
if (odgovor == 77)
{
x = x + 5;
}
cleardevice();
}
closegraph();
return 0;
}

PRO - MIL

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


odgovor = getch();
if (odgovor == 75)
{
x = x - 5;
}
if (odgovor == 77)
{
x = x + 5;
}
cleardevice();
}

Ovdje se crta pravokutnik koji


pomiemo.

Ovdje program ispituje koja


tipka je pritisnuta, a rezultat
sprema u varijablu odgovor.

Ako pritisnemo lijevu strelicu, varijabla x, koja odreuje udaljenost pravokutnika od lijeve strane, umanjit
e se za 5, pa e se pravokutnik
drugi put crtati pomaknut 5 toaka u
lijevu stranu.

Ako pritisnemo desnu strelicu, varijabla x e se uveati za 5, pa e se


pravokutnik drugi put crtati pomaknut
5 toaka u desnu stranu.

closegraph();
return 0;
}

Kraj programa.

PRO - MIL

Naredbom za brisanje ekrana briemo pravokutnik na staroj poziciji


da bismo ga nacrtali na novoj.
(Pokuajmo ovu naredbu izbaciti.)

Uvod
Na prvi
program
Varijable

Ako pritisnemo tipku k program e izai iz petlje i naa


igrica e se ugasiti.

Donoenje Grafika
odluke

while (odgovor != 'k')


{

Cijelo vrijeme dok naa primitivna igrica radi, vrtjet e


se u ovoj while petlji.

Petlje

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

Polja

using namespace std;

Obrada
teksta

Uobiajeni poetak programa,


formiranje varijabli i otvaranje
grafikog prozora.

Objekti

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

Saimanje Veliki programi


koda

Pogledajmo dijelove naeg programa.

Sadraj

C++ programiranje za apsolutne poetnike

157

Petlje

Dodamo li u prethodni program ispitivanje je li pritisnuta


strelica prema gore ili strelica prema dolje, na pravokutnik moi e se pomicati u sva etiri smjera.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;

Varijablom x odreujemo udaljenost


gornjeg lijevog ugla pravokutnika od
lijevog ruba grafikog prozora, a
varijablom y od gornjeg ruba grafikog prozora. Brojevi 290 i 220 odreuju poetnu poziciju pravokutnika.
(Pokuajmo mijenjati te brojeve.)

int main()
{
int gdriver = 9;
int gmode = 2;
int x = 290;
int y = 220;
char odgovor = 'd';
initgraph(&gdriver, &gmode, "");
I u ovom sluaju program e se izvosetbkcolor (WHITE);
diti dok korisnik ne pritisne tipku k,
setcolor (BLACK);
odnosno dok je pritisnuta tipaka razlicleardevice();
ita od k.
while (odgovor != 'k')
{
rectangle(x, y, x+60, y+5);
Ovdje smo dodali dio programa u kojem ispiodgovor = getch();
tujemo je li pritisnuta strelica prema gore ili
if (odgovor == 75)
strelica prema dolje.
{
x = x - 5;
Zato ovdje koristimo broj 72, a ne strelicu
}
prema gore?
if (odgovor == 77)
{
Zato to strelicu prema gore ne moemo unix = x + 5;
jeti u program preko tipkovnice, a broj 72 je
}
ifra za strelicu prema gore. (75 za lijevo, 77
if (odgovor == 72)
za desno i 80 za dolje.)
{
y = y - 5;
}
if (odgovor == 80)
{
y = y + 5;
}
cleardevice();
}
closegraph();
return 0;
}

158

PRO - MIL

PRO - MIL

pravokutnika od lijevog ruba


odreena je sa x + 60, a udaljenost donjeg desnog ugla od gornjeg ruba odreena je sa y+5.

Uvod
Na prvi
program
Polja

Petlje

irina naeg pravokutnika je 60,


a visina 5. (Pokuajmo promijeniti te brojeve.)

Varijable

Udaljenost donjeg desnog ugla

Obrada
teksta

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

Ako ovu naredbu obriemo, pravokutnik e se crtati na novoj poziciji, ali e ostati i na staroj pa e
rezultat kretanja pravokutnika biti
trag na zaslonu raunala.
Obriimo ovu naredbu i pokrenimo program.

Objekti

using namespace std;

Varijablama x i y odreena je
pozicija gornjeg lijevog ugla pravokutnika. Varijabla x odreuje
udaljenost od lijevog ruba, a
varijabla y od gornjeg ruba.

Saimanje Veliki programi


koda

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

Donoenje Grafika
odluke

Da bismo dobili primitivni program za crtanje, dovoljno je da u prethodnom programu maknemo naredbu za brisanje zaslona raunala.

Sadraj

C++ programiranje za apsolutne poetnike

159

Petlje

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

elimo li napraviti program za crtanje, pogodnije je za


crtanje koristiti toku umjesto pravokutnika.

using namespace std;


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

160

Ovom naredbom ispisujemo jednu


toku na zaslon raunala. Varijabla
x odreuje udaljenost toke od lijevog ruba, varijabla y od gornjeg ruba,
a BLACK odreuje boju toke.

elimo li dobiti punu crtu, toku moramo pomicati za 1.


Pokuajmo umjesto 1 staviti 2 ili 5.

PRO - MIL

Sadraj

C++ programiranje za apsolutne poetnike

Uvod

Za crtanje moemo koristiti i krug.

Na prvi
program

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

PRO - MIL

Imajmo stalno na umu da emo


razumijevanje programa i vjetinu pisanja vlastitih programa
stei jedino tako da svaki primjer
programa koji je dat u ovoj knjizi
mijenjamo na sve naine koji
nam padnu na pamet i onda promatramo kakve posljedice izaziva odreena promjena.

Donoenje Grafika
odluke
Obrada
teksta

Pokuajmo mijenjati taj broj.

Objekti

Broj 5 odreuje pomak novog sredita u odnosu na staro.

Polja

Petlje

Ovom naredbom ispisujemo krug.


Varijabla x odreuje udaljenost
sredita kruga od lijevog ruba,
varijabla y udaljenost sredita od
gornjeg ruba, a 20 je polumjer
kruga.

Saimanje Veliki programi


koda

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

Varijable

using namespace std;

161

Petlje

Objekte na zaslonu raunala osim tipkovnicom moemo pomicati i miem.


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

Naredbom kbhit ispituje se je li bilo


koja tipka na tipkovnici pritisnuta.

int main()
Naredbom while (!kbhit) nareujemo
{
raunalu da petlju izvodi tako dugo
int gdriver = 9;
dok ni jedna tipka nije pritisnuta.
int gmode = 2;
initgraph(&gdriver, &gmode, "");
Pritisnemo li bilo koju tipku na tipkovsetbkcolor (WHITE);
nici, zaustavlja se izvoenje petlje i
setcolor (BLACK);
prekida se program.
cleardevice();
while (!kbhit())
{
rectangle(mousex(),mousey(),mousex()+80,mousey()+80 );
}
closegraph();
return 0;
}

Naredbom mousex() oitava se


udaljenost pokazivaa mia od
lijevog ruba grafikog prozora.

Naredbom mousey() oitava se


udaljenost pokazivaa mia od
gornjeg ruba grafikog prozora.

Gornji lijevi ugao pravokutnika


odreen je poloajem pokazivaa mia, a donji desni tako
da se udaljenost pokazivaa
mia od desnog ruba uveava
za 80, a udaljenost pokazivaa mia od gornjeg ruba uveava isto tako za 80.
Dimenzije naeg pravokutnika
su 80 puta 80.

162

PRO - MIL

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

Otvaranje grafikog prozora.

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


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

Unutar while petlje stalno se


oitava pozicija pokazivaa
mia i crta se krug ije sredite
odreuje poloaj pokazivaa
mia, a polumjer je 100.

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

Petlja se izvodi tako dugo dok


niti jedna tipka na tipkovnici
nije pritisnuta.

closegraph();
return 0;

Uvod

Kraj programa.

Isto tako moemo koristiti i


druge grafike elemente,
npr. toke ili crte.
Pokuajmo sami smisliti
varijacije ovakvih programa.

PRO - MIL

Objekti
Saimanje Veliki programi
koda

Jasno je da osim postojeih


dimenzija kruga i pravokutnika moemo koristi pravokutnike i krugove drugih
dimenzija.

Obrada
teksta

Polja

Na prvi
program

Varijable kojima odreujemo tip


grafikog prozora.

Varijable

using namespace std;

Poetak programa.

Donoenje Grafika
odluke

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

Petlje

Miem moemo pokretati bilo koji grafiki objekt, npr. krug.

Sadraj

C++ programiranje za apsolutne poetnike

163

Petlje

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

Ako u prethodne programe dodamo naredbu za brisanje sadraja


grafikog prozora, dobit emo program koji nam omoguuje pomicanje objekta miem.

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
while (!kbhit())
{
cleardevice();
circle(mousex(),mousey(),100);
}
closegraph();
return 0;
}

#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();
Na slian nain moemo miem
return 0;
pomicati neto drugo, npr. dvije
}
crte koje bi u igri mogle biti nian.

164

PRO - MIL

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

Sadraj unutar vitiastih


zagrada izvrit e se jedino ako je dolo do pomaka mia.
U tom sluaju obrisat e
se sadraj grafikog prozora i objekt e se nacrtati na novoj poziciji.

{
cleardevice();
circle(mousex(),mousey(),100);
}
clearmouseclick(WM_MOUSEMOVE);
}
closegraph();
return 0;
}

PRO - MIL

Da bi bilo mogue novo


oitavanje mia, rezultat
starog oitavanja ovom
se naredbom mora obrisati.
Kad ovu naredbu ne bismo upotrijebili, u programu bi bilo mogue samo
jedno oitavanje mia.

Na prvi
program
Varijable
Donoenje Grafika
odluke

Ovom naredbom ispitujemo je li dolo do pomaka


mia.

Petlje

using namespace std;

Polja

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

Ovaj program ispituje je li dolo do pomaka


mia ili nije. Ekran se brie i objekt crta na novoj poziciji jedino ako je dolo do pomicanja
mia.

Obrada
teksta

Neprestano brisanje i crtanje moe na sporijim


raunalima izazvati treperenje slike, to je veoma neugodno.

Objekti

Ako nije dolo do pomaka mia, nema potrebe


objekt brisati i ponovo crtati.

Saimanje Veliki programi


koda

Nedostatak prethodnih programa bio je to se


ekran brie i objekt ponovo crta, bez obzira je li
to potrebno ili nije, odnosno bez obzira je li
dolo do pomaka mia ili nije.

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

165

Petlje

Osim to moemo oitati je li dolo do pomaka mia, moemo isto tako oitati je
li pritisnuta neka tipka na miu. Ovaj program e nam omoguiti da pritiskom na
lijevu tipku mia nacrtamo objekt u grafikom prozoru.

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

Ovom naredbom ispitujemo je li pritisnuta lijeva


tipka mia.
Ako jest izvodi se sadraj
unutar vitiastih zagrada.

Ovom naredbom briemo


rezultat oitavanja lijeve
tipke na miu.
Novo oitavanje je mogue jedino nakon brisanja
starog oitavanja.

Uoimo, ako smo oitavali ismouseclick(WM_MOUSEMOVE), briemo


clearmouseclick(WM_MOUSEMOVE),
a ako smo oitavali ismouseclick(WM_LBUTTONDOWN), briemo
clearmouseclick(WM_LBUTTONDOWN).

166

PRO - MIL

ismouseclick(WM_LBUTTONDOWN)

Oitavanje lijevog klika

clearmouseclick(WM_LBUTTONDOWN);

Brisanje oitavanja lijevog klika.

ismouseclick(WM_LBUTTONDBLCLK)

Oitavanje duplog lijevog klika.

clearmouseclick(WM_LBUTTONDBLCLK)

Brisanje oitavanja duplog lijevog


klika.

ismouseclick(WM_RBUTTONDOWN)

Oitavanje desnog klika.

clearmouseclick(WM_RBUTTONDOWN)

Brisanje oitavanja desnog klika.

ismouseclick(WM_RBUTTONDBLCLK)

Oitavanje duplog desnog klika.

clearmouseclick(WM_RBUTTONDBLCLK)

Brisanje oitavanja duplog desnog klika.

ismouseclick(WM_MBUTTONDOWN)

Oitavanje srednjeg klika.

clearmouseclick(WM_MBUTTONDOWN)

Brisanje oitavanja srednjeg klika.

ismouseclick(WM_MBUTTONDBLCLK)

Oitavanje duplog srednjeg klika.

clearmouseclick(WM_MBUTTONDBLCLK)

Brisanje oitavanja duplog srednjeg klika.

Uvod

Brisanje oitavanja kretanja mia.

Na prvi
program

clearmouseclick(WM_MOUSEMOVE)

Varijable

Oitavanje kretanja mia.

PRO - MIL

Saimanje Veliki programi


koda

Objekti

Obrada
teksta

Polja

Petlje

ismouseclick(WM_MOUSEMOVE)

Donoenje Grafika
odluke

OITAVANJE MIA

Sadraj

C++ programiranje za apsolutne poetnike

167

Petlje

Do while petlja
Pokrenemo li ova dva
programa, vidjet emo
da je rezultat njihovog
rada potpuno jednak,
iako prvi koristi while
naredbu, a drugi do
while naredbu.

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

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

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

168

PRO - MIL

cin >> a;
}

Ovaj dio unutar vitiastih zagrada ponavlja se


dok je uvjet zadovoljen, u naem sluaju dok je
sadraj varijable a jednak broju 1.

Petlja do while zapoinje odreivanjem vrijednosti varijable koju e koristiti while naredba.

a = 1;
do

Ovaj tip petlje zapoinje naredbom do nakon


koje slijede vitiaste zagrade unutar kojih se
nalazi dio programa koji se ponavlja dok je uvjet zadovoljen

Uvod
Na prvi
program

Ispitivanje je li uvjet zadovoljen, u naem sluaju, je li sadraj varijable a jednak broju 1.

Varijable

while (a == 1)

Odreivanje vrijednosti varijable koju e koristiti


while naredba.

Donoenje Grafika
odluke

a = 1;

Petlje

Usporedimo strukture while petlje i do while petlje.

Sadraj

C++ programiranje za apsolutne poetnike

while (a == 1);

Uoimo da se ovdje na kraju while naredbe


obavezno pie ; oznaka.

U emu je razlika izmeu ovih dviju petlji, osim oigledne razlike u nainu
pisanja? Razlika je u tome to se sadraj while petlje nee izvesti niti jednom
ako uvjet nije zadovoljen jer se ispitivanje nalazi prije djela koji se ponavlja.
Sadraj do while petlje e se bez obzira na uvjet izvesti barem jednom jer se
najprije izvodi dio koji se ponavlja, a tek nakon toga ispituje se je li uvjet zadovoljen.

PRO - MIL

Obrada
teksta

Ovdje se ispituje je li zadovoljen uvjet po istoj


logici po kojoj se ispituje i u while naredbi.

Objekti

Dio koji se ponavlja i u kojem mora postojati


mogunost promjene vrijednosti varijable a.

Saimanje Veliki programi


koda

cin >> a;

Polja

169

Petlje

Generator sluajnih brojeva


Ponekad, osobito u igricama, htjeli bismo da se neki dijelovi u programu pri
svakom pokretanju programa odvijaju drugaije. Ako piemo igricu u kojoj igra
gaa letee tanjure, htjeli bismo da se pri svakom pokretanju igre oni pojave
na drugom mjestu i da se svaki put kreu drugaijim putanjama. Igrica e nam
brzo dosaditi ako se objekt koji trebamo gaati pri svakom pokretanju igrice
pojavljuje na istom mjestu i kree istom putanjom.
Takve varijacije u odvijanju programa postiemo generatorom sluajnih brojeva. Pogledajmo kako emo formirati program za generiranje sluajnih brojeva.

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

Sluajne brojeve generirat


emo naredbom rand().
Problem je u tome to e
ovako napisani program pri
svakom pokretanju generirati iste sluajne brojeve.
Jasno, od takvih sluajnih
brojeva ne moemo imati
puno koristi.
Pokuajmo napisati program koji nee svaki put generirati isti niz brojeva.

170

PRO - MIL

Sadraj

C++ programiranje za apsolutne poetnike

Na prvi
program

Uvod

Problem koji se sastoji u tome


da naredba rand(); uvijek generira isti niz brojeva rijeit emo
naredbom srand(1);.

using namespace std;


int main()
{
int x;
srand(2);
for (x = 0; x < 11; x = x + 1)
{
cout << rand() << endl;
}
system("PAUSE");
return 0;
}

PRO - MIL

Petlje

Problem je u tome to emo za isti broj


unutar zagrade dobivati uvijek isti niz.
Dakle srand(6) davat e pri svakom
pokretanju isti niz brojeva, ali drugaiji
nego npr. srand(5). Oito bi bilo dobro
kad bismo na neki nain broj unutar
zagrade mogli mijenjati.

Polja

Ako umjesto srand(1); stavimo srand


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

Obrada
teksta

#include <cstdlib>
#include <iostream>

Stavimo li naredbu srand(1) prije naredbe rand() postii emo da naredba


rand() generira neki niz brojeva.

Objekti

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

Saimanje Veliki programi


koda

using namespace std;

Donoenje Grafika
odluke

Varijable

#include <cstdlib>
#include <iostream>

171

Petlje

#include <cstdlib>
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
cout << time(NULL) << endl;
system("PAUSE");
return 0;
}

Da bi naredba time(NULL) funkcionirala,


moramo naredbom #include <ctime> ukljuiti odgovarajuu biblioteku.

Razliite brojeve dobit emo naredbom


time(NULL). Iako se ini loginim da naredba time(NULL) pokazuje trenutno vrijeme, ona to ne ini, nego prikazuje trenutno sistemsko vrijeme. To je vrijeme koje
je proteklo od 1. sijenja 1970. godine.

Budui da program ne moemo


vie puta pokrenuti u istom trenutku, pri svakom pokretanju
ove naredbe dobit emo drugi
broj.

172

PRO - MIL

Taj problem moemo najjednostavnije eliminirati tako da


prvi broj koji generira generator sluajnih brojeva ne koristimo u programu.

PRO - MIL

Uvod
Na prvi
program
Saimanje Veliki programi
koda

Objekti

Obrada
teksta

U ovom rjeenju problematino je to to su esto poetni


brojevi veoma slini. Prvi put
smo dobili 6089, drugi put
6132, a trei put 6171.

Polja

Petlje

int main()
{
int x;
srand(time(NULL));
for (x = 0; x < 11; x = x + 1)
{
cout << rand() << endl;
}
system("PAUSE");
return 0;
}

Varijable

using namespace std;

Stavimo li u naredbu srand(1); umjesto


konkretnog broja jedan naredbu time
(NULL) koja e u svakom trenutku generirati drugaiji broj, naredba rand() pri
svakom e pokretanju generirati drugaiji
brojani niz. Sada smo ve blizu onome
to smo eljeli, a to je generator sluajnih
brojeva.

Donoenje Grafika
odluke

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

Sadraj

C++ programiranje za apsolutne poetnike

173

Petlje

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

Problem koji bi mogla stvarati pojava da


na generator sluajnih brojeva generira
niz brojeva u kojem prvi broj u nizu ima
slinu vrijednost prilikom vie pokretanja
rijeit emo tako da prvi put pozovemo
naredbu rand(); i tako generirani broj neemo ni za to koristiti.

Koristit emo sluajne brojeve koji e se


generirati prilikom sljedeih pozivanja
naredbe rand();.
Na taj nain postii emo da e pri nizu
uzastopnih pokretanja i prvi broj u svakom od nizova bit razliit.

Vidimo da smo uspjeli dobiti vie


doista razliitih nizova.

174

PRO - MIL

Pokrenemo li takav program kao


rezultat dobit emo samo nule, i
moda ponekad broj 1.
Zato?
Zato to je rezultat rada naredbe
rand() i naredbe RAND_MAX int
tipa, tj. broj bez decimalnog zareza. Rezultat, dodue, spremamo u
varijablu sb koja je float tipa, ali
raunalo radi tako da izrauna rezultat u int formatu, a tek onda broj
pretvara u float.
Prvo podijeli dva int broja, makne
sadraj desno od zareza, jer int tip
nema zarez, i tek onda rezultat
sprema u varijablu float tipa.

PRO - MIL

Uvod
Na prvi
program
Varijable
Donoenje Grafika
odluke
Petlje

Maksimalnu moguu vrijednost generiranog sluajnog broja dobit emo


naredbom RAND_MAX.

Polja

int main()
{
int x;
float sb;
srand(time(NULL));
rand();
for (x = 0; x < 11; x = x + 1)
{
sb = rand() / RAND_MAX;
cout << sb << endl;
}
system("PAUSE");
return 0;
}

Obrada
teksta

using namespace std;

Najprije emo program preurediti


tako da generira brojeve izmeu 0 i
1. To emo postii tako da generirani broj podijelimo maksimalnom
moguom vrijednou sluajnog
broja. U tom sluaju, ako je generirani sluajni broj nula, rezultat e
biti nula, a ako je jednak maksimalnoj moguoj vrijednosti bit e 1. Za
sve ostale vrijednosti dobit emo
broj izmeu nula i jedan.

Objekti

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

Saimanje Veliki programi


koda

Sad kad smo konano dobili niz sluajnih brojeva, postavlja se pitanje kako
postii da ti sluajni brojevi budu unutar unaprijed odreenih granica. Ako
elim da se objekt pojavi na sluajnoj poziciji unutar prozora irokog 640 toaka, bilo bi zgodno da generator sluajnih brojeva generira sluajni broj izmeu 0 i 640.

Sadraj

C++ programiranje za apsolutne poetnike

175

Petlje

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

Ovom naredbom nareujemo


raunalu da jedan tip podatka
npr. int pretvori u neki drugi tip,
npr. float.

Nakon primjene te naredbe program e


generirati sluajne brojeve izmeu broja
0 i broja 1.

static_cast <float> ( rand() )


Ovdje navedemo tip u koji neki drugi tip elimo
pretvoriti. Mi elimo int tip pretvoriti u float, pa
smo zato ovdje napisali float.

176

Unutar navodnika navedemo varijablu ili izraz


iji tip elimo mijenjati.
Mi emo mijenjati tip
rezultatu izvoenja rand
() naredbe.

PRO - MIL

Sadraj

C++ programiranje za apsolutne poetnike

Uvod

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

Ovaj dio pretvara int sluajni broj u float tip.

Za sve ostale vrijednosti rezultat e biti


izmeu 0 i 640, a to je ono to smo htjeli
postii.

sb = ( static_cast <float> ( rand() ) / RAND_MAX ) * 640;

Generira sluajne
brojeve.

Maksimalna vrijednost
koju rand() generira.

Dijeljenjem sluajnog broja maksimalnom moguom vrijednou dobivamo broj izmeu broja 0 i broja 1.

PRO - MIL

Mnoimo li
broj izmeu
0 i 1 brojem
640, dobit
emo brojeve izmeu 0
i 640.

Varijable
Donoenje Grafika
odluke
Petlje
Polja

Ako je sluajni broj imao maksimalnu moguu vrijednost 1, rezultat e biti 640.

Obrada
teksta

Pogledajmo dio programa


kojim generiramo sluajni
broj izmeu 0 i 640.

Objekti

Ako je sluajni broj imao minimalnu moguu vrijednost 0, rezultat e biti nula.

Saimanje Veliki programi


koda

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

Na prvi
program

using namespace std;

177

Petlje

#include <cstdlib>
#include <iostream>
#include <ctime>
using namespace std;

Ako elimo da raunalo generira broj izmeu 0 i 640 bez decimalnog zareza, sluajni broj emo spremiti u int varijablu.
Budui da je generirani sluajni broj float
tipa, raunalo e nas pri prvom pokretanju
programa upozoriti da je dolo do pretvaranja float tipa u int tip.

int main()
{
int x;
Kad float tip broja spremimo u int varijablu,
int sb;
raunalo e ga automatski pretvoriti u int
srand(time(NULL));
tip tako da e mu maknuti sve brojeve derand();
sno od decimalnog zareza.
for (x = 0; x < 11; x = x + 1)
{
sb = (static_cast <float> (rand()) / RAND_MAX) * 640;
cout << sb << endl;
}
system("PAUSE");
return 0;
}

Raunalo nas upozorava


da je dolo do pretvaranja
float tipa u int tip.
Budui da je to upravo
ono to smo eljeli, ovo
upozorenje emo zanemariti.

178

PRO - MIL

Sadraj

C++ programiranje za apsolutne poetnike

Uvod

Koritenje sluajnih brojeva

Na prvi
program

Ovaj program e generirati


krugove na sluajno odabranim pozicijama.

Ispis kruga nalazi se unutar petlje pa e se generirati


onoliko krugova koliko puta e se petlja izvesti.

PRO - MIL

Petlje
Polja

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

Obrada
teksta

Budui da poloaj kruga odreuju


dva broja, jedan koji odreuje udaljenost sredita od desnog ruba i
drugi koji odreuje udaljenost sredita od gornjeg ruba generirat
emo dva sluajna broja.

Objekti

using namespace std;

Saimanje Veliki programi


koda

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

Donoenje Grafika
odluke

Varijable

Na taj nain u igrama moemo generirati objekte na sluajno odabranim mjestima.

179

Petlje

Pogledajmo primjer sasvim jednostavne igrice. Raunalo e generirati sluajni


broj izmeu 0 i 100, a mi emo pokuati pogoditi koji je to broj. Ako ne pogodimo, raunalo e nas obavijestiti je li zamislilo vei ili manji broj, pa emo pogaati ponovo, dok ne pogodimo. Na kraju nas raunalo obavjetava koliko pokuaja nam je trebalo da pogodimo zamiljeni broj.

#include <cstdlib>
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
int odgovor;
int slucajni_br;
int brojcanik = 0;
srand(time(NULL));
rand();
slucajni_br = (static_cast <float> (rand()) / RAND_MAX) * 100;
cout << "Zamislio sam broj od 0 do 100." << endl;
cout << "Pogodite koji je to broj" << endl;
do
{
cout << "Unestite odgovor." << endl;
cin >> odgovor;
brojcanik = brojcanik + 1;
if (slucajni_br > odgovor)
{
cout << "Zamislio sam veci broj." << endl;
}
if (slucajni_br < odgovor)
{
cout << "Zamislio sam manji broj." << endl;
}
}
while (slucajni_br != odgovor);
cout << "Pogodili ste " << brojcanik << ". put." << endl;
system("PAUSE");
return 0;
}

180

PRO - MIL

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;

Ovdje unosimo odgovor.

Pri svakom unosu odgovora


brojanik poveavamo za 1.

if (slucajni_br > odgovor)


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

Izvodi se ako je
zamiljeni broj vei
od unesenog.

Izvodi se ako je
zamiljeni broj manji od unesenog.

}
while (slucajni_br != odgovor);
cout << "Pogodili ste " << brojcanik << ". put." << endl;
system("PAUSE");
return 0;
}

PRO - MIL

Ispitivanje se
ponavlja dok
uneseni broj
nije
jednak
zamiljenom.

Na prvi
program
Varijable
Donoenje Grafika
odluke

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

Petlje

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

Polja

Ovdje se generira sluajni broj izmeu 0 i 100.

int brojcanik = 0;

Obrada
teksta

int main()
{
int odgovor;
int slucajni_br;

Objekti

using namespace std;

Varijablu brojcanik na poetku emo postaviti za nulu, a nakon svakog pogaanja uveat emo je za jedan i tako emo znati koliko
nam je pokuaja trebalo za pogaanje zamiljenog broja.

Saimanje Veliki programi


koda

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

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

181

Polja

182

PRO - MIL

Saimanje Veliki programi


koda

Objekti

Obrada
teksta

PRO - MIL
Polja

Petlje

Donoenje Grafika
odluke

Polja

Varijable

Na prvi
program

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

183

Polja

Jednodimenzionalna polja
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
moveto (0, 200);
lineto (10, 200);
lineto (10, 50);
lineto (100, 50);
lineto (100, 200);
lineto (120, 200);
lineto (120, 150);
lineto (300, 150);
lineto (300, 200);
lineto (350, 200);
lineto (350, 30);
lineto (400, 30);
lineto (400, 200);
lineto (450, 200);
lineto (450, 20);
lineto (550, 20);
lineto (550, 200);
lineto (560, 200);
lineto (560, 40);
lineto (600, 40);
lineto (600, 200);
lineto (620, 200);
lineto (620, 20);
lineto (635, 20);
lineto (635, 200);
lineto (640, 200);
getch();
closegraph();
return 0;
}

184

Zamislimo da kao pozadinu neke


jednostavne igrice elimo nacrtati
neto to bi moglo asocirati na
nebodere.
To moemo uiniti nizom lineto
naredbi i to rjeenje funkcionira, ali
i sami vidimo da nije ba osobito
elegantno.
Zamislimo koliko bi to rjeenje bilo
nepraktino ako bismo htjeli nacrtati crte s vie detalja, npr. prozorima.

PRO - MIL

od njega.
Pogledamo li paljivo program,
vidjet emo da su nam svi elementi poznati od prije, osim neobino

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

definirane varijable polje.

using namespace std;

mogli spremiti jedno slovo ili broj,

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

ini se da u ovu varijablu moemo

PRO - MIL

Petlje

dama.

Polja

koliini brojeva u vitiastim zagra-

Obrada
teksta

da broj u uglatoj zagradi odgovara

Objekti

Paljivi analitiar moda bi uoio

Saimanje Veliki programi


koda

spremiti mnotvo brojeva.

Donoenje Grafika
odluke

Dok smo u dosadanje varijable

int polje[54] =
{
0, 200, 10, 200, 10, 50, 100, 50, 100, 200,
120, 200, 120, 150, 300, 150, 300, 200, 350, 200,
350, 30, 400, 30, 400, 200, 450, 200, 450, 20,
550, 20, 550, 200, 550, 200, 560, 200, 560, 40,
600, 40, 600, 200, 620, 200, 620, 20, 635, 20,
635, 200, 640, 200
};
moveto (polje[0], polje[1]);
for (x = 2; x < 54; x = x + 2 )
{
lineto(polje[x], polje[x+1]);
}
getch();
closegraph();
return 0;
}

Uvod

Dobit emo ih tako da drimo pritisnutu AltGr tipku, a zatim kliknemo slovo f ili slovo g.

prethodni, ali je daleko elegantniji

Na prvi
program

Ovaj program radi isti posao kao i

Varijable

U ovom programu pojavljuju se


uglate zagrade.

Sadraj

C++ programiranje za apsolutne poetnike

185

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;
}

Detaljno objanjenje funkcioniranja programa s prethodne stranice vidjet emo kasnije, a sada
emo pogledati kako funkcioniraju neobine varijable koje smo
uoili u prethodnom programu.
Ovaj program pomoi e nam da
lake shvatimo ovaj novi tip varijable.

Naredbom int a = 12; u raunalu formiramo prostor odnosno varijablu kojoj


smo dali naziv a i u koju smo spremili
broj 12;

int a = 12;

12
a

Ovom naredbom kao i prethodnom formiramo varijablu, ali dok


smo u prethodnu varijablu mogli
spremiti samo jedan broj, ova
varijabla sadri 5 pretinaca koji se
razlikuju po brojevima i u svaki od
tih pretinaca moemo spremiti
jedan broj.

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

10

20

30

40

50

polje

186

PRO - MIL

cout << polje[1] << endl;

Vrijednosti emo meusobno odvojiti zarezima.

Sadraj polja ispisuje se na slian nain kao i sadraj varijable.

Vidimo da

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

PRO - MIL

Uvod
Na prvi
program

ispisuje sadraj druge elije.


Pokuajmo na slian nain ispisati sadraj neke druge npr. sa:

Objekti

using namespace std;

cout << polje[1] << endl;

cout << polje[0] << endl;

Saimanje Veliki programi


koda

#include <cstdlib>
#include <iostream>

Obrada
teksta

Polja

Razlika je u tome da je pri koritenju varijable dovoljno navesti naziv, a ovdje


osim naziva u uglatim zagradama moramo navesti broj elije koju elimo ispisati. U gornjem primjeru imajmo na umu da emo ispisati sadraj druge elije,
a ne sadraj prve. Prvu bismo ispisali naredbom cout << polje[0] << endl;.

Varijable

Za razliku od obine varijable prilikom


formiranja polja u uglatim zagradama
moramo navesti koliko elija sadri polje. U naem sluaju polje koje smo
nazvali polje sadri 5 elija.

U vitiastim zagradama navest emo vrijednosti


pojedinih
elija.

Donoenje Grafika
odluke

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

Petlje

Novi tip varijable ima poseban naziv, naziva se polje. elije polja meusobno
razlikujemo po brojevima, a problem donekle komplicira injenica da prvo
polje nije polje 1 nego polje 0, pa onda polje sa 5 elemenata ne sadri polja
od 1 do 5 nego od 0 do 4. U poetku e nas ta injenica esto zbunjivati.

Sadraj

C++ programiranje za apsolutne poetnike

sadraj prve elije. (U uglatoj


zagradi nalazi se broj nula, a ne
veliko slovo o.)

187

Polja

#include <cstdlib>
#include <iostream>

Pogledajmo bitne dijelove ovog


programa.

using namespace std;


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

Ovdje formiramo polje koje se sastoji od 5 elija. U prvu eliju spremamo broj 10, u drugu 20, u treu
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;
system("PAUSE");
return 0;
}

#include <cstdlib>
#include <iostream>
using namespace std;

Sadraj polja ispisujemo tako da


uz naziv polja u uglatim zagradama navodimo i broj elije koji elimo ispisati.

Sadraj polja ne mora se ispisivati


po redu, nego se moe ispisivati
bilo kojim redoslijedom.

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

Sadraj

C++ programiranje za apsolutne poetnike

Polja mogu biti float tipa.

Na prvi
program

Uvod

(Uoimo da zarezom odvajamo brojeve, a toka ima funkciju decimalnog zareza.)

Polja mogu biti i char tipa.

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

Pokuajmo iz ispisa izbaciti endl


naredbe:

PRO - MIL

cout << polje[0] << endl;


napiimo u obliku
cout << polje[0];
Samo cout << polje[4] << endl;
nemojmo mijenjati.

Objekti

using namespace std;

Saimanje Veliki programi


koda

#include <cstdlib>
#include <iostream>

Obrada
teksta

Polja

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

Petlje

using namespace std;

Donoenje Grafika
odluke

Varijable

#include <cstdlib>
#include <iostream>

189

Polja

#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int a[3] = {2, 3, 0};
a[2] = a[0] + a[1];
cout << a[2] << endl;
system("PAUSE");
return 0;
}

Polja moemo koristiti na isti nain kao i


varijable, npr. za izraune.

Kao to je sluaj i kod varijabli, sadraj polja ne moramo definirati prilikom formiranja
polja.
U ovom sluaju sadraj prve i druge elije
polja unosimo cin naredbom, a u treu eliju spremamo rezultat zbrajanja.

190

#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int b[3];
cin >> b[0];
cin >> b[1];
b[2] = b[0] + b[1];
cout << b[2] << endl;
system("PAUSE");
return 0;
}

PRO - MIL

Sadraj

C++ programiranje za apsolutne poetnike

Na prvi
program

Uvod

Sadraj polja moemo ispisati na ovaj nain. Takav


nain funkcionira, ali je neelegantan. Osobito je neprikladan ako bismo htjeli ispisati
vee polje.

polja daleko je elegantniji.


Formirali smo petlju koja e
se vrtjeti onoliko puta koliko
elija petlje elimo ispisati.
Varijabla petlje mijenja se od
poetnog broja elije koju elimo ispisati, u naem sluaju
od 0, do broja krajnje elije

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

koju elimo ispisati, u naem

PRO - MIL

Objekti

using namespace std;

sluaju to je 4.
Pri ispisu umjesto polje[1] koristimo polje[x] to znai da se
ispisuje ono polje iji broj je
jednak

trenutnoj

varijable x.

Obrada
teksta

#include <cstdlib>
#include <iostream>

Petlje

Ovaj nain ispisa sadraja

vrijednosti

Saimanje Veliki programi


koda

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;
}

Polja

using namespace std;

Donoenje Grafika
odluke

Varijable

#include <cstdlib>
#include <iostream>

191

Polja

Moemo ispisati dio elija


polja, npr. prvu, drugu i treu.
To emo postii tako da varijablu 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)
{
cout << polje[x] << endl;
}
system("PAUSE");
return 0;
}

192

Sadraj polja moemo ispisivati i


unatrag. To emo postii tako da
varijablu petlje x mijenjamo unatrag od etiri do nula po jedan.

PRO - MIL

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

Opet umjesto cin >> polje [0]


imamo cin >> polje[x], a varijablu x petlja mijenja od nula do
etiri i tako e se unijeti sadraj
cijelog polja.
Kao i do sada nakon svakog
unosa broja pritisnemo Enter
tipku.

Koristei isti trik ovdje ispisujemo


sadraj polja.
Umjesto cout << polje[0] stavili

Uvod

smo cout << polje[x], a x for petlja mijenja od nula do etiri i tako
e se ispisati sadraj cijelog po-

Polja

Ovu petlju koristimo za unos


brojeva u polje.

Na prvi
program

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

Varijable

using namespace std;

Donoenje Grafika
odluke

Na slian nain pomou petlje moemo uporabom tipkovnice unijeti


brojeve u pojedine elije.

Petlje

#include <cstdlib>
#include <iostream>

Sadraj

C++ programiranje za apsolutne poetnike

Kao to je to vrijedilo za sve elemente programa koje


smo vidjeli do sada, i za polja vrijedi da emo ih najbolje
shvatiti i usvojiti ako napravimo to vei broj varijacija
primjera koje smo vidjeli do sada.
Pokuajmo sami smisliti to vie slinih primjera.

PRO - MIL

Saimanje Veliki programi


koda

Objekti

Obrada
teksta

lja.

193

Polja

Pogledajmo program koji smo vidjeli na poetku ovog poglavlja.

Ovdje se formira polje u kojem se nalazi poloaj


toaka ijim emo spajanjem dobiti crte.

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

Na prvi pogled moe nam se uiniti da smo to


ovdje uinili drugaije nego do sada. Paljivom
analizom vidjet emo da nismo.

using namespace std;

Najprije imamo int polje[54] =, a zatim u vitiasint 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,
550, 20, 550, 200, 550, 200, 560, 200, 560, 40,
600, 40, 600, 200, 620, 200, 620, 20, 635, 20,
635, 200, 640, 200
};

Ovom naredbom
odreuje se poetak niza crta.

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


for (x = 2; x < 54; x = x + 2 )
{
lineto(polje[x], polje[x+1]);
}
getch();
closegraph();
return 0;
}

194

Ovom petljom crta se


ostatak crtea.

PRO - MIL

Sadraj

C++ programiranje za apsolutne poetnike

Uvod

Pogledajmo podrobnije neke detalje programa.

moemo napisati i ovako.

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

Ovaj oblik pogodniji je za


koritenje kad u veliko polje elimo unijeti veliku koliinu brojeva.

Ova naredba odreuje poetak niza crta.


Udaljenost od lijevog ruba odreena je
sadrajem elije polje[0], tj. prve elije, a
udaljenost od gornjeg ruba sa polje[1], tj.
sadrajem druge elije.

Petlje

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

Varijable

naredbu

Donoenje Grafika
odluke

Ovu

Na prvi
program

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

Poetna vrijednost
varijable x je 2.

Udaljenost
kraja
crte od lijevog ruba
grafikog prozora.

PRO - MIL

Varijabla x uveava se za 2. To nam


odgovara zato to je kraj svake crte
odreen s dva broja, pa kad elimo
oitati poziciju novog kraja crte, moramo se u polju pomaknuti za dva
lana polja unaprijed.

Udaljenost kraja crte od gornjeg


ruba grafikog prozora.

Obrada
teksta

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


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

Objekti

od 2 do 52.

Saimanje Veliki programi


koda

da se x uveava za 2 vrijednost varijable x e rasti

Polja

Petlja e se izvoditi dok je x manji od 54. Budui

195

Polja

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

Mogli bismo postaviti pitanje trebaju


li nam uope polja, budui da bismo
ovaj program mogli i ovako realizirati, obinim varijablama.

Vidimo da ovakav program moemo realizirati obinim varijabla#include <cstdlib>


#include <iostream>

ma, ali ovakav, koji

using namespace std;

moemo realizirati sa-

koristi for naredbu, ne

mo varijablama.
int main()
{
int polje[5] = {10, 20, 30, 40, 50};
int x;
for (x = 0; x < 5; x = x +1)
{
cout << polje[x] << endl;
}
system("PAUSE");
return 0;
}

196

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

PRO - MIL

Polja nam omoguuju operacije sa elijama polja.

using namespace std;

Ovo je primjer programa koji pretrauje uneseno


polje i ispisuje najvei broj u polju.

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


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

Uvod
Donoenje Grafika
odluke
Petlje
Saimanje Veliki programi
koda

U ovom dijelu ispisuje se sadraj


varijable r, odnosno najvei broj
unesen u polje.

Polja

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

U ovom dijelu programa pretrauje


se uneseno polje i najvei broj naen u polju sprema se u varijablu
r.

Obrada
teksta

cout << "Unos polja." << endl;


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

Unos polja.

Objekti

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

Varijable

#include <cstdlib>
#include <iostream>

Na prvi
program

Ne samo da uporabom polja moemo pisati elegantnije programe, nego nam


polja omoguuju realizaciju programa koje bi bilo veoma teko realizirati na
neki drugi nain. Pogledajmo nekoliko primjera takvih programa.

Sadraj

C++ programiranje za apsolutne poetnike

PRO - MIL

197

Polja

Pogledajmo detaljnije najzanimljiviji dio prethodnog program, dio u kojem se


pretrauje polje i najvei pronaeni broj sprema u r varijablu.

Prvi lan polja, dakle polje[0]


sprema se u varijablu r.

Pretraivanje se nastavlja unutar for


petlje, ija se varijabla x mijenja od
1 do 5 po 1.
Zato petlja ne poinje s nula?

r = polje[0];

Zato to smo prvu eliju (polje[0])


ve proitali pa je neemo itati
unutar for petlje.

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


{

Unutar for petlje za svaku vrijedif (r < polje[x])


{
r = polje[x];
}

nost varijable x ispituje se je li sadraj varijable r manji od polje[x].


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

Ova if naredbe je neobina.

u varijablu r.

Nema else dijela. To je dozvoljeno. Ako nam else dio

Ako nije, znai da je broj u polje[x]

ne treba, moemo ga izos-

manji i u tom sluaju nee se izvo-

taviti.

diti sadraj unutar vitiastih zagrada.

U tom sluaju, ako je uvjet


zadovoljen, izvodi se sadr-

Na kraju, u varijabli r ostaje najve-

aj u vitiastim zagradama,

a vrijednost naena u polju.

a ako nije, nastavlja se izvoenje programa.

198

PRO - MIL

Pokuajmo sami korigirati


program tako da pretrauje je li u polje unesen odreen broj ili koliko puta
se pojavljuje odreen
broj.
Pokuajmo napraviti slina pretraivanja slova.

PRO - MIL

Odgovarajue
obavijesti.

preuredimo

ispis

Uvod
Na prvi
program
Varijable
Donoenje Grafika
odluke

Dovoljno je da umjesto ispitivanja


je li r < polje[x] stavimo ispitivanje
je li r > polje[x].

Petlje

Na slian nain bismo u programu za voenje videoteke mogli


pronai korisnike koji nisu vratili
film dulje od npr. tjedan dana ili
korisnike koji su u proloj godini
posudili najvie filmova.

Polja

emu slue takvi programski


postupci?

Obrada
teksta

int main()
{
int polje[5];
int x;
int r;
cout << "Unos polja." << endl;
for (x = 0; x < 5; x = x + 1)
{
cin >> polje[x];
}
r = polje[0];
for (x = 1; x < 5; x = x +1)
{
if (r > polje[x])
{
r = polje[x];
}
}
cout << "Najmanji je." << endl;
cout << r << endl;
system("PAUSE");
return 0;
}

Objekti

using namespace std;

Jednostavnim promjenama program koji pretrauje polje sa


ciljem da nae najvei broj u
polju moemo preurediti u program koji trai najmanji broj.

Saimanje Veliki programi


koda

#include <cstdlib>
#include <iostream>

Sadraj

C++ programiranje za apsolutne poetnike

199

Polja

#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int p[5];
int zamjena;
int privremeni;
int x;
cout << "Unos polja." << endl;
for (x = 0; x < 5; x = x + 1)
{
cin >> p[x];
}
do
{
zamjena = 0;
for (x = 0; x < 4; x = x + 1)
{
if (p[x] < p[x+1])
{
privremeni = p[x];
p[x] = p[x+1];
p[x+1] = privremeni;
zamjena = 1;
}
}
}
while (zamjena ==1);
cout << "Sortirano polje." << endl;
for (x = 0; x < 5; x = x +1)
{
cout << p[x] << endl;
}

Ovo je sasvim sigurno najsloeniji program koji smo do sada vidjeli u ovoj knjizi.
Slui za sortiranje polja. Unesemo razliite brojeve u polje,
a program e ih sortirati tako
da e u prvom polju biti najvei
broj, a u posljednjem najmanji.

U ovom dijelu programa unosimo brojeve u polje.

U ovom dijelu vri se sortiranje


polja.

U ovom dijelu sortirano polje


ispisuje se na zaslon raunala.

system("PAUSE");
return 0;
}

200

PRO - MIL

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


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

If naredbom ispitujemo je li broj


u nekoj eliji polja (p[x]) manji
od broja u sljedeoj eliji (p
[x+1]. Ako nije, znai da imamo
prvo vei broj, a zatim manji.
To je ono to elimo i petlja se
vrti dalje.

}
}
while (zamjena ==1);

Ako jest, znai da imamo prvo


manji, a zatim vei broj, pa ih
treba zamijeniti.
U tom sluaju u ovom dijelu e
se izvriti zamjena.

Na kraju zamjene u varijablu zamjena stavit e se broj 1.


Zbog toga do ... while petlja e cijeli postupak ponavljati tako dugo dok vie
ne bude obavljena ni jedna zamjena i varijabla zamjena ostane jednaka nuli.
To znai da nije pronaen ni jedan sluaj da je neki broj manji od sljedeeg
tj. da je sortiranje od veeg prema manjem zavreno.

PRO - MIL

Uvod
Na prvi
program
Varijable
Donoenje Grafika
odluke

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

Polja

zamjena = 0;

Obrada
teksta

U for petlji ita se cijelo polje, s


time da se varijabla petlje mijenja za jedan manje od veliine
petlje; dakle u naem sluaju ne
ide do 4 nego, do 3.

Objekti

do

Na poetku ispitivanja u varijablu zamjena stavlja se broj 0.


Ako ne bude potrebno vriti
nikakve zamjene u polju, varijabla zamjena ostat e jednaka
nuli i izvoenje do ... while petlje e se zaustaviti.

Saimanje Veliki programi


koda

Sortiranje se odvija u do ... while petlji. Petlja se ponavlja tako dugo dok je
varijabla zamjena jednaka broju 1.

Petlje

Pogledamo podrobnije dio programa u kojem se vri sortiranje.

Sadraj

C++ programiranje za apsolutne poetnike

201

Polja

Pogledajmo kako funkcionira zamjena sadraja elija.

Za zamjenu sadraja dviju susjednih elija


u polju treba nam pomona varijabla; u
naem sluaju to je varijabla privremeni.
Zato?

privremeni = p[x];

Da smo odmah napravili drugu naredbu,


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

p[x] = p[x+1];

Nakon to smo u prethodnom koraku sadraj elije p[x] spremili u varijablu privremeni,
sadraj elije p[x+1] spremamo u eliju p[x].
Budui da p[x] usporeujemo sa p[x+1], x
mora bit za jedan manji od broja elija.

p[x+1] = privremeni;

Sadraj varijable privremeni sada vraam u


polje, ali ne u eliju p[x] u kojoj se taj sadraj do sada nalazio, nego u sljedeu eliju,
u eliju p[x+1].
Time smo sadraje elija p[x] i p[x+1] zamijenili.

Na kraju zamjene u varijablu zamjena stavljamo broj jedan.

zamjena = 1;

202

Time smo obavijestili raunalo da je bilo


potrebno vriti zamjene u polju, tj. da polje
nije bilo sortirano po redu, te da do ... while
petlja mora jo jednom provjeriti je li polje
sortirano. Kad se ni u jednom sluaju nee
dogoditi da je neka elija manja od sljedee, sortiranje je zavreno.

PRO - MIL

Program koji e usporeivati pojedine elije dvaju polja, a zatim e u tree


polje spremiti vrijednost one elije koja sadri vei broj ili manji broj.
Program koji e brojiti koliko puta se neki broj pojavljuje u nekom polju.

PRO - MIL

Uvod
Saimanje Veliki programi
koda

Pokuajmo napisati sline programe koji e vriti neke operacije izmeu polje; npr. programe koji e mnoiti ili dijeliti lanove dvaju polja i rezultat spremati u tree polje.

Objekti

Obrada
teksta

Polja

Petlje

int main()
{
int po1[5] = {10, 15, 20, 25, 30};
int po2[5] = {35, 40, 35, 50, 55};
int po3[5];
int a;
for (a = 0; a < 5; a = a +1)
{
po3[a] = po1[a] + po2[a];
cout << po1[a] << " + " << po2[a] << " = " << po3[a] << endl;
}
system("PAUSE");
return 0;
}

Na prvi
program

using namespace std;

Varijable

#include <cstdlib>
#include <iostream>

Ovaj program e zbrojiti sadraje polja po1 i


polja po2, a rezultat spremiti u polje po3 i zatim
ga ispisati na zaslon raunala.

Donoenje Grafika
odluke

Izmeu polja mogu se vriti matematike operacije kao i izmeu varijabli.

Sadraj

C++ programiranje za apsolutne poetnike

203

Polja

Spremanje brojeva u datoteku


Postavlja se pitanje na
koji nain bismo mogli
podatke umjesto preko
tipkovnice unijeti u polje iz neke datoteke. U
tu svrhu otvorit emo
Nopetad (u hrvatskoj
inaici Blok za pisanje)
i unijet emo osam razliitih brojeva koji e biti
odvojeni praznim mjestima.
Vano je napomenuti
da to moramo uiniti
tim programom, a nipoto Wordom ili nekim
slinim programom.
Te brojeve, odnosno taj tekst spremit emo pod imenom podaci.txt u
onu istu mapu u kojoj se nalazi
na program.
U naem sluaju to je mapa Radni
na C: disku.
Ako smo program spremili u neku
drugu mapu, u tu istu mapu spremimo i ovaj tekst.

204

PRO - MIL

prostoru u kojem se nalazi na


projekt i na program morala bi se

Moramo imati na umu i da broj


koji unosimo ne moe biti neogranieno velik. Koliki broj moemo unijeti u polje, odnosno u
varijablu, ovisi o svojstvima programskog okruenja koje koristimo.

PRO - MIL

Mogu li se u programima koristiti


i vei brojevi? Naravno, ali taj
problem nadilazi potrebe naeg
uvodnog prirunika.
Za sada je bitno imati na umu
da u int ili float varijablu ne moemo staviti neogranieno velik
broj.

Obrada
teksta

Float tip moe imati najveu


vrijednost od 3.40282 * 10-38. To
se u programu pie kao
3.40285e-38.

Objekti

Ako mijenjamo koliinu brojeva,


onda u programu koji e ih itati
moramo na isti nain promijeniti
veliinu polja i for petlju.

Int tip u sluaju da koristimo


Dev-C++ moe biti od
2147483648 do 2147483647.

Saimanje Veliki programi


koda

Jasno je da moemo staviti i


neke druge brojeve, a moemo
ih staviti vie ili manje nego u
naem primjeru.

Polja

Petlje

nalaziti i datoteka podaci.txt.

Donoenje Grafika
odluke

Ako je sve u redu, u onom istom

Varijable

Na prvi
program

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

205

Polja

Ovim programom proitat emo brojeve koji su spremljeni u datoteku podaci.txt, spremit emo ih u polje i na
kraju ispisati na zaslon raunala.
#include <cstdlib>
#include <iostream>
#include <fstream>

Dodat emo novu biblioteku.

using namespace std;


int main()
{
int x;
int polje[8];
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{
ulaz >> polje[x];
}
for (x = 0; x < 8; x = x +1)
{
cout << polje[x] << endl;
}
system("PAUSE");
return 0;
}
Ispis sadraja polja.

Ovdje formiramo neto s ime se do sada


nismo sretali, a to je objekt. Trenutno nije
vano to je to tono objekt. Za sada emo rei da je to element programa pomou kojeg emo itati sadraj datoteke.

Ova petlja mora se vrtjeti onoliko puta


koliko brojeva elimo proitati, odnosno
koliko nae polje ima elija. U naem
sluaju to je osam puta.

Ovom naredbom sadraj datoteke


unosi se u polje.
Da smo ovdje napisali:
cin >> polje[x];
brojevi bi se u polje unosili pomou tipkovnice.
ulaz >> polje[x];
je varijacija te naredbe i znai da
se brojevi nee u polje unositi pomou tipkovnice nego pomou
objekta ulaz, a prije smo definirali
da objekt ulaz ita iz datoteke podaci.txt.

206

PRO - MIL

Naziv objekta. Bira se po istoj logici po kojoj biramo nazive varijabli.

Naziv datoteke koju emo itati


pomou objekta ulaz.

Donoenje Grafika
odluke

Varijable

ifstream ulaz ("podaci.txt");

Na prvi
program

Uvod

Naredba za formiranje objekta pomou kojeg emo itati sadraj datoteke.

Sadraj

C++ programiranje za apsolutne poetnike

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

PRO - MIL

U ovom programu izraunat


emo prosjenu vrijednost
unesenih brojeva.
Budemo li eksperimentirali s
drugim brojevima, imajmo na
umu da njihova ukupna suma
ne smije biti vea od maksimalne dozvoljene vrijednosti
varijable.

Polja
Obrada
teksta
Objekti

Kada uitamo brojeve u polje,


s tim brojevima moemo raditi
sve ono to moemo raditi i s
brojevima koje smo unijeli
preko tipkovnice.

Saimanje Veliki programi


koda

int main()
{
int x;
int polje[8];
float a = 0;
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{
ulaz >> polje[x];
}
for (x = 0; x < 8; x = x +1)
{
a = a + polje[x];
}
a = a / 8;
cout << "Prosjek je " << a << endl;
cout << endl;
system("PAUSE");
return 0;
}

Petlje

using namespace std;

207

Polja

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

Ovaj program omoguuje nam da sadraj polja koji


smo unijeli preko tipkovnice spremimo u datoteku.

using namespace std;

I u ovom sluaju moramo imati ukljuenu


fstream biblioteku.

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

Ovdje formiramo objekt izlaz pomou


kojeg emo brojeve iz polja spremiti
u datoteku podaci.txt.

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

Na uobiajeni nain unosimo brojeve


u polje.

cout << "Spremanje je gotovo." << endl;


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

Ovdje sadraj polja spremamo u datoteku podaci.txt.


Naredbom:
izlaz << polje[x];
brojeve iz polja pomou
objekta izlaz aljemo u datoteku.
Ova naredba slina je naredbi:
cout << polje[x];
kojom brojeve aljemo na
zaslon raunala.
Naredbom izlaz << " "; izmeu dva broja unosimo
prazno mjesto.

208

PRO - MIL

int main()
{
int x;
int polje[8];
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{
ulaz >> polje[x];
}
for (x = 0; x < 8; x = x +1)
{
cout << polje[x] << endl;
}
system("PAUSE");
return 0;
}

PRO - MIL

Donoenje Grafika
odluke

Varijable

Na prvi
program

Uvod
using namespace std;

Petlje

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

Polja

to smo spremili moemo pogledati editorom, a moemo i programom koji


sadraj datoteke ispisuje na zaslon raunala.

Obrada
teksta

Naziv datoteke u koju emo


spremati pomou objekta ulaz.

Objekti

ofstream izlaz ("podaci.txt");

Naziv objekta. Bira se po istoj logici po kojoj biramo nazive varijabli.

Saimanje Veliki programi


koda

Naredba za formiranje objekta pomou kojeg emo spremati sadraj datoteke.

Sadraj

C++ programiranje za apsolutne poetnike

209

Polja

#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;

U ovom programu nema nieg novog. Samo smo


kao lego kocke sloili elemente koje smo do sada
upoznali.
Ovaj program uitava datoteku u polje, sortira polje
i zatim sortirano polje sprema natrag u datoteku.

int main()
{
int x;
int p[8];
int zamjena;
int privremeni;
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{
ulaz >> p[x];
}
cout << "Zapocinje sortiranje." << endl;
do
{
zamjena = 0;
for (x = 0; x < 7; x = x + 1)
{
if (p[x] < p[x+1])
{
privremeni = p[x];
p[x] = p[x+1];
p[x+1] = privremeni;
zamjena = 1;
}
}
}
while (zamjena ==1);
ofstream izlaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{
izlaz << p[x];
izlaz << " ";
}
cout << "Sortiranje je zavrsilo" << endl;
system("PAUSE");
return 0;
}

210

U ovom djelu programa itamo


sadraj datoteke i spremamo ga
u polje.

Doslovno sa Copy Paste kopiran dio programa koji sortira


sadraj polja od najveeg prema
najmanjem.

U ovom djelu programa sadraj


polja sprema se u datoteku.

Ovdje vidimo i jedan jako vaan element programiranja.


Ne moramo svaku stvar svaki
put kad nam treba iznova programirati. Segment programa
koji dobro radi obilno prokomentiramo i spremimo, a zatim ga ubacujemo u programe
kad nam zatreba, kao to smo
ovdje ubacili segment programa koji sortira sadraj polja.

PRO - MIL

Nakon to smo brojeve


unijeli u datoteku, pokrenemo program za sortiranje
datoteke koji vidimo na
lijevoj stranici.

Programom za itanje sadraja datoteke pogledat emo rezultat sortiranja.

PRO - MIL

Uvod
Na prvi
program
Varijable
Donoenje Grafika
odluke

int main()
{
int x;
int polje[8];
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{
ulaz >> polje[x];
}
for (x = 0; x < 8; x = x +1)
{
cout << polje[x] << endl;
}
system("PAUSE");
return 0;
}

Petlje

using namespace std;

Polja

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

Obrada
teksta

int main()
{
int x;
int polje[8];
ofstream izlaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{
cin >> polje[x];
}
for (x = 0; x < 8; x = x + 1)
{
izlaz << polje[x];
izlaz << " ";
}
cout << "Spremanje je gotovo." << endl;
cout << endl;
system("PAUSE");
return 0;
}

Objekti

using namespace std;

Da bismo provjerili funkcionira li na program, najprije emo programom koji


smo malo prije obradili
unijeti brojeve u datoteku.

Saimanje Veliki programi


koda

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

Sadraj

C++ programiranje za apsolutne poetnike

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 stanovnicima nekog mjesta, iako nam vjerojatno ne bi mogao objasniti kako izgledaju globalni stanovnici istog mjesta.)

1.stupac

2. stupac

3. stupac

4. stupac

1. red

11

12

13

14

2. red

21

22

23

24

#include <cstdlib>
#include <iostream>

Dvodimenzionalne
matrice pogodne su
za spremanje sadraja tabela.

U ovom programu emo gornju tabelu


spremiti u dvodimenzionalnu matricu, a
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)
{
cout << polje[0] [x] << endl;
}
cout << endl;

Ispis prvog reda.

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

Drugi red polja. Nalazi se


unutar vitiastih zagrada.

Broj redova polja.

Broj stupaca polja.

Cjelokupni sadraj polja


nalazi se unutar posebnih vitiastih zagrada.

Broj reda kojem pristupamo, u naem sluaju je to prvi red koji se oznaava
brojem nula. Dakle prvi red oznaava broj nula, a drugi broj jedan.

Dvodimenzionalna polja koriste se


na slian nain kao jednodimenzionalna. Osobito su korisna u programima u kojima se odvijaju sloeni
prorauni.

PRO - MIL

Osim dvodimenzionalnih postoje i


trodimenzionalna polja. Funkcioniraju slino kao dvodimenzionalna,
samo to imaju jo i dubinu.

Varijable
Objekti

Broj stupca kojem pristupamo, u naem


sluaju je to sadraj varijable x.

Saimanje Veliki programi


koda

cout << polje [0] [x]

Obrada
teksta

Polja

Budui da su u ovom tipu polja podaci rasporeeni u redove i stupce, prilino


logino je da kad elimo pristupiti nekoj eliji takvog polja moramo navesti u
uglatim zagradama broj reda i broj stupca elije kojoj elimo pristupiti.

Donoenje Grafika
odluke

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

Petlje

Prvi red polja. Nalazi se


unutar vitiastih zagrada.

Naziv polja.

Na prvi
program

Uvod

Tip polja u naem sluaju je int,


a moglo je biti npr. float ili char.

Sadraj

C++ programiranje za apsolutne poetnike

213

Obrada teksta

214

PRO - MIL

PRO - MIL

Saimanje Veliki programi


koda

Objekti

Obrada
teksta

Polja

Petlje

Donoenje Grafika
odluke

Varijable

Na prvi
program

Uvod

Obrada teksta

Sadraj

C++ programiranje za apsolutne poetnike

215

Obrada teksta

String objekti
elimo li napisati program za voenje telefonskog imenika ili program za voenje videoteke, osim obrade brojeva i grafike sasvim sigurno e nam trebati obrada teksta. Iako smo i do sada koristili tekstove za ispisivanje raznih obavijesti,
ostalo je nejasno na koji nain bismo mogli tekstove pretraivati ili sortirati.

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

Pogledamo li ovaj program, uinit e nam se


da smo za lake baratanje tekstom upotrijebili novi tip varijable,
string tip; te da smo u
programu koristili varijablu koju smo nazvali
odgovor.

Pogledajmo nove elemente u ovom programu.

string odgovor;

Iako ovaj red izgleda kao da formiramo varijablu


string tipa koju smo nazivali odgovor, string nije tip
varijable nego klasa, a odgovor nije varijabla nego
objekt.
Time se trenutno ne moramo optereivati i moemo
objekt odgovor koristiti kao da smo formirali varijablu
string tipa pod nazivom odgovor.
Tek neto vee mogunosti koje e nam string pruiti dat e nam naslutiti da se iza toga naziva krije
kompleksnija struktura od obine varijable.

216

PRO - MIL

U naem programskom okruenju program e


raditi i bez ovog reda, ali je mogue da u nekom drugom programskom okruenju nee.

cin >> odgovor;

U naredbi cin koju koristimo za unos preko tipkovnice objekt odgovor koristimo kao to bismo koristili
varijablu.
Dok smo u varijablu char tipa mogli spremiti jedno
slovo, u objekt klase string moemo spremati vei
tekst.

PRO - MIL

Saimanje Veliki programi


koda

Objekti

Obrada
teksta

Najprije e se ispisati
sadraj objekta odgovor,
zatim tekst unutar navodnika i konano skok u
novi red.

Petlje

Vidimo da objekt odgovor


u naredbi cout koristimo
kao da koristimo varijablu.

Polja

cout << odgovor << ", dobar dan!" << endl;

Donoenje Grafika
odluke

Varijable

Zbog toga emo stavljati tu naredbu

Uvod

Da bi program mogao koristiti string objekte,


ovu naredbu moramo staviti na poetak programa.

Na prvi
program

#include <string>

Sadraj

C++ programiranje za apsolutne poetnike

217

Obrada teksta

Oigledno je da u string objekt moemo spremiti tekst i postavlja se pitanje


koliko najvie znakova smije sadravati taj tekst.
U naelu raunalo bi se samo trebalo brinuti da osigura dovoljno mjesta za
spremanje bilo kojeg teksta. U sluaju koritenja kraih tekstova, poput imena,
naziva gradova i slino o tome ne moramo voditi brigu.
elimo li u string objekt unijeti veu koliinu teksta, da bismo bili sigurni da e
sve biti u redu, moemo unaprijed naredbom reserve rezervirati potreban prostor.

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

odgovor.reserve(256)

Objekt na koji se naredba


odnosi, u naem sluaju je
to objekt odgovor.

218

Program radi jednako


kao i prethodni, osim
to smo u ovom sluaju
za spremanje imena
osigurali veliki prostor.

Operacija koja se vri nad objektom.


Ovom naredbom se za objekt odgovor
rezervira 256 mjesta za spremanje znakova.

Obratimo panju na toku koja se obvezno


nalazi izmeu oznake objekta i oznake
operacije koja se nad njim vri.

PRO - MIL

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

Objekt na koji se naredba odnosi.

odgovor.capacity()
Objekt na koji se naredba odnosi.

PRO - MIL

Naredba capacity() slui za odreivanje


broja mjesta koja nam stoje na raspolaganju za unos znakova u objekt odgovor.
Zato ih je na raspolaganju 355, ako
smo naredbom odgovor.reserve(256)
rezervirali 256 mjesta? Zato to je 256
mjesta samo polazite na temelju kojeg
prevoditelj rezervira neto vei prostor.

Donoenje Grafika
odluke
Petlje
Polja

Naredba size() oigledno slui za odreivanje


broja znakova unesenog teksta. Rije Stjepan
sastoji se od sedam slova.

Obrada
teksta

odgovor.size()

Objekti

int main()
{
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
cin >> odgovor;
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
cout << "Imamo " << odgovor.size() << " slova." << endl;
cout << endl;
cout << "Imamo " << odgovor.capacity() << " prostora." << endl;
cout << endl;
system("PAUSE");
return 0;
}

Saimanje Veliki programi


koda

using namespace std;

Varijable

Na prvi
program

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

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;
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}

Naredbom cin nije mogue u objekt odgovor


unijeti vie odvojenih
rijei.
Iako smo napisali prezime 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;
system("PAUSE");
return 0;
}

220

Ako umjesto cin naredbe upotrijebimo ovu naredbu, moi emo unijeti
vie rijei u objekt odgovor.

PRO - MIL

String objekt u koji emo unositi tekst.


U naem sluaju to je objekt odgovor.

Uvod

getline(cin, odgovor);

Sadraj

C++ programiranje za apsolutne poetnike

U ovom sluaju, na
mjestu gdje se oekivalo da emo unijeti tekst,
mi smo unijeli brojeve.
Postavlja se pitanje na
koji bismo nain mogli
sprijeiti ili barem smanjiti mogunost unoenja besmislenih odgovora.

PRO - MIL

U ovom sluaju, umjesto da unesemo


ime, samo smo pritisnuli tipku enter.

Petlje
Polja

Jedan od problema
pri izradi programa
javlja se kad korisnik
unese neodgovarajuu vrijednost.

Obrada
teksta

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

Objekti

using namespace std;

Saimanje Veliki programi


koda

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

Donoenje Grafika
odluke

Varijable

Na prvi
program

Naredba koja nam omoguuje


unos vie rijei u string objekt.

221

Obrada teksta

#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
int main()
{
string odgovor;
do
{
cout << "Unesite vase ime." << endl;
getline(cin, odgovor);
}
while (odgovor.size() == 0);
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;

Ova inaica programa


e zahtijevati da ponovimo unos ako pritisnemo tipku Enter, a da
prije toga nismo nita
unijeli.

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

Naredbu za unos teksta u objekt odgovor


stavili smo u do ...
while petlju koja se
izvodi tako dugo dok je
broj slova koja smo
unijeli jednak nuli.
Kad je taj broj razliit
od nule, nastavlja se
izvoenje programa.

222

PRO - MIL

Sadraj

C++ programiranje za apsolutne poetnike

Na prvi
program

Uvod

Polje char tipa

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

Donoenje Grafika
odluke

Tekst se moe unijeti u program i obraivati i na drugi


nain; uporabom polja char
tipa.

Petlje

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

Varijable

using namespace std;

cin.getline( niz, 255);


Broj elija niza.
Naredbe za
unos tekst u
char niz.

PRO - MIL

Naziv niza.

Ovom naredbom preko tipkovnice unosimo tekst u niz char tipa.

Obrada
teksta

Naziv niza, u naem sluaju naziv niza je niz.

Broj elija niza. U


naem sluaju niz
sadri 255 elija
to znai da u taj
niz moemo spremiti 255 slova.

Objekti

char niz[255];

Saimanje Veliki programi


koda

Tip niza. U
naem sluaju
niz je char
tipa.

Polja

Formiranje niza ije elije su char tipa. U svaku moemo staviti jedno slovo.

223

Obrada teksta

cout << niz << ", dobar dan!" << endl;


Naziv niza char tipa
koji ispisujemo.

Ispisujem tekst
unutar navodnika.

Skok u
novi red.

Sadraj niza char


tipa ispisuje se na
isti nain na koji se
ispisuje
sadraj
varijable.

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

Umjesto naredbe:

using namespace std;

moemo staviti naredbu:

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

cin >> niz;

cin.getline(niz,255);

ali u tom sluaju moi


emo unijeti samo jednu
rije. Nakon pritiska razmaknice unos e se prekinuti pa, kao to moemo vidjeti na donjoj slici,
iako smo napisali Bunic
Stjepan, uneseno je samo 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

cout << endl;


cout << niz << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}

PRO - MIL

Ako su uneseni brojevi,


unos se ponavlja.
Oznaku \ dobit emo
pritiskom na AltGr i Q.

Zavrni dio programa,


ime se spaja s pozdravom i gasi se program.

Petlje
Polja

Ovo je glavni dio programa. Ovdje se unosi


tekst i ispituje jesu li
unesena slova ili brojevi.

Obrada
teksta

Poetni dio programa i


formiranje potrebnih varijabli.

Objekti

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

Saimanje Veliki programi


koda

using namespace std;

Donoenje Grafika
odluke

Varijable

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

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

Uvod
Na prvi
program

U ovu inaicu programa nije mogue unijeti broj na mjestu na kojem oekujemo tekst. U sluaju da unesemo brojeve, raunalo e zahtijevati da ponovimo
upis.

Sadraj

C++ programiranje za apsolutne poetnike

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
{
cout << "Unesite vase ime." << endl;
cout << endl;

Unos teksta.

cin.getline(niz,255);
x = 0;
p = 1;

Postavljanje odgovarajuih
vrijednosti varijabli.

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


{
if (isdigit(niz[x]))

While petlja ita niz, slovo


po slovo, dok ne doe do
kraja niza.
Oznaka \0 nalazi se na
kraju niza pa niz[x] != '\0'
ispituje je li element niza
niz[1] jednak znaku za
kraj, odnosno jesmo li
doli do kraja niza.
To radi tako da je na poetku vrijednost varijable
x nula, a zatim se uveava po jedan

{
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
petlja, odnosno unos.

}
}
while (p == 0);

Ovdje se ispituje je li
vrijednost varijable p
nula i ako jest, do ...
while petlja se ponavlja.

226

Varijabla x uveava se za jedan


da bi se pri svakom ponavljanju
naredbom niz[x]
itao
slijedei
lan niza.

Ako ni jedan lan niza


nije broj, u varijabli p e
ostati broj jedan i do ...
while petlja se nee ponavljati, odnosno upis se
nee ponavljati.

PRO - MIL

Nakon to smo while naredbom ispitali jesmo li


doli do kraja niza, if naredbom ispitujemo je li
elija koju trenutno ispitujemo jednaka nuli. Ako
jest, varijabla p postavlja se na nulu, to znai da
e se ponoviti glavna do ... while petlja.

Ovdje se varijabla x uveava za jedan. To znai da e pri sljedeem izvoenju


while petlje x biti 1, pa e se sa niz[x] ispitivati niz[1], zatim pri sljedeem izvoenju while petlje niz[2] i tako do kraja niza.

PRO - MIL

Uvod
Na prvi
program
Obrada
teksta

While petlja ponavlja se tako dugo dok elija niz[x]


nije jednaka oznaci za kraj. Prvi put se ispituje
prva elija odnosno elija niz[0].

Objekti

x = 0;
p = 1;
while (niz[x] != '\0')
{
if (isdigit(niz[x]))
{
p = 0;
}
x = x + 1;
}

Saimanje Veliki programi


koda

Na poetku se x postavlja na nulu, to znai da e se prvi


put sa niz[x] ispitivati niz[0] odnosno prva elija niza.

Polja

Petlje

do
Ovdje poinje petlja.
{
cout << "Unesite vase ime." << endl;
cout << endl;
cin.getline(niz,255);
x = 0;
p = 1;
while (niz[x] != '\0')
{
Ovdje e se varijabla p postaviti na nula ako je
if (isdigit(niz[x]))
jedan od znakova u nizu broj. To e imati za
{
posljedicu da e se do ... while petlja ponoviti,
p = 0;
odnosno da e se unos teksta ponoviti.
}
x = x + 1;
}
Ovdje se ispituje je li sadraj varijable p jednak
}
nuli. Ako jest do ... while petlja e se ponoviti, a
while (p == 0);
to znai da e se upis ponoviti.

Varijable

Ovdje se u varijablu p
sprema broj jedan. To je
varijabla o kojoj ovisi
hoe li se do ... while
petlja ponoviti ili ne.

Donoenje Grafika
odluke

Ovaj program je veoma sloen pa emo odvojeno pogledati vanije elemente


programa. Pogledajmo prvo glavnu do ... while petlju.

Sadraj

C++ programiranje za apsolutne poetnike

227

Obrada teksta

Ovom naredbom ispitujemo je li jedan znak


broj. Moe se ispitivati varijabla char tipa ili
jedna elija niza char tipa.

if ( isdigit ( niz [x] ) )


Ispitujemo eliju niza char tipa. Broj elije
odreen je vrijednou varijable x.

#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
int main()
{
char slovo;
cin >> slovo;
if (isdigit(slovo))
{
cout << "Ovo je broj " << slovo <<
endl;
}
else
{
cout << slovo << " nije broj." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

U ovom jednostavnom
programu moemo vidjeti
kako funkcionira ispitivanje je li unesen znak broj
ili nije.
Osim ispitivanje je li unijeti znak broj, mogua su
i druga ispitivanja.
U tablici s desne strane
moemo vidjeti druge
mogunosti.

Pokuajmo u gornji program


staviti ostala ispitivanja koja
moemo vidjeti u tablici.
U tom sluaju morat emo modificirati obavijesti koje daje program.

228

PRO - MIL

if (iscntrl(slovo))

Ispituje je li sadraj varijable slovo kontrolni znak. To je


znak koji se dobiva ako drimo tipku Ctrl i onda pritisnem npr. slovo v.

if (isgraph(slovo))

Je li sadraj varijable slovo neto to se ispisuje na zaslon raunala, dakle slovo, broj ili interpunkcija. U ovu
grupu ne pripada prazno mjesto izmeu dviju rijei.

if (islower(slovo))

Je li sadraj varijable slovo malo slovo.

if (isprint(slovo))

Je li sadraj varijable neto to se ispisuje. Za razliku od


sline naredbe if (isgraph(slovo)) ovdje pripada i prazno
mjesto izmeu dviju rijei.

if (isupper(slovo))

Je li sadraj varijable slovo veliko slovo.

if (ispunct(slovo))

Je li sadraj varijable slovo neka interpunkcija.

PRO - MIL

Varijable

Ispituje je li sadraj varijable slovo neko slovo.

Donoenje Grafika
odluke

if (isalpha(slovo))

Petlje

Ispituje je li sadraj varijable slovo broj ili slovo. Odgovor


je negativan ako unesemo upitnik, toku ili neto slino.

Polja

if (isalnum(slovo))

Obrada
teksta

Ispituje je li sadraj varijable slovo neki broj.

Objekti

if (isdigit(slovo))

Saimanje Veliki programi


koda

ISPITIVANJE ZNAKOVA

Na prvi
program

Uvod

Osim to moemo ispitivati je li sadraj varijable broj, ispitivati moemo i druga


svojstva sadraja varijable char tipa.

Sadraj

C++ programiranje za apsolutne poetnike

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

Na prvi
program
Varijable
Petlje

Donoenje Grafika
odluke

if (isprint(slovo[6]))
{
cout << "Sedmi moze biti prazno mjesto." << endl;
}
if (isupper(slovo[7]))
{
cout << "Osmi je veliko slovo." << endl;
}
if (ispunct(slovo[8]))
{
cout << "Deveti je neka interpunkcija." << endl;
}
cout << endl;
system("PAUSE");
return 0;

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

Program moemo korigirati mijenjanjem sadraj polja


ili tako da, umjesto stalnog sadraja polja, sadraj
polja unosimo preko tipkovnice.
Uvijek imajmo u vidu da emo odreenu naredbu
usvojiti tek kad napravimo mnotvo primjera u kojima
se ta naredba koristi. Odreenu naredbu nismo usvojili kad smo je shvatili. Shvaanje naredbe je samo
uvjet da bismo uope mogli poeti uiti. Naredbu
smo usvojili tek kad smo je puno puta uspjeno primijenili u raznim programima i na razne naine.

PRO - MIL

Obrada
teksta
Objekti

Vidimo da ne moemo odjednom ispitivati cijelo polje, nego da ispitujemo pojedine elije u polju.

Saimanje Veliki programi


koda

Moemo vidjeti uporabu naredbi za ispitivanje znakova primijenjenu na polje char tipa.

Polja

Ovaj malo vei program morali smo staviti na dvije


stranice.

231

Obrada teksta

Pogledajmo jo nekoliko detalja vezanih uz char varijable i char polja.

#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
int main()
{
char slovo1;
char slovo2;
cout << "Unesite prvo slovo." << endl;
cin >> slovo1;
cout << "Unesite drugo slovo." << endl;
cin >> slovo2;

Iako to na prvi pogled nema


smisla, znakovi se mogu usporeivati kao i brojevi.
Na prvi pogled izgleda da se
usporeuju na temelju abecede, ali to nije ba tako.
Ovaj program dobro radi ako
usporeujemo samo velika ili
samo mala slova.

if (slovo1 < slovo2)


{
cout << "Prvo slovo je prije po abecedi." << endl;
}
else
{
cout << "Drugo slovo je prije po abecedi." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

Zato na taj nain ne moemo usporeivati velika i mala slova?


Zato to raunalo smatra da velika slova dolaze prije malih. Ako elimo napisati program koji sva slova rasporeuje po abecedi, morali
bismo najprije ustanoviti je li neko slovo veliko ili malo, odnosno program bi morao biti neto sloeniji. (Pokuajmo ga napisati.)

232

PRO - MIL

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

Mogla bi nas zbuniti


uporaba znaka " i znaka '.
Pravilo je jednostavno,
jedno slovo pie se u
obliku 'a', a vie slova u
obliku "Ovo je tekst.".

Petlje

int main()
{
char slovo = 'A';
char NizSlova[18] = "Ovo je niz slova.";
cout << "Jedno slovo je " << slovo << endl;
cout << "Tekst je: " << NizSlova << endl;
cout << endl;
system("PAUSE");
return 0;
}

Donoenje Grafika
odluke

using namespace std;

Varijable

Na prvi
program

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

Polja

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

PRO - MIL

Objekti

Slovima moemo dodavati ili oduzimati


brojeve.

Saimanje Veliki programi


koda

int main()
{
char slovo;
cout << "Unesite slovo." << endl;
cin >> slovo;
slovo = slovo - 1;
cout << "Prethodni znak je " << slovo << endl;
slovo = slovo + 2;
cout << "slijedeci znak je " << slovo << endl;
cout << endl;
system("PAUSE");
return 0;
}

Obrada
teksta

using namespace std;

233

Obrada teksta

Obrada string objekata


Do sada smo uglavnom vidjeli operacije koje se mogu provoditi nad jednim slovom spremljenim u char varijablu ili char polje. Pogledajmo sada operacije nad
veim tekstom spremljenim u objekt string klase.

#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
int main()
{
string tekst1 = "Ovo je prvi tekst.";
string tekst2 = " Ovo je drugi tekst.";
string tekst3;
tekst3 = tekst1 + tekst2;
cout << tekst3 << endl;
cout << endl;
system("PAUSE");
return 0;
}

234

Objekte string klase moemo jednostavno zbrojiti i rezultat zbrajanja spremiti u trei objekt.

PRO - MIL

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

Na prvi
program

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

Donoenje Grafika
odluke
Petlje

U ovom programu usporeujemo jesu li jednaki.

Polja

Objekti klase string


mogu se meusobno
usporeivati.

Saimanje Veliki programi


koda

Objekti

Obrada
teksta

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

Varijable

using namespace std;

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;
cin >> tekst2;
cout << endl;
if (tekst1 < tekst2)
{
cout << "Prva je manja." << endl;
}
else
{
cout << "Prva nije manja." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

Dva objekta klase string moemo usporeivati i tako da


ispitujemo je li prvi manji od
drugog.
Ostaje nejasno u kojem smislu se ispituje je li prvi manji od
drugog.
Oito se ne ispituje koliina
slova, nego se objekti rangiraju po abecedi, ab je po abecedi nakon aaaaa, pa u tome
smislu ab nije manje nego je
vee od aaaaa.

Kao i kod char polja, sustav je


prilino primitivan i dobro radi
jedino ako se ne mijeaju velika i mala slova, budui da raunalo smatra da su sva velika
slova prije malih, pa su u tom
smislu manja od malih.
Zato raunalo smatra da je AB
manje od aaaaa.

236

PRO - MIL

Uvod
Saimanje Veliki programi
koda

Objekti

Obrada
teksta

Polja

int main()
{
string odgovor;
getline(cin, odgovor);
cout << "Tekst sadrzi " << odgovor.size() << " znakova." << endl;
cout << endl;
system("PAUSE");
return 0;
Naredba size().
}

Donoenje Grafika
odluke

using namespace std;

Petlje

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

Varijable

Na prvi
program

Mogue su i sloenije manipulacije nad tekstom. Ponovno pogledajmo naredbu size() koju smo vidjeli na poetku ovog poglavlja. Omoguuje nam odreivanje broja znakova koje sadri tekst. Pri tome imajmo na umu da raunalo i
prazno mjesto izmeu rijei smatra jednim znakom.

Sadraj

C++ programiranje za apsolutne poetnike

PRO - MIL

237

Obrada teksta

Ovaj program pretrauje sadraj objekta tekst i trai pojavljuje li se u tom objektu
sadraj objekta trazi. Ako se pojavljuje, obavjetava nas na kojoj poziciji zapoinje traeni tekst. (Prva pozicija nema broj jedan nego broj nula.)

#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
int main()
{
string tekst;
string trazi;
int pozicija;
cout << "Unesite tekst." << endl;
getline(cin, tekst);
cout << endl;
cout << "Sto trazim?" << endl;
getline(cin, trazi);
cout << endl;
pozicija = tekst.find(trazi);
if (pozicija != string::npos)
{
cout << "Pocetak je na " << pozicija << ". poziciji." << endl;
}
else
{
cout << "Nema trazene rijeci." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

238

PRO - MIL

pozicija = tekst.find(trazi);

Objekt koji pretraujemo.

Ovom naredbom provjeravamo je li traena rije naena u pretraivanom objektu.

if (pozicija != string::npos)

Usporeujemo rezultat pretraivanja u pozicija varijabli i


obavijest da traena rije nije
naena.

elimo li ispitati sva pojavljivanja neke rijei, morat emo napisati malo sloeniji
program.

PRO - MIL

Saimanje Veliki programi


koda

Problem ovog programa,


odnosno ove naredbe, je u
tome to e pronai samo
prvo pojavljivanje neke rijei, ako se ista rije vie puta
pojavljuje u tekstu.

Objekti

Obrada
teksta

Polja

U varijabli pozicija nalazi se rezultat pretraivanja objekta.

Ovom naredbom dobivamo


oznaku koja oznaava da traena rije nije naena.

Donoenje Grafika
odluke

Naredba
za
pretraivanja.

Petlje

Naziv objekta u kojem se nalazi


tekst koji pretraujemo.

Varijable

Na prvi
program

Varijabla u koju spremamo rezultat.

Uvod

Ovom naredbom utvrujemo poziciju traenog teksta, a rezultat spremamo u


varijablu pozicija.

Sadraj

C++ programiranje za apsolutne poetnike

239

Obrada teksta

Ovaj program radi slian posao kao i prethodni, ali pretraivanje zapoinje od
kraja teksta. Ako traimo rije koja se pojavljuje vie puta, ovaj program nai e
posljednje pojavljivanje.

#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
Program je u potpunosti identiint main()
an prethodnome, samo to
{
ovdje umjesto naredbe find
string tekst;
imamo naredbu rfind.
string trazi;
int pozicija;
Time smo raunalu naredili da
cout << "Unesite tekst." << endl;
pretraivanje zapone od kraja
getline(cin, tekst);
teksta koji se nalazi u objektu
cout << endl;
tekst.
cout << "Sto trazim?" << endl;
getline(cin, trazi);
cout << endl;
pozicija = tekst.rfind(trazi);
if (pozicija != string::npos)
{
cout << "Pocetak je na " << pozicija << ". poziciji." << endl;
}
else
{
cout << "Nema trazene rijeci." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

240

PRO - MIL

U ve poznatu naredbu find dodali smo broj 6 ime smo naredili raunalu da
pretraivanje objekta tekst zapone od znaka na poziciji 6.
Budui da prva rije radi poinje na 5, raunalo je nalo drugo pojavljivanje
rijei radi.
Pomou ove naredbe napravit emo program koji e pronai sva pojavljivanja neke rijei, a ne samo prvo ili posljednje.

PRO - MIL

Varijable
Donoenje Grafika
odluke
Petlje
Polja
Obrada
teksta

int main()
Ovaj program smo tako korigirali da
{
smo, iako s naredbom find zapoistring tekst;
njemo pretraivanje s lijeve strane,
string trazi;
pronali drugo pojavljivanje traene
int pozicija;
rijei.
cout << "Unesite tekst." << endl;
getline(cin, tekst);
cout << endl;
cout << "Sto trazim?" << endl;
getline(cin, trazi);
cout << endl;
pozicija = tekst.find(trazi,6);
if (pozicija != string::npos)
{
cout << "Pocetak je na " << pozicija << ". poziciji." << endl;
}
else
{
cout << "Nema trazene rijeci." << endl;
}
cout << endl;
system("PAUSE");
return 0;
pozicija = tekst.find(trazi,6);
}

Objekti

using namespace std;

Saimanje Veliki programi


koda

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

Na prvi
program

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

241

Obrada teksta

Ovaj program moe pronai svako pojavljivanje neke rijei u nekom tekstu.

#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
int main()
U ovom programu koristimo nared{
bu find, a pozicija poetka pretraistring tekst;
vanja nije odreena brojem, nego
string trazi;
sadrajem varijable trenutno.
int duljina;
int trenutno = 0;
Varijabla trenutno je na poetku 0,
int polozaj;
da bi prvo pretraivanje poelo od
cout << "Unesite tekst." << endl;
poetka teksta. Ako na nekoj pozigetline(cin, tekst);
ciji pronaemo traenu rije, varicout << endl;
jablu trenutno uveavamo za tu
cout << "Sto trazim?" << endl;
poziciju + 1, da bi novo pretraivagetline(cin, trazi);
nje poelo nakon poetka ve nacout << endl;
ene rijei i da bi se eventualno
duljina = tekst.size();
pronala nova rije, a ne ponovo
while (trenutno < (duljina + 1))
ista.
{
polozaj = tekst.find(trazi,trenutno);
if (polozaj != string::npos)
{
cout << "Nalazi se na " << polozaj << ". mjestu." << endl;
trenutno = polozaj + 1;
}
else
Budui da smo doavi do ove toe ve
{
prilino napredovali u vjetini programiratrenutno = duljina + 1;
nja, ovaj put je objanjenje funkcioniranja
}
programa neto skromnije.
}
cout << endl;
Pokuajmo shvatiti kako funkcionira progsystem("PAUSE");
ram i pokuajmo ga korigirati tako da ispie
return 0;
adekvatnu obavijest, ako se traena rije
}
uope ne pojavljuje. Pokuajmo isti program napisati koritenjem rfind naredbe.

242

PRO - MIL

Sadraj

C++ programiranje za apsolutne poetnike

Uvod

Na neku poziciju unutar teksta moemo dodati tekst.

Na prvi
program

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

Sadraj koji dodajemo.

tekst.insert(6,umetak);

Polja

Objekt u koji dodajemo tekst.

Donoenje Grafika
odluke

Naredba za dodavanje teksta.

Petlje

int main()
{
string tekst = "Ovo je tekst.";
string umetak = " moj";
tekst.insert(6,umetak);
cout << tekst << endl;
cout << endl;
system("PAUSE");
return 0;
}

Varijable

using namespace std;

Obrada
teksta

Pozicija na koju dodajemo tekst.


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

PRO - MIL

Saimanje Veliki programi


koda

int main()
{
string tekst = "Ovo je tekst.";
tekst.insert(6," dobar");
cout << tekst << endl;
cout << endl;
system("PAUSE");
return 0;
Naredba insert moe se napisati
}
i na ovaj nain.

Objekti

using namespace std;

243

Obrada teksta

Dio teksta spremljenog u objekt klase string moemo obrisati erase naredbom.

#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
int main()
{
string tekst = "Ovo je dobar tekst.";
tekst.erase(7,6);
cout << tekst << endl;
cout << endl;
system("PAUSE");
return 0;
}
Pozicija od kojem poinje brisanje.

Naredba za brisanje.

Objekt u kojem briemo.

tekst.erase(7,6);

Broj znakova koje emo obrisati.

244

PRO - MIL

Varijable

Na prvi
program

Uvod

Naredbom replace moemo dio teksta koji se nalazi u objektu klase string
zamijeniti nekim drugim tekstom.

Sadraj

C++ programiranje za apsolutne poetnike

Donoenje Grafika
odluke

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

Objekt u kojem mijenjamo dio teksta.

tekst.replace(7,5,drugi);

Sadraj kojim emo zamijeniti tekst u objektu tekst. Zamijenit emo 5 znakova, poevi od sedmog sa sadrajem objekta drugi. Umjesto objekta drugi
mogli bismo staviti i tekst unutar navodnika.

PRO - MIL

Polja
Obrada
teksta

Koliko emo znakova


zamijeniti.

Objekti

Naredba za zamjenu teksta.

Pozicija od koje zapoinje zamjena teksta.

Saimanje Veliki programi


koda

int main()
{
string tekst = "Ovo je dobar tekst.";
string drugi = "dodatan";
tekst.replace(7,5,drugi);
cout << tekst << endl;
cout << endl;
system("PAUSE");
return 0;
}

Petlje

using namespace std;

245

Obrada teksta

Premjetanje teksta iz char polja u string


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

246

PRO - MIL

#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;

Formiramo objekt klase string i u


njega spremamo tekst Tekst.

cout << endl;


system("PAUSE");
return 0;

Tekst iz objekta selimo u char


polje koje smo nazvali polje.

Ispisujemo sadraj polja da bismo vidjeli nalazi li se u njemu


doista Tekst.

char *polje = (char*)tekst.c_str();


Naziv char polja u koje emo
spremiti tekst iz objekta. U naem sluaju naziv je polje.

PRO - MIL

Naziv objekta iz kojeg tekst selimo u char polje. U naem sluaju naziv objekta je tekst.

Saimanje Veliki programi


koda

Objekti

Polja

cout << polje[0] << endl;


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

Petlje

char *polje = (char*)tekst.c_str();

Obrada
teksta

int main()
{
string tekst = "Tekst.";

Donoenje Grafika
odluke

Varijable

Na prvi
program

Mogue je i tekst iz objekta klase string premjestiti u polje char tipa, ali je naredba kojom to izvodimo neto sloenija.

Uvod

Premjetanje teksta iz stringa u char polje

Sadraj

C++ programiranje za apsolutne poetnike

247

Obrada teksta

Spremanje teksta u datoteku


Pomou objekata klase string moemo formirati liste i te liste moemo spremati u
datoteke na slian nain na koji smo spremali brojane liste

#include <cstdlib>
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
int x;
Kad smo spremali brojeve, izmeu
string tekst[8];
brojeva
stavljali smo prazno mjesto
ofstream izlaz("podaci.txt");
da
bismo
znali gdje zavrava jedan
for (x = 0; x < 8; x = x + 1)
broj,
a
poinje
drugi.
{
getline(cin, tekst[x]);
U ovom programu prazna mjesta
}
nisu prikladna za razlikovanje sadrfor (x = 0; x < 8; x = x + 1)
aja pojedinih elija jer se prazna
{
mjesta
nalaze izmeu rijei.
izlaz << tekst[x];
izlaz << " # ";
}
cout << endl;
cout << "Spremanje je gotovo." << endl;
cout << endl;
system("PAUSE");
return 0;
}

Umjesto praznih mjesta, izmeu sadraja pojedinih elija stavljamo #

Na ovoj slici vidi se samo


dio datoteke podaci.txt.

Ta oznaka e nam pomoi


prilikom itanja datoteke.

248

PRO - MIL

Na prvi
program

Uvod

Programom slinim programu za itanje datoteka u kojima se nalaze brojevi


itat emo sadraj datoteke u kojoj se nalaze tekstovi.

Sadraj

C++ programiranje za apsolutne poetnike

Varijable

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

PRO - MIL

Polja

Petlje
Zbog toga bi program
za unos teksta trebalo
tako modificirati da ne
dozvoljava unos # oznake.

Obrada
teksta

Ovo rjeenje je jednostavno, ali je manjkavo.


Ako bi netko prilikom
unosa teksta unio #
oznaku, poremetio bi
ispravno funkcioniranje
programa.

Objekti

Oznaku # koristit emo


da bismo utvrdili jesmo
li doli do kraja sadraja jedne elije polja.

Saimanje Veliki programi


koda

int main()
{
int x;
string tekst[8];
string privremeni;
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{
do
{
ulaz >> privremeni;
if (privremeni != "#")
{
tekst[x] = tekst[x] + privremeni + " ";
}
}
while (privremeni != "#");
}
for (x = 0; x < 8; x = x +1)
{
cout << tekst[x] << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

Donoenje Grafika
odluke

using namespace std;

249

Objekti

250

PRO - MIL

Saimanje Veliki programi


koda

Objekti

PRO - MIL
Obrada
teksta

Polja

Petlje

Donoenje Grafika
odluke

Varijable

Objekti

Na prvi
program

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

251

Objekti

Jednostavan primjer klase i objekata


U ovom trenutku mogla bi se
javiti dva pitanja koja su meusobno povezana. Jedno pitanje
je imamo li na raspolaganju samo one klase koje su napisali
autor C++ jezika ili bismo mogli
napisati svoje vlastite klase.
Pitanje zato bismo to uope
radili usko je povezano s drugim
pitanjem, a to je na koji nain se
piu veliki programi. Mi smo do
sada pisali male programe. Piu
li se na isti nain programi koji
sadre nekoliko stotina tisua
redova? Piu li se oni na nain
da ponemo s #include
<cstdlib> napiemo nekoliko
stotina tisua redova, na kraju
napiemo } i program je gotov.
Naravno da ne. To bi bilo nepraktino iz niza razloga. U sluaju da program piemo na taj nain (to je tehniki mogue), jako teko bismo pisanje programa raspodijelili na vie osoba i u
tako velikom programu jako teko bismo pronalazili greke.
Postoji jo jedan problem. U
veim programima esto se isti
posao mora obaviti na vie
mjesta u programu. Npr. ako u
telefonski imenik elimo unijeti
ime, prezime, ulicu, grad, zanimanje i tome slino, istu provjeru, npr. provjeru je li umjesto
slova netko unio brojeve morali
bismo ponoviti prilikom svakog
od nabrojenih unosa.

manje cjeline. U tom sluaju


lake se posao podijeli na vie
programera. Svaki radi svoju
manju cjelinu. Manje cjeline lake se piu i u njima se lake
pronalaze greke.
Ako dio programa koji se esto
ponavlja izdvojimo u manju cjelinu, koju pozivamo kad nam je
potrebna, dobit emo manji program u kojem se lake vre
izmjene. Lake je izmjenu unijeti
u jedan dio koji se poziva na
vie mjesta, nego u sluaju kad
se isti dio programa ponavlja na
desetak mjesta. U tom sluaju
trebali bi pronai svih desetak
mjesta i na svima promijeniti
program na isti nain, to je velik posao, a postoji i velika vjerojatnost da e doi do greke.
Vidimo da bi bilo dobro podijeliti
program na manje dijelove pa
se postavlja pitanje kako emo
to uiniti. To emo uiniti kreiranjem vlastitih objekata ili preciznije reeno, kreiranjem vlastitih
klasa na temelju kojih emo formirati objekte.
Postoji jo jedan razlog zato je
dobro poznavati uporabu klasa i
objekata. elimo li pisati programa koji e se umjesto u pojednostavljenom crnom prozoru
odvijati u normalnom windows
prozoru, apsolutno je nuno razumjeti uporabu klasa i objekata.

Svi navedeni problemi rjeavaju


se tako da se program razdijeli u

252

PRO - MIL

using namespace std;

Uoimo da taj program radi


potpuno isti posao kao ovaj.
Oito je da se u malim programima ne isplati koristiti klase i
objekte. Njihove prednosti dolaze do izraaja u veim programima.

PRO - MIL

using namespace std;


int main()
{
cout << "Ovo je nas tekst." << endl;
cout << endl;
system("PAUSE");
return 0;
}

Uvod
Obrada
teksta
Objekti

#include <cstdlib>
#include <iostream>

Saimanje Veliki programi


koda

int main()
{
tekst t;
t.pisi();
cout << endl;
system("PAUSE");
return 0;
}

Unesimo u programsku okolinu i pokrenimo na prvi program


koji koristi klase i objekte.

Polja

class tekst
{
public:
void pisi()
{
cout << "Ovo je nas tekst." << endl;
}
};

Petlje

#include <cstdlib>
#include <iostream>

Donoenje Grafika
odluke

Varijable

Na prvi
program

Imajmo u vidu da prednost uporabe objekata dolazi do izraaja u veim programima. Manji programi koje emo vidjeti u ovom poglavlju mogu se elegantnije napraviti bez uporabe objekata. Unato tome, mi emo vidjeti primjere
uporabe objekata u malim programima jer emo na primjerima malih programa lake shvatiti princip uporabe objekata.

Sadraj

C++ programiranje za apsolutne poetnike

253

Objekti

Najprije emo pogledati zanimljive dijelove naeg programa, a zatim funkcioniranje programa kao cjeline.

Ovaj dio programa izrazito je slian ovom dijelu programa iz prolog poglavlja.

tekst t;
t.pisi();

string tekst;
tekst.reserve(256);

U prvom redu formira se objekt


klase tekst koji smo nazvali t.

U prvom redu formirali smo objekt


klase string koji smo nazvali tekst.

U drugom redu nad objektom t vri


se operacija pisi(). Unutar zagrada
nema sadraja, jer se nita ne unosi u objekt t, ali su zagrade svejedno obvezne.

U drugom redu nad objektom tekst


izvrili smo operaciju reserve(250)
kojom smo osigurali prostor za spremanje teksta. Izmeu naziva objekta
i naziva operacije nalazi se toka.

Oblik t.pisi bez zagrada nije ispravan.

Naziv klase na temelju


koje emo formirati objekt. U naem sluaju
naziv klase je tekst.

tekst t ;

Naziv objekta koji formiramo na temelju klase. U


naem sluaju formiramo
objekt t klase tekst.

t . pisi() ;
Naziv objekta iju metodu emo koristiti. U naem sluaju koristit emo metodu t.

Naziv metode koju sadri


objekt t. U naem sluaju
koristimo metodu pisi().
Obvezna toka.

254

PRO - MIL

Ovdje vidimo da objekt


moemo nazvati i drugaije, npr. reci.
Ako smo formirali objekt reci, onda naredba
koja je do sada imala
oblik:
t.pisi();

int main()
{
tekst reci;
reci.pisi();
cout << endl;
system("PAUSE");
return 0;
}

dobiva oblik:
reci.pisi();

using namespace std;

formiranja objekta reci klase tekst i

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

varijable a tipa int.

PRO - MIL

I ovdje se najprije navodi tip varijable, a zatim naziv a.


Nad varijablom moemo vriti razne operacije. U naem sluaju u
varijablu a spremamo broj 12.

Objekti

Uoimo da postoji slinost izmeu

Saimanje Veliki programi


koda

#include <cstdlib>
#include <iostream>

Obrada
teksta

Polja

Dakle, sad se operacija


pisi vri nad objektom
reci.

Varijable

class tekst
{
public:
void pisi()
{
cout << "Ovo je nas tekst." << endl;
}
};

Donoenje Grafika
odluke

using namespace std;

Petlje

#include <cstdlib>
#include <iostream>

Na prvi
program

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

255

Objekti

#include <cstdlib>
#include <iostream>
using namespace std;
class tekst
{
public:
void pisi()
{
cout << "Ovo je nas tekst." << endl;
}
};
int main()
{
tekst prvi;
tekst drugi;
tekst treci;
prvi.pisi();
drugi.pisi();
treci.pisi();
cout << endl;
system("PAUSE");
return 0;
}

class tekst
{
public:
void pisi()
{
cout << "Ovo je nas tekst." << endl;
}
};

256

Kao to moemo formirati


vie varijabli int tipa, tako
moemo formirati vie
objekata klase tekst.
U ovom primjeru formirali
smo tri objekta, objekt
prvi, objekt drugi i objekt
trei.
Za biranje naziva objekata vrijede slina pravila
kao i za biranje naziva
varijabli.

Za razliku od klase string


koju je ve netko prije napisao, a mi je samo koristimo, klasu tekst morali
smo sami napisati.
U ovom dijelu programa
formira se klasa tekst.

PRO - MIL

class BrdaIDoline
{
public:
void pisi()
{
cout << "Ovo je nas tekst." << endl;
}
};

tekst t;
moramo napisati u obliku:
BrdaIDoline t;
Dakle, formiramo objekt t
klase BrdaIDoline.
(Drugo je to je pametno
da nam naziv klase govori emu klasa slui, pa je
loginije da se klasa za
ispis teksta zove tekst, a
ne BrdaIDoline.)

Vidimo da je rezultat rada


takvog programa potpuno
jednak kao i rezultat rada
programa u kojem smo
formirali klasu tekst.

PRO - MIL

Uvod
Na prvi
program
Saimanje Veliki programi
koda

Objekti

Obrada
teksta

int main()
{
BrdaIDoline t;
t.pisi();
cout << endl;
system("PAUSE");
return 0;
}

To je dozvoljeno, samo
to sad naredbu koja je
prije imala oblik:

Varijable

using namespace std;

U ovoj inaici programa


klasu smo nazvali BrdaIDoline.

Donoenje Grafika
odluke

#include <cstdlib>
#include <iostream>

Nakon naredbe class


slijedi naziv klase. U
naem sluaju klasu
smo nazvali tekst, ali
mogli smo i drugaije.

Petlje

class tekst

Polja

Formiranje klase zapoinje


naredbom
class. To je naredba
C++ jezika i ne moe
se mijenjati.

Sadraj

C++ programiranje za apsolutne poetnike

257

Objekti

public:
void pisi()
{
cout << "Ovo je nas tekst." << endl;
}

U ovom djelu nalazi se


popis varijabli i metoda
koje posjeduje neka klasa. Metode su mudar naziv za operacije koje neka
klasa moe izvriti.
U naem sluaju klasa ne
sadri varijable. Ima samo jednu metodu koju
smo nazivali pisi().
Popis metoda poinje
naredbom public: Poblie znaenje te naredbe
vidjet emo kasnije.

void pisi()
{
cout << "Ovo je nas tekst." << endl;
}

Ova naa mala klasa ne


sadri varijable i sadri
samo jednu metodu odnosno moe napraviti
samo jednu operaciju. Tu
metodu nazvali smo pisi
().
Ispred naziva metode
nalazi se naredba void.
Njeno znaenje poblie
emo objasniti kasnije.

{
cout << "Ovo je nas tekst." << endl;
}

Unutar vitiastih zagrada


nalaze se naredbe koje
pojedina metoda izvrava.
Naa jednostavna metoda
samo naredbom cout ispisuje tekst unutar navodnika na zaslon raunala.

258

PRO - MIL

Void naredba ispred


naziva metode oznauje da metoda ne
vraa nikakvu vrijednost.
U kojem smislu ne
vraa vrijednost vidjet emo kasnije kad
ovakvu metodu usporedimo s onima
koje vraaju vrijednost.

PRO - MIL

t.pisi();
pisati u obliku:
t.Pero();
Kao i kod biranja naziva
varijabli i klasa, i ovdje je
pametno da nam naziv
metode govori to metoda radi. Zato je naziv pisi
za metodu koja ispisuje
tekst bolji od naziva Pero.

void pisi ()

Dok naziv metode uz


odreena ogranienja
moemo birati po volji,
ove dvije zagrade se
ovdje moraju obavezno
nalaziti.

Naziv metode biramo po volji, pazei na ogranienja o kojima smo govorili kad smo govorili
o biranju naziva varijabli.
Pametno je da naziv metode tako izaberemo
da nam govori emu metoda slui.

Na prvi
program
Varijable
Donoenje Grafika
odluke

To je dozvoljeno, samo
to emo naredbu koju
smo do sada pisali u obliku:

Petlje

int main()
{
tekst t;
t.Pero();
cout << endl;
system("PAUSE");
return 0;
}

U ovom primjeru metodu


smo nazvali Pero().

Polja

class tekst
{
public:
void Pero()
{
cout << "Ovo je nas tekst." << endl;
}
};

Obrada
teksta

using namespace std;

Objekti

Kao to smo klasu mogli


nazvati drugaije, mogli
smo i metodu.

Saimanje Veliki programi


koda

#include <cstdlib>
#include <iostream>

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

259

Objekti

Pogledajmo strukturu naeg programa.


#include <cstdlib>
#include <iostream>
using namespace std;
class tekst
{
public:
void pisi()
{
cout << "Ovo je nas tekst." << endl;
}
};
int main()
{
tekst t;
t.pisi();
cout << endl;
system("PAUSE");
return 0;
}

Sadra klase nalazi se


unutar vitiastih zagrada.

260

U ovom dijelu nalaze se klase


koje program koristi. U naem
sluaju imamo samo jednu
klasu, klasu pisi().

Glavni dio programa. Sada moemo vidjeti zato


smo program zapoinjali s int main() oznakom,
odnosno oznakom da je to glavni dio.
Kad raunalo pokrene program, najprije e se
pokrenuti ovaj dio, a ostali dijelovi e se koristiti
po potrebi.

Klasa se moe sastojati od vie tipova sadraja. Jedan od njih je public. Kasnije emo podrobnije vidjeti to oznaka public oznaava.

class tekst
{
public:
void pisi()
{
cout << "Ovo je nas tekst." << endl;
}
};

Poetni dio programa.

U klasi se mogu nalaziti varijable i metode. U


naem sluaju varijable
ne koristimo, a imamo
jednu metodu koju smo
nazvali pisi().
Metode su zapravo
programi koji odreuju
koje operacije neka
klasa moe izvesti .

PRO - MIL

Sadraj

C++ programiranje za apsolutne poetnike

Na prvi
program

Uvod

Unutar metode ne mora se


nalaziti program za ispis. Moe se nalaziti bilo to, npr.
program za crtanje kruga.

Umjesto tekst t; tj. umjesto


naredbe formiranja objekta t
klase tekst stavimo slika crtaj. Time emo formirati objekt crtaj klase slika.

Umjesto t.pisi(); tj. umjesto


pozivanja metode pisi() u klasi
tekst stavit emo crtaj.krug();

Izbacimo naredbu cout << endl; i naredbu system("PAUSE");.


Iako program radi i s tim naredbama, bez njih e raditi neto elegantnije. Ovaj
se program odvija u grafikom prozoru pa su nepotrebni razmak i pauza u
tekstualnom prozoru.

PRO - MIL

Petlje

Umjesto void pisi() stavit emo void krug().

Polja

Umjesto class tekst stavit


emo class slika.

Obrada
teksta

int main()
{
tekst t;
t.pisi();
cout << endl;
system("PAUSE");
return 0;
}

Iako program i ovako radi,


malo emo ga preurediti.

Objekti

class tekst
{
public:
void pisi()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle(320,240,180);
getch();
closegraph();
}
};

Saimanje Veliki programi


koda

using namespace std;

Donoenje Grafika
odluke

Varijable

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

261

Objekti

Sloeniji primjeri klasa i objekata


Klasa moe sadravati vie
metoda, npr. u ovom sluaju
sadri tri metode.

#include <cstdlib>
#include <iostream>
using namespace std;
class tekst
{
public:
void prva()
{
cout << "Ovo je prva metoda." << endl;
}

Prva metoda koju smo


nazvali prva().

void druga()
{
cout << "Ovo je druga metoda." << endl;
}

Druga metoda koju smo


nazvali druga().

void treca()
{
cout << "Ovo je treca metoda." << endl;
}

Trea metoda koju smo


nazvali treca().

};
int main()
{
tekst t;
t.prva();
t.druga();
t.treca();
cout << endl;
system("PAUSE");
return 0;
}

262

Objekt formiramo jednom, a zatim pozivamo


metode po logici da
najprije navedemo naziv objekta, zatim stavimo toku i konano
naziv metoda. Zagrade
na kraju te ; oznaka su
obvezne.

PRO - MIL

Sadraj

C++ programiranje za apsolutne poetnike

Na prvi
program

Uvod

Program moe sadravati


vie klasa, npr. u ovom
sluaju klasu tekst1 i klasu
tekst2.

PRO - MIL

Polja
Ovdje na temelju
svake klase formiramo objekt, a zatim pozivamo metodu od svake klase odnosno operaciju koju objekt
moe izvriti
Uoimo da je dozvoljeno da se metoda pod istim nazivom pisi() nalazi
u obje klase.

Obrada
teksta

int main()
{
cout << "Zovemo metodu klase tekst1." << endl;
tekst1 t1;
t1.pisi();
cout << endl;
cout << "Zovemo metodu klase tekst2." << endl;
tekst2 t2;
t2.pisi();
cout << endl;
system("PAUSE");
return 0;
}

Druga klasa koju


smo nazvali tekst2.

Objekti

class tekst2
{
public:
void pisi()
{
cout << "Ovo je klasa tekst2." << endl;
}
};

Prva klasa koju smo


nazvali tekst1.

Saimanje Veliki programi


koda

class tekst1
{
public:
void pisi()
{
cout << "Ovo je klasa tekst1." << endl;
}
};

Petlje

using namespace std;

Donoenje Grafika
odluke

Varijable

#include <cstdlib>
#include <iostream>

263

Objekti

#include <cstdlib>
#include <iostream>
using namespace std;
class tekst
{
public:
void pisi()
{
cout << "Upravo koristimo objekt." << endl;
}
};
int main()
{
tekst t;
cout << "Objekt koristimo 1. put." << endl;
t.pisi();
cout << endl;
cout << "Objekt koristimo 2. put." << endl;
t.pisi();
cout << endl;
cout << "Objekt koristimo 3. put." << endl;
t.pisi();
cout << endl;
system("PAUSE");
return 0;
}

Sve klase koje smo do sada formirali bile su veoma


jednostavne budui da nisu komunicirale s ostatkom programa na nain da bi bilo mogue u klasu
unijeti neke podatke ili iz klase iitati neke podatke, npr. brojeve ili tekst.
U nastavku ovog poglavlja vidjet emo na koji nain moemo u klase unositi ili iz klasa iitavati podatke.

264

Jednom
formirani
objekt moemo proizvoljni broj puta koristiti u programu.
To je jedna od prednosti koritenja klasa
i objekata.
Operaciju koja se u
programu esto ponavlja stavimo u klasu, u programu formiramo objekt i pozivamo odreenu operaciju kad god nam
zatreba, bez potrebe
da je ponovo piemo.

Uporaba klasa i objekata veoma je sloena ideja, i kao uvijek


do sada, imajmo na
umu da emo te programske tehnike usvojiti tek kad napravimo velik broj primjera.

PRO - MIL

Sadraj

C++ programiranje za apsolutne poetnike

Komunikacija s metodama

#include <cstdlib>
#include <iostream>
using namespace std;

Petlje
private grupi, kla-

};
int main()
{
pravokutnik p;
p.naslov();
cout << "Povrsina je ";
cout << p.povrsina(2,3);
cout << endl << endl;
system("PAUSE");
return 0;
}

PRO - MIL

sa sadri i dvije
metode u public
grupi. To su metoda naslov() i me-

Obrada
teksta

int povrsina (int a, int b)


{
c = a * b;
return (c);
}

Polja

Osim varijable u

toda povrsina (int


a, int b).

U glavnom programu formiramo objekt p klase pravokutnik i koristimo


ga.

Objekti

public:
void naslov()
{
cout << "Povrsina pravokutnika." << endl;
cout << endl;
}

Klasa pravokutnik
sadri jednu varijablu. To je varijabla
c int tipa, a nalazi
se u private grupi.

Saimanje Veliki programi


koda

class pravokutnik
{
private:
int c;

Donoenje Grafika
odluke

Varijable

Na prvi
program

Uvod

Pogledajmo sada program


koji sadri klasu u koju je mogue unijeti podatke iz drugih
dijelova programa.

265

Objekti

#include <cstdlib>
#include <iostream>
using namespace std;
class pravokutnik
{
private:
int c;

Prethodni program malo smo modificirali da bi


lake mogli shvatiti razliku izmeu naredbe
private i naredbe public.

public:
U public podruju dodali smo
int pov;
varijablu koju smo nazvali pov.
void naslov()
{
cout << "Povrsina pravokutnika." << endl;
cout << endl;
}
Sadraj varijable c koja je formirana u
int povrsina (int a, int b)
{
c = a * b;
pov = c;
return (c);
}
};
int main()
{
pravokutnik p;
p.naslov();
cout << "Povrsina je ";
cout << p.povrsina(2,3);
cout << endl;
cout << "p.pov je " << p.pov << endl;
// cout << "p.c je " << p.c << endl;
cout << endl << endl;
system("PAUSE");
return 0;
}

266

private podruju i u kojoj se nalazi rezultat izrauna povrine spremili smo u


varijablu pov koja je formirana u public
podruju.

Ovdje vidimo da sadraju varijable pov moemo pristupiti u


glavnom programu, iako je formirana u objektu. Pristupamo joj
tako da prvo napiemo naziv
objekta zatim toku i na kraju
varijablu, dakle u p.pov obliku.
Pokuamo li na isti nain pristupiti varijabli c, doi e do greke.
(elimo li probati, maknimo //
oznaku na poetku reda.)
Ve iz ovog primjera bismo mogli zakljuiti u kojem smislu je c
varijabla private, a kojem smislu
je pov varijabla public.

PRO - MIL

int povrsina (int a, int b)


{
c = a * b;
pov = c;
return (c);
}

Dakle izvana moemo pristupiti samo onim varijablama koje su u public podruju formirane samostalno kao pov varijabla, a ne moemo onima koje su
formirane unutar neke metode.

PRO - MIL

Uvod
Donoenje Grafika
odluke
Saimanje Veliki programi
koda

Ovdje su formirane jo dvije varijable, varijabla a i varijabla b. Iako bi bilo


logino da tim varijablama moemo pristupiti izvan klase odnosno izvan objekta, jer su formirane u public podruju, to ipak nije sluaj. Pokuamo li im
pristupiti izvan objekta doi e do greke.

Objekti

Obrada
teksta

};

To ne moemo uiniti tako da samo navedemo naziv varijable ili procedure nego tako da prvo navedemo naziv objekta, zatim toku i na
kraju naziv varijable
ili procedure. Ako
pristupamo proceduri, moramo navesti i
zagrade.

Petlje

public:
int pov;
void naslov()
{
cout << "Povrsina pravokutnika." << endl;
cout << endl;
}

Za razliku od private
podruja, svemu to
formiramo u public
podruju
moemo
pristupiti i izvan klase, odnosno izvan
objekta.

Polja

class pravokutnik
{
private:
int c;

Varijable

Na prvi
program

Naredba private oznaava podruje u kojem se nalaze varijable i metode


koje se mogu koristiti unutar klase odnosno unutar objekta, ali se njima ne
moe pristupiti iz glavnog programa, odnosno izvan objekta. U ovom programu u private podruju imamo samo varijablu c. Mogli bismo imati i procedure.

Sadraj

C++ programiranje za apsolutne poetnike

267

Objekti

private:
int c;

Unutar private podruja u ovom sluaju formirali smo samo varijablu c. Mogli bismo staviti i procedure, ali u tom
sluaju bismo tim procedurama mogli pristupiti samo
unutar klase odnosno samo unutar objekta. Nain pisanja bio bi isti kao i unutar public podruja.

Ovdje formiramo pov varijablu int tipa. Varijable unutar klase formiramo na potpuno jednak nain kao i unutar glavnog programa.

public:
int pov;
void naslov()
{
cout << "Povrsina pravokutnika." << endl;
cout << endl;
}

Ovdje formiramo metodu za izraun povrine


pravokutnika. Vidimo
da joj je oblik drugaiji
od oblika naslov() metode pa emo je poblie
pogledati.

int povrsina (int a, int b)


{
c = a * b;
pov = c;
return (c);
}

Do sada smo formiranje


metode zapoinjali s void.
Ova metoda zapoinje s int.

Ovdje formiramo metodu za ispis teksta na


zaslon raunala. Takav
tip procedure ve smo
vidjeli u prethodnim
primjerima.

Naziv metode.

Ulazne varijable su
unutar zagrada.

to to znai?
To znai da e ova metoda
biti int tipa, odnosno da e
rezultat njenog rada biti broj
int tipa.
Naredbom:
cout << p.povrsina(2,3);
ispisat emo rezultat rada
metode povrsina na zaslon,
a rezultat je broj int tipa.

268

int povrsina ( int a, int b )


Ovdje je popis varijabli koje moemo unijeti u metodu.
U ovu metodu moemo unijeti dva broja.
Prvi e biti spremljen u varijablu a, drugi u
varijablu b, a oba su int tipa.

PRO - MIL

p.naslov(2,3);

Ispisuje, ali se ispisivanje zbiva


unutar metode.

Mogue je unutar metode staviti


cin naredbu pa neto unijeti npr.
preko tipkovnice, ali nije mogue
nita unijeti na gore opisan nain.

U glavnom programu mogue je


napisati:
cout << p.povrsina(2,3);

void naslov ()

ali nije mogue napisati:

Petlje

cout << p.naslov();

Uvod

Sad e netko upitati, kako ne


vraa kad ispisuje tekst na zaslon.

Na prvi
program

Prazne zagrade znae da u ovu


metodu nita nije mogue unijeti
na nain da se napie:

Varijable

Void naredba znai da metoda


naslov nee vraati nikakav rezultat rada.

Donoenje Grafika
odluke

Pogledajmo jo jednom naredbu za formiranje metode koja zapoinje void


naredbom.

Sadraj

C++ programiranje za apsolutne poetnike

Mogue je jedino s:

Unutar metode mogu se koristiti varijable koje smo


koristili za unos, varijabla a i varijabla b, te se mogu
koristiti sve one varijable koje su formirane u public
ili private podruju, dakle varijabla c i varijabla pov.

return (c);

Ovom naredbom odreujemo koju vrijednost e procedura vraati u glavni program, odnosno to e
naredba cout << p.povrsina(2,3); ispisati.

PRO - MIL

Saimanje Veliki programi


koda

c = a * b;
pov = c;

Objekti

Obrada
teksta

pozvati metodu naslov koja onda unutar sebe ispisuje tekst na


zaslon raunala.

Polja

p.naslov();

269

Objekti

#include <cstdlib>
#include <iostream>
using namespace std;
class racunaj
{
private:
int c;
public:
int metoda1(int a, int b)
{
c = a + b;
return (c);
}
int metoda2(int a, int b)
{
c = a + b;
return (a);
}

U ovom programu moemo


lijepo vidjeti kako o naredbi
return ovisi to e se naredbom
r.metoda1(2,4) ispisati na zaslon raunala.

int metoda3(int a, int b)


{
c = a + b;
return (b);
}
};
int main()
{
racunaj r;
cout << "return(c) daje " << r.metoda1(2,4) << endl;
cout << "return(a) daje " << r.metoda2(2,4) << endl;
cout << "return(b) daje " << r.metoda3(2,4) << endl;
system("PAUSE");
return 0;
}

270

Ako smo u metodi upotrijebili


naredbu return
(c), naredbom
r.metoda1(2,4)
ispisat e se
sadraj varijable
c.
Naredbom
return(a) ispisat
e se sadraj
varijable a, a
naredbom
return(b) ispisat
e se sadraj
varijable b.

PRO - MIL

Sadraj

C++ programiranje za apsolutne poetnike

Uvod

#include <cstdlib>
#include <iostream>

Obrada
teksta

pozvati metodu za unos


brojeva.

Metodom povrsina izraunava se povrina i ispisuje rezultat.


Rezultat se ispisuje unutar metode. Nije mogua
naredba:
cout << p.povrsina();

PRO - MIL

Donoenje Grafika
odluke

Varijable
p.unesi();

Polja

Mogue je jedino naredbom:

Petlje

p.povrsina(2,3);

Objekti

int main()
{
racunaj p;
p.unesi();
p.povrsina();
cout << endl;
system("PAUSE");
return 0;
}

U ovom programu imamo


dvije void metode. Metodom unesi unose se brojevi u varijablu a i varijablu b. To se vri unutar
metode. Nije mogue
napisati naredbu:

Saimanje Veliki programi


koda

class racunaj
{
private:
int a;
int b;
int c;
public:
void unesi(void)
{
cout << "Unesite stranicu a." << endl;
cin >> a;
cout << "Unesite stranicu b." << endl;
cin >> b;
}
void povrsina(void)
{
c = a * b;
cout << "Povrsina je " << c << endl;
}
};

Na prvi
program

using namespace std;

271

Objekti

#include <cstdlib>
#include <iostream>
using namespace std;
class racunaj
{
private:
int a;
int b;
int c;

U ovom programu najprije raunamo povrinu, a


zatim dobiveni rezultat mnoimo sa cijenom kvadratnog metra povrine da bismo dobili cijenu povrine.

public:
void unesi(void)
{
cout << "Unesite stranicu a." << endl;
cin >> a;
cout << "Unesite stranicu b." << endl;
cin >> b;
}
int povrsina(void)
{
c = a * b;
return (c);
}
Obratimo panju na
};
injenicu da unutar
glavnog programa smiint main()
jemo koristiti c varijab{
lu, iako c varijabla posint c;
toji u klasi racunaj.
int u;
racunaj p;
p.unesi();
cout << "Cijena kvadratnog metra." << endl;
cin >> c;
u = c * p.povrsina();
cout << "Cijena poda je " << u << endl;
cout << endl;
system("PAUSE");
return 0;
}

272

Vidjeli smo da rezultat


izrauna unutar metode moemo ispisati na
dva naina. Ako je metoda tipa void onda se
rezultat ispisuje unutar
metode. Tada naredba
tipa:
cout << povrsina();
nije mogua.
Ako metoda nije void
tipa, nego int ili float ili
char, onda je mogue
napisati gore navedenu
naredbu.
Postavlja se pitanje u
emu je razlika u funkcionalnosti tih dvaju
naina ispisa.
Razlika je u tome da
ako metoda nije void
tipa, onda metodu moemo koristiti unutar
izraza poput:
u = c * p.povrsina();

PRO - MIL

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

Na prvi
program

#include <cstdlib>
#include <iostream>

cout << endl;


system("PAUSE");
return 0;
}

PRO - MIL

Da je to int metoda i da rezultat


vraamo
return
naredbom, mogli
bi napisati ili return
(p) ili return(u), ali
ne bismo mogli
vratiti obje vrijednosti.
Ukratko, koju od
metoda ispisa emo upotrijebiti ovisi o potrebama
koje moramo zadovoljiti.

Donoenje Grafika
odluke
Petlje
Polja
Obrada
teksta

U ovom sluaju u
metodi cijena mi
ispisujemo povrinu i cijenu.

Objekti

int main()
{
racunaj p;
p.unesi();
p.cijena();

Ako za ispis koristimo void metodu


pa uporaba naredbe return nije mogua, ispisom rezultata unutar metode moemo ispisati vie vrijednosti.

Saimanje Veliki programi


koda

class racunaj
{
private:
int a;
int b;
int c;
int p;
int u;
public:
void unesi(void)
{
cout << "Unesite stranicu a." << endl;
cin >> a;
cout << "Unesite stranicu b." << endl;
cin >> b;
cout << "Cijena kvadratnog metra." << endl;
cin >> c;
}
void cijena(void)
{
p = a * b;
cout << "Povrsina je " << p << endl;
u = p * c;
cout << "Cijena je " << u << endl;
}
};

Varijable

using namespace std;

273

Objekti

Naredba cout << p.povrsina(2,3); zbunjujua je izmeu ostalog i zato to istovremeno slui za unos broja 2 i broja 3 u metodu i za ispis rezultata mnoenja,
odnosno rezultata rada metode.

cout << p.povrsina( 2, 3 );

int povrsina ( int a, int b )


{
c = a * b;

Kad raunalo naie na ovakvu naredbu, najprije e broj


dva i broj tri proslijediti u varijablu a i varijablu b koje se
nalaze u metodi povrsina.

Unutar metode povrsina raunalo e sadraj varijable a i varijable b pomnoiti, a


rezultat spremiti u
varijablu c.

return ( c );
}

cout << p.povrsina(2,3) ;

Kad raunalo naie na


naredbu
return(c),
sadraj varijable c ispisat e na zaslon raunala.
Ova naredba tada e
funkcionirati kao da
smo u programu koji
ne sadri klase i objekte napisali:
cout << c;

274

PRO - MIL

Na prvi
program

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

PRO - MIL

Polja
Obrada
teksta
Vidimo da naredbu:
p.povrsina(a1,b1)
moemo pisati i
tako da unutar
zagrada umjesto
konkretnih brojeva
stavimo varijable.

Objekti

int main()
{
float a1;
float b1;
pravokutnik p;
p.naslov();
cout << "Unesite stranicu a." << endl;
cin >> a1;
cout << "Unesite stranicu b." << endl;
cin >> b1;
cout << "Povrsina je ";
cout << p.povrsina(a1,b1);
cout << endl << endl;
system("PAUSE");
return 0;
}

Kao to smo ve
rekli, metode ne
moraju biti int tipa.
Mogu biti i nekog
drugog tipa. U
ovom
programu
imamo
metodu
float tipa.

Saimanje Veliki programi


koda

class pravokutnik
{
private:
float c;
public:
void naslov()
{
cout << "Povrsina pravokutnika." << endl;
cout << endl;
}
float povrsina (float a, float b)
{
c = a * b;
return (c);
}
};

Petlje

using namespace std;

Donoenje Grafika
odluke

Varijable

#include <cstdlib>
#include <iostream>

275

Objekti

Razdvajanje deklaracije i definicije


Do sada su se metode nalazile
unutar klase. U sloenijim programima najee je deklaracija klase odvojena od definicija
metoda.
U deklaraciji klase metode se
samo nabroje, a definicije metoda se nalaze drugdje.

#include <cstdlib>
#include <iostream>
using namespace std;
class pravokutnik
{
private:
int c;
public:
int povrsina (int a, int b);
};
int pravokutnik :: povrsina (int a, int b)
{
c = a * b;
return (c);
};

U deklaraciji klase samo su


nabrojeni elementi klase i podijeljeni u private i public podruje.
Ovdje se nalazi samo zaglavlje metode pravokutnik u kojem su odreena ulazna i izlazna svojstva metode, ali ovdje
nema sadraja metode.

Sadraj metode pravokutnik, odnosno dio programa


kojim odreujemo to e
metoda pravokutnik raditi
nalazi se ovdje.

int main()
{
cout << "Povrsina pravokutnika" << endl;
cout << endl;
pravokutnik p;
cout << "Povrsina je = " << p.povrsina(2,3) << endl;
cout << endl;
system("PAUSE");
return 0;
}

276

Ovako napisanu
klasu koristimo
na isti nain kao
i klase koje smo
do sada koristili.

PRO - MIL

Naziv klase.

Naziv metode.

Popis varijabli preko


kojih se brojevi mogu
unijeti u metodu.

Obvezna :: oznaka izmeu naziva klase i


naziva metode.

U veini sluajeva do sada noviji nain izrade programa bio je elegantniji


od starog. U ovom sluaju to ba ne izgleda tako. Ovakav nain pisanja
klase oigledno je manje elegantan od prethodnog. Postoji vea vjerojatnost da e doi do greke budui da treba uskladiti deklaraciju metode i
definiciju metode.
Ovaj nain pisanja klasa doista je manje elegantan od naina koji smo koristili u prethodnim programima i ima ga smisla upotrebljavati samo kad elimo vei program razdijeliti u vie datoteka. Ako klase piemo na ovaj nain, tada moemo u jednu datoteku staviti sve deklaracije klasa, a u druge
datoteke definicije metoda. Ako se program nalazi u jednoj datoteci, bolje je
definiciju metode napisati unutar deklaracije metode kao to smo to inili u
prethodnim programima.

PRO - MIL

Uvod
Na prvi
program
Varijable
Donoenje Grafika
odluke
Petlje

int pravokutnik :: povrsina (int a, int b)

Definicija metode.
Ovdje
se nalazi program koji odreuje to ta
metoda radi,
odnosno svojstva metode.

Polja

int povrsina (int a, int b) ;

Obrada
teksta

Obvezna ; oznaka
Deklaracija metode u deklaraciji klase. Ovdje je naveden naziv metode i ulazno-izlazna svojstva metode, ali ne i program metode.

Objekti

Tip vrijednosti koju e metoda


vraati kao rezultat. U ovom
sluaju je int, a mogao bi biti i
neki drugi npr. float.

Saimanje Veliki programi


koda

Pogledajmo kako su povezane deklaracija metode i definicije metode.

Sadraj

C++ programiranje za apsolutne poetnike

277

Objekti

Uporaba konstruktora

#include <cstdlib>
#include <iostream>
using namespace std;
class pravokutnik
{
private:
int a;
int b;
public:
pravokutnik(void)
{
cout << "Stranica a:" << endl;
cin >> a;
cout << "Stranica b:" << endl;
cin >> b;
}
int povrsina(void)
{
return (a * b);
}
};

U ovom programu nalazi se nekoliko neobinosti.


Prva neobinost jest ova metoda.
Neobino je to to ima isti naziv
kao i klasa. Klasu smo nazvali pravokutnik i ova metoda zove se pravokutnik.
Druga neobinost jest to ova metoda nema nikakvu oznaku povratne vrijednosti, nije ni void pravokutnik(), ni int pravokutnik().

int main()
{
pravokutnik p;
cout << "Povrsina je " << p.povrsina() << "." << endl;
cout << endl;
system("PAUSE");
return 0;
}

Neobino je i to
to je nigdje ne
pozivamo.
U ovom redu
formiramo objekt
p klase pravokutnik, a ve u sljedeem redu pozivamo metodu
povrsina.

Iako nigdje u programu nije vidljivo pozivanje metode pravokutnik, njen sadraj
se oigledno izvrava. Oigledno je da prije izvoenja metode povrina raunalo unosi stranicu a i stranicu b. Takva metoda naziva se konstruktor, a izvrava
se u trenutku formiranja objekta. Dakle, ova metoda izvrila se u trenutku kad
smo naredbom pravokutnik.p formirali objekt p klase pravokutnik.

278

PRO - MIL

PRO - MIL

Varijable
Donoenje Grafika
odluke
Petlje
Polja
Obrada
teksta

class pravokutnik
{
U ovom programu imamo
private:
dva konstruktora.
int a;
int b;
Jednome je ulazni dio void
public:
tipa, to znai da se u njega
pravokutnik(void)
ne moe unositi vrijednost
{
tako da napiemo:
cout << "Stranica a:" << endl;
cin >> a;
pravokutnik p2(3,4);
cout << "Stranica b:" << endl;
cin >> b;
}
Drugome je ulazni dio (int a1,
pravokutnik(int a1, int b1)
int b1), to znai da se u nje{
ga moe vrijednost unositi
a = a1;
tako da napiemo:
b = b1;
}
pravokutnik p2(3,4);
int povrsina(void)
{
return (a * b);
}
Ovdje formiramo objekt klase pravokutnik bez
};
vrijednosti u zagradi. U tom sluaju primijenit
e se pravokutnik(void) konstruktor.
int main()
{
pravokutnik p1;
cout << "Povrsina je " << p1.povrsina() << "." << endl;
cout << endl;
pravokutnik p2(3,4);
cout << "Za p2(3,4) povrsina je " << p2.povrsina() << "." << endl;
cout << endl;
system("PAUSE");
Objekt p2(3,4); u zagradi ima dva broja, pa e se u
return 0;
tom sluaju primijeniti pravokutnik(int a1, int b1) kon}
struktor. U tom sluaju povrina e se izraunati
mnoenjem brojeva 3 i 4, bez unosa tipkovnicom.

Objekti

using namespace std;

Saimanje Veliki programi


koda

#include <cstdlib>
#include <iostream>

Na prvi
program

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

279

Objekti

Nasljeivanje

#include <cstdlib>
#include <iostream>
using namespace std;
class kvadrat
Klasa kvadrat napisana je na
{
uobiajeni nain.
protected:
int br;
public:
void unos (void)
Klasa kub napisana je na nain koji
{
do sada nismo koristili.
cout << "Unesite broj:" << endl;
cin >> br;
Naredbom:
}
int izracun (void)
class kub : public kvadrat
{
return (br * br);
formiramo klasu kub koja nasljeuje
}
varijable i metode klase kvadrat. Dak};
le klasa kub moe koristiti metodu
class kub : public kvadrat
unos, iako je ona definirana u klasi
{
unos.
public:
int izracun(void)
{
return (br * br * br);
}
};

Objekt objekt2 klase kub moe koristiti metodu unos koja se nalazi u klasi kvadrat kao da
je njezina klasa. To je mogue jer je klasa
kub naslijedila klasu kvadrat.

int main()
{
kvadrat objekt1;
objekt1.unos();
cout << "Kvadrat je " << objekt1.izracun() << endl;
cout << endl;
kub objekt2;
objekt2.unos();
cout << "Kub je " << objekt2.izracun() << endl;
cout << endl;
system("PAUSE");
return 0;
}

280

Metodu
izracun
posjeduju
obje
klase. U tom sluaju klasa kub koristit e svoju inaicu objekta izracun.
Inaica u klasi kub
prekrila je inaicu
u klasi kvadrat.

PRO - MIL

class kub : public kvadrat


int izracun (void)

kub objekt2;

Klasa koju klasa kub nasljeuje.

Ovako deklarirana klasa kub


nasljeuje sve varijable i metode klase kvadrat.
Klasa sadri metodu izracun,
iako metodu izraun posjeduje
i klasa kvadrat koju nasljeuje.
U tom sluaju klasa kub koristit e vlastitu inaicu metode
izracun.

objekt2.unos();

Ovdje koristimo metodu unos, iako je klasa kub ne posjeduje. To je mogue jer
klasa kub nasljeuje klasu kvadrat, a klasa kvadrat sadri klasu unos.

objekt2.izracun()

Iako metodu izracun posjeduje i klasa kvadrat, objekt2 koristit e vlastitu inaicu metode izraun.

PRO - MIL

Varijable
Donoenje Grafika
odluke

Naredba za nasljeivanje klase.

Petlje

Naziv nove klase.

Polja

int izracun (void)

Obrada
teksta

Klasu kvadrat moemo koristiti


na nain koji smo koristili u dosadanjim primjerima.

Objekti

void unos (void)

Saimanje Veliki programi


koda

U klasi kvadrat definirane su


dvije metode, metoda unos i
metoda izraun.

class kvadrat

Na prvi
program

Uvod

Pogledajmo meusobnu povezanost bitnih dijelova programa u kojem je primijenjena tehnika nasljeivanja klasa.

Sadraj

C++ programiranje za apsolutne poetnike

281

Veliki programi

282

PRO - MIL

PRO - MIL

Saimanje Veliki prokoda


grami

Objekti

Obrada
teksta

Polja

Petlje

Donoenje Grafika
odluke

Varijable

Na prvi
program

Uvod

Veliki programi

Sadraj

C++ programiranje za apsolutne poetnike

283

Veliki programi

Jednostavna igra u jednoj datoteci


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

Ovaj program neto je vei od programa koje smo do sada pisali, pa


e se zato protezati kroz nekoliko
stranica.

using namespace std;


class objekt
{
private:
int x;
char kretanje;
public:
objekt()
{
x = 290;
}
void pomak(char);
void crtaj();
};
void objekt :: pomak(char tipka)
{
kretanje = tipka;
if (kretanje == 75)
{
setcolor (WHITE);
rectangle(x, 432, x+60, 438);
setcolor (BLACK);
x = x - 5;
}
if (kretanje == 77)
{
setcolor (WHITE);
rectangle(x, 432, x+60, 438);
setcolor (BLACK);
x = x + 5;
}
}
void objekt :: crtaj()
{
rectangle(x, 432, x+60, 438);
}

284

Ovdje se nalazi deklaracija klase


objekt. Sastoji se od dvije varijable, x i kretanje; te od dvije metode,
pomak i crtaj.

Unutar deklaracije klase nalazi se


konstruktor koji varijabli x daje
poetnu vrijednost 290.
Ta varijabla odreuje poziciju objekta koji pomiemo pomou tipkovnice.

Ovdje je sadraj metode pomak.


U metodu se unosi podatak o
tome koja tipka je pritisnuta.
Metoda ispituje je li pritisnuta
strelica u lijevu ili strelica u desnu stranu. Ako je neka od tih
tipki pritisnuta, vrijednost varijable x koja odreuje poloaj objekta koji pomiemo adekvatno e
se poveati ili smanjiti.

Ovdje je sadraj metode crtaj. Ona


crta objekt koji pomiemo pomou
strelica na tipkovnici.

PRO - MIL

PRO - MIL

Uvod
Na prvi
program
Varijable
Donoenje Grafika
odluke
Petlje
Polja

class bomba
{
Deklaracija sadri konstruktor koji odreuje poetprivate:
nu poziciju bombe.
int x, y;
public:
bomba()
{
x = (static_cast <float> (rand()) / RAND_MAX) * 620;
y = -((static_cast <float> (rand()) / RAND_MAX) * 480);
}
void crtanje();
void brisanje();
};
void bomba :: crtanje()
Sadraj metode crtanje.
{
rectangle (x,y,(x+20),(y+5));
}
void bomba :: brisanje()
Sadraj metode brisanje.
{
setcolor(WHITE);
rectangle (x,y,(x+20),(y+5));
setcolor(BLACK);
y = y + 5;
if (y > 490)
{
y = -((static_cast <float> (rand()) / RAND_MAX) * 480);
x = (static_cast <float> (rand()) / RAND_MAX) * 620;
}
}

Obrada
teksta

Ovdje se nalazi deklaracija klase bomba. Sastoji


se od varijabli x i y koje odreuju poloaj bombe na
zaslonu te metode crtanje koja crta bombu i od
metode brisanje koja brie bombu da bi se dobila
iluzija kretanje bombe.

Objekti

U ovom poglavlju vidjet emo kako podijeliti jedan neto vei program u vie
datoteka. Najprije emo program napisati u jednoj velikoj datoteci, a zatim ga
podijeliti u vie manjih datoteka.

Saimanje Veliki prokoda


grami

Male programe moemo smjestiti u jednu datoteku. Za vee programe to nije


praktino rjeenje. Ako je veliki program u jednoj velikoj datoteci tee je pronai greku, tee je napraviti izmjenu programa i tee je podijeliti posao izmeu vie programera.

Sadraj

C++ programiranje za apsolutne poetnike

285

Veliki programi

Ovdje se nalazi glavni dio programa koji e koristiti prije formirane klase.

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

char odgovor = 'd';

Odreivanja svojstva grafike, veliine grafikog prozora, boje pozadine i boje objekata.

Formiranje varijable odgovor u kojoj e se nalaziti podatak o trenutno


pritisnutoj tipki.

Formiranje generatora sluajnih


brojeva kojim emo odreivati
mjesto pojavljivanja bombi, odnosno objekata koji se kreu odozgo
prema dolje.

srand(time(NULL));

bomba bomba1, bomba2, bomba3;

objekt brod;

Formiranje triju objekta klase bomba, bomba1, bomba2 i bomba3.


To su objekti koji se kreu odozgo
prema dolje.

Formiranje objekata brod klase


objekt. To je objekt koji mi pomiemo pomou tipkovnice, koristei
strelicu u lijevo i strelicu u desno.

brod.crtaj();

do
{
bomba1.brisanje();
bomba2.brisanje();
bomba3.brisanje();

286

Crtanje objekta koji pomiemo na


poetnoj poziciji koritenjem metode crtaj.

Ovdje se u svakom objektu klase


bomba poziva metoda brisanje
bombe na staroj poziciji.

PRO - MIL

brod.pomak(odgovor);
}

brod.crtaj();

Ovdje se poziva metoda pomak koja e


obrisati objekt na staroj poziciji.

Ovdje se poziva metoda crtaj koja e


nacrtati objekt na novoj poziciji.

Izvoenje igre prekida se pritiskom na


tipku k.

while (odgovor != 'k');

Ovdje se ispituje je li pritisnuta tipka k i,


ako je pritisnuta, izvoenje igre se zaustavlja.

return 0;
}

PRO - MIL

Nemojmo zaboraviti da sva etiri dijela


programa moraju biti unijeta u nau programsku okolinu da bismo mogli pokrenuti program.

Uvod
Na prvi
program
Varijable
Donoenje Grafika
odluke

Ako je pritisnuta neka tipka na tipkovnici, ovdje se kod pritisnute tipke sprema
u varijablu odgovor.

Petlje

odgovor = getch();

Ovdje ispitujemo je li pritisnuta neka


tipka na tipkovnici.

Polja

if (kbhit())
{

Obrada
teksta

delay(1);

Naredba koja zaustavlja program odreeno vrijeme. Slui za regulaciju brzine


igre.

Objekti

bomba1.crtanje();
bomba2.crtanje();
bomba3.crtanje();

Neprestanim brisanjem bombe na staroj poziciji i crtanjem na novoj stvara


se iluzija kretanja, odnosno padanja
bombi.

Saimanje Veliki prokoda


grami

Ovdje se u svakom objektu klase


bomba poziva metoda za crtanje bombe na novoj poziciji.

Sadraj

C++ programiranje za apsolutne poetnike

287

Veliki programi

Jednostavna igra u vie datoteka

Pogledajmo sada kako emo prethodni program


raspodijeliti u vie datoteka.
Otvorimo novi projekt na uobiajen nain.
Prije toga otvorimo praznu mapu u koju emo
spremiti novi projekt.

Izaberemo Console Application.

288

PRO - MIL

Saimanje Veliki prokoda


grami

U Parameters unesemo -lbgi -lgdi32

PRO - MIL

Objekti

Obrada
teksta

Polja

Petlje

Donoenje Grafika
odluke

Varijable

Na prvi
program

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

Izaberemo Postavke projekta.

289

Veliki programi

1 - Desni klik na naziv projekta. U naem sluaju je


to Projekt1.

2 - Klik na Novo.

Otvorit e se nova datoteka


pod nazivom Neimenovano1.

290

PRO - MIL

Saimanje Veliki prokoda


grami

Objekti

Obrada
teksta

Datoteku preimenujemo u bomba.cpp i kliknemo na OK.

Polja

Petlje

2 - Klik na Preimenuj datoteku.

Donoenje Grafika
odluke

Varijable

Na prvi
program

1 - Desni klik na Neimenovano1.

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

PRO - MIL

291

Veliki programi

Na taj nain formirali smo


datoteku bomba.cpp.

Na slian nain formirat emo datoteke:


- bomba.h
- objekt.cpp
- objekt.h

292

PRO - MIL

void bomba :: crtanje()


Ovdje ukljuujmo datoteku u
{
kojoj se nalazi deklaracija klarectangle (x,y,(x+20),(y+5));
se ije metode ovdje definira}
mo.
void bomba :: brisanje()
{
setcolor(WHITE);
rectangle (x,y,(x+20),(y+5));
Ovaj dio programa isti je kao i u
setcolor(BLACK);
prethodnoj inaici.
y = y + 5;
if (y > 490)
{
y = -((static_cast <float> (rand()) / RAND_MAX) * 480);
x = (static_cast <float> (rand()) / RAND_MAX) * 620;
}
}

PRO - MIL

Uvod
Petlje
Polja

Ovom naredbom ukljuuje se


datoteka bomba.h u kojoj se
nalazi deklaracija klase bomba.

Obrada
teksta

#include <winbgim.h>
#include "bomba.h"

Razlika je u tome to su dodane


dvije include naredbe.

Objekti

Ovom naredbom ukljuuje se


biblioteka grafikih naredbi.

Saimanje Veliki prokoda


grami

Ovaj dio isti je kao u programu koji


se nalazi u jednoj datoteci.

Donoenje Grafika
odluke

Varijable

Na prvi
program

U datoteku bomba.cpp spremimo metode klase bomba; metodu crtanje i


metodu brisanje.

Sadraj

C++ programiranje za apsolutne poetnike

293

Veliki programi

U datoteku bomba.h spremimo


deklaraciju klase bomba.

Ovo je dio programa koji se u ovoj inaici razlikuje od inaice sa samo jednom datotekom.
Ako je naziv datoteke bomba.h, ovaj dio imat
e oblik:

#ifndef BOMBA_H
#define BOMBA_H

#ifndef BOMBA_H
#define BOMBA_H
Kad bi se datoteka zvala npr. datoteka.h, ovaj
dio imao bi oblik:

class bomba
{
#ifndef DATOTEKA_H
private:
#define DATOTEKA_H
int x, y;
public:
bomba()
{
x = (static_cast <float> (rand()) / RAND_MAX) * 620;
y = -((static_cast <float> (rand()) / RAND_MAX) * 480);
}
void crtanje();
void brisanje();
Naredbu #endif pisat emo na kraju
};
svake datoteke koja poinje naredbom #ifndef.
#endif

294

PRO - MIL

PRO - MIL

Naziv datoteka moemo birati,


a nastavak h je obvezan. Na
program naredbom:
#include <winbgim.h>
ukljuuje samo grafiku biblioteku jer druge biblioteke ne
koristimo. Da npr. neto raunamo morali bismo naredbom:
#include <cmath>
ukljuiti i matematiku biblioteku.

Uvod
Petlje
Polja

#include "naziv.h"

Obrada
teksta

Kad bi se deklaracija klase


nalazila u drugaije nazvanoj
datoteci, npr. datoteci naziv.h,
morali bismo napisati:

Objekti

void objekt :: pomak(char tipka)


{
kretanje = tipka;
if (kretanje == 75)
{
setcolor (WHITE);
rectangle(x, 432, x+60, 438);
setcolor (BLACK);
x = x - 5;
}
if (kretanje == 77)
{
setcolor (WHITE);
rectangle(x, 432, x+60, 438);
setcolor (BLACK);
x = x + 5;
}
}
void objekt :: crtaj()
{
rectangle(x, 432, x+60, 438);
}

Saimanje Veliki prokoda


grami

#include <winbgim.h>
#include "objekt.h"

Naredbama #include
ukljuimo grafiku biblioteku winbgim.h i datoteku objekt.h u kojoj se
nalazi deklaracija klase
objekt.

Donoenje Grafika
odluke

Varijable

Na prvi
program

U datoteku objekt.cpp spremimo


metode klase bomba; metodu
pomak i metodu crtaj.

Sadraj

C++ programiranje za apsolutne poetnike

295

Veliki programi

U datoteku objekt.h unosimo


deklaraciju klase objekt.

I ova deklaracija klase zapoinje naredbom


#ifndef i naredbom #define iza kojih se nalazi
naziv datoteke u kojoj je deklaracija klase.
#ifndef OBJEKT_H
#define OBJEKT_H
class objekt
{
private:
int x;
char kretanje;
public:
objekt()
{
x = 290;
}
void pomak(char);
void crtaj();
};
#endif

296

Budui da se deklaracija klase objekt nalazi


u datoteci objekt.h iza naredbe #ifndef i naredbe #define, pie se OBJEKT_H.
Kad bi se deklaracija klase nalazila npr. u
datoteci klasa.h, ovaj dio imao bi oblik:
#ifndef KLASA_H
#define KLASA_H

Naredbu #endif pisat emo na kraju svake


datoteke koja poinje naredbom #ifndef.

PRO - MIL

kojima se u program ukljuuju datoteke koje sadre


deklaracije klase objekt i
klase bomba.

Glavni program nalazi se


u datoteci mani.cpp.

PRO - MIL

Uvod
Na prvi
program
Varijable

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
char odgovor = 'd';
srand(time(NULL));
bomba bomba1, bomba2, bomba3;
objekt brod;
brod.crtaj();
do
{
bomba1.brisanje();
bomba2.brisanje();
bomba3.brisanje();
bomba1.crtanje();
bomba2.crtanje();
bomba3.crtanje();
delay(2);
if (kbhit())
{
odgovor = getch();
brod.pomak(odgovor);
}
brod.crtaj();
}
while (odgovor != 'k');
return 0;
}

Donoenje Grafika
odluke

#include "objekt.h"
#include "bomba.h"

Petlje

dodati i naredbe:

#include "objekt.h"
#include "bomba.h"

Polja

using namespace std;

Obrada
teksta

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

Objekti

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

Saimanje Veliki prokoda


grami

Glavni program se u ovoj


inaici razlikuje od inaice
koja se cijela nalazi u jednoj
datoteci po tome to u ovoj
inaici moramo osim:

Sadraj

C++ programiranje za apsolutne poetnike

297

Veliki programi

Rezultat
izvoenja
naeg programa izgledat e otprilike
ovako.
Ovo su bombe koje
se kreu odozgo prema dolje.
Ovo je brod koji
strelicom lijevo moemo pomicati u lijevu stranu i strelicom
desno u desnu stranu.

Prilikom prvog prevoenja i pokretanja ovog programa programska okolina e nas upozoriti da
je dolo do pretvaranja varijable
float tipa u varijablu int tipa.
Upozorenje emo zanemariti,
budui da to nije greka, ve
smo to uinili namjerno prilikom
generiranja sluajnog broja.
Prilikom sljedeeg prevoenja i
pokretanja programa ovo upozorenje se vie nee pojavljivati.

298

PRO - MIL

#ifndef OBJEKT_H
#define OBJEKT_H

#ifndef BOMBA_H
#define BOMBA_H

class objekt
{

class bomba
{

DEKLARACIJA KLASE;

DEKLARACIJA KLASE;

};

};

#endif

#endif

objekt.cpp

bomba.cpp

#include "objekt.h"

#include "bomba.h"

void objekt :: pomak(char tipka)


{
SADRAJ OBJEKTA;
}

void bomba :: crtanje()


{
SADRAJ OBJEKTA;
}

void objekt :: crtaj()


{
SADRAJ OBJEKTA;
}

void bomba :: brisanje()


{
SADRAJ OBJEKTA;
}

PRO - MIL

Na prvi
program
Varijable
Donoenje Grafika
odluke

bomba.h

Petlje

objekt.h

Polja

Koristei ovu logiku, moemo daleko vei program


razdijeliti na vei broj datoteka.

Obrada
teksta

int main()
{
GLAVNI PROGRAM;
}

#include "objekt.h"

Objekti

#include "bomba.h"

U ovom shematskom prikazu naeg programa moemo vidjeti logiku po kojoj se


program podijeljen u vie
datoteka povezuje u jednu
cjelinu.

using namespace std;

Saimanje Veliki prokoda


grami

main.cpp

Uvod

Sadraj

C++ programiranje za apsolutne poetnike

299

Saimanje koda

300

PRO - MIL

PRO - MIL

Saimanje Veliki programi


koda

Objekti

Obrada
teksta

Polja

Petlje

Donoenje Grafika
odluke

Varijable

Na prvi
program

Uvod

Sadraj

Saimanje koda
C++ programiranje za apsolutne poetnike

301

Saimanje koda

Primjeri saetog pisanja koda


Do sada smo, osim u nekoliko izuzetaka, programe pisali na kolski nain
trudei se da naredbe prije svega budu to razumljivije.
Mnoge naredbe mogu se, osim na nain koji smo do sada vidjeli, pisati na nain koji skrauje pisanje, ponekad ak ubrzava rad programa, ali koji je poetnicima moda neto manje razumljiv.
Doavi do kraja knjige, vie nismo poetnici i vrijeme je da se upoznamo s
nekim nainima skraenog pisanja programa.

Obje inaice programa radit e potpuno


isti pisao, zbrojit e
dva broja.

#include <cstdlib>
#include <iostream>
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int a;
int b;
int c;
cin >> a;
cin >> b;
c = a + b;
cout << c << endl;
system("PAUSE");
return 0;
}

302

U sluaju da formiramo vie varijabli


istog tipa, ne moramo svaku staviti
u zasebni red, nego ih moemo formirati u jednom
redu.
Dakle umjesto:
int a;
int b;
int c;

using namespace std;


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

moemo napisati:
int a, b, c;

PRO - MIL

#include <cstdlib>
#include <iostream>
using namespace std;

#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int a;
cin >> a;
if (a > 12)
{
cout << "Broj je veci od 12." << endl;
}
else
{
cout << "Broj nije veci od 12." << endl;
}
cout << a << endl;
system("PAUSE");
return 0;
}

int main()
{
int a;
cin >> a;
if (a > 12)
cout << "Broj je veci od 12." << endl;
else
cout << "Broj nije veci od 12." << endl;
cout << a << endl;
system("PAUSE");
return 0;
}

PRO - MIL

Ova inaica programa radit e jednako kao i gornja


inaica s vitiastim
zagradama.

Uvod
Na prvi
program
Varijable
Donoenje Grafika
odluke

int a = 12;

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

Petlje

Ako se nalazi vie redova, uporaba vitiastih zagrada je obvezna.

using namespace std;


moemo napisati:

Polja

U if naredbi mogu se
izbaciti vitiaste zagrade, ako se unutar vitiastih zagrada nalazi
jedan red.

#include <cstdlib>
#include <iostream>

Obrada
teksta

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

int a;
a = 12;

Objekti

using namespace std;

Umjesto:

Saimanje Veliki programi


koda

#include <cstdlib>
#include <iostream>

Sadraj

C++ programiranje za apsolutne poetnike

303

Saimanje koda

#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float a, b;
cin >> a;
if (a < 0)
{
cout << "Broj je negativan." << endl;
}
else
{
b = sqrt(a);
cout << b << endl;
}
system("PAUSE");
return 0;
}

Ovo je program za vaenje kvadratnog korijena.


Ako je broj pozitivan, izraunat e kvadratni korijen, a ako je negativan,
ispisat e obavijest da je
broj negativan.
U ovom dijelu programa
vitiaste zagrade moemo izbaciti jer se unutar
vitiastih zagrada nalazi
samo jedan red.
U ovom dijelu programa
vitiaste zagrade ne moemo izbaciti jer se unutar vitiastih zagrada nalazi vie od jednog reda.

#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float a, b;
cin >> a;
if (a < 0)
cout << "Broj je negativan." << endl;
else
b = sqrt(a);
cout << b << endl;
system("PAUSE");
return 0;
}

304

Ako bismo ovom djelu vitiaste


zagrade izbacili, ne bismo dobili
obavijest o greki, ali program
ne bi ispravno radio, ako bismo
pokuali izraunati kvadratni
korijen iz negativnog broja.

PRO - MIL

#include <cstdlib>
#include <iostream>

Umjesto
napisati:

using namespace std;

x++

int main()
{
int x;
for (x=10; x<17; x++)
cout << x << endl;
system("PAUSE");
return 0;
}

Pokrenemo li bilo koju od


ove tri inaice programa,
dobit emo jednak rezultat.

Na slian nain moemo


umjesto:
x = x - 1;
napisati:
x-- (Dva minusa, bez razmaka.)

PRO - MIL

x=x+1

moemo

Uvod
Na prvi
program
Varijable

int main()
{
int x;
for (x=10; x<17; x=x+1)
cout << x << endl;
system("PAUSE");
return 0;
}

Donoenje Grafika
odluke

using namespace std;

Petlje

U ovoj inaici programa


unutar for petlje ne koriste
se vitiaste zagrade.

#include <cstdlib>
#include <iostream>

Polja

int main()
{
int x;
for (x=10; x<17; x=x+1)
{
cout << x << endl;
}
system("PAUSE");
return 0;
}

Obrada
teksta

using namespace std;

Objekti

I u petljama se moe izostaviti vitiasta zagrada ako se unutar vitiaste zagrade nalazi
samo jedan red.

Saimanje Veliki programi


koda

#include <cstdlib>
#include <iostream>

Sadraj

C++ programiranje za apsolutne poetnike

305

Saimanje koda

Umjesto x=x+5; moemo napisati x+=5;

#include <cstdlib>
#include <iostream>
using namespace std;

#include <cstdlib>
#include <iostream>

int main()
{

using namespace std;


int main()
{
int x;
for (x=5; x<51; x=x+5)
cout << x << endl;
system("PAUSE");
return 0;
}

Umjesto
if (x != 0)
moemo napisati
if (x)

#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int x;
cin >> x;
if (x != 0)
cout << "Broje nije nula." << endl;
else
cout << "Broje je nula." << endl;
system("PAUSE");
return 0;
}

306

int x;
for (x=5; x<51; x+=5)
cout << x << endl;
system("PAUSE");
return 0;
}

Umjesto x=x-5 moemo napisati x-=5.

#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int x;
cin >> x;
if (x)
cout << "Broje nije nula." << endl;
else
cout << "Broje je nula." << endl;
system("PAUSE");
return 0;
}

Korisnost nekih od navedenih kraenja prilino je dvojbena jer u


nekim sluajevima zbog utede
jednog znaka naruavamo itljivost programa.

PRO - MIL

You might also like