You are on page 1of 306

C++ programiranje za apsolutne početnike

programiranje
za apsolutne početnike

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

CIP – Katalogizacija u publikaciji


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

UDK 004.43 C++(035)

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

ISBN 953-7156-19-2

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

460125024

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

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

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

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

2 PRO - MIL
PRO - MIL
Sadržaj

Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program

3
C++ programiranje za apsolutne početnike
Sadržaj

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

4 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Analiza programa 60
Varijacije programa 63

Uvod
Problem dijeljenja 67
69

program
Naš prvi
Uljepšavanje programa

Nekoliko primjera programa 71


Grafika 75

Varijable
Podešavanje programskog okruženja 76
Naš prvi grafički program 77

Donošenje Grafika
Analiza programa 78
Varijacije programa 83

odluke
Crtanje pravokutnika 86
Crtanje crte 88

Petlje
Crtanje točke 95
Ispis teksta 97
Donošenje odluke 103 Polja

Funkcije 104
Obrada
teksta

Donošenje odluke 108


Switch naredba 126
Objekti

Petlje 129
Sažimanje Veliki pro-

For petlja 130


grami

Do while petlja 168


Generator slučajnih brojeva 170
koda

Korištenje slučajnih brojeva 179

PRO - MIL 5
Sadržaj

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

6 PRO - MIL
PRO - MIL
Uvod

Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program

7
C++ programiranje za apsolutne početnike
Uvod

Što je to program, a što programiranje?

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

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


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

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


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

Je li teško naučiti programirati?

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

Neki, ako ne i većina profesionalnih učitelja programiranja, započet će poduku ne-


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

To su gluposti. Možda i jesmo do sada stvari radili po određenom algoritmu, ali


nismo o tome na taj način razmišljali, nemamo um posložen na taj način. Osim to-
ga u programiranju se upotrebljavaju malo drugačiji algoritmi nego što su algoritmi
za kuhanje kave.

Programiranje je zapravo potpuno drugačiji način razmišljanja od onog na koji smo


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

8 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Zbog svega toga trebat će nam dvije do tri godine svakodnevnog rada da bismo
koliko - toliko naučili programirati. Pod pojmom naučiti programirati ne mislim na
dobivanje dvojke u školi ili pisanje programa za zbrajanje dva broja. Pod poj-
mom naučiti programirati mislim na to da smo u stanju napisati program koji za-

Uvod
dovoljava nečije potrebe i taj netko nam je spreman za to platiti. Nema puno
smisla reći da znam programirati, ali ne znam napraviti ništa za što bi netko bio
spreman platiti.

program
Naš prvi
Zbog svega toga važno je da smo radišni i strpljivi. Nemojmo iz činjenice da prva
tri mjeseca nećemo puno toga razumjeti, zaključiti da nismo nadareni za progra-
miranje i odustati. Nakon tri mjeseca nećemo puno toga razumjeti, ali nakon tri
godine sasvim sigurno hoćemo.

Varijable
Ovim uvodom vas nisam htio preplašiti, već sam vas htio ohrabriti da ustrajete u
učenju programiranja, iako će vam se na početku možda činiti da ništa ne razu-
mijete i da sporo napredujete.

Donošenje Grafika
Zašto baš C++?

odluke
Zato što je to trenutno najrašireniji jezik, osobito u profesionalnoj uporabi. U ra-
čunalstvu se klonite ekskluzivnosti. Ako vas veseli da budete posebni, obrijte
glavu ili obojite kosu na zeleno. Imate bezbroj mogućnosti, ali kad su računala u
pitanju, najbolje je koristiti računalo koje koristi većina i programski jezik koji ko-

Petlje
risti većina.

U tom slučaju lako dolazimo do programa, lako dolazimo do literature, puno ljudi
se razumije u to pa možemo dobiti savjet. Konačno, ako tražimo posao u smislu

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

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


Obrada
teksta

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

Iako po mom sudu C++ ima niz prednosti u odnosu na druge jezike, nemojmo se
suviše opterećivati time koji ćemo jezik započeti učiti i koju inačicu tog jezika.
Glavni problem je naučiti jedan jezik, a kad nam to uspije, ako se ukaže potreba,
Sažimanje Veliki pro-

lako ćemo prijeći na drugi. Da bi netko tko nikad nije programirao naučio jedan
grami

jezik, treba mu do tri godine, ali kad već jedan jezik naučimo, da bismo naučili
drugi, dovoljno nam je do tri mjeseca. Naučivši jedan jezik, počinjemo razumije-
vati kako se programira, a to je najteže i najdulje traje. Najlakše je naučiti nove
naredbe ili bolje rečeno novi način pisanja sličnih naredbi u drugom jeziku.
koda

PRO - MIL 9
Uvod

Zašto baš Dev-C++?

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

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

Kako se uči programiranje?

Programiranje se ne uči tako da se nauči sadržaj neke knjige, a zatim se eventual-


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

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

Kako dalje nakon ove knjige?

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

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

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

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

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

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

10 PRO - MIL
Uvod

Instaliranje Dev-C++ programskog okruženja

Na CD-u priloženom uz knjigu


nalazi se program Dev-C++.

Ovaj izbornik trebao bi se po-


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

Instalaciju pokrećemo klikom


na Program.

Nakon klika na Program započet će instaliranje Dev-C++ programa. Program


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

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


tupak instalacije i deinstalirati staru inačicu programa.

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


redu nastavljamo instalaciju.

12 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
1 - Izaberemo jezik.

Uvod
program
Naš prvi
Varijable
Donošenje Grafika
2 - Klikom na OK nastavljamo

odluke
instalaciju.

Petlje
Polja
Obrada
teksta

Klikom na Prihvaćam izjavlju-


jemo sa se slažemo s uvjetima
korištenja programa.
Objekti
Sažimanje Veliki pro-
koda grami

PRO - MIL 13
Uvod

Ovdje bismo mogli izabrati komponente


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

1 - Ovdje možemo izabrati ma-


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

2 - Instaliranje nastavljamo
klikom na Instaliraj.

14 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Nakon klika na Instaliraj započet
će instaliranje programa.

Uvod
program
Naš prvi
Varijable
Donošenje Grafika
odluke
Petlje
Kliknemo na Da.

Polja
Obrada
teksta
Objekti
Sažimanje Veliki pro-
koda grami

PRO - MIL 15
Uvod

Kliknemo na Kraj.

Kliknemo na U redu.

16 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
1 - Izaberemo
hrvatski jezik.

Uvod
program
Naš prvi
2 - Izaberemo Use XP
Theme.

Varijable
Donošenje Grafika
3 - Klik na Next.

odluke
Petlje
Polja
Obrada
teksta
Objekti
Sažimanje Veliki pro-
grami

Klik na Next.
koda

PRO - MIL 17
Uvod

Klik na Next.

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


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

18 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Uvod
program
Naš prvi
Varijable
Donošenje Grafika
odluke
Na kraju klik na OK.

Petlje
Klikom ovdje ugasimo ovaj prozor.
Time je instaliranje Dev-C++ prog-
Polja
rama završeno.
Obrada
teksta
Objekti
Sažimanje Veliki pro-
koda grami

PRO - MIL 19
Uvod

Formiranje radne mape

Iako to nije nužno, dobro je formirati praznu


mapu u koju ćemo spremati programe.

Tu mapu možemo otvoriti na bilo kojem


disku na kojem imamo mjesta i možemo je
nazvati prema vlastitom izboru.

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


zvati Radni.

Klik na disk na kojem želimo otvoriti novu


mapu, u mojem slučaju na C: disk.

Kliknemo na Datoteka, zatim na Novo


i konačno na Mapa.

20 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Uvod
program
Naš prvi
Varijable
Donošenje Grafika
Unesemo naziv mape, u
mojem slučaju Radni.

odluke
Petlje
Polja
Obrada
teksta
Objekti
Sažimanje Veliki pro-
grami

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


biti formirana mapa pod nazivom Radni.
koda

PRO - MIL 21
Uvod

Instalacija grafike

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


ručno moramo dodati nekoliko datoteka.

Nakon instaliranja programa

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

pi Dev-Cpp nalazit će se

mapa include i mapa lib.

Na CD-u priloženom uz knji-

gu u mapi Grafika nalazi se

mapa include i mapa lib.

22 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Uvod
program
Naš prvi
Varijable
Sadržaj mape include na CD-u

kopiramo u mapu include na C:

Donošenje Grafika
disku.

odluke
Petlje
Polja
Obrada
teksta

Sadržaj mape lib na CD-u kopi-


Objekti

ramo u mapu lib na C: disku.


Sažimanje Veliki pro-
grami

Bude li poteškoća s instaliranjem progra-


ma, pogledajmo filmove na kojima može-
mo vidjeti cijeli tijek instalacije, a nalaze
se na priloženom CD-u.
koda

PRO - MIL 23
Naš prvi program

24 PRO - MIL
PRO - MIL
Naš prvi program

Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program

25
C++ programiranje za apsolutne početnike
Naš prvi program

Formiranje projekta

Prilikom svakog pokretanja


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

Kliknemo ovdje da bismo


ugasili taj prozor.

1 - Kliknemo na Datoteka.

Program je dio veće cjeline koja


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

Pogledajmo kako ćemo formira-


ti novi projekt.

3 - Izaberemo Projekt.

2 - Izaberemo Nova.

26 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Otvorit će se novi prozor koji se naziva Novi projekt i u kojem ćemo izab-
rati tip projekta. Najvažniji tipovi su Windows Application i Console Ap-

Uvod
plication.

U čemu je razlika?

program
Naš prvi
Windows Application – izvodi se unutar klasičnog windows prozora. Pre-
dnost ovog načina pisanja jest što ćemo dobiti program koji će izgledati
kao svaki drugi windows program. Nedostatak mu je što je ovaj način pisa-
nja programa nešto složeniji, pa je manje prikladan za početnike.

Varijable
Console Application – ne izvodi se unutar klasičnog windows prozora,
već unutar pojednostavljene verzije s crnom pozadinom. Nedostatak ovog
načina pisanja programa jest što je program veoma ružan i što taj oblik
prozora ima manje mogućnosti od klasičnog prozora. Jedina prednost mu

Donošenje Grafika
je što je jednostavan, pa je prikladniji za početnike.

odluke
1 - Izaberemo Basic.

Petlje
2 - Zatim Console Application.

Polja
3 - Ovdje unosimo naziv pro-
jekta. Na početku možemo
Obrada
teksta

ostaviti naziv koje je predložilo


računalo, a to je Projekt1.
Objekti
Sažimanje Veliki pro-
grami

4 - Ovdje odredimo da
5 - Biranje završavamo
će naš projekt sadrža-
klikom na OK.
vati C++ program.
koda

PRO - MIL 27
Naš prvi program

Sada ćemo izabrati mapu u


koju ćemo spremiti naš pro-
jekt.

Najbolje je da ga spremimo
u prije pripremljenu praznu
mapu.

Kliknemo ovdje.

1 - Izaberemo disk na koji ćemo


spremiti naš projekt u prije prip-
remljenu praznu mapu.

U mojem slučaju to je disk C:.


Kliknemo na njega.

(Na mojem računalu disk C nazi-


va se Podaci. Na vašem računa-
lu može imati drugačije naziv.
Naziv diska nije važan, važno je
da izaberemo onaj disk na kojem
smo prije toga pripremili prazni
prostor, kao što je opisano u uvo-
dnom poglavlju ove knjige.)

2 - Kliknemo na Spremi.

28 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
1 - Ovdje bi se trebala nalaziti oznaka diska na kojem
smo pripremili prazni prostor za smještaj našeg projekta.

Uvod
2 - Sadržaj ovog prozo-
ra na vašem računalu

program
Naš prvi
bit će sasvim sigurno
drugačiji nego na mo-
jem, budući da njegov
sadržaj ovisi o progra-

Varijable
mima koji su instalirani
u računalu i načinu ko-
rištenja računala. Ne-
mojte brinuti zbog toga.

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

Petlje
Polja

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


Obrada
teksta

spremiti naš C++ projekt.


Objekti

2 - Klik na Spremi.
Sažimanje Veliki pro-
koda grami

PRO - MIL 29
Naš prvi program

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

U programu bismo se lakše snalazili kad bi


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

1 - Kliknemo na Alati.

2 - Kliknemo na Izgled editora.

30 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
1 - Kliknemo na karticu
Prikaz.

Uvod
2 - Kliknemo na kvadratić ispred
opcije Brojevi linije.

program
Naš prvi
Varijable
3 - Kliknemo na OK.

Donošenje Grafika
odluke
Petlje
Polja
Obrada
teksta
Objekti

Vidimo da se sada is-


pred svakog reda u pro-
Sažimanje Veliki pro-
grami

gramu automatski ispi-


suje broj reda.
koda

PRO - MIL 31
Naš prvi program

Mogući problem

1 - Ovo je prije spremljeni projekt.

Prilikom isprobavanja programa može nam se


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

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


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

3 - Klik na Spremi.

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


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

1 - Ako novi projekt


ima isti naziv kao i
stari jer stari projekt
ne želimo zadržati,
računalo će nas upo-
zoriti da će stari pro-
jekt biti obrisan.

2 - Klik na Yes i novi projekt bit će


formiran, a stari obrisan.

32 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Unos prvog programa

Uvod
Umjesto programa

program
Naš prvi
koji je generiralo
računalo prilikom
otvaranja novog
projekta, unesemo

Varijable
ovakav program.

To ćemo učiniti pa-


žljivo jer i najmanja
greška može prouz-

Donošenje Grafika
rokovati grešku u
programu.

odluke
Petlje
Na početku će nam se često
događati da umjesto točke sa
zarezom ovdje unesemo dvo-

Polja
#include <cstdlib> točje što će uzrokovati grešku
#include <iostream> u programu.

using namespace std;


Obrada
teksta

int main()
Lijevu vitičastu zagradu dobit
{
ćemo tako da pritisnemo tipku
cout << "Ovo je moj tekst." << endl;
AltGr i ne puštajući tu tipku,
Objekti

system("PAUSE");
pritisnemo tipku b.
return 0;
}
Desnu ćemo dobiti tako da
pritisnemo AltGr i, ne puštajući
Sažimanje Veliki pro-
grami

tu tipku, pritisnemo tipku n.

Ovdje se nalazi broj nula,


a ne veliko slovo o.
koda

PRO - MIL 33
Naš prvi program

Pokretanje programa

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

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


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

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


vođenje i pokretanje programa.

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


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

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


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

Ovo je prevedeno kao Kompajlaj i pokreni. Već iz


naziva vidimo da je ovdje prevođenje i pokretanje
objedinjeno.

Izaberemo li ovu opciju, naš program će se preves-


ti i odmah pokrenuti.

Prvi put ćemo odabrati ovu opciju.

34 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
1 - Klikom na Kompajlaj i pokreni započet ćemo prevođenje i
pokretanje našeg programa.

Uvod
program
Naš prvi
2 - Otvara se prozor u kojem nas računalo pita kamo i
pod kojim nazivom ćemo spremiti naš program.

Računalo će predložiti da to bude ono isto mjesto u

Varijable
koje smo spremili projekt što ćemo mi prihvatiti.

Donošenje Grafika
odluke
Mjesto na koje će računalo spremiti naš

Petlje
program.

3 - Prevođenje i pokretanje našeg prog- Polja


rama započet ćemo klikom na Spremi.
Obrada
teksta
Objekti
Sažimanje Veliki pro-
grami

Ovdje se nalazi naziv našeg programa,


main.cpp. Iako bismo taj naziv mogli
promijeniti, na početku je najbolje da za-
držimo naziv koji je predložilo računalo.
koda

PRO - MIL 35
Naš prvi program

Nakon klika na Kompajlaj i pokreni najpri-


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

Nakon prevođenja prog-


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

Tekst Press any key to


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

36 PRO - MIL
C++ programiranje za apsolutne početnike

Mogući problem

Sadržaj
Tijekom rada može nam se dogoditi da nam
računalo predloži neki naziv programa, iako već
u tom prostoru postoji program s istim nazivom.

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

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

Varijable
Ako stari program ne želimo sačuvati, ostavit
ćemo novom programu naziv main.cpp i kliknut
ćemo na Spremi.

Donošenje Grafika
odluke
main.cpp

Petlje
Ako ne želimo zadržati stari prog-
ram, pa smo u prethodnom koraku
kliknuli na Spremi bez da smo
Polja
mijenjali novom programu naziv,
računalo će nas još jednom upozo-
riti da će stari program biti obrisan.
Obrada
teksta
Objekti

1 - Kliknemo na Yes. Stari program će


se obrisati, novi će se spremiti, a zatim
će započeti prevođenje i pokretanje
Sažimanje Veliki pro-

novog programa. Tijek prevođenja i


grami

pokretanja programa možemo vidjeti


na prethodnoj stranici.
koda

PRO - MIL 37
Naš prvi program

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

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


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

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

1 - Kad računalo naiđe na


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

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

Ovdje možemo vidjeti su-


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

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


no kliknemo na Kompajlaj i pokreni.

38 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Označavanje pozicije greške prilič-

Uvod
no je nepouzdano budući da raču-
nalo zapravo ne označava poziciju
greške, nego poziciju na kojoj je
greška primijećena. Pogledajmo

program
Naš prvi
ovaj primjer.

Varijable
Donošenje Grafika
1 - Ovdje je došlo do greške jer
nismo unijeli točku sa zarezom.

odluke
1 - Kad takav program pokušamo prevesti i

Petlje
pokrenuti, kao pogrešan bit će označen de-
veti red, jer je u njemu greška primijećena,
iako se greška zapravo nalazi u osmom re-
du.

Zato imajmo na umu da je označavanje re- Polja


dova u kojim se pojavila greška samo gruba
orijentacija, a ne precizni pokazatelj.
Obrada
teksta
Objekti
Sažimanje Veliki pro-

2 - Program pokrećemo klikom na


grami

Kompajlaj i pokreni.
koda

PRO - MIL 39
Naš prvi program

Analiza programa

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

#include - ovo je naredba kojom na po-


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

iostream - skup naredbi koje nam omo-


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

cstdlib - biblioteka standardnih naredbi.

Postoji mnoštvo biblioteka naredbi. Moglo


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

Naredba int main() označava da na ovom


mjestu počinje sam program. Ono što smo
pisali prije te naredbe ne smatra se progra-
int main()
mom, nego uputama prevoditelju kako će
prevesti program koji slijedi, npr. koje biblio-
teke naredbi će koristiti prilikom prevođenja.

40 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
{ } - Iako neveliki, ovo su jako važni dijelovi
programa. Označuju prostor unutar kojeg se
{
nalazi program, { označuje početak, a } kraj

Uvod
programa.

program
Naš prvi
Varijable
Ovaj red sadrži dvije naredbe.

Prvom naredbom naređujemo


računalu da tekst koji se nalazi
unutar navodnika ispiše na

Donošenje Grafika
cout << "Ovo je moj tekst." << endl;
zaslonu računala.

Drugom naredbom naređuje-


mo računalu da prijeđe u novi

odluke
red.

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

obrisat ćemo ovaj red u programu, a za-


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

Ova naredba označuje kraj programa. Na-


return 0;
kon te naredbe program se gasi.
Sažimanje Veliki pro-
grami

Ova vitičasta zagrada označava kraj pros-


}
tora unutar kojeg se nalazi program.
koda

PRO - MIL 41
Naš prvi program

Gruba skica programa

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


cjelina.

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


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

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


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

Dovoljno je da znamo da te naredbe mora-


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

Ovdje se nalazi glavni dio na-


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

Ovo su naredbe koje pišemo na kraju prog-


rama. Slično kao što je to slučaj s naredba-
ma na početku programa, vrlo rijetko ćemo
ih mijenjati i trenutno nije bitno da u potpu-
nost razumijemo značenje svake od tih
naredbi.
system("PAUSE");
return 0; Dovoljno je da znamo da te naredbe mora-
} mo napisati na kraju programa da bi prog-
ram normalno radio.

42 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Varijacije programa

Jedna od najboljih metoda koje nam pomažu da bolje razumijemo funkcionira-

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

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

Varijable
zaslonu računala dobit ćemo
using namespace std;
ovakav rezultat.
int main()
{

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

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

using namespace std;

int main() Polja


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

system("PAUSE");
teksta

return 0;
}
Objekti
Sažimanje Veliki pro-
grami

Promijenimo li ovaj red dobit ćemo ovakav rezultat.

Očigledno je da je funkcija ovog reda u programu


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

PRO - MIL 43
Naš prvi program

#include <cstdlib>
#include <iostream>

using namespace std;

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

Promijenimo ponovno ovaj red i pokrenimo program.

Dobit ćemo ovakav rezultat.

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


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

Iako računalo ne ulazi u


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

44 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Uvod
#include <cstdlib>
#include <iostream>

program
Naš prvi
using namespace std;

int main()
{

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

Donošenje Grafika
prvobitno stanje, a zatim
ga pokrenimo klikom na
Kompajlaj i pokreni.
Ovako će izgledati rezul-

odluke
tat rada našeg programa.
#include <cstdlib>
#include <iostream>
Da bismo bolje razumjeli
using namespace std; njegovu funkciju, obriše-
mo ovaj dio programa.

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

Ovako bi trebao izgledati


rezultat izvođenja ove
inačice programa.
Objekti

Program radi i bez obri-


sanog dijela, ali nakon
ispisa našeg teksta raču-
Sažimanje Veliki pro-

nalo nije skočilo u novi


grami

red, nego je sljedeći tekst


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

PRO - MIL 45
Naš prvi program

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


#include <iostream>

using namespace std;


Postavlja se pitanje ako s <<
int main() endl naređujemo računalu da
{ skoči u novi red, bi li s više
cout << "Ovo je moj tekst." << endl; takvih naredbi u nizu više puta
cout << endl; skočilo u novi red.
system("PAUSE");
return 0; Pogledajmo što će se dogoditi
} ako u naš program dodamo još
jednu << endl naredbu.

Vidimo da se je dogodilo
ono što smo očekivali.

Između prvog i drugog


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

using namespace std;

int main() Dodajmo u naš program


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

Pokrenemo li takav program


vidimo da se je razmak izme-
đu dva reda u programu po-
većao.

46 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Više naredbi << endl možemo napisati i
#include <cstdlib> unutar jednog reda.
#include <iostream>

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

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

Varijable
}

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

Donošenje Grafika
skok u novi red.

odluke
Propisana riječ kojom obavještavamo računalo
Ove oznake obvezno
da ćemo sadržaj koji slijedi poslati na neku izla-
se stavljaju ispred
znu jedinicu, u našem slučaju na zaslon raču-
sadržaja koji će iz
nala.

Petlje
računala ići na neku
izlaznu jedinicu, npr.
Uočimo da naredbu << endl ne možemo koris-
zaslon računala.
titi ako prije nismo stavili naredbu cout.

Polja

Iako nevelik,
Obrada

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


teksta

ovo je JAKO
važan dio pro-
grama.
Objekti

Označava kraj
Tekst unutar navod- naredbe ili
Ovom naredbom
nika ispisat će se na grupe naredbi
naređujemo računalu
zaslon računala. koje čine cjeli-
da prilikom ispisa
Sažimanje Veliki pro-

nu.
grami

skoči u novi red.


Uočimo da ovaj dio
čini cjelinu sa <<
Uočimo da ova na-
oznakama i da bez
redba čini cjelinu s
tih oznaka neće fun-
<< oznakama.
koda

kcionirati.

PRO - MIL 47
Naš prvi program

Distribucija programa

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

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


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

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

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

Datoteka s nastavkom exe sadrži


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

Dovoljno je da tu datoteku poša-


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

48 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Učitavanje spremljenog projekta

Uvod
program
Naš prvi
Varijable
Ako pokušamo ugasiti prog-
ramsko okruženje, a da nis-

Donošenje Grafika
mo spremili program, raču-
Naš projekt će se spremiti prili- nalo će nas upozoriti.
kom prevođenja programa.
Klikom na Yes spremit ćemo

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

Petlje
Spremljeni projekt može-
Polja
mo učitati u naše prog-
ramsko okruženje na više
načina.
Obrada
teksta

Na najjednostavniji način
1 - Kliknemo na Datoteka. možemo učitati nekoliko
prethodnih spremanja.
Objekti

2 - Zatim na Ponovno otvori.


Sažimanje Veliki pro-
grami

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

PRO - MIL 49
Naš prvi program

Želimo li u naše programsko okruženje


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

1 - Kliknemo na Datoteka.

2 - Zatim na Otvori datoteku


ili projekt.

1 - Otvorit će se dodatni prozor u ko-


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

2 - Ovdje biramo mapu u kojoj


se nalazi projekt.

3 - Kliknemo na projekt koji želimo učitati.


Prepoznajemo ga po nastavku dev.

4 - Kliknemo na Otvori.

50 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Nakon što se

Uvod
spremljeni projekt
učitao, mogli bismo
biti zbunjeni činjeni-
com da ga ne vidi-

program
Naš prvi
mo u prostoru u
kojem smo očeki-
vali da ćemo ga
vidjeti.

Varijable
Donošenje Grafika
odluke
Petlje
Polja
Obrada
teksta
Objekti
Sažimanje Veliki pro-

Da bismo naš program vidjeli, ovdje kliknemo na


grami

naziv programa, u našem slučaju to je main.cpp.


koda

PRO - MIL 51
Varijable

52 PRO - MIL
PRO - MIL
Varijable

Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program

53
C++ programiranje za apsolutne početnike
Varijable

Osnovne računske operacije

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

Ovaj program zbraja


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

54 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Pokušajmo zbrojiti neka druga dva broja, #include <cstdlib>
npr. 8 i 4. #include <iostream>

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

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

Varijable
}

Donošenje Grafika
odluke
Pokušajmo neku drugu računsku opera- #include <cstdlib>

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

U ovom programu oduzet ćemo od broja using namespace std;


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

system("PAUSE");
teksta

return 0;
}
Objekti
Sažimanje Veliki pro-
koda grami

PRO - MIL 55
Varijable

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


oznake uobičajene u matematici, za množe- #include <iostream>
nje ćemo koristiti zvjezdicu. Nalazi se iznad
broja devet s desne strane, na brojčanoj tip- using namespace std;
kovnici.
int main()
Množenje broja 2 i broja 3 zapisat ćemo kao {
2*3. cout << 2*3;
cout << endl;
Pogledamo rezultat. system("PAUSE");
return 0;
}

Oznaka za dijeljenje tako-


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

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

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

Na prvi pogled učinit će nam se


da je program za dijeljenje is-
pravan.

56 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
#include <cstdlib> Pokušajmo ovdje umjesto 12/4 staviti 13/4.
#include <iostream>
Pokrenimo program i pogledajmo rezultat.

Uvod
using namespace std;
Rezultat je očigledno pogrešan.
int main()

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

Varijable
}

Donošenje Grafika
#include <cstdlib>
#include <iostream>

using namespace std;

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

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

Umjesto 15/3 stavimo 17/3 i Polja


pokrenimo program.
Obrada
teksta

#include <cstdlib>
#include <iostream>
Objekti

using namespace std; Rezultat je pogrešan. Mogli bismo


zaključiti da će dijeljenje biti isprav-
int main() no, ako je rezultat cjelobrojni broj.
Sažimanje Veliki pro-

{
grami

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


cout << endl; do greške.
system("PAUSE");
Kako riješiti taj problem, vidjet ćemo
return 0;
nešto kasnije u ovom poglavlju.
koda

PRO - MIL 57
Varijable

Varijable

Vidjeli smo da osnovne računske ope-


#include <cstdlib>
racije, osim dijeljenja, funkcioniraju, ali
#include <iostream>
ne baš na način kako smo mi zamišljali
da bi program trebao raditi.
using namespace std;
Problem naših dosadašnjih programa
int main()
jest u tome što svaki program vrši ra-
{
čunsku operaciju između dva konkret-
int a;
na broja i ako želimo izvršiti računsku
int b;
operaciju između druga dva broja, pro-
int c;
gram moramo iznova pisati i prevoditi.
cin >> a;
cin >> b;
Postavlja se pitanje bismo li mogli napi-
c = a + b;
sati npr. program za zbrajanje koji ne bi
cout << c;
zbrajao dva konkretna broja, nego bi
cout << endl;
mogao zbrojiti bilo koja dva broja.
system("PAUSE");
return 0;
To je, naravno, moguće. Unesimo, pre-
}
vedimo i pokrenimo ovaj program.

Nakon pokretanja programa


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

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

58 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Na tipkovnici izaberemo
drugi broj koji želimo
zbrajati, npr. broj 5 i

Uvod
zatim pritisnemo Enter
tipku na tipkovnici.

program
Naš prvi
Nakon pritiska na

Varijable
Enter tipku na tip-
kovnici, a zaslonu
računala ugledat
ćem o rezult at
zbrajanja broja 3 i

Donošenje Grafika
broja 5, a to je broj
8.

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

mo tipku Enter na tipkov-


teksta

nici, unesimo brojeve 12 i


14.

Kao rezultat dobit ćemo


Objekti

njihov zbroj, a to je broj


26.
Sažimanje Veliki pro-

Vidimo da smo uspjeli


grami

postići ono što smo želje-


li. Pomoću jednog progra-
ma možemo zbrajati razli-
čite brojeve, bez da prog-
ram moramo mijenjati.
koda

PRO - MIL 59
Varijable

Analiza programa

#include <cstdlib> Početak programa.


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

Formirat ćemo tri pros-


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

Naredbom cin u prostor a i prostor b 3


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

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

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

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

Skok u novi red.


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

60 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Ovom naredbom formiramo prostor u računalu u koji ćemo spremati brojeve.

Na početku taj prostor možemo zamisliti kao posudice u koje možemo staviti

Uvod
brojeve, iako su to zapravo rezervirana mjesta u memoriji našeg računala.

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

Varijable
int b; Ovdje se nalazi naziv prostora.
int c;
Zašto svaki prostor ima naziv???

Donošenje Grafika
Zato što u jednom programu može-
Ovim naredbama se for- mo imati više takvih prostora, pa
miraju još dva prostora, nam naziv prostora omogućuje da ih

odluke
prostor b i prostor c. razlikujemo.

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

Polja
U taj prostor broj možemo staviti na više načina, a jedan od njih je da ga une-
semo pomoću tipkovnice. Za to ćemo koristiti naredbu cin. Obrada
teksta

Oznaka ; obvezno dolazi


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

Ovdje stavljamo oznaku prostora u


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

koji ćemo unijeti broj.

PRO - MIL 61
Varijable

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


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

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

U našem slučaju zbrojit ćemo sadržaj prostora a i sadržaj prostora b, a rezultat


tog zbrajanja spremit ćemo u prostor c.

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

Znak jednakosti ima


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

Naziv prvog prostora. Naziv drugog prostora.

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


janja sadržaja prostora a i prostora b, ali da korisnik vidio rezultat moramo nare-
diti računalu da sadržaj prostora c ispiše na zaslon računala. To ćemo učiniti
ovom naredbom.

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

Oznaka ispred sadr- Prostor c u koji će-


žaja koji ispisujemo. mo spremiti rezultat.

62 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Varijacije programa

Da bismo bolje razumjeli izradu programa koji koriste prostor za spremanje

Uvod
brojeva, napravit ćemo niz izmjena na našem programu i opažat ćemo kako te
izmijene utječu na rad program.

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

Varijable
using namespace std; va.

int main() Prvi prostor više se ne naziva a, nego


{ prvi. Drugi prostor više se ne naziva b,
int prvi; nego drugi. Treći prostor više se ne

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

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

Petlje
return 0;
}

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

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

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

- Naziv ne smije sadržavati razmak; PrviBroj i prvi_broj je dozvoljeno, a


Objekti

prvi broj nije.

- Ako naziv sadrži brojeve, prvi znak mora biti slovo, dakle a1 je dozvolje-
Sažimanje Veliki pro-

no, a 1a nije.
grami

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


prostor u koji ćemo spremati površinu nazovemo povrsina nego qqy1.

- Dva različita prostora ne mogu imati isto ime.


koda

PRO - MIL 63
Varijable

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

64 PRO - MIL
C++ programiranje za apsolutne početnike

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

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

program
Naš prvi
{
int a; Pokrenemo li ovaj program, on će se izvršiti
int b; i računalo nam neće dojaviti nikakvu greš-
int c; ku, ali kao rezultat nećemo dobiti ono što

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

Donošenje Grafika
system("PAUSE");
return 0; Zašto?
}
cout << c; - ispisuje sadržaj prostora c.

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

Petlje
Polja
Ovaj tip greške veo-
ma je teško pronaći
Obrada
teksta

u složenim programi-
ma, budući da raču-
nalo neće dojaviti
grešku i poziciju gre-
Objekti

ške prilikom prevo-


đenja.

To se događa zato
Sažimanje Veliki pro-

što je program for-


grami

malno ispravno napi-


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

htjeli.

PRO - MIL 65
Varijable

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


#include <iostream> koristiti i za druge matematičke operaci-
je.
using namespace std;
Ovdje možemo vidjeti program za oduzi-
int main() manje.
{
int broj1; Od sadržaja prostora broj1 oduzet će se
int broj2; sadržaj prostora broj2, a rezultat će se
int rezultat; spremiti u prostor rezultat.
cin >> broj1;
cin >> broj2;
rezultat = broj1 - broj2;
cout << rezultat;
cout << endl;
system("PAUSE");
return 0;
}

#include <cstdlib>
#include <iostream> Na sličan način možemo napraviti program
za množenje sadržaja dvaju prostora.
using namespace std;

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

66 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Problem dijeljenja

Ostao nam je neriješen problem dijelje-

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

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

program
Naš prvi
va možemo dijeliti, ali će kao i prošli put
int main()
{ kad smo pokušali dijeliti, rezultat biti
int broj1; ispravan samo za brojeve čiji rezultat

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

Donošenje Grafika
cout << rezultat; rezultat će biti pogrešan.
cout << endl;
system("PAUSE");
return 0;

odluke
}

Petlje
Problem ćemo riješiti ovako napisanim
programom. Umjesto naredbom int,
prostor za spremanje brojeva formirat
ćemo naredbom float;

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

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

float rezultat;
cin >> broj1;
cin >> broj2;
Sažimanje Veliki pro-

rezultat = broj1 / broj2;


grami

cout << rezultat;


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

PRO - MIL 67
Varijable

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

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


nog float naredbom???

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

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

Naziv prostora. Uočimo da iz-


među broj i 1 nema razmaka.

Postavlja se pitanje bismo li mogli u naš program unijeti broj s decimalnim zare-
zom. Pokrenimo još jednom program iz prethodnog primjera i pokušajmo.

Vidimo da je moguće unijeti


decimalne brojeve u naš
program.

Broj 16,25 podijelili smo


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

Pri tome moramo imati u


vidu da C++ kao decimalni
zarez zapravo ne koristi
zarez, nego točku.

Dakle, ako želimo unijeti


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

68 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Uljepšavanje programa

Naši programi doduše rade, ali su tako ružni da bi teško bili ružniji. Korisnika

Uvod
dočeka crni ekran bez ikakvih uputa. Nakon što unesemo dva broja, dobit
ćemo treći bez ikakvog komentara što taj treći broj predstavlja.

program
Naš prvi
Budući 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
treći broj koji smo dobili kao rezultat, ali netko drugi veoma bi teško koristio
naš program. Unesite i pokrenite ovaj program.

Varijable
U ovom programu na

Donošenje Grafika
#include <cstdlib> početku programa, te
#include <iostream> prije svakog unosa i
ispisa rezultata nared-
using namespace std; bom cout ispisali smo

odluke
adekvatan komentar
int main() koji pomaže korisniku
{ da lakše shvati čemu
float broj1; program služi, što mora
float broj2; unijeti i što je dobio kao

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

cout << rezultat;


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

}
Sažimanje Veliki pro-
koda grami

PRO - MIL 69
Varijable

Prethodni program mogli bismo još malo uljepšati dodavanjem praznih redova.
Unesimo i pokrenimo ovaj program.

#include <cstdlib> Naslov programa.


#include <iostream>

using namespace std; Dva skoka u novi red.

int main()
{ Komentar prvog unosa.
float broj1;
float broj2;
float rezultat;
cout << "Dijeljenje." << endl;
cout << endl;
Prvi unos.
cout << endl;
cout << "Unesite prvi broj." << endl;
cin >> broj1;
cout << endl; Prazni red.
cout << "Unesite drugi broj." << endl;
cin >> broj2;
cout << endl; Komentar drugog unosa.
rezultat = broj1 / broj2;
cout << "Rezultat dijeljenja je:" << endl;
cout << rezultat; Drugi unos.
cout << endl;
cout << endl;
system("PAUSE"); Komentar rezultata.
return 0;
}
Dva skoka u novi red. Ispis rezultata.

70 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Nekoliko primjera programa

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

Uvod
// Program za izračun površine izračun površine
// ********************************* pravokutnika. Uni-
jet ćemo ga u ra-

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

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

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

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

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

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

}
teksta
Objekti

Komentar započinje // ozna-


kom i pomaže nam da se
lakše snađemo ako program
Sažimanje Veliki pro-
grami

želimo kasnije koristiti.

Komentirati možemo namje-


nu programa ili pojedine Prilikom prevođenja programa, kad prevo-
segmente programa. ditelj naiđe na // oznaku, skače u novi red
koda

ne prevodeći ostatak reda.

PRO - MIL 71
Varijable

Osim što komentare


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

Ako napišemo veći prog-


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

Komentari su korisni i ako


moramo korigirati program
koji je netko drugi pisao.

72 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
// *******************************************
// Program za izračun volumena kvadra
// *******************************************

Uvod
#include <cstdlib>
#include <iostream> Ovo je primjer programa za izračun volu-

program
Naš prvi
mena kvadra.
using namespace std;
Pokušajmo za vježbu sami smisliti neko-
int main() liko sličnih programa.
{

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

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

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

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

PRO - MIL 73
Grafika

74 PRO - MIL
PRO - MIL
Grafika

Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program

75
C++ programiranje za apsolutne početnike
Grafika

Podešavanje programskog okruženja

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

1 - Kliknemo na Parametes.

2 - Ovdje unesemo -lbgi -lgdi32

Kliknemo na Ok.

76 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Naš prvi grafički program

Unesimo i pokrenimo ovaj prog-

Uvod
#include <cstdlib>
ram. Uočimo da su početak i kraj
#include <iostream>
programa izmijenjeni.
#include <winbgim.h>
Na početku dodan je ovaj red, a

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

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

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

odluke
return 0;
- tekstualni koji smo do sada koristili
}
- grafički u kojem će računalo nacrtati krug.

Petlje
Polja
Obrada
teksta
Objekti
Sažimanje Veliki pro-
koda grami

PRO - MIL 77
Grafika

Analiza programa

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

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


int gmode = 2; prozora i broj boja.

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

setbkcolor(WHITE); Određivanje boje pozadine.

setcolor(BLACK); Određivanje boje crte.

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


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

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

78 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Ovom naredbom zaustavljamo izvođe-
nje programa do trenutka dok ne priti-
snemo neku tipku na tipkovnici. Ima

Uvod
getch();
istu namjenu kao i system(“PAUSE”)
u “normalnim” programima.

Da bismo bolje razumjeli ovu naredbu,

program
Naš prvi
izbacimo je iz programa i pokušajmo
pokrenuti program bez nje.

Varijable
closegraph(); Zatvaranje grafičkog prozora.

Donošenje Grafika
Kraj programa. Uočimo da ovdje više
return 0;
nema naredbe system(“PAUSE”); Nje-
}
nu funkciju sada ima getch(); naredba.

odluke
Pogledajmo sada pobliže određene naredbe. Ovom naredbom određujemo tip

Petlje
grafičkog prozora.

Polja

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


Obrada
teksta

10. Ako je 9, dobit ćemo VGA


prozor čija maksimalna veličina
može biti 640 X 480 točaka i 16
boja.
Objekti

Ako umjesto broja 9 stavimo


broj 6, dobit ćemo IBM 8514
prozor čija maksimalna veličina
Sažimanje Veliki pro-

može biti 1024 X 768 točaka i


grami

256 boja.

Upotrijebimo li druge brojeve,


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

PRO - MIL 79
Grafika

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

int gmode = 2 ; Značenje ovog broja ovisi o tipu grafičkog pro-


zora koji smo odabrali.

Ako smo naredbom int gdriver = 9; odabrali


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

Ako smo naredbom int gdriver = 6; odabrali


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

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


zadine. U našem slučaju bit će bijela. je. Naziv boje može biti:

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

80 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Osim navođenja imena boja, boje možemo odrediti i navođenjem njihove broj-
čane vrijednosti.

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

Varijable
Crvena. Zelena.

Donošenje Grafika
Dodat ćemo naredbu COLOR iza koje se nalaze tri broja čija vrijednost mo-
že biti između 0 i 255.

odluke
Boje u računalu sastoje se od tri boje; crvene, zelene i plave. Sve ostale
boje nastaju miješanjem tih boja.

Prvim brojem određujemo intenzitet crvene boje, drugim intenzitet zelene i

Petlje
trećim intenzitet plave boje.

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


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

Polja
Obrada
teksta

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

setcolor(BLACK);
Sažimanje Veliki pro-

Kao i u prethodnoj naredbi,


grami

boje možemo odrediti navo-


đenjem njihovog naziva, a
možemo i pomoću brojeva
setcolor(COLOR (0,0,0)); upotrebom naredbe COLOR.
koda

PRO - MIL 81
Grafika

Ovo je naredba za crtanje


kružnice.

circle( 320, 240, 180 ) ;

Udaljenost središta od Udaljenost središta od


Polumjer kružnice.
lijevog ruba prozora gornjeg ruba prozora

640

240
Širina prozora,
320
u našem slu-
čaju 640 toča-
ka.
180

480

Visina prozora, u našem


slučaju 480 točaka.

82 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Varijacije programa

#include <cstdlib> Napravit ćemo nekoliko prim-

Uvod
#include <iostream> jera da bismo lakše razumjeli
#include <winbgim.h> kako radi naredba za crtanje
kružnice.
using namespace std;

program
Naš prvi
Ovaj program sličan je pretho-
int main() dnom. Razlika je u tome što je
{ prethodni crtao samo jednu
int gdriver = 9; kružnicu, a ovaj će nacrtati

Varijable
int gmode = 2; nekoliko kružnica različitog
initgraph(&gdriver, &gmode, ""); polumjera, ali sa središtem u
setbkcolor(WHITE); istoj točki.
setcolor(BLACK);

Donošenje Grafika
cleardevice(); Ovdje se nalaze četiri nared-
circle(320,240,220); be za crtanje četiri kružnice.
circle(320,240,165);
circle(320,240,110); Pokrenemo li ovaj program,
circle(320,240,55); trebali bismo dobiti ovakav

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

Petlje
Polja
Pokušajmo program pro-
Obrada

mijeniti tako da povećamo


teksta

ili smanjimo broj kružnica.

Pokušajmo promijeniti
brojeve koji određuju po-
Objekti

lumjer kružnice i položaj


središta kružnica.
Sažimanje Veliki pro-
koda grami

PRO - MIL 83
Grafika

U ovom primjeru napravit


#include <cstdlib>
ćemo tri jednake kružnice,
#include <iostream>
jednu pored druge, što ćemo
#include <winbgim.h>
postići promjenom udaljenos-
ti središta kružnica od lijevog
using namespace std;
ruba prozora.
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle(160,140,80);
circle(320,140,80);
circle(480,140,80);
getch();
closegraph();
return 0;
}

Pogledajmo još nekoliko mogućnosti.


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

using namespace std;

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

84 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
#include <cstdlib>
#include <iostream>

Uvod
#include <winbgim.h>

using namespace std;

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

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

Donošenje Grafika
circle (180, 180, 60);
circle (300, 300, 60);
getch();
closegraph();

odluke
return 0;
}

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

Polja
using namespace std;

int main()
{
Obrada
teksta

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

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

circle(420,140,50);
grami

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

PRO - MIL 85
Grafika

Crtanje pravokutnika

Osim kružnice možemo nacrtati


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

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

640
Naredbom rectan-
100 gle crtamo pravo-
kutnik, a sa četiri
160 380 broja koji se nala-
ze iza naredbe
rectangle određu-
jemo položaj gor-
njeg lijevog i do-
njeg desnog ugla
480 pravokutnika.

480 Funkciju pojedinih


brojeva možemo
vidjeti na crtežu.

86 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
#include <cstdlib> Međusobno možemo kombinirati
#include <iostream> više pravokutnika.
#include <winbgim.h>

Uvod
using namespace std;

int main()

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

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

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

odluke
return 0;
}

Petlje
Pravokutnik možemo kombini- #include <cstdlib>
rati s drugim oblicima. #include <iostream>
#include <winbgim.h>
Pokušajmo za vježbu sami izmi-

Polja
sliti nekoliko primjera, npr. deb- using namespace std;
lo stabla nacrtamo kao pravoku-
tnik, a krošnju kao kružnicu. int main()
{
Obrada
teksta

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

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

circle (420, 140, 50);


grami

circle (320, 240, 30);


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

return 0;
}

PRO - MIL 87
Grafika

Crtanje crte

Crtu možemo nacrtati na više


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

using namespace std;

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

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

640
100

120 380 Naredbom line


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

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

88 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Napravimo nekoliko crteža upo-
#include <cstdlib> rabom naredbe za crtanje crte.
#include <iostream>

Uvod
#include <winbgim.h>

using namespace std;

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

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

Donošenje Grafika
line (320, 20, 320, 460);
getch();
closegraph();
return 0;

odluke
}

#include <cstdlib>

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

using namespace std;

int main() Polja


{
int gdriver = 9;
Obrada
teksta

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

cleardevice();
circle (320, 240, 220);
circle (320, 240, 165);
circle (320, 240, 110);
Sažimanje Veliki pro-

circle (320, 240, 55);


grami

line (100, 240, 540, 240);


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

return 0;
}

PRO - MIL 89
Grafika

Osim uporabom naredbe line,


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

Ovom naredbom određujemo


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

Ovom naredbom odre-


640
đujemo kraj crte.
100

120 380

500 lineto ( 500, 380 );

480

90 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
#include <cstdlib> Ovaj način crtanja pogodan
#include <iostream> je za crtanje više crta u nep-
#include <winbgim.h> rekinutom nizu.

Uvod
using namespace std; Pogledajmo ovaj primjer.

int main()

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

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

Donošenje Grafika
lineto(160, 450);
lineto(480, 450);
lineto(480, 240);
lineto(160, 240);
lineto(320, 120);

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

Petlje
}

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

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

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


setbkcolor(WHITE);
setcolor(BLACK);
Sažimanje Veliki pro-

cleardevice();
grami

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

PRO - MIL 91
Grafika

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

using namespace std;

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

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

using namespace std;

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

92 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

Uvod
using namespace std;

int main()

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

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

Donošenje Grafika
lineto(160, 450);
lineto(480, 450);
lineto(480, 240);
lineto(160, 240);
getch();

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

Petlje
#include <winbgim.h>

using namespace std;

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

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


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

moveto(160, 240);
lineto(160, 450);
lineto(480, 450);
lineto(480, 240);
Sažimanje Veliki pro-

lineto(160, 240);
grami

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

PRO - MIL 93
Grafika

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

using namespace std;

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

94 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Crtanje točke

Ponekad nam je potrebna samo

Uvod
#include <cstdlib> jedna točka, kao u ovom primje-
#include <iostream> ru gdje smo točkom označili
#include <winbgim.h> središte kruga.

program
Naš prvi
using namespace std;

int main()
{

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

Donošenje Grafika
cleardevice();
circle (320, 240, 220);
putpixel (320, 240, BLACK);
getch();

odluke
closegraph();
return 0;
}

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

640
Ovdje unosimo boju
točke koju određuje-
240
mo na isti način kao i
boju pozadine ili boju
Objekti

crte.

320
Sažimanje Veliki pro-
grami

480
koda

PRO - MIL 95
Grafika

Ispis teksta

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


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

96 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
Upotrijebimo li ovu naredbu, #include <cstdlib>
#include <iostream>
tekst će se ispisati unutar

Uvod
#include <winbgim.h>
grafičkog prozora.
using namespace std;

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

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

Donošenje Grafika
circle (320, 240, 220);
getch();
closegraph();
return 0;

odluke
}

Petlje
#include <cstdlib> Naredbu za određivanje pozici-
#include <iostream>
#include <winbgim.h> je početka crte možemo iskori-

Polja
stiti za određivanje početka
using namespace std;
teksta.
int main()
Obrada

{
teksta

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

setcolor(BLACK);
cleardevice();
moveto (320, 240);
Sažimanje Veliki pro-

outtext ("Ovo je krug.");


grami

circle (320, 240, 220);


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

PRO - MIL 97
Grafika

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

Brojevima određujemo Unutar navodnika je


poziciju ispisa. tekst koji ispisujemo.

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

640

240

320 Ovo je krug.

480

98 PRO - MIL
C++ programiranje za apsolutne početnike

Sadržaj
#include <cstdlib>
Naredbom settextstyle mo-
#include <iostream>

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

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

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

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

odluke
return 0;
}

Petlje
Naredba za određivanje veličine i oblika slova te smjera ispisa.

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

Ovaj broj određuje Veličina slova.


oblik slova. Njego-
va vrijednost može
Objekti

biti između 0 i 10.

Smjer teksta:
Sažimanje Veliki pro-
grami

HORIZ_DIR - vodoravni tekst.

VERT_DIR - uspravni tekst od dolje prema gore.

-VERT_DIR - uspravni tekst od gore prema dolje.


koda

PRO - MIL 99
Grafika

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

using namespace std;

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

100 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Pogledajmo primjer promjene
#include <cstdlib> oblika slova.
#include <iostream>

Uvod
#include <winbgim.h>

using namespace std;

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

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

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

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

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

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

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


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

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


getch();
closegraph();
return 0;
Sažimanje Veliki pro-

}
koda grami

PRO - MIL 101


Donošenje odluke

102 PRO - MIL


PRO - MIL
Donošenje odluke

Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program

103
C++ programiranje za apsolutne početnike
Donošenje odluke

Funkcije

#include <cstdlib> Pojam funkcije zvuči jako


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

Varijabla u koju sprema-


mo rezultat potenciranja.

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

Naredba za potenciranje. Broj koji potenciramo.

104 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Ovo je program za izra-
#include <cstdlib> čun sinusa.
#include <iostream>

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

program
Naš prvi
za razumijevanje C++
int main() programskog jezika.
{
float kut; Važno je uočiti da ova
float rezultat; funkcija veličinu kuta ne

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

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

odluke
}

Varijabla u koju sprema- Petlje


Polja
mo rezultat.
Obrada
teksta

rezultat = sin ( kut );


Objekti
Sažimanje Veliki pro-
grami

Naredba za izračun sinusa kuta. Varijabla u koju spremamo veličinu


kuta kojem ćemo računati sinus. Kut
mora biti izražen u radijanima, a ne u
stupnjevima.
koda

PRO - MIL 105


Donošenje odluke

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

using namespace std;

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

Varijabla u koju sprema-


mo rezultat.

rezultat = abs ( broj );

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

106 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Uvod
#include <cstdlib>
#include <iostream>
#include <cmath>

program
Naš prvi
using namespace std;
Pogledajmo program
int main() za vađenje kvadratnog
{ korijena.

Varijable
float broj;
float rezultat; Što je to uopće kvadra-
cout << "Unesite broj:" << endl; tni korijen?
cin >> broj;
cout << endl; Ako je 4 puta 4, odnos-

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

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

Petlje
mamo rezultat. želimo izračunati.

Naredba za izračun kvadra-

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

Iako se nam na prvi


pogled može učiniti
da je program ispra-
van, to na žalost nije
tako. Pokušamo li
Objekti

kvadratni korijen iz-


računati iz negativ-
nog broja dobit ćemo
Sažimanje Veliki pro-

besmisleni rezultat.
grami

Do toga dolazi zato


što nije moguće izra-
čunati kvadratni kori-
jen iz negativnog
broja.
koda

PRO - MIL 107


Donošenje odluke

Donošenje odluke

Pokušajmo kvadratni korijen iz-


računati pomoću ovakvog prog-
rama.

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

using namespace std;

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

108 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Pogledajmo bitne dijelo-
#include <cstdlib> ve našeg programa.
#include <iostream>

Uvod
#include <cmath>

using namespace std; Uobičajen početak prog-


rama. Izvodi se prilikom
svakog pokretanja prog-

program
Naš prvi
int main()
{ rama

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

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

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

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

Polja
od nule.

else
Obrada
teksta

Naredbom else započi-


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

cout << rezultat; sadržaj varijable broj


cout << endl;
nije manji od nule.
}
Sažimanje Veliki pro-
grami

cout << endl; Uobičajeni kraj progra-


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

return 0; svakog pokretanja prog-


} rama.

PRO - MIL 109


Donošenje odluke

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

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

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


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

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


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

Naredbom if za- Ovaj dio programa


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

110 PRO - MIL


C++ programiranje za apsolutne početnike

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

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

Varijable
using namespace std;

int main()
{

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

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

Petlje
{ ispituje je li unesen
cout << "Broj nije veci od nule." << endl;
} broj veći od nule.
cout << endl;
system("PAUSE");
return 0; Ako je broj veći od Polja
} nule, izvodi se dio
Obrada

programa koji ispisu-


teksta

je tekst Broj je veći


od nule.
Objekti

Ako broj nije veći od


nule, izvodi se dio
Sažimanje Veliki pro-
grami

programa koji ispisu-


je tekst Broj nije
veći od nule.
koda

PRO - MIL 111


Donošenje odluke

U ovom programu ispitivat će-


mo je li unesen broj jednak nuli.

Za to ispitivanje koristit ćemo


dvostruki znak jednakosti.

#include <cstdlib>
#include <iostream>
Ako je odgovor na pitanje
using namespace std;
je li sadržaj varijable broj
int main()
jednak nuli DA, izvršit će
{
float broj; se ovaj dio programa.
cout << "Unesite broj." << endl;
Ispisat će se poruka Broj
cin >> broj;
cout << endl; je jednak nuli.

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

Da smo umjesto broj == 0 napi-


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

112 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Uvod
program
Naš prvi
#include <cstdlib>
#include <iostream>

Varijable
using namespace std;

int main()
{
float broj;

Donošenje Grafika
cout << "Unesite broj." << endl; Vidjeli smo da možemo
cin >> broj;
cout << endl; ispitivati je li varijabla
if (broj < 100) veća, manja ili jednaka

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

Petlje
cout << "Broj nije manji od sto." << endl; ali to može biti bilo koji
}
cout << endl; broj, npr. broj 100 kao
system("PAUSE"); što je to slučaj u ovom
Polja
return 0;
} primjeru. Obrada
teksta
Objekti
Sažimanje Veliki pro-
koda grami

PRO - MIL 113


Donošenje odluke

Osim varijable i broja, if nared-


bom možemo uspoređivati dvije
varijable.

#include <cstdlib>
#include <iostream>

using namespace std;

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

114 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
U ovom primjeru ispitujemo je
li sadržaj varijable prvi manji
od sadržaja varijable drugi.

Uvod
#include <cstdlib>

program
Naš prvi
#include <iostream>

using namespace std;

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

Donošenje Grafika
cin >> prvi;
cout << endl;
cout << "Unesite drugi broj." << endl;
cin >> drugi;

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

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

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

PRO - MIL 115


Donošenje odluke

#include <cstdlib>
#include <iostream>

using namespace std;

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

116 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Prilikom formiranja složenih uvjeta moramo paziti na raspored zagrada. Svaki
uvjet, prvi i drugi nalaze se unutar svojih zagrada, a svi zajedno nalaze se

Uvod
unutar još jednog para zagrada.

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

Varijable
{

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

Donošenje Grafika
uvjet. Svaki od ta dva uvjeta može biti zado-
} voljen ili nezadovoljen.

odluke
else
Moguće je da je sadržaj varijable prvi manji
od 5, a moguće je i da nije. Isto tako, mogu-
{

Petlje
će je da je sadržaj varijable drugi manji od

sadržaj b 5, a moguće je i da nije.

}
Polja
Postavlja se pitanje u kojem slučaju će se
izvršavati sadržaj a, a u kojem slučaju sa-
držaj b.
Obrada
teksta

Ovim oznakama naređujemo računalu da


će se sadržaj a izvoditi samo onda kad su
Objekti

zadovoljena oba uvjeta; u našem slučaju


kad je sadržaj varijable prvi manji od 5 i
Sažimanje Veliki pro-

kad je sadržaj varijable drugi manji od 5.


grami

U svim ostalim slučajevima izvršit će se


sadržaj b.
koda

PRO - MIL 117


Donošenje odluke

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
float prvi;
float drugi;
cout << "Unesite prvi broj." << endl;
cin >> prvi;
cout << endl;
cout << "Unesite drugi broj." << endl; Ako umjesto ozna-
cin >> drugi; ka && stavimo
cout << endl; oznake || ukupni
if ((prvi < 5) || (drugi < 5)) uvjet bit će zado-
{ voljen ako je ba-
cout << "Barem jedan je manji od 5." << endl; rem jedan od dva
} uvjeta zadovoljen.
else
{
cout << "Niti jedan nije manji od 5." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

Oznaku | dobijemo tako da drži-


mo lijevu AltGr tipku, a zatim
pritisnemo W tipku.

118 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Ovdje možemo vidjeti primjere jednostavnih ispitivanja na temelju kojih raču-
nalo donosi odluku koji dio programa će se izvoditi, a koji preskočiti.

Uvod
Ovo su samo neki primjeri, dok je broj mogućih kombinacija praktički neog-
raničen. Bilo koju varijablu koju koristimo u programu možemo usporediti s
bilo kojim brojem.

program
Naš prvi
Isto tako bilo koje dvije varijable koje se koriste u programu možemo među-
sobno uspoređivati.

Varijable
Primjeri jednostavnih ispitivanja

Donošenje Grafika
if (broj < 0) Ispitujemo je li sadržaj varijable broj manji od broja nula.

odluke
if (broj > 0) Ispitujemo je li sadržaj varijable broj veći od broja nula.

if (broj == 0) Ispitujemo je li sadržaj varijable broj jednak broju nula.

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

if (broj > 50) Ispitujemo je li sadržaj varijable broj veći od broja pedeset. Polja
Obrada
teksta

if (broj == 50) Ispitujemo je li sadržaj varijable broj jednak broju pedeset.

Ispitujemo je li sadržaj varijable broj različit od broja pede-


if (broj != 50)
set.
Objekti

Ispitujemo je li sadržaj varijable prvi veći od sadržaja vari-


if (prvi > drugi)
jable drugi.
Sažimanje Veliki pro-
grami

Ispitujemo je li sadržaj varijable prvi manji od sadržaja


if (prvi < drugi)
varijable drugi.

Ispitujemo je li sadržaj varijable prvi jednak sadržaju vari-


if (prvi == drugi)
koda

jable drugi.

PRO - MIL 119


Donošenje odluke

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


ma složena ispitivanja.

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


matematici i uporabom simbola || i &&.

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

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


uvjeta zadovoljen da bi bio zadovoljen ukupni uvjet.

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


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

Primjeri složenih ispitivanja

Uvjet je zadovoljen ako je sadržaj vari-


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

Uvjet je zadovoljen ako je ili sadržaj


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

Uvjet je zadovoljen ako je sadržaj vari-


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

Uvjet je zadovoljen ako je barem jedna


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

Uvjet je zadovoljen ako su sve tri vari-


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

120 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
#include <cstdlib>

Uvod
#include <iostream>

using namespace std;

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

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

Donošenje Grafika
cout << "Unesite drugi broj." << endl;
grama koji možemo isko-
cin >> drugi;
cout << "Unesite treci broj." << endl; ristiti za isprobavanje
cin >> treci;
if (((prvi < 5) || (drugi < 5)) && (treci < 5)) kombinacija s prethodne

odluke
{ stranice.
cout << "DA" << endl;
}
else U ovom slučaju ukupni

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

5.
teksta

Ako je ukupni uvjet zado-


Objekti

voljen, izvest će se ovaj


dio programa.
Sažimanje Veliki pro-
grami

Ako ukupni uvjet nije


zadovoljen, izvest će se
ovaj dio programa.
koda

PRO - MIL 121


Donošenje odluke

#include <cstdlib>
#include <iostream>

using namespace std;

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

122 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Pogledamo strukturu
#include <cstdlib> programa.

Uvod
#include <iostream>

using namespace std;

program
Naš prvi
Početak programa.
int main()
{
float broj;
cout << "Unesite broj." << endl;

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

if (broj < 0)

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

odluke
else

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

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

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

}
Ako uneseni broj nije
Objekti

veći od 0, izvodi se
cout << endl; ovaj dio.
system("PAUSE");
return 0; Ako uneseni broj nije
Sažimanje Veliki pro-

} ni veći ni manji od
grami

nule, onda znamo da


je nula.
koda

Kraj programa.

PRO - MIL 123


Donošenje odluke

#include <cstdlib> Pogledamo li pažljivo ovaj


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

Preglednost programa s uvla-


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

Osnovna ideja je u tome da se uvuče


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

124 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Pogledajmo strukturu
uvlačenja redova.
#include <cstdlib>

Uvod
#include <iostream>

using namespace std;


Bez uvlačenja piše se

program
Naš prvi
int main() početak programa i dvije
{ glavne vitičaste zagrade.

float broj;

Varijable
cout << "Unesite broj." << endl;
cin >> broj; Sadržaj unutar glavnih
vitičastih zagrada uvlači
se u desnu stranu.
if (broj < 0)

Donošenje Grafika
Na toj razini piše se
{ većina jednostavnih
cout << "Broj je manji od 0." << endl; naredbi.
}

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

Petlje
{ To nam pomaže da
cout << "Broj je veci od 0." << endl; lakše uočimo gdje poči-
} nje, a gdje završava if

Polja
naredba.
else

{
Obrada
teksta

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


} naredbe nalazi druga if
naredba, njen sadržaj
} dodatno se pomiče u
desnu stranu.
Objekti

cout << endl; To nam pomaže da


system("PAUSE"); lakše uočimo gdje poči-
Sažimanje Veliki pro-

return 0; nje i gdje završava dru-


grami

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

PRO - MIL 125


Donošenje odluke

Switch naredba

#include <cstdlib>
#include <iostream>

using namespace std;

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

126 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Početak switch naredbe. Ovdje se nalazi int varijabla. Grana-
nje se vrši na temelju broja koji se
nalazi u varijabli. Int tip je obvezan.

Uvod
Naredbom case 1: započinje dio programa koji
switch (od)

program
Naš prvi
će se izvršiti ako se u varijabli od nalazi broj 1.

Varijable
Naredbom break
case 1: završava case 1:
naredba.

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

Donošenje Grafika
sati. Pokrenimo
program i promat-
break; rajmo posljedice.

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

Petlje
Naredbom case 2:
započinje dio pro-
case 3: grama koji će se
cout << "Treci izbor." << endl; izvršiti ako je sadr-
žaj varijable od
Polja
break; broj 2.

Na temelju slične
case 4: logike biraju se
Obrada
teksta

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


kojih može biti pro-
break; izvoljni broj.
Objekti

default: (U našem slučaju


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

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

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


Kraj switch naredbe.

PRO - MIL 127


Petlje

128 PRO - MIL


PRO - MIL
Petlje

Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program

129
C++ programiranje za apsolutne početnike
Petlje

For petlja

Ovaj program crta niz kružnica jedna-


#include <cstdlib> kog promjera. Svakoj je središte po-
#include <iostream> maknuto za pet točaka u desnu stranu
#include <winbgim.h> u odnosu na središte prethodne.
using namespace std; Vidimo da program funkcionira, ali nije
baš elegantan budući da moramo pu-
int main() no puta ponoviti sličnu naredbu.
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK); #include <cstdlib>
cleardevice(); #include <iostream>
circle(260,240,60); Ovaj program radi isti
#include <winbgim.h> posao, ali je očigledno
circle(265,240,60);
circle(270,240,60); daleko elegantniji.
using namespace std;
circle(275,240,60);
circle(280,240,60); int main()
circle(285,240,60); {
circle(290,240,60); int gdriver = 9;
circle(295,240,60); int gmode = 2;
circle(300,240,60); int x;
circle(305,240,60); initgraph(&gdriver, &gmode, "");
circle(310,240,60); setbkcolor (WHITE);
circle(315,240,60); setcolor (BLACK);
circle(320,240,60); cleardevice();
circle(325,240,60); for (x = 260; x < 365; x = x + 5 )
circle(330,240,60); {
circle(335,240,60); circle(x,240,60);
circle(340,240,60); }
circle(345,240,60); getch();
circle(350,240,60); closegraph();
circle(355,240,60); return 0;
circle(360,240,60); }
getch();
closegraph();
return 0;
}

130 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Ključna naredba u novoj inačici programa je for naredba. Omogućuje nam
izvršavanje dijela programa više puta. To višestruko ponavljanje dijela prog-
rama naziva se programska petlja. Slično kao if naredba, i for naredba je

Uvod
veoma složena i proteže se kroz više redova programa.

Pogledajmo sastavne elemente for naredbe.

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

Varijable
koristi for naredba i koju ovaj uvjet zadovoljen; u našem slučaju,
prije for naredbe moramo tako dugo dok je sadržaj varijable x manji
formirati. od 365.

U našem slučaju početna Kad uvjet više nije zadovoljen; tj. kad x više

Donošenje Grafika
vrijednost varijable x je ne bude manji od 365, program će nastavit
260. izvođenje od prve naredbe nakon druge
vitičaste zagrade.

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

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

} U našem slučaju nakon


Obrada
teksta

svakog ponavljanja for


naredbe, vrijednost
varijable x uvećat će se
za 5, a rezultat će se
Objekti

spremiti u varijablu x.
Udaljenost središta kružnice od
lijevog ruba nije određena brojem,
nego vrijednošću varijable x.
Sažimanje Veliki pro-

Sadržaj unutar navodni-


grami

Budući da se pri svakom ponov- ka ponavlja se svaki put


nom izvođenju sadržaj varijable x kad for naredba uveća
mijenja, jednako će se mijenjati i vrijednost varijable x i
udaljenost središta kružnice od provjeri je li x manji od
koda

lijevog ruba. 365.

PRO - MIL 131


Petlje

Pogledajmo dijelove našeg programa.


#include <cstdlib>
#include <iostream>
#include <winbgim.h>
Uobičajeni početak programa.
using namespace std;

int main()
{

Naredbe za otvaranje grafičkog pro-


zora, određivanje svojstava grafike i
int gdriver = 9; formiranje varijable x koju koristimo u
int gmode = 2; for naredbi.
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK); Ovdje definiramo petlju. Početna
cleardevice(); vrijednost varijable petlje x je 260,
uvećavat će se za 5, a izvršavat će
se tako dugo dok je sadržaj varijable
x manji od 365.

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


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

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


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

Budući da vrijednost varijable x pri


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

132 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Nemojmo se obeshrabriti ako nam trenutno nije previše jasno ni kako for
naredba radi, ni čemu bi to trebalo služiti. Na početku su takve nedoumice
normalne i nipošto nisu dokaz da nismo talentirani za programiranje.

Uvod
Takve nedoumice prevladavaju se tako da napišemo određenu količinu pro-
grama jer ćemo jedino na taj način do kraja shvatiti kako for naredba radi i
čemu služi.

program
Naš prvi
Drugačiji je problem ako nam se ne da pisati programe. Onda bismo doista
mogli konstatirati da programiranje nije za nas i trebali bismo se pokušati
baviti nečim intelektualno manje zahtjevnim, npr. nogometom ili politikom.

Varijable
Ovaj će nam program po-
moći da lakše shvatimo

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

odluke
Jedino što ovaj program
int main() radi jest ispisivanje sadržaj
{ varijable x.
int x;

Petlje
cout << "Prije for naredbe." << endl; To nam omogućuje lako
for (x = 0; x < 9; x = x + 1 ) opažanje kako se sadržaj
{ varijable x mijenja, te koji
cout << x << endl; dio programa se ponavlja i
} koliko puta.
Polja
cout << "Nakon for naredbe." << endl;
cout << endl; Unošenjem varijacija u taj
system("PAUSE"); program najlakše ćemo
return 0; shvatiti for naredbu.
Obrada
teksta

}
Objekti

Vidimo da se ponavlja
Sažimanje Veliki pro-

sadržaj unutar vitičastih


grami

zagrada for naredbe.

Sadržaj prije i sadržaj pos-


lije for naredbe ne ponav-
koda

lja se.

PRO - MIL 133


Petlje

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

using namespace std;

int main() U prošlom primjeru vrijed-


{ nost varijable x uvećavali
int x; smo za 1, a u primjeru prije
cout << "Prije for naredbe." << endl; toga za 5.
for (x = 0; x < 9; x = x + 2 )
{ Vrijednost varijable x u for
cout << x << endl; naredbi možemo uvećavati
} za bilo koju vrijednost koja
cout << "Nakon for naredbe." << endl; nam u programu treba, npr.
cout << endl; za 2.
system("PAUSE");
return 0; U ovom slučaju vrijednost
} varijable x raste od 0 do 9
po 2.

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


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

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

134 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Uvod
#include <cstdlib>
#include <iostream>

program
Naš prvi
#include <winbgim.h>

using namespace std;

int main()

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

Donošenje Grafika
{
cout << x << endl; For naredba može brojiti i
} unatrag.
cout << "Nakon for naredbe." << endl;
cout << endl; U ovom slučaju vrijednost

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

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

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

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


{
cout << x << endl;
}
Sažimanje Veliki pro-
grami

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


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

PRO - MIL 135


Petlje

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

Pogledajmo još jedan primjer


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

using namespace std;

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

136 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Naredba for ne postoji zato da bi se niz brojeva ispisao na zaslon računala,
nego zato da bi se u programu postigli određeni efekti.

Uvod
Iako to nije uvijek slučaj, najčešće se za postizanje željenih ciljeva koristi va-
rijabla petlje. Pogledajmo nekoliko primjera.

program
Naš prvi
#include <cstdlib> Ovaj primjer sličan je primjeru
#include <iostream> na početku ovog poglavlja.

Varijable
#include <winbgim.h>
Razlika je u tome što su u ovom
using namespace std; slučaju drugačije početna i kraj-
nja vrijednost x varijable, pa
int main() smo dobili drugačiji niz kružnica.

Donošenje Grafika
{
int gdriver = 9; U ovom slučaju vrijednost varija-
int gmode = 2; ble x mijenja se od 60 do 580 po
int x; 5.

odluke
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE); Pokušamo sami mijenjati vrijed-
setcolor (BLACK); nosti unutar for naredbe i pro-
cleardevice(); matrajmo kakve efekte će izaz-
for (x = 60; x < 580; x = x + 5 )

Petlje
vati te promjene.
{
circle(x,240,60);
}
getch();

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

PRO - MIL 137


Petlje

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

using namespace std;

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

using namespace std;


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

Umjesto broja 15 pokušajmo staviti int gdriver = 9;


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

138 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
#include <cstdlib>
#include <iostream>

Uvod
#include <winbgim.h>

using namespace std;

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

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

Donošenje Grafika
for (x = 20; x < 210; x = x + 10 ) Osim pozicije središta kružnice,
{ varijablom x možemo mijenjati
circle(320,240,x);
} polumjer kružnice.

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

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

using namespace std;

Polja
Na sličan način možemo crtati ni-
zove drugih geometrijskih oblika, int main()
npr. crta. {
int gdriver = 9;
Obrada
teksta

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

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

line (x, 20, x, 400);


grami

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

PRO - MIL 139


Petlje

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

using namespace std;

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

using namespace std;


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

140 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Pogledajmo bitne dijelove ovog programa.

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

program
Naš prvi
#include <winbgim.h>

using namespace std;

int main()

Varijable
Prije for naredbe u varijablu r
{ spremimo početnu vrijednost po-
int gdriver = 9; lumjera kruga. U našem slučaju
int gmode = 2; spremili smo broj 20.
int x;

Donošenje Grafika
int r;

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


setbkcolor (WHITE);

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

r = 20;

Petlje
U naredbi za crtanje kružnice
for (x = 20; x < 475; x = x + 15 )
upotrijebili smo dvije varijable.
{
Varijablom x određujemo udalje-
circle(x,240,r);
Polja
nost središta kružnice od lijevog
ruba, a varijablom r polumjer kru-
r = r + 5;
žnice.
Obrada

}
teksta

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

Da bi kod svakog ponavljanja


polumjer kružnice bio veći, nakon
što smo nacrtali kružnicu, unutar
vitičastih zagrada for naredbe,
Sažimanje Veliki pro-

I u ovom slučaju promjena pojedinih broj u varijabli r povećavamo za


grami

elemenata i opažanje rezultata po- 5.


moći će nam da bolje razumijemo
program; npr umjesto r = r + 5 poku- Zbog toga će pri svakom ponav-
šajmo staviti r = r + 10; umjesto x = ljaju polumjer kružnice biti veći.
koda

x + 15 pokušajmo staviti x = x + 5.

PRO - MIL 141


Petlje

Animacija

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

using namespace std;


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

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

142 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
#include <cstdlib>
#include <iostream>

Uvod
#include <winbgim.h>

using namespace std;

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

Varijable
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK); Sve grafičke elemente koje
cleardevice(); smo do sada mijenjali možemo

Donošenje Grafika
for (x = 10; x < 200; x = x + 1 ) animirati.
{
cleardevice(); U ovom programu animiramo
circle (320, 240, x); širenje kružnice.

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

Petlje
#include <winbgim.h>

using namespace std;

Polja
int main()
U ovom primjeru animiramo kružnicu {
koja pada od gornjeg prema donjem int gdriver = 9;
rubu . int gmode = 2;
Obrada
teksta

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

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

circle (320, x, 10);


grami

}
getch();
closegraph();
Pokušajmo sami smi- return 0;
koda

sliti slične programe. }

PRO - MIL 143


Petlje

Petlja u petlji

Slično kao što možemo unutar if


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

using namespace std; Kod ovakvih programa veoma je


važno pravilno uvlačiti redove, jer
int main() tako lakše uočavamo početak i kraj
{ pojedinih for naredbi.
int gdriver = 9;
int gmode = 2;
int x;
int r;
initgraph(&gdriver, &gmode, "");
Ovom naredbom naređujemo ra-
setbkcolor (WHITE);
čunalu da na ovom mjestu stoji
setcolor (BLACK);
onoliko milisekundi koliki broj smo
cleardevice();
stavili u zagradu.
for (x = 30; x < 610; x = x + 60 )
{
U našem slučaju računalo će sta-
for (r = 5; r < 31; r = r + 5)
jati 100 milisekundi.
{
delay(100);
Ovom naredbom usporavamo iz-
cleardevice();
vođenje animacije, ako je animaci-
circle (x, 240, r);
ja suviše brza.
}
}
Na vašem računalu taj broj možete
getch();
promijeniti i tako izvođenje anima-
closegraph();
cije prilagoditi brzini svog računa-
return 0;
la. (Ako imamo sporo računalo,
}
ovu naredbu možemo izbaciti.)

Ovdje vidimo tijek cijele anima-


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

Vanjskom petljom pomičemo


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

144 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Analiziranje ovog
#include <cstdlib> programa pomoći
#include <iostream> će nam da u pot-

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

program
Naš prvi
{
int x; Pri tome nismo
int r; ograničeni na to
cout << "Prije petlje." << endl; da možemo staviti

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

Donošenje Grafika
petlje još jednu
cout << "Nutarnja petlja. r = " << r << endl; petlju i tako petlje
} dodavati u skladu
} s ciljevima koje
cout << "Nakon petlje." << endl; želimo postići.

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

Da bi rezultat rada programa Petlje


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

čin na koji je do sada nismo


koristili. U ovoj inačici sadrži
tri dijela.
Objekti

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


Sažimanje Veliki pro-
grami

Tekst unutar navodnika


Sadržaj varijable x ispisu- Skok u novi
ispisuje se na zaslon raču-
je se na zaslon računala. red.
koda

nala.

PRO - MIL 145


Petlje

Niz petlji

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


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

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


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

146 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Dozvoljene i nedozvoljene kombinacije petlji

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

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

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

Varijable
}

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

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

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

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

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


for (r = 10; r < 91; y = y + 1) prve for naredbe.
}
Sažimanje Veliki pro-

Ovakva ispreplete-
grami

{ nost dviju for na-


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

na.

PRO - MIL 147


Petlje

While petlja

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


#include <iostream> programe morali iznova pokretati.

using namespace std; Daleko elegantnije bilo bi kad bi nas


program nakon proračuna pitao želi-
int main() mo li proračun ponoviti ili želimo pre-
{ kinuti izvođenje programa.
int broj;
int kvadrat; Ovaj program radi upravo tako. Une-
int odgovor; semo li nakon proračuna broj 1, pro-
odgovor = 1; račun ćemo moći ponoviti, a unese-
while (odgovor == 1) mo li 2, odnosno bilo koji broj različit
{ od 1 program će se zaustaviti.
cout << "Unesite broj" << endl;
cin >> broj;
kvadrat = broj * broj;
cout << "Kvadrat unesenog broja je:" << endl;
cout << kvadrat;
cout << endl;
cout << "Ponovo = unesite 1." << endl;
cout << "Kraj = unesite 2." << endl;
cin >> odgovor;
}
cout << endl; U ovom programu koristi se
system("PAUSE"); petlja, budući da se dio pro-
return 0; grama može ponoviti više
} puta. Ova petlje nije realizi-
rana for naredbom, nego
while naredbom.

U čemu je razlika?

Naredba for pogodnija je za


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

(U ovom slučaju mi ne mo-


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

148 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Ključna naredba u novoj inačici programa je while naredba. Logika uporabe
te naredbe slična je logici uporabe for naredbe i ako bismo se potrudili svaki
program realiziran for naredbom mogli bismo realizirati while naredbom i

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

Zašto imamo dvije naredbe ako rade isti posao?

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

Varijable
Prije naredbe while
Ovdje se unutar zagrada nalazi uvjet koji

Donošenje Grafika
moramo varijabli koju
će while naredba koris- while naredba ispituje. Uvjeti se formiraju
titi dati neku početnu
po istoj logici kao i kod for naredbe.
vrijednost.

odluke
Ako je uvjet zadovoljen, izvršit će se na-
redbe unutar vitičastih zagrada, a nakon
a = 1;

Petlje
toga se računalo vraća na while naredbu
i ponovo ispituje je li uvjet zadovoljen.
while (a == 1)

Polja
Ako jest, ponovo se izvode naredbe unu-
{ tar vitičastih zagrada.

cin >> a;
Obrada
teksta

Ako nije, izvodi se prva naredba poslije


druge vitičaste zagrade.
}
Objekti

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


varijable a jednak broju 1. Zato prije
Da bi se ponavljanje u
Sažimanje Veliki pro-

nekom trenutku preki- while naredbe moramo u varijablu a sta-


grami

nulo, unutar vitičastih viti broj jedan. Kad bi u varijabli a bio neki
zagrada varijabli koju
while naredba ispituje drugi broj, računalo bi skočilo na prvi red
treba promijeniti vrijed- nakon druge vitičaste zagrade.
koda

nost.

PRO - MIL 149


Petlje

Pogledajmo dijelove našeg programa.


#include <cstdlib>
#include <iostream>

using namespace std;


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

odgovor = 1;
Naredba while ispituje je li sadržaj
varijable odgovor jednak broju 1.

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

U ovom djelu izra-


{
čunava se kvadrat
cout << "Unesite broj" << endl;
unesenog broja.
cin >> broj;
kvadrat = broj * broj;
U ovom dijelu u
cout << "Kvadrat unesenog broja je:" << endl;
varijablu odgovor
cout << kvadrat;
unosi se broj na
cout << endl;
temelju kojeg će
while naredba
cout << "Ponovo = unesite 1." << endl;
odlučiti treba li
cout << "Kraj = unesite 2." << endl;
naredbe unutar
cin >> odgovor;
vitičastih zagrada
}
ponoviti.

cout << endl;


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

150 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Varijablu koju će koristiti while naredba moramo prije while naredbe
formirati i moramo joj dati odgovarajuću početnu vrijednost.

Uvod
Zašto je u našem slučaju odgovarajuća početna vrijednost 1?

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

program
Naš prvi
Ako bi vrijednost varijable odgovor bila npr. 2, nakon while naredbe
program bi skočio na ovu naredbu i sadržaj unutar navodnika ne bi se
izvršavao.

Varijable
#include <cstdlib>

Donošenje Grafika
#include <iostream>

using namespace std;

int main()

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

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

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

Ovdje naredbom cin pre-


Sažimanje Veliki pro-
grami

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

PRO - MIL 151


Petlje

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


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

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


brojeva kao odgovora, u ovom programu unosimo slova.

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

#include <cstdlib>
#include <iostream>

using namespace std;

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

152 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Pogledajmo pobliže dijelove programa. Uobičajeni početak programa.

Uvod
Formiranje varijabli koje ćemo koristiti
#include <cstdlib>

program
Naš prvi
u programu.
#include <iostream>

using namespace std;


Formiranje varijable tipa char u koju

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

Donošenje Grafika
char odgovor; While nared-
odgovor = 'd';
bom ispituje-
mo je li sadr-

odluke
while (odgovor != 'n') žaj varijable
odgovor raz-
{ ličit od slova
n.

Petlje
cout << "Unesite broj" << endl;
Ako jest, izvo-
cin >> broj;
di se sadržaj
kvadrat = broj * broj;
unutar vitičas-
cout << "Kvadrat unesenog broja je:" << endl;
tih zagrada.
cout << kvadrat;
Polja
cout << endl;

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


cin >> odgovor; Ovdje se izra-
Obrada
teksta

čunava kvad-
} rat unesenog
broja.
Objekti

cout << endl;


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

izvesti naredbe unutar vitičastih zagrada


ako smo unijeli slovo d ili će izvesti na-
redbe nakon vitičastih zagrada ako smo
koda

Kraj programa. unijeli slovo n.

PRO - MIL 153


Petlje

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

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

Ako koristimo getch() na-


redbu, nakon unosa ne
koristima Enter tipku.

Dovoljno je pritisnuti slovo


d ili slovo n.

154 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Pogledajmo dijelove našeg programa.

Uvod
#include <cstdlib>
#include <iostream> Uobičajeni početak programa.
#include <winbgim.h>

program
Naš prvi
using namespace std; Formiranje varijabli.

int main()

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

Donošenje Grafika
Služi nam za biranje ponavljanja
char odgovor; animacije ili kraja programa. U vari-
odgovor = 'd'; jablu odgovor sprema se slovo d.
initgraph(&gdriver, &gmode, "");

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

Petlje
{
Vanjska while petlja.
cleardevice();

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


For petlja služi za iz- Polja
{
vođenje animacije.
cleardevice();
Obrada

circle (320, x, 10);


teksta

settextstyle(9, HORIZ_DIR, 1); Nakon izvođenja ani-


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

odgovor = getch(); vor na pitanje želimo li


ponoviti animaciju.
}
Sažimanje Veliki pro-
grami

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

varijable odgovor nije različit od n.

PRO - MIL 155


Petlje

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


kontroliramo kretanje pravokutnika u lijevu ili desnu stranu.

Program napuštamo pritiskom na tipku k.

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

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

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

156 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Pogledajmo dijelove našeg programa.

Uvod
#include <cstdlib> Uobičajeni početak programa,
#include <iostream> formiranje varijabli i otvaranje
#include <winbgim.h> grafičkog prozora.

program
Naš prvi
using namespace std;

int main() Cijelo vrijeme dok naša pri-


{ mitivna igrica radi, vrtjet će

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

Donošenje Grafika
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice(); Ovdje se crta pravokutnik koji
pomičemo.

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

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

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

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

cleardevice();
bla x će se uvećati za 5, pa će se
pravokutnik drugi put crtati pomaknut
}
5 točaka u desnu stranu.
Sažimanje Veliki pro-

closegraph();
grami

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

(Pokušajmo ovu naredbu izbaciti.)


Kraj programa.

PRO - MIL 157


Petlje

Dodamo li u prethodni program ispitivanje je li pritisnuta


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

158 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Da bismo dobili primitivni program za crtanje, dovoljno je da u prethod-
nom programu maknemo naredbu za brisanje zaslona računala.

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

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

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

Donošenje Grafika
initgraph(&gdriver, &gmode, "");
njeg ruba određena je sa y+5.
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice(); Širina našeg pravokutnika je 60,

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

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

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

{
y = y + 5;
} Ako ovu naredbu obrišemo, pra-
cleardevice(); vokutnik će se crtati na novoj po-
Sažimanje Veliki pro-

} ziciji, ali će ostati i na staroj pa će


grami

closegraph(); rezultat kretanja pravokutnika biti


return 0; trag na zaslonu računala.

} Obrišimo ovu naredbu i pokreni-


koda

mo program.

PRO - MIL 159


Petlje

Želimo li napraviti program za crtanje, pogodnije je za


crtanje koristiti točku umjesto pravokutnika.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
int x = 290;
int y = 220;
char odgovor = 'd';
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice(); Ovom naredbom ispisujemo jednu
while (odgovor != 'k') točku na zaslon računala. Varijabla
{ x određuje udaljenost točke od lije-
putpixel(x, y, BLACK); vog ruba, varijabla y od gornjeg ru-
odgovor = getch(); ba, a BLACK određuje boju točke.
if (odgovor == 75)
{
x = x - 1;
}
if (odgovor == 77) Želimo li dobiti punu crtu, točku mo-
{ ramo pomicati za 1.
x = x + 1;
} Pokušajmo umjesto 1 staviti 2 ili 5.
if (odgovor == 72)
{
y = y - 1;
}
if (odgovor == 80)
{
y = y + 1;
}
}
closegraph();
return 0;
}

160 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Za crtanje možemo koristiti i
kružnicu.

Uvod
#include <cstdlib>

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

using namespace std;

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

Donošenje Grafika
int x = 290;
int y = 220;
char odgovor = 'd'; Ovom naredbom ispisujemo kruž-
initgraph(&gdriver, &gmode, ""); nicu. Varijabla x određuje udalje-
nost središta kružnice od lijevog

odluke
setbkcolor (WHITE);
setcolor (BLACK); ruba, varijabla y udaljenost središ-
cleardevice(); ta od gornjeg ruba, a 20 je polum-
while (odgovor != 'k') jer kružnice.
{

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

Polja
x = x - 5; Broj 5 određuje pomak novog sre-
} dišta u odnosu na staro.
if (odgovor == 77)
{ Pokušajmo mijenjati taj broj.
Obrada
teksta

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

y = y - 5;
} Imajmo stalno na umu da ćemo
if (odgovor == 80) razumijevanje programa i vješti-
{ nu pisanja vlastitih programa
steći jedino tako da svaki primjer
Sažimanje Veliki pro-

y = y + 5;
grami

} programa koji je dat u ovoj knjizi


} mijenjamo na sve načine koji
closegraph(); nam padnu na pamet i onda pro-
return 0; matramo kakve posljedice izazi-
va određena promjena.
koda

PRO - MIL 161


Petlje

Objekte na zaslonu računala osim tipkovnicom mo-


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

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


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

Gornji lijevi ugao pravokutnika


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

Dimenzije našeg pravokutnika


su 80 puta 80.

162 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Mišem možemo pokretati bilo koji grafički ob-
jekt, npr. kružnicu.

Uvod
#include <cstdlib>
#include <iostream> Početak programa.
#include <winbgim.h>

program
Naš prvi
using namespace std; Varijable kojima određujemo tip
grafičkog prozora.
int main()
{

Varijable
Otvaranje grafičkog prozora.
int gdriver = 9;
int gmode = 2;

Donošenje Grafika
initgraph(&gdriver, &gmode, ""); Unutar while petlje stalno se
setbkcolor (WHITE); očitava pozicija pokazivača
setcolor (BLACK); miša i crta se kružnica čije sre-
cleardevice(); dište određuje položaj pokazi-
vača miša, a polumjer je 100.

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

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

Polja
Obrada
teksta

Jasno je da osim postojećih


dimenzija kružnice i pravo-
kutnika možemo koristi pra-
Objekti

vokutnike i kružnice drugih


dimenzija.

Isto tako možemo koristiti i


Sažimanje Veliki pro-

druge grafičke elemente,


grami

npr. točke ili crte.

Pokušajmo sami smisliti


varijacije ovakvih programa.
koda

PRO - MIL 163


Petlje

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

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
Ako u prethodne programe doda- cleardevice();
mo naredbu za brisanje sadržaja while (!kbhit())
grafičkog prozora, dobit ćemo pro- {
gram koji nam omogućuje pomica- cleardevice();
nje objekta mišem. circle(mousex(),mousey(),100);
}
closegraph();
return 0;
}
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
while (!kbhit())
{
cleardevice();
line (mousex()+40, mousey(), mousex()-40, mousey());
line (mousex(), mousey()-40, mousex(), mousey()+40);
}
closegraph();
return 0; Na sličan način možemo mišem
} pomicati nešto drugo, npr. dvije
crte koje bi u igri mogle biti nišan.

164 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Nedostatak prethodnih programa bio je što se
ekran briše i objekt ponovo crta, bez obzira je li

Uvod
to potrebno ili nije, odnosno bez obzira je li
došlo do pomaka miša ili nije.

program
Naš prvi
Ako nije došlo do pomaka miša, nema potrebe
objekt brisati i ponovo crtati.

Neprestano brisanje i crtanje može na sporijim

Varijable
računalima izazvati treperenje slike, što je veo-
ma neugodno.

Ovaj program ispituje je li došlo do pomaka


miša ili nije. Ekran se briše i objekt crta na no-

Donošenje Grafika
voj poziciji jedino ako je došlo do pomicanja
miša.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>

odluke
using namespace std; Ovom naredbom ispituje-
mo je li došlo do pomaka
int main() miša.

Petlje
{
int gdriver = 9; Sadržaj unutar vitičastih
int gmode = 2; zagrada izvršit će se jedi-
initgraph(&gdriver, &gmode, ""); no ako je došlo do poma-
setbkcolor (WHITE); ka miša.

Polja
setcolor (BLACK);
cleardevice(); U tom slučaju obrisat će
while (!kbhit()) se sadržaj grafičkog pro-
{ zora i objekt će se nacrta-
Obrada
teksta

if (ismouseclick(WM_MOUSEMOVE)) ti na novoj poziciji.

{
cleardevice();
Objekti

circle(mousex(),mousey(),100); Da bi bilo moguće novo


} očitavanje miša, rezultat
starog očitavanja ovom
clearmouseclick(WM_MOUSEMOVE); se naredbom mora obri-
Sažimanje Veliki pro-

sati.
grami

}
closegraph(); Kad ovu naredbu ne bis-
return 0; mo upotrijebili, u progra-
} mu bi bilo moguće samo
koda

jedno očitavanje miša.

PRO - MIL 165


Petlje

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

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

using namespace std;

int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, ""); Ovom naredbom ispituje-
setbkcolor (WHITE); mo je li pritisnuta lijeva
setcolor (BLACK); tipka miša.
cleardevice();
while (!kbhit()) Ako jest izvodi se sadržaj
{ unutar vitičastih zagrada.
if (ismouseclick(WM_LBUTTONDOWN))
{
cleardevice();
circle(mousex(),mousey(),100);
} Ovom naredbom brišemo
clearmouseclick(WM_LBUTTONDOWN); rezultat očitavanja lijeve
} tipke na mišu.
closegraph();
return 0; Novo očitavanje je mogu-
} će jedino nakon brisanja
starog očitavanja.

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


clearmouseclick(WM_MOUSEMOVE),

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


clearmouseclick(WM_LBUTTONDOWN).

166 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
OČITAVANJE MIŠA

Uvod
ismouseclick(WM_MOUSEMOVE) Očitavanje kretanja miša.

program
Naš prvi
clearmouseclick(WM_MOUSEMOVE) Brisanje očitavanja kretanja miša.

ismouseclick(WM_LBUTTONDOWN) Očitavanje lijevog klika

Varijable
clearmouseclick(WM_LBUTTONDOWN); Brisanje očitavanja lijevog klika.

Donošenje Grafika
ismouseclick(WM_LBUTTONDBLCLK) Očitavanje duplog lijevog klika.

Brisanje očitavanja duplog lijevog

odluke
clearmouseclick(WM_LBUTTONDBLCLK)
klika.

ismouseclick(WM_RBUTTONDOWN) Očitavanje desnog klika.

Petlje
clearmouseclick(WM_RBUTTONDOWN) Brisanje očitavanja desnog klika.

ismouseclick(WM_RBUTTONDBLCLK) Očitavanje duplog desnog klika. Polja

Brisanje očitavanja duplog des-


Obrada
teksta

clearmouseclick(WM_RBUTTONDBLCLK)
nog klika.

ismouseclick(WM_MBUTTONDOWN) Očitavanje srednjeg klika.


Objekti

Brisanje očitavanja srednjeg kli-


clearmouseclick(WM_MBUTTONDOWN)
ka.
Sažimanje Veliki pro-
grami

ismouseclick(WM_MBUTTONDBLCLK) Očitavanje duplog srednjeg klika.

Brisanje očitavanja duplog sred-


clearmouseclick(WM_MBUTTONDBLCLK)
koda

njeg klika.

PRO - MIL 167


Petlje

Do while petlja

Pokrenemo li ova dva


programa, vidjet ćemo #include <cstdlib>
da je rezultat njihovog #include <iostream>
rada potpuno jednak, #include <winbgim.h>
iako prvi koristi while
naredbu, a drugi do using namespace std;
while naredbu.
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
while (!kbhit())
{
if (ismouseclick(WM_LBUTTONDOWN))
#include <cstdlib> {
#include <iostream> circle(mousex(),mousey(),100);
#include <winbgim.h> }
clearmouseclick(WM_LBUTTONDOWN);
using namespace std; }
closegraph();
int main() return 0;
{ }
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
do
{
if (ismouseclick(WM_LBUTTONDOWN))
{
circle(mousex(),mousey(),100);
}
clearmouseclick(WM_LBUTTONDOWN);
}
while (!kbhit());
closegraph();
return 0;
}

168 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Usporedimo strukture while petlje i do while petlje.

a = 1;

Uvod
Određivanje vrijednosti varijable koju će koristiti
while naredba.
while (a == 1)

program
Naš prvi
Ispitivanje je li uvjet zadovoljen, u našem sluča-
{ ju, je li sadržaj varijable a jednak broju 1.

Varijable
cin >> a;
Ovaj dio unutar vitičastih zagrada ponavlja se
dok je uvjet zadovoljen, u našem slučaju dok je
} sadržaj varijable a jednak broju 1.

Donošenje Grafika
Petlja do while započinje određivanjem vrijed-
nosti varijable koju će koristiti while naredba.

odluke
a = 1;
Ovaj tip petlje započinje naredbom do nakon
koje slijede vitičaste zagrade unutar kojih se
do

Petlje
nalazi dio programa koji se ponavlja dok je uv-
jet zadovoljen
{

Polja
Dio koji se ponavlja i u kojem mora postojati
cin >> a; mogućnost promjene vrijednosti varijable a. Obrada

}
teksta

Ovdje se ispituje je li zadovoljen uvjet po istoj


logici po kojoj se ispituje i u while naredbi.
while (a == 1);
Uočimo da se ovdje na kraju while naredbe
Objekti

obavezno piše ; oznaka.


Sažimanje Veliki pro-

U čemu je razlika između ovih dviju petlji, osim očigledne razlike u načinu
grami

pisanja? Razlika je u tome što se sadržaj while petlje neće izvesti niti jednom
ako uvjet nije zadovoljen jer se ispitivanje nalazi prije djela koji se ponavlja.
Sadržaj do while petlje će se bez obzira na uvjet izvesti barem jednom jer se
najprije izvodi dio koji se ponavlja, a tek nakon toga ispituje se je li uvjet za-
koda

dovoljen.

PRO - MIL 169


Petlje

Generator slučajnih brojeva

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


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

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


va. Pogledajmo kako ćemo formirati program za generiranje slučajnih brojeva.

#include <cstdlib>
#include <iostream>

using namespace std;

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

Problem je u tome što će


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

Jasno, od takvih “slučajnih


brojeva” ne možemo imati
puno koristi.

Pokušajmo napisati prog-


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

170 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Problem koji se sastoji u tome
da naredba rand(); uvijek gene-
rira isti niz brojeva riješit ćemo

Uvod
naredbom srand(1);.

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

Varijable
using namespace std;

int main()
{
Stavimo li naredbu srand(1) prije na-
int x;

Donošenje Grafika
redbe rand() postići ćemo da naredba
srand(1);
rand() generira neki niz brojeva.
for (x = 0; x < 11; x = x + 1)
{
Ako umjesto srand(1); stavimo srand
cout << rand() << endl;
(2); dobit ćemo neki drugi niz brojeva.

odluke
}
Pokušajmo i vidjet ćemo da ćemo za
system("PAUSE");
srand(3); dobit neki treći niz brojeva, a
return 0;
za srand(4); neki četvrti.
}

Petlje
Problem je u tome što ćemo za isti broj
unutar zagrade dobivati uvijek isti niz.
Dakle srand(6) davat će pri svakom
pokretanju isti niz brojeva, ali drugačiji

Polja
nego npr. srand(5). Očito bi bilo dobro
kad bismo na neki način broj unutar
#include <cstdlib> zagrade mogli mijenjati.
#include <iostream>
Obrada
teksta

using namespace std;

int main()
{
Objekti

int x;
srand(2);
for (x = 0; x < 11; x = x + 1)
Sažimanje Veliki pro-

{
grami

cout << rand() << endl;


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

PRO - MIL 171


Petlje

Da bi naredba time(NULL) funkcionirala,


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

using namespace std;


Različite brojeve dobit ćemo naredbom
int main() time(NULL). Iako se čini logičnim da na-
{ redba time(NULL) pokazuje trenutno vrije-
cout << time(NULL) << endl; me, ona to ne čini, nego prikazuje trenut-
system("PAUSE"); no sistemsko vrijeme. To je vrijeme koje
return 0; je proteklo od 1. siječnja 1970. godine.
}

Budući da program ne možemo


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

172 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
#include <cstdlib> Stavimo li u naredbu srand(1); umjesto
#include <iostream> konkretnog broja jedan naredbu time
#include <ctime> (NULL) koja će u svakom trenutku gene-

Uvod
rirati drugačiji broj, naredba rand() pri
using namespace std; svakom će pokretanju generirati drugačiji
brojčani niz. Sada smo već blizu onome
što smo željeli, a to je generator slučajnih

program
Naš prvi
int main()
{ brojeva.
int x;
srand(time(NULL));

Varijable
for (x = 0; x < 11; x = x + 1)
{
cout << rand() << endl;
}
system("PAUSE");

Donošenje Grafika
return 0;
}

odluke
Petlje
U ovom rješenju problematič-
no je to što su često početni
brojevi veoma slični. Prvi put
smo dobili 6089, drugi put Polja
6132, a treći put 6171.
Obrada
teksta
Objekti
Sažimanje Veliki pro-
grami

Taj problem možemo najjed-


nostavnije eliminirati tako da
prvi broj koji generira genera-
tor slučajnih brojeva ne koris-
koda

timo u programu.

PRO - MIL 173


Petlje

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


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

Vidimo da smo uspjeli dobiti više


doista različitih nizova.

174 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Sad kad smo konačno dobili niz slučajnih brojeva, postavlja se pitanje kako
postići da ti slučajni brojevi budu unutar unaprijed određenih granica. Ako
želim da se objekt pojavi na slučajnoj poziciji unutar prozora širokog 640 to-

Uvod
čaka, bilo bi zgodno da generator slučajnih brojeva generira slučajni broj iz-
među 0 i 640.

program
Naš prvi
#include <cstdlib> Najprije ćemo program preurediti
#include <iostream> tako da generira brojeve između 0 i
#include <ctime> 1. To ćemo postići tako da generi-

Varijable
rani broj podijelimo maksimalnom
using namespace std; mogućom vrijednošću slučajnog
broja. U tom slučaju, ako je generi-
int main() rani slučajni broj nula, rezultat će
biti nula, a ako je jednak maksimal-

Donošenje Grafika
{
int x; noj mogućoj vrijednosti bit će 1. Za
float sb; sve ostale vrijednosti dobit ćemo
srand(time(NULL)); broj između nula i jedan.
rand();

odluke
for (x = 0; x < 11; x = x + 1)
{ Maksimalnu moguću vrijednost gene-
sb = rand() / RAND_MAX; riranog slučajnog broja dobit ćemo
cout << sb << endl; naredbom RAND_MAX.

Petlje
}
system("PAUSE");
return 0;
} Pokrenemo li takav program kao

Polja
rezultat dobit ćemo samo nule, i
možda ponekad broj 1.

Zašto?
Obrada
teksta

Zato što je rezultat rada naredbe


rand() i naredbe RAND_MAX int
tipa, tj. broj bez decimalnog zare-
za. Rezultat, doduše, spremamo u
Objekti

varijablu sb koja je float tipa, ali


računalo radi tako da izračuna re-
zultat u int formatu, a tek onda
Sažimanje Veliki pro-

broj pretvara u float.


grami

Prvo podijeli dva int broja, makne


sadržaj desno od zareza, jer int tip
nema zarez, i tek onda rezultat
sprema u varijablu float tipa.
koda

PRO - MIL 175


Petlje

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

using namespace std;

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

static_cast <float> (rand())

Nakon primjene te naredbe program će


Ovom naredbom naređujemo generirati slučajne brojeve između broja
računalu da jedan tip podatka 0 i broja 1.
npr. int pretvori u neki drugi tip,
npr. float.

static_cast <float> ( rand() ) Unutar navodnika nave-


demo varijablu ili izraz
čiji tip želimo mijenjati.
Mi ćemo mijenjati tip
Ovdje navedemo tip u koji neki drugi tip želimo rezultatu izvođenja
pretvoriti. Mi želimo int tip pretvoriti u float, pa rand() naredbe.
smo zato ovdje napisali float.

176 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
#include <cstdlib>
#include <iostream>

Uvod
#include <ctime>

using namespace std;

program
Naš prvi
int main()
{
int x;
float sb;

Varijable
srand(time(NULL));
rand();
for (x = 0; x < 11; x = x + 1)
{

Donošenje Grafika
sb = (static_cast <float> (rand()) / RAND_MAX) * 640;
cout << sb << endl;
}
system("PAUSE");
Kako ćemo postići da program ne generi-
return 0;

odluke
ra brojeve između 0 i 1, nego između 0 i
}
640? Tako da slučajni broj koji računalo
generira između 0 i 1 pomnožimo sa 640.

Ako je slučajni broj imao minimalnu mogu-

Petlje
ću vrijednost 0, rezultat će biti nula.
Pogledajmo dio programa
kojim generiramo slučajni Ako je slučajni broj imao maksimalnu mo-
broj između 0 i 640. guću vrijednost 1, rezultat će biti 640.

Za sve ostale vrijednosti rezultat će biti Polja


između 0 i 640, a to je ono što smo htjeli
postići.
Ovaj dio pretvara int slučaj-
Obrada
teksta

ni broj u float tip.


Objekti

sb = ( static_cast <float> ( rand() ) / RAND_MAX ) * 640; Množimo li


broj između
0 i 1 brojem
640, dobit
Sažimanje Veliki pro-

Generira slučajne Maksimalna vrijednost ćemo broje-


grami

brojeve. koju rand() generira. ve između 0


i 640.

Dijeljenjem slučajnog broja maksimalnom mogućom vrije-


koda

dnošću dobivamo broj između broja 0 i broja 1.

PRO - MIL 177


Petlje

Ako želimo da računalo generira broj iz-


#include <cstdlib> među 0 i 640 bez decimalnog zareza, slu-
#include <iostream> čajni broj ćemo spremiti u int varijablu.
#include <ctime>
Budući da je generirani slučajni broj float
using namespace std; tipa, računalo će nas pri prvom pokretanju
programa upozoriti da je došlo do pretva-
int main() ranja float tipa u int tip.
{
int x; Kad float tip broja spremimo u int varijab-
int sb; lu, računalo će ga automatski pretvoriti u
srand(time(NULL)); int tip tako da će mu maknuti sve brojeve
rand(); desno od decimalnog zareza.
for (x = 0; x < 11; x = x + 1)
{
sb = (static_cast <float> (rand()) / RAND_MAX) * 640;
cout << sb << endl;
}
system("PAUSE");
return 0;
}

Računalo nas upozorava


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

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

178 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Korištenje slučajnih brojeva

Uvod
Ovaj program će generirati
kružnice na slučajno odabra-
nim pozicijama.

program
Naš prvi
Na taj način u igrama može-
mo generirati objekte na slu-
čajno odabranim mjestima.

Varijable
#include <cstdlib>
#include <iostream>

Donošenje Grafika
#include <winbgim.h>
#include <ctime>

using namespace std; Budući da položaj kružnice odre-

odluke
đuju dva broja, jedan koji određuje
int main() udaljenost središta od desnog ru-
{ ba i drugi koji određuje udaljenost
int x; središta od gornjeg ruba generirat
int sx; ćemo dva slučajna broja.

Petlje
int sy;
int gdriver = 9; Prvi ćemo spremiti u int varijablu
int gmode = 2; sx i bit će između 0 i 640. Drugi
initgraph(&gdriver, &gmode, ""); ćemo spremiti u sy i bit će između

Polja
setbkcolor (WHITE); 0 i 480.
setcolor (BLACK);
cleardevice(); (Dimenzije grafičkog prozora su
srand(time(NULL)); 640x480).
Obrada
teksta

rand();
for (x = 1; x < 60; x = x + 1 )
{
sx = (static_cast <float> (rand()) / RAND_MAX) * 640;
Objekti

sy = (static_cast <float> (rand()) / RAND_MAX) * 480;


circle(sx,sy,20);
}
getch();
Sažimanje Veliki pro-

closegraph();
grami

return 0;
} Položaj kruga ovisit će o slučajno generiranim brojevima.

Ispis kružnice nalazi se unutar petlje pa će se generirati


onoliko kružnica koliko puta će se petlja izvesti.
koda

PRO - MIL 179


Petlje

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


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

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

using namespace std;

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

180 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
#include <cstdlib>
#include <iostream>

Uvod
Varijablu brojcanik na početku ćemo posta-
#include <ctime> viti za nulu, a nakon svakog pogađanja uve-
ćat ćemo je za jedan i tako ćemo znati koliko
using namespace std; nam je pokušaja trebalo za pogađanje zami-

program
Naš prvi
šljenog broja.
int main()
{
int odgovor;

Varijable
int slucajni_br;
Ovdje se generira slučaj-
int brojcanik = 0; ni broj između 0 i 100.

srand(time(NULL));

Donošenje Grafika
rand();

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

cout << "Zamislio sam broj od 0 do 100." << endl;

odluke
cout << "Pogodite koji je to broj" << endl;

do Ovdje unosimo odgovor.


{

Petlje
cout << "Unestite odgovor." << endl;
cin >> odgovor; Pri svakom unosu odgovora
brojčanik povećavamo za 1.
brojcanik = brojcanik + 1;

if (slucajni_br > odgovor)


Izvodi se ako je Polja
{
cout << "Zamislio sam veci broj." << endl; zamišljeni broj veći
od unesenog.
Obrada

}
teksta

if (slucajni_br < odgovor)


{ Izvodi se ako je
cout << "Zamislio sam manji broj." << endl; zamišljeni broj ma-
Objekti

} nji od unesenog.
}
while (slucajni_br != odgovor);
Sažimanje Veliki pro-
grami

cout << "Pogodili ste " << brojcanik << ". put." << endl;
Ispitivanje se
system("PAUSE");
ponavlja dok
return 0;
uneseni broj
}
nije jednak
koda

zamišljenom.

PRO - MIL 181


Polja

182 PRO - MIL


PRO - MIL
Polja

Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program

183
C++ programiranje za apsolutne početnike
Polja

Jednodimenzionalna polja

#include <cstdlib> Zamislimo da kao pozadinu neke


#include <iostream> jednostavne igrice želimo nacrtati
#include <winbgim.h> nešto što bi moglo asocirati na
nebodere.
using namespace std;
To možemo učiniti nizom lineto
int main() naredbi i to rješenje funkcionira, ali
{ i sami vidimo da nije baš osobito
int gdriver = 9; elegantno.
int gmode = 2;
initgraph(&gdriver, &gmode, ""); Zamislimo koliko bi to rješenje bilo
setbkcolor (WHITE); nepraktično ako bismo htjeli nacr-
setcolor (BLACK); tati crtež s više detalja, npr. prozo-
cleardevice(); rima.
moveto (0, 200);
lineto (10, 200);
lineto (10, 50);
lineto (100, 50);
lineto (100, 200);
lineto (120, 200);
lineto (120, 150);
lineto (300, 150);
lineto (300, 200);
lineto (350, 200);
lineto (350, 30);
lineto (400, 30);
lineto (400, 200);
lineto (450, 200);
lineto (450, 20);
lineto (550, 20);
lineto (550, 200);
lineto (560, 200);
lineto (560, 40);
lineto (600, 40);
lineto (600, 200);
lineto (620, 200);
lineto (620, 20);
lineto (635, 20);
lineto (635, 200);
lineto (640, 200);
getch();
closegraph();
return 0;
}

184 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
U ovom programu pojavljuju se Ovaj program radi isti posao kao i
uglate zagrade.
prethodni, ali je daleko elegantniji

Uvod
Dobit ćemo ih tako da držimo pri- od njega.
tisnutu AltGr tipku, a zatim klikne-
mo slovo f ili slovo g.

program
Naš prvi
Pogledamo li pažljivo program,
vidjet ćemo da su nam svi elemen-
ti poznati od prije, osim neobično

Varijable
#include <cstdlib> definirane varijable polje.
#include <iostream>
#include <winbgim.h>
Dok smo u dosadašnje varijable

Donošenje Grafika
using namespace std; mogli spremiti jedno slovo ili broj,
int main() čini se da u ovu varijablu možemo
{ spremiti mnoštvo brojeva.
int gdriver = 9;

odluke
int gmode = 2;
int x; Pažljivi analitičar možda bi uočio
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE); da broj u uglatoj zagradi odgovara

Petlje
setcolor (BLACK); količini brojeva u vitičastim zagra-
cleardevice();
dama.
int polje[54] =
{
0, 200, 10, 200, 10, 50, 100, 50, 100, 200, Polja
120, 200, 120, 150, 300, 150, 300, 200, 350, 200,
350, 30, 400, 30, 400, 200, 450, 200, 450, 20,
Obrada

550, 20, 550, 200, 550, 200, 560, 200, 560, 40,
teksta

600, 40, 600, 200, 620, 200, 620, 20, 635, 20,
635, 200, 640, 200
};
moveto (polje[0], polje[1]);
Objekti

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


{
lineto(polje[x], polje[x+1]);
}
Sažimanje Veliki pro-
grami

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

PRO - MIL 185


Polja

#include <cstdlib>
#include <iostream>

using namespace std;

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

Naredbom int a = 12; u računalu formi-


ramo prostor odnosno varijablu kojoj 12
int a = 12;
smo dali naziv a i u koju smo spremili
a
broj 12;

int polje[5] = {10, 20, 30, 40, 50}; Ovom naredbom kao i prethod-
nom formiramo varijablu, ali dok
smo u prethodnu varijablu mogli
spremiti samo jedan broj, ova
varijabla sadrži 5 pretinaca koji se
razlikuju po brojevima i u svaki od
tih pretinaca možemo spremiti
jedan broj.

10 20 30 40 50

0 1 2 3 4

polje

186 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Novi tip varijable ima poseban naziv, naziva se polje. Ćelije polja međusobno
razlikujemo po brojevima, a problem donekle komplicira činjenica da prvo
polje nije polje 1 nego polje 0, pa onda polje sa 5 elemenata ne sadrži polja

Uvod
od 1 do 5 nego od 0 do 4. U početku će nas ta činjenica često zbunjivati.

program
Naš prvi
int polje[5] = {10, 20, 30, 40, 50}; U vitičastim zagrada-
ma navest ćemo vri-
jednosti pojedinih

Varijable
ćelija.
Za razliku od obične varijable prilikom
formiranja polja u uglatim zagradama Vrijednosti ćemo me-
moramo navesti koliko ćelija sadrži po- đusobno odvojiti za-
lje. U našem slučaju polje koje smo rezima.

Donošenje Grafika
nazvali polje sadrži 5 ćelija.

Sadržaj polja ispisuje se na sli-

odluke
cout << polje[1] << endl; čan način kao i sadržaj varijable.

Razlika je u tome da je pri korištenju varijable dovoljno navesti naziv, a ovdje

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

Polja
Obrada
teksta

Vidimo da
#include <cstdlib>
#include <iostream> cout << polje[1] << endl;
Objekti

using namespace std; ispisuje sadržaj druge ćelije.


Pokušajmo na sličan način ispi-
int main() sati sadržaj neke druge npr. sa:
Sažimanje Veliki pro-

{
grami

int polje[5] = {10, 20, 30, 40, 50}; cout << polje[0] << endl;
cout << polje[1] << endl;
system("PAUSE"); sadržaj prve ćelije. (U uglatoj
return 0; zagradi nalazi se broj nula, a ne
koda

} veliko slovo o.)

PRO - MIL 187


Polja

Pogledajmo bitne dijelove ovog


#include <cstdlib> programa.
#include <iostream>

using namespace std;

int main() Ovdje formiramo polje koje se sa-


{ stoji od 5 ćelija. U prvu ćeliju spre-
mamo broj 10, u drugu 20, u treću
int polje[5] = {10, 20, 30, 40, 50}; 30, u četvrtu 40 i u petu 50.
cout << polje[0] << endl;
cout << polje[1] << endl;
cout << polje[2] << endl;
cout << polje[3] << endl;
cout << polje[4] << endl;
Sadržaj polja ispisujemo tako da
system("PAUSE"); uz naziv polja u uglatim zagrada-
return 0; ma navodimo i broj ćelije koji želi-
} mo ispisati.

#include <cstdlib> Sadržaj polja ne mora se ispisivati


#include <iostream> po redu, nego se može ispisivati
bilo kojim redoslijedom.
using namespace std;

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

188 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Polja mogu biti float tipa.

(Uočimo da zarezom odvaja-

Uvod
mo brojeve, a točka ima fun-
kciju decimalnog zareza.)

program
Naš prvi
#include <cstdlib>

Varijable
#include <iostream>

using namespace std;

Donošenje Grafika
int main()
{
float polje[5] = {10.12, 20.14, 30.16, 40.18, 50.19};
cout << polje[0] << endl;
cout << polje[1] << endl;

odluke
cout << polje[2] << endl;
cout << polje[3] << endl;
cout << polje[4] << endl;
system("PAUSE");

Petlje
return 0;
}

Polja
#include <cstdlib>
#include <iostream>
Obrada
teksta

using namespace std; Polja mogu biti i char tipa.

int main() Pokušajmo iz ispisa izbaciti endl


{
Objekti

naredbe:
char polje[5] = {'P', 'O', 'L', 'J', 'A'};
cout << polje[0] << endl; cout << polje[0] << endl;
cout << polje[1] << endl;
Sažimanje Veliki pro-

cout << polje[2] << endl; napišimo u obliku


grami

cout << polje[3] << endl;


cout << polje[4] << endl; cout << polje[0];
system("PAUSE");
return 0; Samo cout << polje[4] << endl;
}
koda

nemojmo mijenjati.

PRO - MIL 189


Polja

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int a[3] = {2, 3, 0};
a[2] = a[0] + a[1];
cout << a[2] << endl;
system("PAUSE");
return 0;
}

Polja možemo koristiti na isti način kao i


varijable, npr. za izračune.

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

190 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Sadržaj polja možemo ispi-
sati na ovaj način. Takav
način funkcionira, ali je nee-

Uvod
legantan. Osobito je neprikla-
dan ako bismo htjeli ispisati
veće polje.

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

Varijable
using namespace std;

int main()

Donošenje Grafika
{
int polje[5] = {10, 20, 30, 40, 50};
cout << polje[0] << endl;
cout << polje[1] << endl;
cout << polje[2] << endl; Ovaj način ispisa sadržaja

odluke
cout << polje[3] << endl; polja daleko je elegantniji.
cout << polje[4] << endl;
system("PAUSE");
return 0; Formirali smo petlju koja će

Petlje
}
se vrtjeti onoliko puta koliko
ćelija petlje želimo ispisati.

Polja
Varijabla petlje mijenja se od
#include <cstdlib> početnog broja ćelije koju želi-
#include <iostream>
mo ispisati, u našem slučaju
Obrada
teksta

using namespace std; od 0, do broja krajnje ćelije

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


{
Objekti

slučaju to je 4.
int polje[5] = {10, 20, 30, 40, 50};
int x;
for (x = 0; x < 5; x = x + 1) Pri ispisu umjesto polje[1] ko-
Sažimanje Veliki pro-

{
ristimo polje[x] što znači da se
grami

cout << polje[x] << endl;


} ispisuje ono polje čiji broj je
system("PAUSE");
return 0; jednak trenutnoj vrijednosti
} varijable x.
koda

PRO - MIL 191


Polja

Možemo ispisati dio ćelija


polja, npr. prvu, drugu i tre-
ću.
To ćemo postići tako da vari-
jablu petlje x mijenjamo od
jedan do tri po jedan.

#include <cstdlib>
#include <iostream>

using namespace std;

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

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int polje[5] = {10, 20, 30, 40, 50};
int x;
for (x = 4; x > -1; x = x - 1)
{ Sadržaj polja možemo ispisivati i
cout << polje[x] << endl;
unatrag. To ćemo postići tako da
}
system("PAUSE"); varijablu petlje x mijenjamo unat-
return 0;
rag od četiri do nula po jedan.
}

192 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
#include <cstdlib> Na sličan način pomoću petlje mo-
#include <iostream> žemo uporabom tipkovnice unijeti
brojeve u pojedine ćelije.

Uvod
using namespace std;

int main()

program
Naš prvi
{ Ovu petlju koristimo za unos
int polje[5]; brojeva u polje.
int x;
cout << "Unos polja." << endl; Opet umjesto cin >> polje [0]

Varijable
imamo cin >> polje[x], a varija-
for (x = 0; x < 5; x = x + 1) blu x petlja mijenja od nula do
{ četiri i tako će se unijeti sadržaj
cin >> polje[x]; cijelog polja.
}

Donošenje Grafika
Kao i do sada nakon svakog
cout << "Ispis polja." << endl; unosa broja pritisnemo Enter
tipku.
for (x = 0; x < 5; x = x + 1)

odluke
{
cout << polje[x] << endl;
} Koristeći isti trik ovdje ispisujemo
sadržaj polja.
system("PAUSE");

Petlje
return 0; Umjesto cout << polje[0] stavili
} smo cout << polje[x], a x for
petlja mijenja od nula do četiri i

Polja
tako će se ispisati sadržaj cijelog
polja.
Obrada
teksta
Objekti
Sažimanje Veliki pro-

Kao što je to vrijedilo za sve elemente programa koje


grami

smo vidjeli do sada, i za polja vrijedi da ćemo ih najbolje


shvatiti i usvojiti ako napravimo što veći broj varijacija
primjera koje smo vidjeli do sada.
koda

Pokušajmo sami smisliti što više sličnih primjera.

PRO - MIL 193


Polja

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

Ovdje se formira polje u kojem se nalazi položaj


točaka čijim ćemo spajanjem dobiti crtež.
#include <cstdlib>
#include <iostream> Na prvi pogled može nam se učiniti da smo to
#include <winbgim.h> ovdje učinili drugačije nego do sada. Pažljivom
analizom vidjet ćemo da nismo.
using namespace std;
Najprije imamo int polje[54] =, a zatim u vitičas-
int main() tim zagradama vrijednosti pojedinih ćelija.
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();

int polje[54] =
{
0, 200, 10, 200, 10, 50, 100, 50, 100, 200,
120, 200, 120, 150, 300, 150, 300, 200, 350, 200,
350, 30, 400, 30, 400, 200, 450, 200, 450, 20, Ovom naredbom
550, 20, 550, 200, 550, 200, 560, 200, 560, 40, određuje se po-
600, 40, 600, 200, 620, 200, 620, 20, 635, 20, četak niza crta.
635, 200, 640, 200
};

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

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

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

getch();
closegraph();
return 0;
} Ovom petljom crta se
ostatak crteža.

194 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Pogledajmo podrobnije neke detalje programa.

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

program
Naš prvi
Ovu naredbu int polje[5] = Ovaj oblik pogodniji je za
{ korištenje kad u veliko po-
možemo napi-

Varijable
10, 20, 30, 40, 50 lje želimo unijeti veliku koli-
sati i ovako. }; činu brojeva.

Donošenje Grafika
Ova naredba određuje početak niza crta.
Udaljenost od lijevog ruba određena je
moveto (polje[0], polje[1]); sadržajem ćelije polje[0], tj. prve ćelije, a

odluke
udaljenost od gornjeg ruba sa polje[1], tj.
sadržajem druge ćelije.

Petlje
Početna vrijednost
varijable x je 2.
Petlja će se izvoditi dok je x manji od 54. Budući
da se x uvećava za 2 vrijednost varijable x će ras-
ti od 2 do 52. Polja
Obrada
teksta

for (x = 2; x < 54; x = x + 2 ) Varijabla x uvećava se za 2. To nam


{ odgovara zato što je kraj svake crte
Objekti

lineto(polje[x], polje[x+1]); određen s dva broja, pa kad želimo


} očitati poziciju novog kraja crte, mo-
ramo se u polju pomaknuti za dva
člana polja unaprijed.
Sažimanje Veliki pro-
grami

Udaljenost kraja
crte od lijevog ruba Udaljenost kraja crte od gornjeg
koda

grafičkog prozora. ruba grafičkog prozora.

PRO - MIL 195


Polja

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int polje[5] = {10, 20, 30, 40, 50};
cout << polje[0] << endl;
cout << polje[1] << endl;
cout << polje[2] << endl;
cout << polje[3] << endl;
cout << polje[4] << endl;
system("PAUSE");
return 0;
} Mogli bismo postaviti pitanje trebaju
li nam uopće polja, budući da bismo
ovaj program mogli i ovako realizira-
ti, običnim varijablama.

Vidimo da ovakav pro-


#include <cstdlib>
gram možemo realizi- #include <iostream>
rati običnim varijabla-
using namespace std;
#include <cstdlib> ma, ali ovakav, koji
#include <iostream> int main()
koristi for naredbu, ne
{
using namespace std; možemo realizirati sa- int polje1 = 10;
mo varijablama. int polje2 = 20;
int main() int polje3 = 30;
{ int polje4 = 40;
int polje[5] = {10, 20, 30, 40, 50}; int polje5 = 50;
int x; cout << polje1 << endl;
for (x = 0; x < 5; x = x +1) cout << polje2 << endl;
{ cout << polje3 << endl;
cout << polje[x] << endl; cout << polje4 << endl;
} cout << polje5 << endl;
system("PAUSE"); system("PAUSE");
return 0; return 0;
} }

196 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Ne samo da uporabom polja možemo pisati elegantnije programe, nego nam
polja omogućuju realizaciju programa koje bi bilo veoma teško realizirati na
neki drugi način. Pogledajmo nekoliko primjera takvih programa.

Uvod
#include <cstdlib>

program
Naš prvi
Polja nam omogućuju operacije sa ćelijama polja.
#include <iostream>
Ovo je primjer programa koji pretražuje uneseno
using namespace std;
polje i ispisuje najveći broj u polju.

Varijable
int main()
{
int polje[5];
int x;
int r; Unos polja.

Donošenje Grafika
cout << "Unos polja." << endl;
for (x = 0; x < 5; x = x + 1)
{
U ovom dijelu programa pretražuje

odluke
cin >> polje[x];
se uneseno polje i najveći broj na-
}
đen u polju sprema se u varijablu
r.
r = polje[0];
for (x = 1; x < 5; x = x +1)

Petlje
{
if (r < polje[x])
{
U ovom dijelu ispisuje se sadržaj
r = polje[x];
varijable r, odnosno najveći broj
Polja
}
unesen u polje.
}

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


Obrada
teksta

cout << r << endl;

system("PAUSE");
return 0;
Objekti

}
Sažimanje Veliki pro-
koda grami

PRO - MIL 197


Polja

Pogledajmo detaljnije najzanimljiviji dio prethodnog program, dio u kojem se


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

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


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

Zašto petlja ne počinje s nula?

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


već pročitali pa je nećemo čitati
unutar for petlje.
r = polje[0];

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

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

198 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Jednostavnim promjenama pro-
#include <cstdlib>
gram koji pretražuje polje sa
#include <iostream>
ciljem da nađe najveći broj u

Uvod
polju možemo preurediti u prog-
using namespace std;
ram koji traži najmanji broj.
int main()

program
Naš prvi
Čemu služe takvi programski
{
postupci?
int polje[5];
int x;
Na sličan način bismo u progra-
int r;
mu za vođenje videoteke mogli

Varijable
cout << "Unos polja." << endl;
pronaći korisnike koji nisu vratili
for (x = 0; x < 5; x = x + 1)
film dulje od npr. tjedan dana ili
{
korisnike koji su u prošloj godini
cin >> polje[x];
posudili najviše filmova.
}

Donošenje Grafika
r = polje[0];
for (x = 1; x < 5; x = x +1)
{ Dovoljno je da umjesto ispitivanja
if (r > polje[x]) je li r < polje[x] stavimo ispitivanje

odluke
{ je li r > polje[x].
r = polje[x];
}
}
cout << "Najmanji je." << endl; Odgovarajuće preuredimo ispis

Petlje
cout << r << endl; obavijesti.
system("PAUSE");
return 0;
}

Polja
Obrada
teksta

Pokušajmo sami korigirati


program tako da pretražu-
je je li u polje unesen od-
ređen broj ili koliko puta
Objekti

se pojavljuje određen
broj.
Sažimanje Veliki pro-

Pokušajmo napraviti slič-


grami

na pretraživanja slova.
koda

PRO - MIL 199


Polja

#include <cstdlib>
#include <iostream>

using namespace std;

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

cout << "Unos polja." << endl; Ovo je sasvim sigurno najslo-
for (x = 0; x < 5; x = x + 1) ženiji program koji smo do sa-
{ da vidjeli u ovoj knjizi.
cin >> p[x];
} Služi za sortiranje polja. Une-
semo različite brojeve u polje,
do a program će ih sortirati tako
{ da će u prvom polju biti najveći
zamjena = 0; broj, a u posljednjem najmanji.
for (x = 0; x < 4; x = x + 1)
{
if (p[x] < p[x+1])
{ U ovom dijelu programa unosi-
privremeni = p[x]; mo brojeve u polje.
p[x] = p[x+1];
p[x+1] = privremeni;
zamjena = 1;
}
} U ovom dijelu vrši se sortiranje
} polja.
while (zamjena ==1);

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


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

system("PAUSE");
return 0;
}

200 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Pogledamo podrobnije dio programa u kojem se vrši sortiranje.

Uvod
Sortiranje se odvija u do ... while Na početku ispitivanja u varija-
petlji. Petlja se ponavlja tako dugo blu zamjena stavlja se broj 0.
dok je varijabla zamjena jednaka Ako ne bude potrebno vršiti
broju 1.

program
Naš prvi
nikakve zamjene u polju, varija-
bla zamjena ostat će jednaka
nuli i izvođenje do ... while pet-
lje će se zaustaviti.

Varijable
do U for petlji čita se cijelo polje, s
time da se varijabla petlje mije-
{ nja za jedan manje od veličine

Donošenje Grafika
zamjena = 0; petlje; dakle u našem slučaju ne
ide do 4 nego, do 3.
for (x = 0; x < 4; x = x + 1)
{

odluke
if (p[x] < p[x+1])
If naredbom ispitujemo je li broj
u nekoj ćeliji polja (p[x]) manji
{
od broja u sljedećoj ćeliji (p
privremeni = p[x];

Petlje
[x+1]). Ako nije, znači da ima-
p[x] = p[x+1];
p[x+1] = privremeni; mo prvo veći broj, a zatim ma-
zamjena = 1; nji. To je ono što želimo i petlja
} se vrti dalje.

} Polja

} Ako jest, znači da imamo prvo


Obrada

manji, a zatim veći broj, pa ih


teksta

while (zamjena ==1); treba zamijeniti.

U tom slučaju u ovom dijelu će


se izvršiti zamjena.
Objekti

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


Sažimanje Veliki pro-
grami

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

To znači da nije pronađen ni jedan slučaj da je neki broj manji od sljedećeg


koda

tj. da je sortiranje od većeg prema manjem završeno.

PRO - MIL 201


Polja

Pogledajmo kako funkcioni-


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

Zašto? Da smo odmah napravili drugu


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

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


privremeno ga spremamo u varijabli priv-
remeni.

Nakon što smo u prethodnom koraku sadr-


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

Sadržaj varijable privremeni sada vraćam u


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

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


jenili.

Na kraju zamjene u varijablu zamjena


stavljamo broj jedan.

Time smo obavijestili računalo da je bilo


potrebno vršiti zamjene u polju, tj. da polje
zamjena = 1;
nije bilo sortirano po redu, te da do ...
while petlja mora još jednom provjeriti je li
polje sortirano. Kad se ni u jednom slučaju
neće dogoditi da je neka ćelija manja od
sljedeće, sortiranje je završeno.

202 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Između polja mogu se vršiti matematičke ope-
racije kao i između varijabli.

Uvod
Ovaj program će zbrojiti sadržaje polja po1 i
#include <cstdlib> polja po2, a rezultat spremiti u polje po3 i za-
#include <iostream> tim ga ispisati na zaslon računala.

program
Naš prvi
using namespace std;

int main()
{

Varijable
int po1[5] = {10, 15, 20, 25, 30};
int po2[5] = {35, 40, 35, 50, 55};
int po3[5];
int a;

Donošenje Grafika
for (a = 0; a < 5; a = a +1)
{
po3[a] = po1[a] + po2[a];
cout << po1[a] << " + " << po2[a] << " = " << po3[a] << endl;
}

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

Petlje
Polja
Obrada
teksta
Objekti

Pokušajmo napisati slične programe koji će vršiti neke operacije između po-
lje; npr. programe koji će množiti ili dijeliti članove dvaju polja i rezultat spre-
Sažimanje Veliki pro-

mati u treće polje.


grami

Program koji će uspoređivati pojedine ćelije dvaju polja, a zatim će u treće


polje spremiti vrijednost one ćelije koja sadrži veći broj ili manji broj.
koda

Program koji će brojiti koliko puta se neki broj pojavljuje u nekom polju.

PRO - MIL 203


Polja

Spremanje brojeva u datoteku

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

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

U našem slučaju to je mapa Radni


na C: disku.

Ako smo program spremili u neku


drugu mapu, u tu istu mapu spre-
mimo i ovaj tekst.

204 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Uvod
program
Naš prvi
Varijable
Ako je sve u redu, u onom istom
prostoru u kojem se nalazi naš

Donošenje Grafika
projekt i naš program morala bi se
nalaziti i datoteka podaci.txt.

odluke
Petlje
Polja
Int tip u slučaju da koristimo
Jasno je da možemo staviti i
Dev-C++ može biti od –
neke druge brojeve, a možemo
2147483648 do 2147483647.
ih staviti više ili manje nego u
našem primjeru.
Obrada

Float tip može imati najveću


teksta

vrijednost od 3.40282 * 10-38. To


Ako mijenjamo količinu brojeva,
se u programu piše kao
onda u programu koji će ih čitati
3.40285e-38.
moramo na isti način promijeniti
Objekti

veličinu polja i for petlju.


Mogu li se u programima koristiti
i veći brojevi? Naravno, ali taj
Moramo imati na umu i da broj
problem nadilazi potrebe našeg
koji unosimo ne može biti neog-
Sažimanje Veliki pro-

uvodnog priručnika.
raničeno velik. Koliki broj može-
grami

mo unijeti u polje, odnosno u


Za sada je bitno imati na umu
varijablu, ovisi o svojstvima pro-
da u int ili float varijablu ne mo-
gramskog okruženja koje koristi-
žemo staviti neograničeno velik
mo.
broj.
koda

PRO - MIL 205


Polja

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


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

using namespace std;


Ovdje formiramo nešto s čime se do sada
int main() nismo sretali, a to je objekt. Trenutno nije
{ važno što je to točno objekt. Za sada će-
mo reći da je to element programa pomo-
int x; ću kojeg ćemo čitati sadržaj datoteke.
int polje[8];
ifstream ulaz("podaci.txt");

for (x = 0; x < 8; x = x + 1) Ova petlja mora se vrtjeti onoliko puta


{ koliko brojeva želimo pročitati, odnosno
ulaz >> polje[x]; koliko naše polje ima ćelija. U našem
} slučaju to je osam puta.

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


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

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


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

ulaz >> polje[x];

je varijacija te naredbe i znači da


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

206 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Naredba za formiranje objekta pomo- Naziv objekta. Bira se po istoj logi-
ću kojeg ćemo čitati sadržaj datoteke. ci po kojoj biramo nazive varijabli.

Uvod
program
Naš prvi
Naziv datoteke koju ćemo čitati
ifstream ulaz ("podaci.txt"); pomoću objekta ulaz.

Varijable
Donošenje Grafika
odluke
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

Petlje
int main()
{
int x;

Polja
int polje[8];
float a = 0;
ifstream ulaz("podaci.txt"); Kada učitamo brojeve u polje,
for (x = 0; x < 8; x = x + 1) s tim brojevima možemo raditi
Obrada
teksta

{ sve ono što možemo raditi i s


ulaz >> polje[x]; brojevima koje smo unijeli
} preko tipkovnice.
for (x = 0; x < 8; x = x +1)
U ovom programu izračunat
Objekti

{
a = a + polje[x]; ćemo prosječnu vrijednost
} unesenih brojeva.
a = a / 8;
Sažimanje Veliki pro-

cout << "Prosjek je " << a << endl; Budemo li eksperimentirali s


grami

cout << endl; drugim brojevima, imajmo na


system("PAUSE"); umu da njihova ukupna suma
return 0; ne smije biti veća od maksi-
} malne dozvoljene vrijednosti
varijable.
koda

PRO - MIL 207


Polja

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


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

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


fstream biblioteku.
int main()
{
int x;
int polje[8];
ofstream izlaz("podaci.txt"); Ovdje formiramo objekt izlaz pomoću
kojeg ćemo brojeve iz polja spremiti
for (x = 0; x < 8; x = x + 1) u datoteku podaci.txt.
{
cin >> polje[x];
}

for (x = 0; x < 8; x = x + 1) Na uobičajeni način unosimo brojeve


{ u polje.
izlaz << polje[x];
izlaz << " ";
}
Ovdje sadržaj polja sprema-
cout << "Spremanje je gotovo." << endl; mo u datoteku podaci.txt.
cout << endl;
system("PAUSE"); Naredbom:
return 0;
} izlaz << polje[x];

brojeve iz polja pomoću


objekta izlaz šaljemo u da-
toteku.

Ova naredba slična je na-


redbi:

cout << polje[x];

kojom brojeve šaljemo na


zaslon računala.

Naredbom izlaz << " "; iz-


među dva broja unosimo
prazno mjesto.

208 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Naredba za formiranje objekta pomo-
Naziv objekta. Bira se po istoj logi-
ću kojeg ćemo spremati sadržaj dato-
ci po kojoj biramo nazive varijabli.
teke.

Uvod
program
Naš prvi
Naziv datoteke u koju ćemo
ofstream izlaz ("podaci.txt"); spremati pomoću objekta ulaz.

Varijable
Što smo spremili možemo pogledati editorom, a možemo i programom koji
sadržaj datoteke ispisuje na zaslon računala.

Donošenje Grafika
odluke
Petlje
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;


Polja
int main()
{
Obrada

int x;
teksta

int polje[8];
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{
Objekti

ulaz >> polje[x];


}
for (x = 0; x < 8; x = x +1)
{
Sažimanje Veliki pro-
grami

cout << polje[x] << endl;


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

PRO - MIL 209


Polja

U ovom programu nema ničeg novog. Samo smo


kao lego kocke složili elemente koje smo do sada
#include <cstdlib> upoznali.
#include <iostream>
#include <fstream> Ovaj program učitava datoteku u polje, sortira polje
i zatim sortirano polje sprema natrag u datoteku.
using namespace std;

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

210 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
#include <cstdlib> Da bismo provjerili funkcio-
#include <iostream> nira li naš program, najpri-
#include <fstream> je ćemo programom koji

Uvod
smo malo prije obradili
using namespace std; unijeti brojeve u datoteku.

int main()

program
Naš prvi
{
int x;
int polje[8];
ofstream izlaz("podaci.txt");

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

Donošenje Grafika
for (x = 0; x < 8; x = x + 1)
{ #include <cstdlib>
izlaz << polje[x]; #include <iostream>
izlaz << " "; #include <fstream>
}

odluke
cout << "Spremanje je gotovo." << endl; using namespace std;
cout << endl;
system("PAUSE"); int main()
return 0; {

Petlje
} int x;
int polje[8];
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)

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

{
teksta

cout << polje[x] << endl;


Nakon što smo brojeve
}
unijeli u datoteku, pokrene-
system("PAUSE");
mo program za sortiranje
return 0;
Objekti

datoteke koji vidimo na


}
lijevoj stranici.
Sažimanje Veliki pro-
grami

Programom za čitanje sadržaja datoteke pog-


koda

ledat ćemo rezultat sortiranja.

PRO - MIL 211


Polja

Dvodimenzionalna polja

Ako postoje jednodimenzionalna polja, moraju postojati i dvodimenzionalna. (U


suprotnom bismo imali situaciju kao kad je jedan novinar govorio o lokalnim sta-
novnicima nekog mjesta, iako nam vjerojatno ne bi mogao objasniti kako izgle-
daju globalni stanovnici istog mjesta.)

1.stupac 2. stupac 3. stupac 4. stupac Dvodimenzionalne


matrice pogodne su
1. red 11 12 13 14 za spremanje sadr-
žaja tabela.
2. red 21 22 23 24

U ovom programu ćemo gornju tabelu


#include <cstdlib> spremiti u dvodimenzionalnu matricu, a
#include <iostream> zatim ćemo prvi i drugi red ispisati.

using namespace std;

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

cout << "Prvi red." << endl;


for (x = 0; x < 4; x = x + 1)
{ Ispis prvog reda.
cout << polje[0] [x] << endl;
}
cout << endl;

cout << "Drugi red." << endl;


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

system("PAUSE");
return 0;
}
Ispis drugog reda.

212 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Tip polja u našem slučaju je int, Drugi red polja. Nalazi se
a moglo je biti npr. float ili char. unutar vitičastih zagrada.

Uvod
Prvi red polja. Nalazi se

program
Naš prvi
Naziv polja. unutar vitičastih zagrada.

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

Donošenje Grafika
Cjelokupni sadržaj polja
nalazi se unutar poseb-
Broj redova polja. Broj stupaca polja.
nih vitičastih zagrada.

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

Polja
Broj stupca kojem pristupamo, u našem
cout << polje [0] [x] slučaju je to sadržaj varijable x.
Obrada
teksta

Broj reda kojem pristupamo, u našem slučaju je to prvi red koji se označava
Objekti

brojem nula. Dakle prvi red označava broj nula, a drugi broj jedan.
Sažimanje Veliki pro-
grami

Dvodimenzionalna polja koriste se Osim dvodimenzionalnih postoje i


na sličan način kao jednodimenzio- trodimenzionalna polja. Funkcioni-
nalna. Osobito su korisna u progra- raju slično kao dvodimenzionalna,
mima u kojima se odvijaju složeni samo što imaju još i “dubinu”.
koda

proračuni.

PRO - MIL 213


Obrada teksta

214 PRO - MIL


PRO - MIL
Obrada teksta

Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program

215
C++ programiranje za apsolutne početnike
Obrada teksta

String objekti

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


nje videoteke, osim obrade brojeva i grafike sasvim sigurno će nam trebati obra-
da teksta. Iako smo i do sada koristili tekstove za ispisivanje raznih obavijesti,
ostalo je nejasno na koji način bismo mogli tekstove pretraživati ili sortirati.

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

using namespace std; Pogledamo li ovaj pro-


gram, učinit će nam se
int main() da smo za lakše bara-
{ tanje tekstom upotrije-
string odgovor; bili novi tip varijable,
cout << "Unesite vase ime." << endl; string tip; te da smo u
cin >> odgovor; programu koristili vari-
cout << endl; jablu koju smo nazvali
cout << odgovor << ", dobar dan!" << endl; odgovor.
cout << endl;
system("PAUSE");
return 0;
}
Pogledajmo nove elemente u ovom programu.

string odgovor; Iako ovaj red izgleda kao da formiramo varijablu


string tipa koju smo nazivali odgovor, string nije tip
varijable nego klasa, a odgovor nije varijabla nego
objekt.

Time se trenutno ne moramo opterećivati i možemo


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

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


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

216 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
#include <string> Da bi program mogao koristiti string objekte,
ovu naredbu moramo staviti na početak prog-

Uvod
rama.

U našem programskom okruženju program će


raditi i bez ovog reda, ali je moguće da u ne-

program
Naš prvi
kom drugom programskom okruženju neće.

Zbog toga ćemo stavljati tu naredbu

Varijable
Donošenje Grafika
odluke
cout << odgovor << ", dobar dan!" << endl; Vidimo da objekt odgo-
vor u naredbi cout koris-
timo kao da koristimo
varijablu.

Petlje
Najprije će se ispisati
sadržaj objekta odgovor,
zatim tekst unutar navod-
nika i konačno skok u
Polja
novi red.
Obrada
teksta
Objekti

cin >> odgovor; U naredbi cin koju koristimo za unos preko tipkov-
Sažimanje Veliki pro-

nice objekt odgovor koristimo kao što bismo koris-


grami

tili varijablu.

Dok smo u varijablu char tipa mogli spremiti jedno


slovo, u objekt klase string možemo spremati veći
koda

tekst.

PRO - MIL 217


Obrada teksta

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


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

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


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

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

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

using namespace std;

int main()
{
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
cin >> odgovor; Program radi jednako
cout << endl; kao i prethodni, osim
cout << odgovor << ", dobar dan!" << endl; što smo u ovom slučaju
cout << endl; za spremanje imena
system("PAUSE"); osigurali veliki prostor.
return 0;
}

Operacija koja se vrši nad objektom.


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

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


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

218 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Uvod
#include <cstdlib>
#include <iostream>
#include <string>

program
Naš prvi
using namespace std;

int main()

Varijable
{
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
cin >> odgovor;

Donošenje Grafika
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
cout << "Imamo " << odgovor.size() << " slova." << endl;

odluke
cout << endl;
cout << "Imamo " << odgovor.capacity() << " prostora." << endl;
cout << endl;
system("PAUSE");
return 0;

Petlje
}

Naredba size() očigledno služi za određivanje Polja


odgovor.size() broja znakova unesenog teksta. Riječ Stjepan
sastoji se od sedam slova.
Obrada
teksta

Objekt na koji se na-


redba odnosi.
Objekti

Naredba capacity() služi za određivanje


broja mjesta koja nam stoje na raspola-
ganju za unos znakova u objekt odgo-
vor.
odgovor.capacity()
Sažimanje Veliki pro-
grami

Zašto ih je na raspolaganju 355, ako


smo naredbom odgovor.reserve(256)
Objekt na koji se na- rezervirali 256 mjesta? Zato što je 256
redba odnosi. mjesta samo polazište na temelju kojeg
koda

prevoditelj rezervira nešto veći prostor.

PRO - MIL 219


Obrada teksta

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

using namespace std;

int main()
{
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
cin >> odgovor; Naredbom cin nije mo-
cout << endl; guće u objekt odgovor
cout << odgovor << ", dobar dan!" << endl; unijeti više odvojenih
cout << endl; riječi.
system("PAUSE");
return 0; Iako smo napisali prezi-
} me i ime, uspjeli smo
unijeti samo prezime.

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

using namespace std;

int main()
{
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
getline(cin, odgovor);
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl; Ako umjesto cin nared-
system("PAUSE"); be upotrijebimo ovu na-
return 0; redbu, moći ćemo unijeti
} više riječi u objekt odgo-
vor.

220 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
String objekt u koji ćemo unositi tekst.
getline(cin, odgovor); U našem slučaju to je objekt odgovor.

Uvod
Naredba koja nam omogućuje
unos više riječi u string objekt.

program
Naš prvi
Varijable
#include <cstdlib>
#include <iostream>
#include <string>

Donošenje Grafika
using namespace std;

int main()
{

odluke
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl; Jedan od problema
cin >> odgovor; pri izradi programa
cout << endl; javlja se kad korisnik

Petlje
cout << odgovor << ", dobar dan!" << endl; unese neodgovara-
cout << endl; juću vrijednost.
system("PAUSE");
return 0; U ovom slučaju, um-

Polja
} jesto da unesemo
ime, samo smo priti-
snuli tipku Enter.
Obrada
teksta

U ovom slučaju, na
mjestu gdje se očekiva-
lo da ćemo unijeti tekst,
mi smo unijeli brojeve.
Objekti

Postavlja se pitanje na
koji bismo način mogli
Sažimanje Veliki pro-

spriječiti ili barem sma-


grami

njiti mogućnost unoše-


nja besmislenih odgo-
vora.
koda

PRO - MIL 221


Obrada teksta

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

using namespace std;

int main()
{
string odgovor;

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

cout << endl;


cout << odgovor << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}

do Naredbu za unos teks-


{ ta u objekt odgovor
cout << "Unesite vase ime." << endl;
getline(cin, odgovor); stavili smo u do ...
} while petlju koja se
while (odgovor.size() == 0);
izvodi tako dugo dok je
broj slova koja smo
unijeli jednak nuli.

Kad je taj broj različit


od nule, nastavlja se
izvođenje programa.

222 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Polje char tipa

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

using namespace std;

Varijable
int main()
{
char niz[255];

Donošenje Grafika
cout << "Unesite vase ime." << endl;
cin.getline(niz,255);
cout << endl;
cout << niz << ", dobar dan!" << endl;
cout << endl;

odluke
system("PAUSE"); Tekst se može unijeti u prog-
return 0; ram i obrađivati i na drugi
} način; uporabom polja char
tipa.

Petlje
Formiranje niza čije ćelije su char tipa. U svaku možemo staviti jedno slovo.

Tip niza. U Polja


Broj ćelija niza. U
našem slučaju
char niz[255]; našem slučaju niz
niz je char sadrži 255 ćelija
Obrada
teksta

tipa. što znači da u taj


Naziv niza, u našem slučaju na- niz možemo spre-
ziv niza je niz. miti 255 slova.
Objekti

Ovom naredbom preko tipkovni-


cin.getline( niz, 255); ce unosimo tekst u niz char tipa.
Sažimanje Veliki pro-
grami

Broj ćelija niza.


Naredbe za
unos tekst u
koda

char niz. Naziv niza.

PRO - MIL 223


Obrada teksta

Sadržaj niza char


cout << niz << ", dobar dan!" << endl; tipa ispisuje se na
isti način na koji se
ispisuje sadržaj
Naziv niza char tipa Ispisujem tekst Skok u varijable.
koji ispisujemo. unutar navod- novi red.
nika.

#include <cstdlib> Umjesto naredbe:


#include <iostream>
#include <string> cin.getline(niz,255);

using namespace std; možemo staviti naredbu:

int main() cin >> niz;


{
char niz[255]; ali u tom slučaju moći
cout << "Unesite vase ime." << endl; ćemo unijeti samo jednu
cin >> niz; riječ. Nakon pritiska raz-
cout << endl; maknice unos će se pre-
cout << niz << ", dobar dan!" << endl; kinuti pa, kao što može-
cout << endl; mo vidjeti na donjoj slici,
system("PAUSE"); iako smo napisali Bunic
return 0; Stjepan, uneseno je sa-
} mo prezime. Jasno, ako
baš želimo unijeti samo
jednu riječ onda ćemo
upotrijebiti ovu naredbu
jer je jednostavnija.

cin >> niz;

Naziv char polja u


koje unosimo tekst.

Naredba za unos
teksta tipkovnicom.

224 PRO - MIL


C++ programiranje za apsolutne početnike

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

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

Varijable
#include <string>

using namespace std;

Donošenje Grafika
int main()
{
char niz[255];
int x;
int p;

odluke
do Početni dio programa i
{ formiranje potrebnih vari-
cout << "Unesite vase ime." << endl; jabli.

Petlje
cout << endl;
cin.getline(niz,255);
x = 0;
p = 1;
while (niz[x] != '\0') Ovo je glavni dio prog-
Polja
{ rama. Ovdje se unosi
if (isdigit(niz[x])) tekst i ispituje jesu li
{ unesena slova ili broje-
vi.
Obrada

p = 0;
teksta

}
x = x + 1; Ako su uneseni brojevi,
} unos se ponavlja.
}
Objekti

while (p == 0); Oznaku \ dobit ćemo


pritiskom na AltGr i Q.
cout << endl;
cout << niz << ", dobar dan!" << endl;
Sažimanje Veliki pro-
grami

cout << endl;


system("PAUSE");
return 0; Završni dio programa,
} ime se spaja s pozdra-
vom i gasi se program.
koda

PRO - MIL 225


Obrada teksta

Pogledajmo podrobnije glavni dio prethodnog programa u kojem se unosi tekst i


ispituje jesu li unesena slova ili brojevi.

Cijeli ovaj dio nalazi se unutar do ... while petlji koja će se ponavljati ako korisnik
umjesto slova unese brojeve.

do While petlja čita niz, slo-


{ vo po slovo, dok ne dođe
do kraja niza.
cout << "Unesite vase ime." << endl;
Oznaka \0 nalazi se na
cout << endl; Unos teksta. kraju niza pa niz[x] != '\0'
ispituje je li element niza
cin.getline(niz,255); niz[1] jednak znaku za
Postavljanje odgo- kraj, odnosno jesmo li
x = 0; varajućih vrijed- došli do kraja niza.
p = 1; nosti varijabli.
To radi tako da je na po-
while (niz[x] != '\0') četku vrijednost varijable
x nula, a zatim se uveća-
{ va po jedan
if (isdigit(niz[x]))

{
p = 0;
} If naredbom ispitujemo je
li znak u nizu broj.
x = x + 1;
Ako jest, u p varijablu se
} sprema broj nula što će
imati za posljedicu da će
} se ponoviti do ... while
while (p == 0); petlja, odnosno unos.
Varijabla x uve-
ćava se za jedan Ako ni jedan član niza
da bi se pri sva- nije broj, u varijabli p će
Ovdje se ispituje je li kom ponavljanju ostati broj jedan i do ...
vrijednost varijable p naredbom niz[x] while petlja se neće po-
nula i ako jest, do ... čitao slijedeći navljati, odnosno upis se
while petlja se ponavlja. član niza. neće ponavljati.

226 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Ovaj program je veoma složen pa ćemo odvojeno pogledati važnije elemente
programa. Pogledajmo prvo glavnu do ... while petlju.

Uvod
Ovdje se u varijablu p
sprema broj jedan. To je
do Ovdje počinje petlja.

program
Naš prvi
varijabla o kojoj ovisi
{ hoće li se do ... while
cout << "Unesite vase ime." << endl;
petlja ponoviti ili ne.
cout << endl;
cin.getline(niz,255);

Varijable
x = 0;
p = 1;
while (niz[x] != '\0')
{ Ovdje će se varijabla p postaviti na nula ako je
if (isdigit(niz[x])) jedan od znakova u nizu broj. To će imati za

Donošenje Grafika
{ posljedicu da će se do ... while petlja ponoviti,
p = 0; odnosno da će se unos teksta ponoviti.
}
x = x + 1;

odluke
}
Ovdje se ispituje je li sadržaj varijable p jednak
}
nuli. Ako jest do ... while petlja će se ponoviti,
while (p == 0);
a to znači da će se upis ponoviti.

Petlje
Na početku se x postavlja na nulu, što znači da će se prvi
put sa niz[x] ispitivati niz[0] odnosno prva ćelija niza.

Polja
x = 0; While petlja ponavlja se tako dugo dok ćelija niz
[x] nije jednaka oznaci za kraj. Prvi put se ispituje
Obrada

p = 1;
teksta

while (niz[x] != '\0') prva ćelija odnosno ćelija niz[0].


{
if (isdigit(niz[x]))
{ Nakon što smo while naredbom ispitali jesmo li
Objekti

p = 0; došli do kraja niza, if naredbom ispitujemo je li


} ćelija koju trenutno ispitujemo jednaka nuli. Ako
x = x + 1; jest, varijabla p postavlja se na nulu, što znači da
Sažimanje Veliki pro-

} će se ponoviti glavna do ... while petlja.


grami

Ovdje se varijabla x uvećava za jedan. To znači da će pri sljedećem izvođenju


while petlje x biti 1, pa će se sa niz[x] ispitivati niz[1], zatim pri sljedećem
koda

izvođenju while petlje niz[2] i tako do kraja niza.

PRO - MIL 227


Obrada teksta

Ovom naredbom ispitujemo je li jedan znak


broj. Može se ispitivati varijabla char tipa ili
jedna ćelija niza char tipa.

if ( isdigit ( niz [x] ) )


Ispitujemo ćeliju niza char tipa. Broj ćelije
određen je vrijednošću varijable x.

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

using namespace std;


U ovom jednostavnom
int main() programu možemo vidjeti
{ kako funkcionira ispitiva-
char slovo; nje je li unesen znak broj
cin >> slovo; ili nije.
if (isdigit(slovo))
{ Osim ispitivanje je li uni-
cout << "Ovo je broj " << slovo << jeti znak broj, moguća su
endl; i druga ispitivanja.
}
else U tablici s desne strane
{ možemo vidjeti druge
cout << slovo << " nije broj." << endl; mogućnosti.
}
cout << endl;
system("PAUSE");
return 0;
}

Pokušajmo u gornji program


staviti ostala ispitivanja koja
možemo vidjeti u tablici.

U tom slučaju morat ćemo mo-


dificirati obavijesti koje daje pro-
gram.

228 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Osim što možemo ispitivati je li sadržaj varijable broj, ispitivati možemo i druga
svojstva sadržaja varijable char tipa.

Uvod
program
Naš prvi
ISPITIVANJE ZNAKOVA

Varijable
if (isdigit(slovo)) Ispituje je li sadržaj varijable slovo neki broj.

Ispituje je li sadržaj varijable slovo broj ili slovo. Odgo-


if (isalnum(slovo)) vor je negativan ako unesemo upitnik, točku ili nešto

Donošenje Grafika
slično.

if (isalpha(slovo)) Ispituje je li sadržaj varijable slovo neko slovo.

odluke
Ispituje je li sadržaj varijable slovo kontrolni znak. To je
if (iscntrl(slovo)) znak koji se dobiva ako držimo tipku Ctrl i onda pritis-

Petlje
nem npr. slovo v.

Je li sadržaj varijable slovo nešto što se ispisuje na zas-


if (isgraph(slovo)) lon računala, dakle slovo, broj ili interpunkcija. U ovu

Polja
grupu ne pripada prazno mjesto između dviju riječi.

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


Obrada
teksta

Je li sadržaj varijable nešto što se ispisuje. Za razliku od


if (isprint(slovo)) slične naredbe if (isgraph(slovo)) ovdje pripada i praz-
Objekti

no mjesto između dviju riječi.


Sažimanje Veliki pro-

if (isupper(slovo)) Je li sadržaj varijable slovo veliko slovo.


grami

if (ispunct(slovo)) Je li sadržaj varijable slovo neka interpunkcija.


koda

PRO - MIL 229


Obrada teksta

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

using namespace std;

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

230 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Uvod
if (isprint(slovo[6]))
{
cout << "Sedmi moze biti prazno mjesto." << endl;

program
Naš prvi
}
if (isupper(slovo[7]))
{
cout << "Osmi je veliko slovo." << endl;

Varijable
}
if (ispunct(slovo[8]))
{
cout << "Deveti je neka interpunkcija." << endl;

Donošenje Grafika
}
cout << endl;
system("PAUSE");
return 0;
}

odluke
Petlje
Ovaj malo veći program morali smo staviti na dvije
stranice.

Možemo vidjeti uporabu naredbi za ispitivanje znako- Polja


va primijenjenu na polje char tipa.
Obrada

Vidimo da ne možemo odjednom ispitivati cijelo po-


teksta

lje, nego da ispitujemo pojedine ćelije u polju.

Program možemo korigirati mijenjanjem sadržaj polja


ili tako da, umjesto stalnog sadržaja polja, sadržaj
Objekti

polja unosimo preko tipkovnice.

Uvijek imajmo u vidu da ćemo određenu naredbu


Sažimanje Veliki pro-

usvojiti tek kad napravimo mnoštvo primjera u kojima


grami

se ta naredba koristi. Određenu naredbu nismo usvo-


jili kad smo je shvatili. Shvaćanje naredbe je samo
uvjet da bismo uopće mogli početi učiti. Naredbu
smo usvojili tek kad smo je puno puta uspješno pri-
mijenili u raznim programima i na razne načine.
koda

PRO - MIL 231


Obrada teksta

Pogledajmo još nekoliko detalja vezanih uz char varijable i char polja.

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

using namespace std; Iako to na prvi pogled nema


smisla, znakovi se mogu us-
int main() poređivati kao i brojevi.
{
char slovo1; Na prvi pogled izgleda da se
char slovo2; uspoređuju na temelju abece-
cout << "Unesite prvo slovo." << endl; de, ali to nije baš tako.
cin >> slovo1;
cout << "Unesite drugo slovo." << endl; Ovaj program dobro radi ako
cin >> slovo2; uspoređujemo samo velika ili
samo mala slova.
if (slovo1 < slovo2)
{
cout << "Prvo slovo je prije po abecedi." << endl;
}
else
{
cout << "Drugo slovo je prije po abecedi." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

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

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

232 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Uvod
#include <cstdlib>
#include <iostream>

program
Naš prvi
#include <string>

using namespace std;

Varijable
int main() Mogla bi nas zbuniti
{ uporaba znaka " i zna-
char slovo = 'A'; ka '.
char NizSlova[18] = "Ovo je niz slova.";
Pravilo je jednostavno,

Donošenje Grafika
cout << "Jedno slovo je " << slovo << endl;
cout << "Tekst je: " << NizSlova << endl; jedno slovo piše se u
cout << endl; obliku 'a', a više slova u
system("PAUSE"); obliku "Ovo je tekst.".
return 0;

odluke
}

Petlje
#include <cstdlib>
#include <iostream>
Polja
#include <string>

using namespace std;


Obrada
teksta

int main()
{
char slovo;
cout << "Unesite slovo." << endl; Slovima možemo do-
Objekti

cin >> slovo; davati ili oduzimati


slovo = slovo - 1; brojeve.
cout << "Prethodni znak je " << slovo << endl;
slovo = slovo + 2;
Sažimanje Veliki pro-
grami

cout << "slijedeci znak je " << slovo << endl;


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

PRO - MIL 233


Obrada teksta

Obrada string objekata

Do sada smo uglavnom vidjeli operacije koje se mogu provoditi nad jednim slo-
vom spremljenim u char varijablu ili char polje. Pogledajmo sada operacije nad
većim tekstom spremljenim u objekt string klase.

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

using namespace std;

int main()
{
string tekst1 = "Ovo je prvi tekst.";
string tekst2 = " Ovo je drugi tekst.";
string tekst3;
tekst3 = tekst1 + tekst2; Objekte string klase možemo jed-
cout << tekst3 << endl; nostavno zbrojiti i rezultat zbraja-
cout << endl; nja spremiti u treći objekt.
system("PAUSE");
return 0;
}

234 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Uvod
#include <cstdlib>
#include <iostream>
#include <string>

program
Naš prvi
using namespace std;

int main()
{

Varijable
string tekst1;
string tekst2;
cout << "Unesite prvu rijec." << endl;
cin >> tekst1;

Donošenje Grafika
cout << endl;
cout << "Unesite drugu rijec." << endl; Objekti klase string
cin >> tekst2; mogu se međusobno
cout << endl; uspoređivati.
if (tekst1 == tekst2)

odluke
{ U ovom programu us-
cout << "Rijeci su jednake." << endl; poređujemo jesu li jed-
} naki.
else

Petlje
{
cout << "Rijeci nisu jednake." << endl;
}
cout << endl;

Polja
system("PAUSE");
return 0;
}
Obrada
teksta
Objekti
Sažimanje Veliki pro-
koda grami

PRO - MIL 235


Obrada teksta

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

using namespace std;

int main()
{
string tekst1;
string tekst2;
cout << "Unesite prvu rijec." << endl;
cin >> tekst1;
cout << endl;
cout << "Unesite drugu rijec." << endl; Dva objekta klase string mo-
cin >> tekst2; žemo uspoređivati i tako da
cout << endl; ispitujemo je li prvi manji od
if (tekst1 < tekst2) drugog.
{
cout << "Prva je manja." << endl; Ostaje nejasno u kojem smis-
} lu se ispituje je li prvi manji od
else drugog.
{
cout << "Prva nije manja." << endl; Očito se ne ispituje količina
} slova, nego se objekti rangira-
cout << endl; ju po abecedi, ab je po abece-
system("PAUSE"); di nakon aaaaa, pa u tome
return 0; smislu ab nije manje nego je
} veće od aaaaa.

Kao i kod char polja, sustav je


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

Zato računalo smatra da je AB


manje od aaaaa.

236 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Moguće su i složenije manipulacije nad tekstom. Ponovno pogledajmo nared-
bu size() koju smo vidjeli na početku ovog poglavlja. Omogućuje nam određi-
vanje broja znakova koje sadrži tekst. Pri tome imajmo na umu da računalo i

Uvod
prazno mjesto između riječi smatra jednim znakom.

program
Naš prvi
#include <cstdlib>

Varijable
#include <iostream>
#include <string>

using namespace std;

Donošenje Grafika
int main()
{
string odgovor;
getline(cin, odgovor);

odluke
cout << "Tekst sadrzi " << odgovor.size() << " znakova." << endl;
cout << endl;
system("PAUSE");
return 0;
} Naredba size().

Petlje
Polja
Obrada
teksta
Objekti
Sažimanje Veliki pro-
koda grami

PRO - MIL 237


Obrada teksta

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

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

using namespace std;

int main()
{
string tekst;
string trazi;
int pozicija;
cout << "Unesite tekst." << endl;
getline(cin, tekst);
cout << endl;
cout << "Sto trazim?" << endl;
getline(cin, trazi);
cout << endl;
pozicija = tekst.find(trazi);
if (pozicija != string::npos)
{
cout << "Pocetak je na " << pozicija << ". poziciji." << endl;
}
else
{
cout << "Nema trazene rijeci." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

238 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Ovom naredbom utvrđujemo poziciju traženog teksta, a rezultat spremamo u
varijablu pozicija.

Uvod
Varijabla u koju spre-
mamo rezultat. pozicija = tekst.find(trazi);

program
Naš prvi
Naziv objekta u kojem se nalazi Naredba za Objekt koji pre-

Varijable
tekst koji pretražujemo. pretraživanja. tražujemo.

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

Donošenje Grafika
jektu.

Ovom naredbom dobivamo

odluke
if (pozicija != string::npos) oznaku koja označava da tra-
žena riječ nije nađena.

Uspoređujemo rezultat pretra-

Petlje
živanja u pozicija varijabli i
U varijabli pozicija nalazi se obavijest da tražena riječ nije
rezultat pretraživanja objekta. nađena.

Polja
Obrada
teksta

Problem ovog programa,


Objekti

odnosno ove naredbe, je u


tome što će pronaći samo
prvo pojavljivanje neke rije-
či, ako se ista riječ više puta
Sažimanje Veliki pro-

pojavljuje u tekstu.
grami

Želimo li ispitati sva pojavlji-


vanja neke riječi, morat će-
mo napisati malo složeniji
koda

program.

PRO - MIL 239


Obrada teksta

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

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

using namespace std;

int main() Program je u potpunosti identi-


{ čan prethodnome, samo što
string tekst; ovdje umjesto naredbe find
string trazi; imamo naredbu rfind.
int pozicija;
cout << "Unesite tekst." << endl; Time smo računalu naredili da
getline(cin, tekst); pretraživanje započne od kraja
cout << endl; teksta koji se nalazi u objektu
cout << "Sto trazim?" << endl; tekst.
getline(cin, trazi);
cout << endl;
pozicija = tekst.rfind(trazi);
if (pozicija != string::npos)
{
cout << "Pocetak je na " << pozicija << ". poziciji." << endl;
}
else
{
cout << "Nema trazene rijeci." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

240 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Uvod
#include <cstdlib>
#include <iostream>

program
Naš prvi
#include <string>

using namespace std;

Varijable
int main() Ovaj program smo tako korigirali da
{ smo, iako s naredbom find započi-
string tekst; njemo pretraživanje s lijeve strane,
string trazi; pronašli drugo pojavljivanje tražene
int pozicija; riječi.

Donošenje Grafika
cout << "Unesite tekst." << endl;
getline(cin, tekst);
cout << endl;
cout << "Sto trazim?" << endl;

odluke
getline(cin, trazi);
cout << endl;
pozicija = tekst.find(trazi,6);
if (pozicija != string::npos)
{

Petlje
cout << "Pocetak je na " << pozicija << ". poziciji." << endl;
}
else
{

Polja
cout << "Nema trazene rijeci." << endl;
}
cout << endl;
system("PAUSE");
Obrada

pozicija = tekst.find(trazi,6);
teksta

return 0;
}
Objekti

U već poznatu naredbu find dodali smo broj 6 čime smo naredili računalu da
pretraživanje objekta tekst započne od znaka na poziciji 6.
Sažimanje Veliki pro-
grami

Budući da prva riječ radi počinje na 5, računalo je našlo drugo pojavljivanje


riječi radi.

Pomoću ove naredbe napravit ćemo program koji će pronaći sva pojavljiva-
koda

nja neke riječi, a ne samo prvo ili posljednje.

PRO - MIL 241


Obrada teksta

Ovaj program može pronaći svako pojavljivanje neke riječi u nekom tekstu.

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

using namespace std;

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

242 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Na neku poziciju unutar teksta
možemo dodati tekst.

Uvod
#include <cstdlib>

program
Naš prvi
#include <iostream>
#include <string>

using namespace std;

Varijable
int main()
{
string tekst = "Ovo je tekst.";
string umetak = " moj";

Donošenje Grafika
tekst.insert(6,umetak);
cout << tekst << endl;
cout << endl; Naredba za dodavanje teksta.
system("PAUSE");

odluke
return 0;
}
Sadržaj koji dodajemo.

Petlje
Objekt u koji dodajemo tekst. tekst.insert(6,umetak);

Polja
Pozicija na koju dodajemo tekst.
#include <cstdlib>
Obrada
teksta

#include <iostream>
#include <string>

using namespace std;


Objekti

int main()
{
string tekst = "Ovo je tekst.";
Sažimanje Veliki pro-

tekst.insert(6," dobar");
grami

cout << tekst << endl;


cout << endl;
system("PAUSE");
return 0;
Naredba insert može se napisati
}
koda

i na ovaj način.

PRO - MIL 243


Obrada teksta

Dio teksta spremljenog u objekt klase string možemo obrisati erase naredbom.

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

using namespace std;

int main()
{
string tekst = "Ovo je dobar tekst.";
tekst.erase(7,6);
cout << tekst << endl;
cout << endl;
system("PAUSE");
return 0;
}
Pozicija od kojem po-
činje brisanje.

Naredba za brisanje.

Objekt u kojem brišemo. tekst.erase(7,6);

Broj znakova koje će-


mo obrisati.

244 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Naredbom replace možemo dio teksta koji se nalazi u objektu klase string
zamijeniti nekim drugim tekstom.

Uvod
program
Naš prvi
Varijable
#include <cstdlib>
#include <iostream>
#include <string>

Donošenje Grafika
using namespace std;

int main()

odluke
{
string tekst = "Ovo je dobar tekst.";
string drugi = "dodatan";
tekst.replace(7,5,drugi);
cout << tekst << endl;

Petlje
cout << endl;
system("PAUSE");
return 0; Pozicija od koje zapo-
} činje zamjena teksta.

Polja

Koliko ćemo znakova


Obrada
teksta

zamijeniti.
Naredba za zamjenu teksta.
Objekti

Objekt u kojem mijenja-


mo dio teksta. tekst.replace(7,5,drugi);
Sažimanje Veliki pro-
grami

Sadržaj kojim ćemo zamijeniti tekst u objektu tekst. Zamijenit ćemo 5 znako-
va, počevši od sedmog sa sadržajem objekta drugi. Umjesto objekta drugi
koda

mogli bismo staviti i tekst unutar navodnika.

PRO - MIL 245


Obrada teksta

Premještanje teksta iz char polja u string

Postavlja se pitanje bismo li mo-


gli tekst iz jednog oblika pretvoriti
u drugi, ovisno o tome koji oblik
nam je pogodniji za obradu.

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

using namespace std;

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

246 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Premještanje teksta iz stringa u char polje

Moguće je i tekst iz objekta klase string premjestiti u polje char tipa, ali je na-

Uvod
redba kojom to izvodimo nešto složenija.

program
Naš prvi
Varijable
#include <cstdlib>
#include <iostream>
#include <string>

Donošenje Grafika
using namespace std;

odluke
int main()
{
Formiramo objekt klase string i
string tekst = "Tekst.";
u njega spremamo tekst
“Tekst”.

Petlje
char *polje = (char*)tekst.c_str();

cout << polje[0] << endl;


cout << polje[1] << endl; Tekst iz objekta selimo u char
cout << polje[2] << endl; polje koje smo nazvali polje.
Polja
cout << polje[3] << endl;
cout << polje[4] << endl;
cout << polje[5] << endl;
Ispisujemo sadržaj polja da bis-
Obrada
teksta

cout << endl; mo vidjeli nalazi li se u njemu


system("PAUSE"); doista “Tekst”.
return 0;
}
Objekti

char *polje = (char*)tekst.c_str();


Sažimanje Veliki pro-
grami

Naziv char polja u koje ćemo Naziv objekta iz kojeg tekst seli-
spremiti tekst iz objekta. U na- mo u char polje. U našem slu-
koda

šem slučaju naziv je polje. čaju naziv objekta je tekst.

PRO - MIL 247


Obrada teksta

Spremanje teksta u datoteku

Pomoću objekata klase string možemo formirati polja i ta polja možemo sprema-
ti u datoteke na sličan način na koji smo spremali brojčana polja.

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

using namespace std;

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

Umjesto praznih mjesta, iz-


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

248 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Programom sličnim programu za čitanje datoteka u kojima se nalaze brojevi
čitat ćemo sadržaj datoteke u kojoj se nalaze tekstovi.

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

Varijable
#include <string>
#include <fstream>

using namespace std;

Donošenje Grafika
int main()
{
int x;
string tekst[8];

odluke
string privremeni;
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{
do

Petlje
{
ulaz >> privremeni;
if (privremeni != "#")
{

Polja
tekst[x] = tekst[x] + privremeni + " "; Oznaku # koristit ćemo
} da bismo utvrdili jesmo
} li došli do kraja sadrža-
while (privremeni != "#"); ja jedne ćelije polja.
Obrada
teksta

}
for (x = 0; x < 8; x = x +1) Ovo rješenje je jednos-
{ tavno, ali je manjkavo.
cout << tekst[x] << endl; Ako bi netko prilikom
}
Objekti

unosa teksta unio #


cout << endl; oznaku, poremetio bi
system("PAUSE"); ispravno funkcioniranje
return 0; programa.
Sažimanje Veliki pro-

}
grami

Zbog toga bi program


za unos teksta trebalo
tako modificirati da ne
dozvoljava unos # oz-
koda

nake.

PRO - MIL 249


Objekti

250 PRO - MIL


PRO - MIL
Objekti

Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program

251
C++ programiranje za apsolutne početnike
Objekti

Jednostavan primjer klase i objekata

U ovom trenutku mogla bi se manje cjeline. U tom slučaju


javiti dva pitanja koja su među- lakše se posao podijeli na više
sobno povezana. Jedno pitanje programera. Svaki radi svoju
je imamo li na raspolaganju sa- manju cjelinu. Manje cjeline lak-
mo one klase koje su napisali še se pišu i u njima se lakše
autor C++ jezika ili bismo mogli pronalaze greške.
napisati svoje vlastite klase.
Ako dio programa koji se često
Pitanje zašto bismo to uopće ponavlja izdvojimo u manju cjeli-
radili usko je povezano s drugim nu, koju pozivamo kad nam je
pitanjem, a to je na koji način se potrebna, dobit ćemo manji pro-
pišu veliki programi. Mi smo do gram u kojem se lakše vrše
sada pisali male programe. Pišu izmjene. Lakše je izmjenu unijeti
li se na isti način programi koji u jedan dio koji se poziva na
sadrže nekoliko stotina tisuća više mjesta, nego u slučaju kad
redova? Pišu li se oni na način se isti dio programa ponavlja na
da počnemo s #include desetak mjesta. U tom slučaju
<cstdlib> napišemo nekoliko trebali bi pronaći svih desetak
stotina tisuća redova, na kraju mjesta i na svima promijeniti
napišemo } i program je gotov. program na isti način, što je ve-
lik posao, a postoji i velika vjero-
Naravno da ne. To bi bilo nep- jatnost da će doći do greške.
raktično iz niza razloga. U sluča-
ju da program pišemo na taj na- Vidimo da bi bilo dobro podijeliti
čin (što je tehnički moguće), ja- program na manje dijelove pa
ko teško bismo pisanje progra- se postavlja pitanje kako ćemo
ma raspodijelili na više osoba i u to učiniti. To ćemo učiniti kreira-
tako velikom programu jako teš- njem vlastitih objekata ili preciz-
ko bismo pronalazili greške. nije rečeno, kreiranjem vlastitih
klasa na temelju kojih ćemo for-
Postoji još jedan problem. U mirati objekte.
većim programima često se isti
posao mora obaviti na više Postoji još jedan razlog zašto je
mjesta u programu. Npr. ako u dobro poznavati uporabu klasa i
telefonski imenik želimo unijeti objekata. Želimo li pisati progra-
ime, prezime, ulicu, grad, zani- ma koji će se umjesto u pojed-
manje i tome slično, istu provje- nostavljenom crnom prozoru
ru, npr. provjeru je li umjesto odvijati u normalnom windows
slova netko unio brojeve morali prozoru, apsolutno je nužno ra-
bismo ponoviti prilikom svakog zumjeti uporabu klasa i objeka-
od nabrojenih unosa. ta.

Svi navedeni problemi rješavaju


se tako da se program razdijeli u

252 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Imajmo u vidu da prednost uporabe objekata dolazi do izražaja u većim prog-
ramima. Manji programi koje ćemo vidjeti u ovom poglavlju mogu se elegan-
tnije napraviti bez uporabe objekata. Unatoč tome, mi ćemo vidjeti primjere

Uvod
uporabe objekata u malim programima jer ćemo na primjerima malih progra-
ma lakše shvatiti princip uporabe objekata.

program
Naš prvi
Varijable
#include <cstdlib>
#include <iostream>

using namespace std;

Donošenje Grafika
class tekst
{
public:
void pisi()

odluke
{
cout << "Ovo je nas tekst." << endl;
} Unesimo u program-
}; sku okolinu i pokreni-

Petlje
mo naš prvi program
int main() koji koristi klase i ob-
{ jekte.
tekst t;
t.pisi();
cout << endl; Polja
system("PAUSE");
return 0;
Obrada

}
teksta

#include <cstdlib>
#include <iostream>
Objekti

Uočimo da taj program radi using namespace std;


potpuno isti posao kao ovaj.
int main()
Očito je da se u malim progra- {
Sažimanje Veliki pro-

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


grami

mima ne isplati koristiti klase i


cout << endl;
objekte. Njihove prednosti do- system("PAUSE");
laze do izražaja u većim prog- return 0;
}
koda

ramima.

PRO - MIL 253


Objekti

Najprije ćemo pogledati zanimljive dijelove našeg programa, a zatim funkcionira-


nje programa kao cjeline.

Ovaj dio programa izrazito je sličan ovom dijelu programa iz prošlog poglavlja.

tekst t; string tekst;


t.pisi(); tekst.reserve(256);

U prvom redu formira se objekt U prvom redu formirali smo objekt


klase tekst koji smo nazvali t. klase string koji smo nazvali tekst.

U drugom redu nad objektom t vrši U drugom redu nad objektom tekst
se operacija pisi(). Unutar zagrada izvršili smo operaciju reserve(250)
nema sadržaja, jer se ništa ne uno- kojom smo osigurali prostor za spre-
si u objekt t, ali su zagrade svejed- manje teksta. Između naziva objekta
no obvezne. i naziva operacije nalazi se točka.

Oblik t.pisi bez zagrada nije ispra-


van.

Naziv klase na temelju Naziv objekta koji formira-


koje ćemo formirati ob-
tekst t ; mo na temelju klase. U
jekt. U našem slučaju našem slučaju formiramo
naziv klase je tekst. objekt t klase tekst.

t . pisi() ;
Naziv objekta čiju meto-
Naziv metode koju sadrži
du ćemo koristiti. U na-
objekt t. U našem slučaju
šem slučaju koristit će-
koristimo metodu pisi().
mo metodu t.
Obvezna točka.

254 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Uvod
#include <cstdlib>
#include <iostream>

program
Naš prvi
using namespace std;
Ovdje vidimo da objekt
class tekst možemo nazvati i dru-
{ gačije, npr. reci.

Varijable
public:
void pisi() Ako smo formirali ob-
{ jekt reci, onda naredba
cout << "Ovo je nas tekst." << endl; koja je do sada imala
} oblik:

Donošenje Grafika
};
t.pisi();
int main()
{ dobiva oblik:

odluke
tekst reci;
reci.pisi(); reci.pisi();
cout << endl;
system("PAUSE"); Dakle, sad se operacija
return 0;

Petlje
pisi vrši nad objektom
} reci.

Polja
Obrada
teksta

#include <cstdlib>
#include <iostream>
Uočimo da postoji sličnost između
using namespace std; formiranja objekta reci klase tekst i
Objekti

int main() varijable a tipa int.


{ I ovdje se najprije navodi tip varija-
int a;
Sažimanje Veliki pro-

a = 12; ble, a zatim naziv a.


grami

cout << a << endl; Nad varijablom možemo vršiti raz-


cout << endl;
system("PAUSE"); ne operacije. U našem slučaju u
return 0; varijablu a spremamo broj 12.
}
koda

PRO - MIL 255


Objekti

#include <cstdlib>
#include <iostream>

using namespace std;

class tekst
{
public:
void pisi()
{
cout << "Ovo je nas tekst." << endl;
}
}; Kao što možemo formirati
više varijabli int tipa, tako
int main() možemo formirati više
{ objekata klase tekst.
tekst prvi;
tekst drugi; U ovom primjeru formirali
tekst treci; smo tri objekta, objekt
prvi.pisi(); prvi, objekt drugi i objekt
drugi.pisi(); treći.
treci.pisi();
cout << endl; Za biranje naziva objeka-
system("PAUSE"); ta vrijede slična pravila
return 0; kao i za biranje naziva
} varijabli.

class tekst
{
public: Za razliku od klase string
void pisi() koju je već netko prije na-
{ pisao, a mi je samo koris-
cout << "Ovo je nas tekst." << endl; timo, klasu tekst morali
} smo sami napisati.
};
U ovom dijelu programa
formira se klasa tekst.

256 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Formiranje klase za- Nakon naredbe class
počinje naredbom
class tekst slijedi naziv klase. U
class. To je naredba našem slučaju klasu

Uvod
C++ jezika i ne može smo nazvali tekst, ali
se mijenjati. mogli smo i drugačije.

program
Naš prvi
U ovoj inačici programa
#include <cstdlib>
klasu smo nazvali BrdaI-
#include <iostream>

Varijable
Doline.
using namespace std;
To je dozvoljeno, samo
što sad naredbu koja je
class BrdaIDoline
prije imala oblik:

Donošenje Grafika
{
public:
tekst t;
void pisi()
{
moramo napisati u obliku:
cout << "Ovo je nas tekst." << endl;

odluke
}
BrdaIDoline t;
};
Dakle, formiramo objekt t
int main()
klase BrdaIDoline.

Petlje
{
BrdaIDoline t;
(Drugo je što je pametno
t.pisi();
da nam naziv klase govo-
cout << endl;
ri čemu klasa služi, pa je
system("PAUSE");
Polja
logičnije da se klasa za
return 0;
ispis teksta zove tekst, a
}
ne BrdaIDoline.)
Obrada
teksta
Objekti
Sažimanje Veliki pro-
grami

Vidimo da je rezultat rada


takvog programa potpuno
jednak kao i rezultat rada
programa u kojem smo
koda

formirali klasu tekst.

PRO - MIL 257


Objekti

public: U ovom djelu nalazi se


void pisi() popis varijabli i metoda
{ koje posjeduje neka kla-
cout << "Ovo je nas tekst." << endl; sa. Metode su mudar na-
} ziv za operacije koje neka
klasa može izvršiti.

U našem slučaju klasa ne


sadrži varijable. Ima sa-
mo jednu metodu koju
smo nazivali pisi().

Popis metoda počinje


naredbom public: Pobli-
že značenje te naredbe
vidjet ćemo kasnije.

void pisi()
{ Ova naša mala klasa ne
cout << "Ovo je nas tekst." << endl; sadrži varijable i sadrži
} samo jednu metodu od-
nosno može napraviti
samo jednu operaciju. Tu
metodu nazvali smo pisi
().

Ispred naziva metode


nalazi se naredba void.
Njeno značenje pobliže
ćemo objasniti kasnije.

{ Unutar vitičastih zagrada


cout << "Ovo je nas tekst." << endl; nalaze se naredbe koje
} pojedina metoda izvršava.

Naša jednostavna metoda


samo naredbom cout ispi-
suje tekst unutar navodni-
ka na zaslon računala.

258 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Uvod
#include <cstdlib>
#include <iostream> Kao što smo klasu mogli
nazvati drugačije, mogli

program
Naš prvi
using namespace std; smo i metodu.

class tekst U ovom primjeru metodu


{ smo nazvali Pero().

Varijable
public:
void Pero() To je dozvoljeno, samo
{ što ćemo naredbu koju
cout << "Ovo je nas tekst." << endl; smo do sada pisali u obli-
} ku:

Donošenje Grafika
};
t.pisi();
int main()
{ pisati u obliku:

odluke
tekst t;
t.Pero(); t.Pero();
cout << endl;
system("PAUSE"); Kao i kod biranja naziva
return 0; varijabli i klasa, i ovdje je

Petlje
} pametno da nam naziv
metode govori što meto-
da radi. Zato je naziv pisi
za metodu koja ispisuje

Polja
tekst bolji od naziva Pero.
Obrada

Dok naziv metode uz


teksta

određena ograničenja
Void naredba ispred void pisi () možemo birati po volji,
naziva metode ozna-
čuje da metoda ne ove dvije zagrade se
ovdje moraju obavezno
Objekti

vraća nikakvu vrijed-


nost. nalaziti.

U kojem smislu ne
Sažimanje Veliki pro-

vraća vrijednost vid- Naziv metode biramo po volji, pazeći na ogra-


grami

jet ćemo kasnije kad ničenja o kojima smo govorili kad smo govorili
ovakvu metodu us- o biranju naziva varijabli.
poredimo s onima
koje vraćaju vrijed- Pametno je da naziv metode tako izaberemo
koda

nost. da nam govori čemu metoda služi.

PRO - MIL 259


Objekti

Pogledajmo strukturu našeg programa.


#include <cstdlib>
#include <iostream>

using namespace std;


Početni dio programa.
class tekst
{
public:
void pisi()
U ovom dijelu nalaze se klase
{
koje program koristi. U našem
cout << "Ovo je nas tekst." << endl;
slučaju imamo samo jednu
} klasu, klasu pisi().
};

int main()
{
tekst t; Glavni dio programa. Sada možemo vidjeti zašto
t.pisi(); smo program započinjali s int main() oznakom,
cout << endl; odnosno oznakom da je to glavni dio.
system("PAUSE");
return 0; Kad računalo pokrene program, najprije će se
} pokrenuti ovaj dio, a ostali dijelovi će se koristiti
po potrebi.

Sadrža klase nalazi se Klasa se može sastojati od više tipova sadrža-


unutar vitičastih zagrada. ja. Jedan od njih je public. Kasnije ćemo pod-
robnije vidjeti što oznaka public označava.

class tekst U klasi se mogu nalazi-


{ ti varijable i metode. U
public: našem slučaju varijable
void pisi() ne koristimo, a imamo
{ jednu metodu koju smo
cout << "Ovo je nas tekst." << endl; nazvali pisi().
}
Metode su zapravo
programi koji određuju
}; koje operacije neka
klasa može izvesti .

260 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Unutar metode ne mora se
nalaziti program za ispis. Mo-
že se nalaziti bilo što, npr.

Uvod
program za crtanje kružnice.

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

Varijable
using namespace std;

class tekst Iako program i ovako radi,


{ malo ćemo ga preurediti.

Donošenje Grafika
public:
void pisi() Umjesto class tekst stavit
{ ćemo class slika.
int gdriver = 9;

odluke
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
Umjesto void pisi() stavit će-
setcolor(BLACK);
mo void krug().
cleardevice();

Petlje
circle(320,240,180);
getch();
closegraph();
} Umjesto tekst t; tj. umjesto
Polja
}; naredbe formiranja objekta t
klase tekst stavimo slika cr-
int main() taj. Time ćemo formirati ob-
{ jekt crtaj klase slika.
Obrada
teksta

tekst t;
t.pisi();
cout << endl;
system("PAUSE");
Umjesto t.pisi(); tj. umjesto
Objekti

return 0;
} pozivanja metode pisi() u klasi
tekst stavit ćemo crtaj.krug();
Sažimanje Veliki pro-
grami

Izbacimo naredbu cout << endl; i naredbu system("PAUSE");.


Iako program radi i s tim naredbama, bez njih će raditi nešto elegantnije. Ovaj
se program odvija u grafičkom prozoru pa su nepotrebni razmak i pauza u
koda

tekstualnom prozoru.

PRO - MIL 261


Objekti

Složeniji primjeri klasa i objekata

Klasa može sadržavati više


metoda, npr. u ovom slučaju
sadrži tri metode.

#include <cstdlib>
#include <iostream>

using namespace std;

class tekst
{
public:
void prva()
{ Prva metoda koju smo
cout << "Ovo je prva metoda." << endl; nazvali prva().
}

void druga()
{ Druga metoda koju smo
cout << "Ovo je druga metoda." << endl; nazvali druga().
}

void treca()
{ Treća metoda koju smo
cout << "Ovo je treca metoda." << endl; nazvali treca().
}
};

int main()
{ Objekt formiramo jed-
tekst t; nom, a zatim pozivamo
t.prva(); metode po logici da
t.druga(); najprije navedemo na-
t.treca(); ziv objekta, zatim stavi-
cout << endl; mo točku i konačno
system("PAUSE"); naziv metoda. Zagrade
return 0; na kraju te ; oznaka su
} obvezne.

262 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Program može sadržavati
više klasa, npr. u ovom
slučaju klasu tekst1 i klasu

Uvod
tekst2.

program
Naš prvi
#include <cstdlib>

Varijable
#include <iostream>

using namespace std;

class tekst1

Donošenje Grafika
{
public: Prva klasa koju smo
void pisi() nazvali tekst1.
{

odluke
cout << "Ovo je klasa tekst1." << endl;
}
};

class tekst2

Petlje
{ Druga klasa koju
public: smo nazvali tekst2.
void pisi()
{

Polja
cout << "Ovo je klasa tekst2." << endl;
}
};
Obrada
teksta

int main() Ovdje na temelju


{ svake klase formi-
cout << "Zovemo metodu klase tekst1." << endl; ramo objekt, a za-
tekst1 t1; tim pozivamo me-
todu od svake kla-
Objekti

t1.pisi();
cout << endl; se odnosno opera-
cout << "Zovemo metodu klase tekst2." << endl; ciju koju objekt
tekst2 t2; može izvršiti
Sažimanje Veliki pro-

t2.pisi();
grami

cout << endl; Uočimo da je doz-


system("PAUSE"); voljeno da se me-
return 0; toda pod istim na-
} zivom pisi() nalazi
u obje klase.
koda

PRO - MIL 263


Objekti

#include <cstdlib>
#include <iostream>

using namespace std;

class tekst
{
public:
void pisi()
{
cout << "Upravo koristimo objekt." << endl;
} Jednom formirani
}; objekt možemo proi-
zvoljni broj puta kori-
int main() stiti u programu.
{
tekst t; To je jedna od pred-
cout << "Objekt koristimo 1. put." << endl; nosti korištenja klasa
t.pisi(); i objekata.
cout << endl;
cout << "Objekt koristimo 2. put." << endl; Operaciju koja se u
t.pisi(); programu često po-
cout << endl; navlja stavimo u kla-
cout << "Objekt koristimo 3. put." << endl; su, u programu for-
t.pisi(); miramo objekt i pozi-
cout << endl; vamo određenu ope-
system("PAUSE"); raciju kad god nam
return 0; zatreba, bez potrebe
} da je ponovo piše-
mo.

Sve klase koje smo do sada formirali bile su veoma Uporaba klasa i obje-
jednostavne budući da nisu komunicirale s ostat- kata veoma je slože-
kom programa na način da bi bilo moguće u klasu na ideja, i kao uvijek
unijeti neke podatke ili iz klase iščitati neke podat- do sada, imajmo na
ke, npr. brojeve ili tekst. umu da ćemo te pro-
gramske tehnike us-
U nastavku ovog poglavlja vidjet ćemo na koji na- vojiti tek kad napravi-
čin možemo u klase unositi ili iz klasa iščitavati po- mo velik broj primje-
datke. ra.

264 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Komunikacija s metodama

Pogledajmo sada program

Uvod
koji sadrži klasu u koju je mo-
guće unijeti podatke iz drugih
dijelova programa.

program
Naš prvi
Varijable
#include <cstdlib>
#include <iostream>

using namespace std;

Donošenje Grafika
class pravokutnik Klasa pravokutnik
{ sadrži jednu varija-
private: blu. To je varijabla

odluke
int c; c int tipa, a nalazi
se u private grupi.
public:
void naslov()
{

Petlje
cout << "Povrsina pravokutnika." << endl;
cout << endl;
Osim varijable u
}
private grupi, kla-

Polja
int povrsina (int a, int b)
sa sadrži i dvije
{
c = a * b; metode u public
return (c);
Obrada

grupi. To su meto-
teksta

}
}; da naslov() i me-
toda povrsina (int
int main()
Objekti

{ a, int b).
pravokutnik p;
p.naslov();
cout << "Povrsina je ";
Sažimanje Veliki pro-

cout << p.povrsina(2,3);


grami

cout << endl << endl; U glavnom progra-


system("PAUSE"); mu formiramo ob-
return 0; jekt p klase pravo-
} kutnik i koristimo
koda

ga.

PRO - MIL 265


Objekti

#include <cstdlib>
#include <iostream>

using namespace std;


Prethodni program malo smo modificirali da bi
class pravokutnik lakše mogli shvatiti razliku između naredbe
{ private i naredbe public.
private:
int c;

public:
int pov; U public području dodali smo
void naslov() varijablu koju smo nazvali pov.
{
cout << "Povrsina pravokutnika." << endl;
cout << endl;
} Sadržaj varijable c koja je formirana u
private području i u kojoj se nalazi re-
int povrsina (int a, int b) zultat izračuna površine spremili smo u
{ varijablu pov koja je formirana u public
c = a * b; području.
pov = c;
return (c);
}
}; Ovdje vidimo da sadržaju varija-
ble pov možemo pristupiti u
int main() glavnom programu, iako je for-
{ mirana u objektu. Pristupamo joj
pravokutnik p; tako da prvo napišemo naziv
p.naslov(); objekta zatim točku i na kraju
cout << "Povrsina je "; varijablu, dakle u p.pov obliku.
cout << p.povrsina(2,3);
cout << endl; Pokušamo li na isti način pristu-
piti varijabli c, doći će do greške.
cout << "p.pov je " << p.pov << endl; (Želimo li probati, maknimo //
// cout << "p.c je " << p.c << endl; oznaku na početku reda.)
cout << endl << endl; Već iz ovog primjera bismo mo-
system("PAUSE"); gli zaključiti u kojem smislu je c
return 0; varijabla private, a kojem smislu
} je pov varijabla public.

266 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Naredba private označava područje u kojem se nalaze varijable i metode
koje se mogu koristiti unutar klase odnosno unutar objekta, ali se njima ne
može pristupiti iz glavnog programa, odnosno izvan objekta. U ovom progra-

Uvod
mu u private području imamo samo varijablu c. Mogli bismo imati i procedure.

program
Naš prvi
Varijable
class pravokutnik Za razliku od private
{ područja, svemu što
private: formiramo u public
int c; području možemo

Donošenje Grafika
pristupiti i izvan kla-
public: se, odnosno izvan
int pov; objekta.
void naslov()
{ To ne možemo učini-

odluke
cout << "Povrsina pravokutnika." << endl; ti tako da samo na-
cout << endl; vedemo naziv varija-
} ble ili procedure ne-
go tako da prvo na-

Petlje
int povrsina (int a, int b) vedemo naziv objek-
{ ta, zatim točku i na
c = a * b; kraju naziv varijable
pov = c; ili procedure. Ako
return (c); pristupamo procedu-
} ri, moramo navesti i Polja
}; zagrade.
Obrada
teksta
Objekti

Ovdje su formirane još dvije varijable, varijabla a i varijabla b. Iako bi bilo


logično da tim varijablama možemo pristupiti izvan klase odnosno izvan ob-
Sažimanje Veliki pro-

jekta, jer su formirane u public području, to ipak nije slučaj. Pokušamo li im


grami

pristupiti izvan objekta doći će do greške.

Dakle izvana možemo pristupiti samo onim varijablama koje su u public po-
dručju formirane samostalno kao pov varijabla, a ne možemo onima koje su
koda

formirane unutar neke metode.

PRO - MIL 267


Objekti

private: Unutar private područja u ovom slučaju formirali smo sa-


mo varijablu c. Mogli bismo staviti i procedure, ali u tom
int c;
slučaju bismo tim procedurama mogli pristupiti samo
unutar klase odnosno samo unutar objekta. Način pisa-
nja bio bi isti kao i unutar public područja.

Ovdje formiramo pov varijablu int tipa. Varijable unutar klase formiramo na pot-
puno jednak način kao i unutar glavnog programa.

public: Ovdje formiramo meto-


int pov; du za ispis teksta na
zaslon računala. Takav
void naslov() tip procedure već smo
{ vidjeli u prethodnim
cout << "Povrsina pravokutnika." << endl; primjerima.
cout << endl;
}
Ovdje formiramo meto-
int povrsina (int a, int b) du za izračun površine
{ pravokutnika. Vidimo
c = a * b; da joj je oblik drugačiji
pov = c; od oblika naslov() me-
return (c); tode pa ćemo je pobliže
} pogledati.

Do sada smo formiranje


metode započinjali s void. Naziv metode. Ulazne varijable su
Ova metoda započinje s unutar zagrada.
int.

Što to znači?
To znači da će ova metoda
biti int tipa, odnosno da će int povrsina ( int a, int b )
rezultat njenog rada biti broj
int tipa.

Naredbom: Ovdje je popis varijabli koje možemo uni-


cout << p.povrsina(2,3); jeti u metodu.
ispisat ćemo rezultat rada
metode povrsina na zas- U ovu metodu možemo unijeti dva broja.
lon, a rezultat je broj int Prvi će biti spremljen u varijablu a, drugi u
tipa. varijablu b, a oba su int tipa.

268 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Pogledajmo još jednom naredbu za formiranje metode koja započinje void
naredbom.

Uvod
Void naredba znači da metoda Prazne zagrade znače da u ovu
naslov neće vraćati nikakav re- metodu ništa nije moguće unijeti

program
Naš prvi
zultat rada. na način da se napiše:

Sad će netko upitati, kako ne p.naslov(2,3);


vraća kad ispisuje tekst na zas-

Varijable
lon. Moguće je unutar metode staviti
cin naredbu pa nešto unijeti npr.
Ispisuje, ali se ispisivanje zbiva preko tipkovnice, ali nije moguće
unutar metode. ništa unijeti na gore opisan na-
čin.

Donošenje Grafika
U glavnom programu moguće je
napisati:

cout << p.povrsina(2,3);

odluke
void naslov ()
ali nije moguće napisati:

cout << p.naslov();

Petlje
Moguće je jedino s:

p.naslov();

Polja
pozvati metodu naslov koja on-
da unutar sebe ispisuje tekst na
zaslon računala.
Obrada
teksta

c = a * b; Unutar metode mogu se koristiti varijable koje smo


Objekti

pov = c; koristili za unos, varijabla a i varijabla b, te se mogu


koristiti sve one varijable koje su formirane u public
ili private području, dakle varijabla c i varijabla pov.
Sažimanje Veliki pro-
grami

return (c); Ovom naredbom određujemo koju vrijednost će pro-


cedura vraćati u glavni program, odnosno što će
naredba cout << p.povrsina(2,3); ispisati.
koda

PRO - MIL 269


Objekti

#include <cstdlib>
#include <iostream>

using namespace std;

class racunaj
{
private:
int c;
public:
int metoda1(int a, int b)
{
c = a + b; U ovom programu možemo
return (c); lijepo vidjeti kako o naredbi
}
return ovisi što će se nared-
int metoda2(int a, int b) bom r.metoda1(2,4) ispisati na
{
c = a + b; zaslon računala.
return (a);
}

int metoda3(int a, int b)


{
c = a + b; Ako smo u me-
return (b); todi upotrijebili
} naredbu return
}; (c), naredbom
r.metoda1(2,4)
int main() ispisat će se
{ sadržaj varijable
racunaj r; c.
cout << "return(c) daje " << r.metoda1(2,4) << endl; Naredbom re-
cout << "return(a) daje " << r.metoda2(2,4) << endl; turn(a) ispisat
cout << "return(b) daje " << r.metoda3(2,4) << endl; će se sadržaj
varijable a, a
system("PAUSE"); naredbom re-
return 0; turn(b) ispisat
} će se sadržaj
varijable b.

270 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
#include <cstdlib>

Uvod
#include <iostream>

using namespace std;

program
Naš prvi
class racunaj
{
private:
int a;

Varijable
int b;
int c;
public:
void unesi(void)
U ovom programu imamo

Donošenje Grafika
{
cout << "Unesite stranicu a." << endl; dvije void metode. Meto-
cin >> a; dom unesi unose se bro-
cout << "Unesite stranicu b." << endl; jevi u varijablu a i varijab-
cin >> b; lu b. To se vrši unutar

odluke
} metode. Nije moguće
void povrsina(void) napisati naredbu:
{
c = a * b; p.povrsina(2,3);

Petlje
cout << "Povrsina je " << c << endl;
} Moguće je jedino nared-
}; bom:

int main() p.unesi();


Polja
{
racunaj p; pozvati metodu za unos
p.unesi(); brojeva.
p.povrsina();
Obrada
teksta

cout << endl;


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

Metodom povrsina izra-


čunava se površina i ispi-
suje rezultat.
Sažimanje Veliki pro-
grami

Rezultat se ispisuje unu-


tar metode. Nije moguća
naredba:

cout << p.povrsina();


koda

PRO - MIL 271


Objekti

#include <cstdlib>
#include <iostream>

using namespace std;


U ovom programu najprije računamo površinu, a
class racunaj
zatim dobiveni rezultat množimo sa cijenom kvad-
{
ratnog metra površine da bismo dobili cijenu povr-
private:
šine.
int a;
int b;
int c;
Vidjeli smo da rezultat
public: izračuna unutar meto-
void unesi(void) de možemo ispisati na
{ dva načina. Ako je me-
cout << "Unesite stranicu a." << endl; toda tipa void onda se
cin >> a; rezultat ispisuje unutar
cout << "Unesite stranicu b." << endl; metode. Tada naredba
cin >> b; tipa:
}
int povrsina(void) cout << povrsina();
{
c = a * b; nije moguća.
return (c);
} Ako metoda nije void
}; Obratimo pažnju na tipa, nego int ili float ili
činjenicu da unutar char, onda je moguće
int main() glavnog programa smi- napisati gore navedenu
{ jemo koristiti c varijab- naredbu.
int c; lu, iako c varijabla pos-
int u; toji u klasi racunaj. Postavlja se pitanje u
racunaj p; čemu je razlika u fun-
p.unesi(); kcionalnosti tih dvaju
cout << "Cijena kvadratnog metra." << endl; načina ispisa.
cin >> c;
u = c * p.povrsina(); Razlika je u tome da
cout << "Cijena poda je " << u << endl; ako metoda nije void
cout << endl; tipa, onda metodu mo-
system("PAUSE"); žemo koristiti unutar
return 0; izraza poput:
}
u = c * p.povrsina();

272 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Uvod
#include <cstdlib>
#include <iostream>

program
Naš prvi
using namespace std;

class racunaj
{

Varijable
private:
int a;
int b;
int c;

Donošenje Grafika
int p;
int u; Ako za ispis koris-
public: timo void metodu
void unesi(void) pa uporaba nared-
{ be return nije mo-

odluke
cout << "Unesite stranicu a." << endl; guća, ispisom re-
cin >> a; zultata unutar me-
cout << "Unesite stranicu b." << endl; tode možemo ispi-
cin >> b; sati više vrijednos-

Petlje
cout << "Cijena kvadratnog metra." << endl; ti.
cin >> c;
} U ovom slučaju u
void cijena(void) metodi cijena mi
{ ispisujemo površi-
Polja
p = a * b; nu i cijenu.
cout << "Povrsina je " << p << endl;
u = p * c; Da je to int meto-
cout << "Cijena je " << u << endl; da i da rezultat
Obrada
teksta

} vraćamo return
}; naredbom, mogli
bi napisati ili re-
int main() turn(p) ili return
Objekti

{ (u), ali ne bismo


racunaj p; mogli vratiti obje
p.unesi(); vrijednosti.
p.cijena();
Sažimanje Veliki pro-

Ukratko, koju od
grami

cout << endl; metoda ispisa će-


system("PAUSE"); mo upotrijebiti ovi-
return 0; si o potrebama
} koje moramo za-
koda

dovoljiti.

PRO - MIL 273


Objekti

Naredba cout << p.povrsina(2,3); zbunjujuća je između ostalog i zato što istov-
remeno služi za unos broja 2 i broja 3 u metodu i za ispis rezultata množenja,
odnosno rezultata rada metode.

Kad računalo naiđe na ovak-


cout << p.povrsina( 2, 3 ); vu naredbu, najprije će broj
dva i broj tri proslijediti u vari-
jablu a i varijablu b koje se
nalaze u metodi povrsina.

int povrsina ( int a, int b ) Unutar metode povr-


sina računalo će sa-
držaj varijable a i va-
{ rijable b pomnožiti, a
rezultat spremiti u
varijablu c.
c = a * b;

return ( c );

Kad računalo naiđe na


naredbu return(c),
cout << p.povrsina(2,3) ; sadržaj varijable c ispi-
sat će na zaslon raču-
nala.

Ova naredba tada će


funkcionirati kao da
smo u programu koji
ne sadrži klase i objek-
te napisali:

cout << c;

274 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Uvod
program
Naš prvi
#include <cstdlib>
#include <iostream>

Varijable
using namespace std;

class pravokutnik
{
private:

Donošenje Grafika
float c;
public:
void naslov()
{ Kao što smo već
rekli, metode ne

odluke
cout << "Povrsina pravokutnika." << endl;
cout << endl; moraju biti int tipa.
} Mogu biti i nekog
float povrsina (float a, float b) drugog tipa. U
{ ovom programu

Petlje
c = a * b; imamo metodu
return (c); float tipa.
}
};

int main() Polja


{
float a1;
Obrada
teksta

float b1;
pravokutnik p;
p.naslov();
cout << "Unesite stranicu a." << endl;
Objekti

cin >> a1;


cout << "Unesite stranicu b." << endl;
cin >> b1;
cout << "Povrsina je "; Vidimo da unutar
Sažimanje Veliki pro-

cout << p.povrsina(a1,b1); zagrada umjesto


grami

cout << endl << endl; konkretnih broje-


system("PAUSE"); va možemo sta-
return 0; viti varijable.
}
koda

PRO - MIL 275


Objekti

Razdvajanje deklaracije i definicije

Do sada su se metode nalazile


unutar klase. U složenijim pro-
gramima najčešće je deklaraci-
ja klase odvojena od definicija
metoda.

U deklaraciji klase metode se


samo nabroje, a definicije me-
toda se nalaze drugdje.

#include <cstdlib>
#include <iostream>
U deklaraciji klase samo su
nabrojeni elementi klase i po-
using namespace std; dijeljeni u private i public po-
dručje.
class pravokutnik
{
Ovdje se nalazi samo zaglav-
private: lje metode pravokutnik u ko-
int c; jem su određena ulazna i izla-
public: zna svojstva metode, ali ovdje
int povrsina (int a, int b); nema sadržaja metode.
};

int pravokutnik :: povrsina (int a, int b)


{ Sadržaj metode pravokut-
c = a * b; nik, odnosno dio programa
return (c); kojim određujemo što će
}; metoda pravokutnik raditi
nalazi se ovdje.
int main()
{
cout << "Povrsina pravokutnika" << endl;
cout << endl; Ovako napisanu
pravokutnik p; klasu koristimo
cout << "Povrsina je = " << p.povrsina(2,3) << endl; na isti način kao
cout << endl; i klase koje smo
system("PAUSE"); do sada koristili.
return 0;
}

276 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Pogledajmo kako su povezane deklaracija metode i definicije metode.

Uvod
Tip vrijednosti koju će metoda Obvezna ; ozna-
vraćati kao rezultat. U ovom ka
slučaju je int, a mogao bi biti i Deklaracija metode u dek-
neki drugi npr. float.

program
Naš prvi
laraciji klase. Ovdje je na-
veden naziv metode i ulaz-
no-izlazna svojstva meto-
de, ali ne i program meto-
de.

Varijable
int povrsina (int a, int b) ;
Definicija me-

Donošenje Grafika
tode. Ovdje
se nalazi pro-
gram koji od-
ređuje što ta
metoda radi,

odluke
odnosno svoj-
int pravokutnik :: povrsina (int a, int b) stva metode.

Petlje
Popis varijabli preko
Naziv klase. Naziv metode. kojih se brojevi mogu
unijeti u metodu.

Polja
Obvezna :: oznaka između naziva klase i
naziva metode. Obrada
teksta

U većini slučajeva do sada noviji način izrade programa bio je elegantniji


od starog. U ovom slučaju to baš ne izgleda tako. Ovakav način pisanja
klase očigledno je manje elegantan od prethodnog. Postoji veća vjerojat-
Objekti

nost da će doći do greške budući da treba uskladiti deklaraciju metode i


definiciju metode.

Ovaj način pisanja klasa doista je manje elegantan od načina koji smo kori-
Sažimanje Veliki pro-

stili u prethodnim programima i ima ga smisla upotrebljavati samo kad želi-


grami

mo veći program razdijeliti u više datoteka. Ako klase pišemo na ovaj na-
čin, tada možemo u jednu datoteku staviti sve deklaracije klasa, a u druge
datoteke definicije metoda. Ako se program nalazi u jednoj datoteci, bolje je
definiciju metode napisati unutar deklaracije metode kao što smo to činili u
koda

prethodnim programima.

PRO - MIL 277


Objekti

Uporaba konstruktora

#include <cstdlib>
#include <iostream>

using namespace std;

class pravokutnik
{ U ovom programu nalazi se nekoli-
private: ko neobičnosti.
int a;
int b; Prva neobičnost jest ova metoda.
public: Neobično je to što ima isti naziv
pravokutnik(void) kao i klasa. Klasu smo nazvali pra-
{ vokutnik i ova metoda zove se
cout << "Stranica a:" << endl; pravokutnik.
cin >> a;
cout << "Stranica b:" << endl; Druga neobičnost jest što ova me-
cin >> b; toda nema nikakvu oznaku povrat-
} ne vrijednosti, nije ni void pravo-
int povrsina(void) kutnik(), ni int pravokutnik().
{
return (a * b);
}
}; Neobično je i to
što je nigdje ne
int main() pozivamo.
{
pravokutnik p; U ovom redu
cout << "Povrsina je " << p.povrsina() << "." << endl; formiramo objekt
cout << endl; p klase pravo-
system("PAUSE"); kutnik, a već u
return 0; sljedećem redu
} pozivamo meto-
du povrsina.

Iako nigdje u programu nije vidljivo pozivanje metode pravokutnik, njen sadržaj
se očigledno izvršava. Očigledno je da prije izvođenja metode površina računa-
lo unosi stranicu a i stranicu b. Takva metoda naziva se konstruktor, a izvršava
se u trenutku formiranja objekta. Dakle, ova metoda izvršila se u trenutku kad
smo naredbom pravokutnik.p formirali objekt p klase pravokutnik.

278 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Uvod
#include <cstdlib>
#include <iostream>

program
Naš prvi
using namespace std;

class pravokutnik

Varijable
{ U ovom programu imamo
private: dva konstruktora.
int a;
int b; Jednome je ulazni dio void

Donošenje Grafika
public: tipa, što znači da se u njega
pravokutnik(void) ne može unositi vrijednost
{ tako da napišemo:
cout << "Stranica a:" << endl;
cin >> a; pravokutnik p2(3,4);

odluke
cout << "Stranica b:" << endl;
cin >> b;
}
Drugome je ulazni dio (int
pravokutnik(int a1, int b1)
a1, int b1), što znači da se u

Petlje
{
njega može vrijednost unositi
a = a1;
tako da napišemo:
b = b1;
}
pravokutnik p2(3,4);
int povrsina(void)
Polja
{
return (a * b);
}
Ovdje formiramo objekt klase pravokutnik bez
};
Obrada
teksta

vrijednosti u zagradi. U tom slučaju primijenit


će se pravokutnik(void) konstruktor.
int main()
{
pravokutnik p1;
Objekti

cout << "Povrsina je " << p1.povrsina() << "." << endl;
cout << endl;
pravokutnik p2(3,4);
cout << "Za p2(3,4) povrsina je " << p2.povrsina() << "." << endl;
Sažimanje Veliki pro-

cout << endl;


grami

system("PAUSE");
return 0; Objekt p2(3,4); u zagradi ima dva broja, pa će se u
} tom slučaju primijeniti pravokutnik(int a1, int b1)
konstruktor. U tom slučaju površina će se izračunati
koda

množenjem brojeva 3 i 4, bez unosa tipkovnicom.

PRO - MIL 279


Objekti

Nasljeđivanje

#include <cstdlib>
#include <iostream>

using namespace std;

class kvadrat
Klasa kvadrat napisana je na
{
uobičajeni način.
protected:
int br;
public:
void unos (void)
{ Klasa kub napisana je na način koji
cout << "Unesite broj:" << endl; do sada nismo koristili.
cin >> br;
} Naredbom:
int izracun (void)
{ class kub : public kvadrat
return (br * br);
} formiramo klasu kub koja nasljeđuje
}; varijable i metode klase kvadrat. Da-
class kub : public kvadrat kle klasa kub može koristiti metodu
{ unos, iako je ona definirana u klasi
public: kvadrat.
int izracun(void)
{
return (br * br * br); Objekt objekt2 klase kub može koristiti me-
} todu unos koja se nalazi u klasi kvadrat kao
}; da je njezina klasa. To je moguće jer je klasa
kub naslijedila klasu kvadrat.
int main()
{
kvadrat objekt1;
objekt1.unos(); Metodu izracun
cout << "Kvadrat je " << objekt1.izracun() << endl; posjeduju obje
cout << endl; klase. U tom slu-
kub objekt2; čaju klasa kub
objekt2.unos(); koristit će svoju
cout << "Kub je " << objekt2.izracun() << endl; inačicu metode
cout << endl; izracun. Inačica u
system("PAUSE"); klasi kub prekrila
return 0; je inačicu u klasi
} kvadrat.

280 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Pogledajmo međusobnu povezanost bitnih dijelova programa u kojem je primi-
jenjena tehnika nasljeđivanja klasa.

Uvod
U klasi kvadrat definirane su
class kvadrat

program
Naš prvi
dvije metode, metoda unos i
metoda izračun.
void unos (void) Klasu kvadrat možemo koristiti

Varijable
na način koji smo koristili u do-
sadašnjim primjerima.
int izracun (void)

Donošenje Grafika
Naziv nove klase. Naredba za nas-
Klasa koju klasa kub nasljeđuje.
ljeđivanje klase.

odluke
class kub : public kvadrat Ovako deklarirana klasa kub
nasljeđuje sve varijable i meto-

Petlje
de klase kvadrat.
int izracun (void) Klasa sadrži metodu izracun,
iako metodu izracun posjedu-

Polja
je i klasa kvadrat koju naslje-
đuje. U tom slučaju klasa kub
koristit će vlastitu inačicu me-
tode izracun.
Obrada

kub objekt2;
teksta
Objekti

objekt2.unos(); Ovdje koristimo metodu unos, iako je kla-


sa kub ne posjeduje. To je moguće jer
klasa kub nasljeđuje klasu kvadrat, a
klasa kvadrat sadrži klasu unos.
Sažimanje Veliki pro-
grami

Iako metodu izracun posjeduje i klasa


objekt2.izracun() kvadrat, objekt2 koristit će vlastitu inačicu
koda

metode izračun.

PRO - MIL 281


Veliki programi

282 PRO - MIL


PRO - MIL
Veliki programi

Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program

283
C++ programiranje za apsolutne početnike
Veliki programi

Jednostavna igra u jednoj datoteci

#include <cstdlib> Ovaj program nešto je veći od pro-


#include <iostream> grama koje smo do sada pisali, pa
#include <winbgim.h> će se zato protezati kroz nekoliko
#include <ctime> stranica.

using namespace std;


Ovdje se nalazi deklaracija klase
class objekt objekt. Sastoji se od dvije varijab-
{ le, x i kretanje; te od dvije metode,
private: pomak i crtaj.
int x;
char kretanje;
public:
objekt() Unutar deklaracije klase nalazi se
{ konstruktor koji varijabli x daje
x = 290; početnu vrijednost 290.
}
void pomak(char); Ta varijabla određuje poziciju ob-
void crtaj(); jekta koji pomičemo pomoću tip-
}; kovnice.
void objekt :: pomak(char tipka)
{
kretanje = tipka;
if (kretanje == 75) Ovdje je sadržaj metode pomak.
{
setcolor (WHITE); U metodu se unosi podatak o
rectangle(x, 432, x+60, 438); tome koja tipka je pritisnuta.
setcolor (BLACK);
x = x - 5; Metoda ispituje je li pritisnuta
} strelica u lijevu ili strelica u des-
if (kretanje == 77) nu stranu. Ako je neka od tih
{ tipki pritisnuta, vrijednost varijab-
setcolor (WHITE); le x koja određuje položaj objek-
rectangle(x, 432, x+60, 438); ta koji pomičemo adekvatno će
setcolor (BLACK); se povećati ili smanjiti.
x = x + 5;
}
}
void objekt :: crtaj() Ovdje je sadržaj metode crtaj. Ona
{ crta objekt koji pomičemo pomoću
rectangle(x, 432, x+60, 438); strelica na tipkovnici.
}

284 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Male programe možemo smjestiti u jednu datoteku. Za veće programe to nije
praktično rješenje. Ako je veliki program u jednoj velikoj datoteci teže je pro-
naći grešku, teže je napraviti izmjenu programa i teže je podijeliti posao iz-

Uvod
među više programera.

U ovom poglavlju vidjet ćemo kako podijeliti jedan nešto veći program u više
datoteka. Najprije ćemo program napisati u jednoj velikoj datoteci, a zatim ga

program
Naš prvi
podijeliti u više manjih datoteka.

Varijable
Ovdje se nalazi deklaracija klase bomba. Sastoji
se od varijabli x i y koje određuju položaj bombe na
zaslonu te metode crtanje koja crta bombu i od
metode brisanje koja briše bombu da bi se dobila
iluzija kretanje bombe.

Donošenje Grafika
class bomba
{
Deklaracija sadrži konstruktor koji određuje počet-
private:
nu poziciju bombe.
int x, y;
public:

odluke
bomba()
{
x = (static_cast <float> (rand()) / RAND_MAX) * 620;
y = -((static_cast <float> (rand()) / RAND_MAX) * 480);

Petlje
}
void crtanje();
void brisanje();
};

Polja
void bomba :: crtanje()
Sadržaj metode crtanje.
{
rectangle (x,y,(x+20),(y+5));
}
Obrada

void bomba :: brisanje()


teksta

{ Sadržaj metode brisanje.


setcolor(WHITE);
rectangle (x,y,(x+20),(y+5));
setcolor(BLACK);
Objekti

y = y + 5;
if (y > 490)
{
Sažimanje Veliki pro-

y = -((static_cast <float> (rand()) / RAND_MAX) * 480);


grami

x = (static_cast <float> (rand()) / RAND_MAX) * 620;


}
}
koda

PRO - MIL 285


Veliki programi

Ovdje se nalazi glavni dio programa koji će koristi-


ti prije formirane klase.

Određivanja svojstva grafike, veliči-


ne grafičkog prozora, boje pozadi-
int main() ne i boje objekata.
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, ""); Formiranje varijable odgovor u
setbkcolor(WHITE); kojoj će se nalaziti podatak o trenu-
setcolor(BLACK); tno pritisnutoj tipki.
cleardevice();

Formiranje generatora slučajnih


brojeva kojim ćemo određivati
char odgovor = 'd'; mjesto pojavljivanja bombi, odnos-
no objekata koji se kreću odozgo
prema dolje.

srand(time(NULL));
Formiranje triju objekta klase bom-
ba, bomba1, bomba2 i bomba3.
To su objekti koji se kreću odozgo
bomba bomba1, bomba2, bomba3;
prema dolje.

objekt brod; Formiranje objekata brod klase


objekt. To je objekt koji mi pomi-
čemo pomoću tipkovnice, koristeći
strelicu u lijevo i strelicu u desno.
brod.crtaj();

Crtanje objekta koji pomičemo na


početnoj poziciji korištenjem meto-
do de crtaj.
{
bomba1.brisanje();
bomba2.brisanje();
bomba3.brisanje(); Ovdje se u svakom objektu klase
bomba poziva metoda za brisanje
bombe na staroj poziciji.

286 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Ovdje se u svakom objektu klase
bomba poziva metoda za crtanje bom-
be na novoj poziciji.

Uvod
Neprestanim brisanjem bombe na sta-
roj poziciji i crtanjem na novoj stvara
se iluzija kretanja, odnosno padanja

program
Naš prvi
bomba1.crtanje(); bombi.
bomba2.crtanje();
bomba3.crtanje();

Varijable
Naredba koja zaustavlja program odre-
đeno vrijeme. Služi za regulaciju brzine
igre.
delay(1);

Donošenje Grafika
Ovdje ispitujemo je li pritisnuta neka
if (kbhit()) tipka na tipkovnici.
{

odluke
Ako je pritisnuta neka tipka na tipkovni-
ci, ovdje se kod pritisnute tipke sprema
odgovor = getch(); u varijablu odgovor.

Petlje
Ovdje se poziva metoda pomak koja će
brod.pomak(odgovor);
obrisati objekt na staroj poziciji.
}

Ovdje se poziva metoda crtaj koja će Polja


brod.crtaj(); nacrtati objekt na novoj poziciji.
Obrada
teksta

Izvođenje igre prekida se pritiskom na


} tipku k.
Objekti

Ovdje se ispituje je li pritisnuta tipka k i,


ako je pritisnuta, izvođenje igre se zau-
while (odgovor != 'k'); stavlja.
Sažimanje Veliki pro-
grami

return 0; Nemojmo zaboraviti da sva četiri dijela


} programa moraju biti unijeta u našu pro-
gramsku okolinu da bismo mogli pokre-
koda

nuti program.

PRO - MIL 287


Veliki programi

Jednostavna igra u više datoteka

Pogledajmo sada kako ćemo prethodni program


raspodijeliti u više datoteka.

Otvorimo novi projekt na uobičajen način.

Prije toga otvorimo praznu mapu u koju ćemo


spremiti novi projekt.

Izaberemo Console Application.

288 PRO - MIL


PRO - MIL
U Parameters unesemo -lbgi -lgdi32
Izaberemo Postavke projekta.

Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program

289
C++ programiranje za apsolutne početnike
Veliki programi

1 - Desni klik na naziv pro-


jekta. U našem slučaju je
to Projekt1.

2 - Klik na Novo.

Otvorit će se nova datoteka


pod nazivom Neimenovano1.

290 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
1 - Desni klik na Neimenovano1.

Uvod
program
Naš prvi
Varijable
2 - Klik na Preimenuj datoteku.

Donošenje Grafika
odluke
Datoteku preimenujemo u bom- Petlje
Polja
ba.cpp i kliknemo na OK.
Obrada
teksta
Objekti
Sažimanje Veliki pro-
koda grami

PRO - MIL 291


Veliki programi

Na taj način formirali smo


datoteku bomba.cpp.

Na sličan način formirat ćemo datoteke:

- bomba.h
- objekt.cpp
- objekt.h

292 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
U datoteku bomba.cpp spremimo me-
tode klase bomba; metodu crtanje i

Uvod
metodu brisanje.

program
Naš prvi
Varijable
Donošenje Grafika
Ovaj dio isti je kao u programu koji

odluke
se nalazi u jednoj datoteci.

Ovom naredbom uključuje se Razlika je u tome što su dodane


biblioteka grafičkih naredbi. dvije include naredbe.

Petlje
Ovom naredbom uključuje se
datoteka bomba.h u kojoj se
#include <winbgim.h>
nalazi deklaracija klase bom-
Polja
#include "bomba.h"
ba.
void bomba :: crtanje()
Ovdje uključujmo datoteku u
{
kojoj se nalazi deklaracija kla-
Obrada

rectangle (x,y,(x+20),(y+5));
teksta

} se čije metode ovdje definira-


void bomba :: brisanje() mo.
{
setcolor(WHITE);
Objekti

rectangle (x,y,(x+20),(y+5)); Ovaj dio programa isti je kao i u


setcolor(BLACK); prethodnoj inačici.
y = y + 5;
Sažimanje Veliki pro-

if (y > 490)
grami

{
y = -((static_cast <float> (rand()) / RAND_MAX) * 480);
x = (static_cast <float> (rand()) / RAND_MAX) * 620;
}
}
koda

PRO - MIL 293


Veliki programi

U datoteku bomba.h spremimo


deklaraciju klase bomba.

Ovo je dio programa koji se u ovoj inačici razli-


kuje od inačice sa samo jednom datotekom.

Ako je naziv datoteke bomba.h, ovaj dio imat


će oblik:

#ifndef BOMBA_H
#define BOMBA_H
#ifndef BOMBA_H
#define BOMBA_H Kad bi se datoteka zvala npr. datoteka.h, ovaj
dio imao bi oblik:
class bomba
{ #ifndef DATOTEKA_H
private: #define DATOTEKA_H
int x, y;
public:
bomba()
{
x = (static_cast <float> (rand()) / RAND_MAX) * 620;
y = -((static_cast <float> (rand()) / RAND_MAX) * 480);
}
void crtanje();
void brisanje();
Naredbu #endif pisat ćemo na kraju
};
svake datoteke koja počinje nared-
bom #ifndef.
#endif

294 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
U datoteku objekt.cpp spremimo
metode klase bomba; metodu

Uvod
pomak i metodu crtaj.

program
Naš prvi
Varijable
Donošenje Grafika
Naredbama #include
uključimo grafičku biblio-
teku winbgim.h i dato-
teku objekt.h u kojoj se

odluke
nalazi deklaracija klase
#include <winbgim.h> objekt.
#include "objekt.h"
Kad bi se deklaracija klase

Petlje
void objekt :: pomak(char tipka)
{ nalazila u drugačije nazvanoj
datoteci, npr. datoteci na-
kretanje = tipka;
ziv.h, morali bismo napisati:
if (kretanje == 75)
{
Polja
setcolor (WHITE); #include "naziv.h"
rectangle(x, 432, x+60, 438);
setcolor (BLACK); Naziv datoteka možemo birati,
x = x - 5; a nastavak h je obvezan. Naš
Obrada
teksta

} program naredbom:
if (kretanje == 77)
{ #include <winbgim.h>
setcolor (WHITE);
Objekti

rectangle(x, 432, x+60, 438); uključuje samo grafičku biblio-


setcolor (BLACK); teku jer druge biblioteke ne
x = x + 5; koristimo. Da npr. nešto raču-
} namo morali bismo nared-
Sažimanje Veliki pro-

bom:
grami

}
void objekt :: crtaj()
{ #include <cmath>
rectangle(x, 432, x+60, 438);
} uključiti i matematičku biblio-
koda

teku.

PRO - MIL 295


Veliki programi

U datoteku objekt.h unosimo


deklaraciju klase objekt.

I ova deklaracija klase započinje naredbom


#ifndef i naredbom #define iza kojih se na-
lazi naziv datoteke u kojoj je deklaracija kla-
se.
#ifndef OBJEKT_H
#define OBJEKT_H Budući da se deklaracija klase objekt nalazi
u datoteci objekt.h iza naredbe #ifndef i
class objekt naredbe #define, piše se OBJEKT_H.
{
private: Kad bi se deklaracija klase nalazila npr. u
int x; datoteci klasa.h, ovaj dio imao bi oblik:
char kretanje;
public: #ifndef KLASA_H
objekt() #define KLASA_H
{
x = 290;
}
void pomak(char);
void crtaj();
};
Naredbu #endif pisat ćemo na kraju svake
#endif datoteke koja počinje naredbom #ifndef.

296 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
Glavni program se u ovoj #include <cstdlib>
inačici razlikuje od inačice #include <iostream>
koja se cijela nalazi u jednoj #include <winbgim.h>

Uvod
datoteci po tome što u ovoj #include <ctime>
inačici moramo osim:

#include <cstdlib>

program
Naš prvi
using namespace std;
#include <iostream>
#include <winbgim.h> #include "objekt.h"
#include "bomba.h"
dodati i naredbe:

Varijable
int main()
#include "objekt.h" {
#include "bomba.h" int gdriver = 9;
int gmode = 2;
kojima se u program uklju-

Donošenje Grafika
initgraph(&gdriver, &gmode, "");
čuju datoteke koje sadrže setbkcolor(WHITE);
deklaracije klase objekt i setcolor(BLACK);
klase bomba. cleardevice();
char odgovor = 'd';

odluke
srand(time(NULL));
Glavni program nalazi se bomba bomba1, bomba2, bomba3;
u datoteci mani.cpp. objekt brod;
brod.crtaj();

Petlje
do
{
bomba1.brisanje();
bomba2.brisanje();
bomba3.brisanje();
bomba1.crtanje(); Polja
bomba2.crtanje();
bomba3.crtanje();
Obrada

delay(2);
teksta

if (kbhit())
{
odgovor = getch();
brod.pomak(odgovor);
Objekti

}
brod.crtaj();
}
Sažimanje Veliki pro-

while (odgovor != 'k');


grami

return 0;
}
koda

PRO - MIL 297


Veliki programi

Rezultat izvođenja
našeg programa iz-
gledat će otprilike
ovako.

Ovo su “bombe” koje


se kreću odozgo pre-
ma dolje.

Ovo je “brod” koji


strelicom lijevo mo-
žemo pomicati u lije-
vu stranu i strelicom
desno u desnu stra-
nu.

Prilikom prvog prevođenja i pok-


retanja ovog programa program-
ska okolina će nas upozoriti da
je došlo do pretvaranja varijable
float tipa u varijablu int tipa.

Upozorenje ćemo zanemariti,


budući da to nije greška, već
smo to učinili namjerno prilikom
generiranja slučajnog broja.

Prilikom sljedećeg prevođenja i


pokretanja programa ovo upozo-
renje se više neće pojavljivati.

298 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
main.cpp
U ovom shematskom prika-
using namespace std; zu našeg programa može-

Uvod
mo vidjeti logiku po kojoj se
#include "objekt.h" program podijeljen u više
datoteka povezuje u jednu

program
Naš prvi
#include "bomba.h" cjelinu.

int main() Koristeći ovu logiku, može-


{ mo daleko veći program
GLAVNI PROGRAM; razdijeliti na veći broj dato-

Varijable
} teka.

Donošenje Grafika
objekt.h bomba.h

#ifndef OBJEKT_H #ifndef BOMBA_H

odluke
#define OBJEKT_H #define BOMBA_H

class objekt class bomba


{ {

Petlje
DEKLARACIJA KLASE; DEKLARACIJA KLASE;

}; };

Polja
#endif #endif
Obrada
teksta

objekt.cpp bomba.cpp

#include "objekt.h" #include "bomba.h"


Objekti

void objekt :: pomak(char tipka) void bomba :: crtanje()


{ {
SADRŽAJ OBJEKTA; SADRŽAJ OBJEKTA;
Sažimanje Veliki pro-

} }
grami

void objekt :: crtaj() void bomba :: brisanje()


{ {
SADRŽAJ OBJEKTA; SADRŽAJ OBJEKTA;
koda

} }

PRO - MIL 299


Sažimanje koda

300 PRO - MIL


PRO - MIL
Sažimanje koda

Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program

301
C++ programiranje za apsolutne početnike
Sažimanje koda

Primjeri sažetog pisanja koda

Do sada smo, osim u nekoliko izuzetaka, programe pisali na “školski” način


trudeći se da naredbe prije svega budu što razumljivije.

Mnoge naredbe mogu se, osim na način koji smo do sada vidjeli, pisati na na-
čin koji skraćuje pisanje, ponekad čak ubrzava rad programa, ali koji je počet-
nicima možda nešto manje razumljiv.

Došavši do kraja knjige, više nismo početnici i vrijeme je da se upoznamo s


nekim načinima skraćenog pisanja programa.

Obje inačice progra-


ma radit će potpuno
isti pisao, zbrojit će
dva broja.

#include <cstdlib>
#include <iostream>
U slučaju da formi-
#include <cstdlib> ramo više varijabli using namespace std;
#include <iostream> istog tipa, ne mo-
ramo svaku staviti int main()
using namespace std; u zasebni red, ne- {
go ih možemo for- int a, b, c;
int main() mirati u jednom cin >> a;
{ redu. cin >> b;
int a; c = a + b;
int b; Dakle umjesto: cout << c << endl;
int c; system("PAUSE");
cin >> a; int a; return 0;
cin >> b; int b; }
c = a + b; int c;
cout << c << endl;
system("PAUSE"); možemo napisati:
return 0;
} int a, b, c;

302 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
#include <cstdlib> Umjesto:
#include <iostream> #include <cstdlib>
int a; #include <iostream>

Uvod
using namespace std; a = 12;
using namespace std;
int main() možemo napisa-
ti: int main()

program
Naš prvi
{
int a; {
a = 12; int a = 12; int a = 12;
cout << a << endl; cout << a << endl;
system("PAUSE"); system("PAUSE");

Varijable
return 0; return 0;
} }

Donošenje Grafika
U if naredbi mogu se
#include <cstdlib>
izbaciti vitičaste zagra-
#include <iostream>
de, ako se unutar viti-
častih zagrada nalazi

odluke
using namespace std;
jedan red.
int main()
Ako se nalazi više re-
{
dova, uporaba vitičas-
int a;

Petlje
tih zagrada je obvezna.
cin >> a;
if (a > 12)
{
cout << "Broj je veci od 12." << endl;

Polja
}
#include <cstdlib>
else
#include <iostream>
{
cout << "Broj nije veci od 12." << endl;
Obrada

using namespace std;


teksta

}
cout << a << endl;
int main()
system("PAUSE");
{
return 0;
int a;
Objekti

}
cin >> a;
if (a > 12)
cout << "Broj je veci od 12." << endl;
else
Sažimanje Veliki pro-
grami

cout << "Broj nije veci od 12." << endl;


cout << a << endl; Ova inačica prog-
system("PAUSE"); rama radit će jed-
return 0; nako kao i gornja
} inačica s vitičastim
koda

zagradama.

PRO - MIL 303


Sažimanje koda

Ovo je program za vađe-


#include <cstdlib> nje kvadratnog korijena.
#include <iostream> Ako je broj pozitivan, izra-
#include <cmath> čunat će kvadratni kori-
jen, a ako je negativan,
using namespace std; ispisat će obavijest da je
broj negativan.
int main()
{ U ovom dijelu programa
float a, b; vitičaste zagrade može-
cin >> a; mo izbaciti jer se unutar
if (a < 0) vitičastih zagrada nalazi
{ samo jedan red.
cout << "Broj je negativan." << endl;
} U ovom dijelu programa
else vitičaste zagrade ne mo-
{ žemo izbaciti jer se unu-
b = sqrt(a); tar vitičastih zagrada na-
cout << b << endl; lazi više od jednog reda.
}
system("PAUSE");
return 0;
}

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

using namespace std;

int main()
{
float a, b;
cin >> a;
if (a < 0)
cout << "Broj je negativan." << endl;
else
Ako bismo ovom djelu vitičaste
b = sqrt(a);
zagrade izbacili, ne bismo dobili
cout << b << endl;
obavijest o greški, ali program
system("PAUSE");
ne bi ispravno radio, ako bismo
return 0;
pokušali izračunati kvadratni
}
korijen iz negativnog broja.

304 PRO - MIL


C++ programiranje za apsolutne početnike

Sadržaj
I u petljama se može izostaviti vitičasta zag-
#include <cstdlib>
#include <iostream> rada ako se unutar vitičaste zagrade nalazi
samo jedan red.

Uvod
using namespace std;

int main() #include <cstdlib>

program
Naš prvi
{ #include <iostream>
int x;
for (x=10; x<17; x=x+1) using namespace std;
{
cout << x << endl;

Varijable
int main()
} {
system("PAUSE"); int x;
return 0; for (x=10; x<17; x=x+1)
} cout << x << endl;

Donošenje Grafika
U ovoj inačici programa system("PAUSE");
unutar for petlje ne koriste return 0;
se vitičaste zagrade. }

odluke
#include <cstdlib> Umjesto x=x+1 možemo
#include <iostream> napisati:

Petlje
using namespace std; x++
int main() Pokrenemo li bilo koju od
{ ove tri inačice programa,
Polja
int x; dobit ćemo jednak rezultat.
for (x=10; x<17; x++)
cout << x << endl;
system("PAUSE");
Obrada
teksta

return 0;
}
Objekti

Na sličan način možemo


umjesto:
Sažimanje Veliki pro-

x = x - 1;
grami

napisati:

x-- (Dva minusa, bez raz-


koda

maka.)

PRO - MIL 305


Sažimanje koda

Umjesto x=x+5; možemo napisati x+=5;


#include <cstdlib>
#include <iostream>

using namespace std;


#include <cstdlib>
#include <iostream> int main()
{
using namespace std;
int x;
int main() for (x=5; x<51; x+=5)
{ cout << x << endl;
int x; system("PAUSE");
for (x=5; x<51; x=x+5) return 0;
cout << x << endl; }
system("PAUSE");
return 0;
} Umjesto x=x-5 možemo napisati x-=5.

Umjesto #include <cstdlib>


#include <iostream>
if (x != 0)
using namespace std;
možemo napisati
int main()
if (x) {
int x;
cin >> x;
if (x)
#include <cstdlib> cout << "Broje nije nula." << endl;
#include <iostream> else
cout << "Broje je nula." << endl;
using namespace std; system("PAUSE");
return 0;
int main() }
{
int x;
cin >> x;
if (x != 0)
cout << "Broje nije nula." << endl;
else Korisnost nekih od navedenih kra-
cout << "Broje je nula." << endl; ćenja prilično je dvojbena jer u
system("PAUSE"); nekim slučajevima zbog uštede
return 0; jednog znaka narušavamo čitlji-
} vost programa.

306 PRO - MIL

You might also like