You are on page 1of 306

C++ programiranje za apsolutne poetnike

programiranje
za apsolutne poetnike

PRO - MIL

Naslov knjige: Autor: Naklada:

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

Urednik: Lektura: Korektura: Recenzija: Naslovnica: Tiskara: ISBN: Copyright:

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

PRO - MIL

PRO - MIL

Sadraj

C++ programiranje za apsolutne poetnike

Saimanje Veliki programi koda Obrada teksta

Objekti

Polja

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

Sadraj

Sadraj

Uvod
to je to program, a to programiranje? Je li teko nauiti programirati? Zato ba C++? Zato ba Dev-C++? Kako se ui programiranje? Kako dalje nakon ove knjige? Instaliranje Dev-C++ programskog okruenja Formiranje radne mape Instalacija grafike

7 8 8 9 10 10 10 12 20 22 25 26 32 34 38 40 42 43 47 49 53 54 58
PRO - MIL

Na prvi program
Formiranje projekta Mogui problem Pokretanje programa Greka u programu Analiza programa Gruba skica programa Varijacije programa Distribucija programa Uitavanje spremljenog projekta

Varijable
Osnovne raunske operacije Varijable

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Analiza programa Varijacije programa Problem dijeljenja Uljepavanje programa Nekoliko primjera programa

60 63 67 69 71 75 76 77 78 83 86 88 95 97 103 104 108 126 129 130 168 170 179

Grafika
Podeavanje programskog okruenja Na prvi grafiki program Analiza programa Varijacije programa Crtanje pravokutnika Crtanje crte Crtanje toke Ispis teksta

Donoenje odluke
Funkcije Donoenje odluke Switch naredba

Petlje
For petlja Do while petlja Generator sluajnih brojeva Koritenje sluajnih brojeva

PRO - MIL

Sadraj

Polja
Jednodimenzionalna polja Spremanje brojeva u datoteku Dvodimenzionalna polja

183 184 204 212 215 216 223 234 246 247 248 251 252 262 265 276 278 280 283 284 288 301 302
PRO - MIL

Obrada teksta
String objekti Polje char tipa Obrada string objekata Premjetanje teksta iz char polja u string Premjetanje teksta iz stringa u char polje Spremanje teksta u datoteku

Objekti
Jednostavan primjer klase i objekata Sloeniji primjeri klasa i objekata Komunikacija s metodama Razdvajanje deklaracije i definicije Uporaba konstruktora Nasljeivanje

Veliki program
Jednostavna igra u jednoj datoteci Jednostavna igra u vie datoteka

Saimanje koda
Primjeri saetog pisanja koda

PRO - MIL

Uvod

C++ programiranje za apsolutne poetnike

Saimanje Veliki programi koda Obrada teksta

Objekti

Polja

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

Sadraj

Uvod

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

Je li teko nauiti programirati?


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

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Zbog svega toga trebat e nam dvije do tri godine svakodnevnog rada da bismo koliko - toliko nauili programirati. Pod pojmom nauiti programirati ne mislim na dobivanje dvojke u koli ili pisanje programa za zbrajanje dva broja. Pod pojmom nauiti programirati mislim na to da smo u stanju napisati program koji zadovoljava neije potrebe i taj netko nam je spreman za to platiti. Nema puno smisla rei da znam programirati, ali ne znam napraviti nita za to bi netko bio spreman platiti. Zbog svega toga vano je da smo radini i strpljivi. Nemojmo iz injenice da prva tri mjeseca neemo puno toga razumjeti, zakljuiti da nismo nadareni za programiranje i odustati. Nakon tri mjeseca neemo puno toga razumjeti, ali nakon tri godine sasvim sigurno hoemo. Ovim uvodom vas nisam htio preplaiti, ve sam vas htio ohrabriti da ustrajete u uenju programiranja, iako e vam se na poetku moda initi da nita ne razumijete i da sporo napredujete.

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

PRO - MIL

Uvod

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

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

Kako dalje nakon ove knjige?


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

10

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

ma, prouite upute za njegovo koritenje. Naravno, te upute ne moraju biti u obliku tiskane knjige. Najee e biti u obliku teksta na raunalu. - Programi rade unutar nekog operacijskog sustava, najee Windowsa ili Linuxa. Da bi mogli pisati programe za pojedine operacijske sustave, moramo razumjeti kako ti sustavi funkcioniraju pa emo morati nabaviti knjigu koja govori o strukturi operacijskog sustava za koji elimo pisati programe. - Dobro je nabaviti i knjige koje govore openito o programiranju i o nainima rjeavanja pojedinih programskih problema. elimo li napisati program koji sortira odreenu grupu podataka na odreeni nain, ne moramo ga izmiljati. Drugi ljudi prije nas susreli su se s problemom sortiranja i o tom problemu napisali knjige u kojima iznose optimalna rjeenja za pojedine probleme. - S vremenom emo se specijalizirati za pojedine teme, npr. za pisanje igara, za grafiku, za obradu zvuka ili neto slino, pa je dobro nabaviti knjigu koja govori o toj problematici. Dakle, kad se detaljno upoznamo s nekim programskim jezikom, kad upoznamo odreeni operacijski sustav, kad se upoznamo s programerskim tehnikama i odreenim programerskim podrujem, tek emo onda biti sposobni pisati kvalitetne komercijalne programe, odnosno programirati za novce. Zbog toga sam na poetku rekao da nam treba dvije do tri godine da nauimo programirati. U ovom trenutku to vam moda zvui obeshrabrujue, ali ako sve to savladate, stei ete vjetinu kojom ne vlada ba svatko i koja ima svoju trinu cijenu.

PRO - MIL

11

Uvod

Instaliranje Dev-C++ programskog okruenja


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

Nakon klika na Program zapoet e instaliranje Dev-C++ programa. Program e nas prvo upozoriti da ne smijemo instalirati program, ako je program ve instaliran. Ako zbog nekog razloga instalaciju elimo ponoviti, moramo deinstalirati stari program, a tek nakon toga moemo ga ponovo instalirati.

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

12

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj 2 - Klikom na OK nastavljamo instalaciju. Klikom na Prihvaam izjavljujemo sa se slaemo s uvjetima koritenja programa.

PRO - MIL

Saimanje Veliki programi koda

Objekti

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

1 - Izaberemo jezik.

13

Uvod

Ovdje bismo mogli izabrati komponente koje emo instalirati. Mi neemo nita mijenjati. Samo kliknemo na Dalje.

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

2 - Instaliranje nastavljamo klikom na Instaliraj.

14

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Kliknemo na Da. Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Nakon klika na Instaliraj zapoet e instaliranje programa.

PRO - MIL

15

Uvod

Kliknemo na Kraj.

Kliknemo na U redu.

16

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj 3 - Klik na Next. Klik na Next.

PRO - MIL

Saimanje Veliki programi koda

Objekti

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

Varijable

2 - Izaberemo Use XP Theme.

Na prvi program

Uvod

1 - Izaberemo hrvatski jezik.

17

Uvod

Klik na Next.

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

18

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Na kraju klik na OK.

PRO - MIL

Saimanje Veliki programi koda

Objekti

Obrada teksta

Polja

Klikom ovdje ugasimo ovaj prozor. Time je instaliranje Dev-C++ programa zavreno.

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

19

Uvod

Formiranje radne mape


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

Klik na disk na kojem elimo otvoriti novu mapu, u mojem sluaju na C: disk.

Kliknemo na Datoteka, zatim na Novo i konano na Mapa.

20

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Unesemo naziv mape, u mojem sluaju Radni. Ako je sve u redu, na C: disku trebala bi biti formirana mapa pod nazivom Radni.

PRO - MIL

Saimanje Veliki programi koda

Objekti

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

21

Uvod

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

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

Na CD-u priloenom uz knjigu u mapi Grafika nalazi se mapa include i mapa lib.

22

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Sadraj mape include na CD-u kopiramo u mapu include na C: disku. Sadraj mape lib na CD-u kopiramo u mapu lib na C: disku. Bude li potekoa s instaliranjem programa, pogledajmo filmove na kojima moemo vidjeti cijeli tijek instalacije, a nalaze se na priloenom CD-u.

PRO - MIL

Saimanje Veliki programi koda

Objekti

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

23

Na prvi program

24

PRO - MIL

PRO - MIL
Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Na prvi program

C++ programiranje za apsolutne poetnike

Saimanje Veliki programi koda

Objekti

Sadraj

25

Na prvi program

Formiranje projekta

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

Kliknemo ovdje da bismo ugasili taj prozor.

1 - Kliknemo na Datoteka.

Program je dio vee cjeline koja se naziva projekt. Zbog toga emo pisanje programa zapoeti formiranjem novog projekta. Pogledajmo kako emo formirati novi projekt.

3 - Izaberemo Projekt.

2 - Izaberemo Nova.

26

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti 5 - Biranje zavravamo klikom na OK. 4 - Ovdje odredimo da e na projekt sadravati C++ program. Obrada teksta Polja 3 - Ovdje unosimo naziv projekta. Na poetku moemo ostaviti naziv koje je predloilo raunalo, a to je Projekt1. Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Otvorit e se novi prozor koji se naziva Novi projekt i u kojem emo izabrati tip projekta. Najvaniji tipovi su Windows Application i Console Application. U emu je razlika? Windows Application izvodi se unutar klasinog windows prozora. Prednost ovog naina pisanja jest to emo dobiti program koji e izgledati kao svaki drugi windows program. Nedostatak mu je to je ovaj nain pisanja programa neto sloeniji, pa je manje prikladan za poetnike. Console Application ne izvodi se unutar klasinog windows prozora, ve unutar pojednostavljene verzije s crnom pozadinom. Nedostatak ovog naina pisanja programa jest to je program veoma ruan i to taj oblik prozora ima manje mogunosti od klasinog prozora. Jedina prednost mu je to je jednostavan, pa je prikladniji za poetnike.

1 - Izaberemo Basic.

2 - Zatim Console Application.

PRO - MIL

27

Na prvi program

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

Kliknemo ovdje.

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

2 - Kliknemo na Spremi.

28

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja 1 - Ovdje bi se trebao nalaziti naziv prostora u koji emo spremiti na C++ projekt. 2 - Klik na Spremi. Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod 2 - Sadraj ovog prozora na vaem raunalu bit e sasvim sigurno drugaiji nego na mojem, budui da njegov sadraj ovisi o programima koji su instalirani u raunalu i nainu koritenja raunala. Nemojte brinuti zbog toga. 3 - Pronai emo mapu Radni i kliknuti na nju. (Ako mapu Radni niste do sada formirali, formirajte je prema uputama danim u uvodnom poglavlju. 4 - Klik na Otvori.

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

PRO - MIL

29

Na prvi program

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

U programu bismo se lake snalazili kad bi se ispred svakog reda u programu nalazio broj reda. Pogledajmo kako emo ukljuiti tu mogunost.

1 - Kliknemo na Alati.

2 - Kliknemo na Izgled editora.

30

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Vidimo da se sada ispred svakog reda u programu automatski ispisuje broj reda. Polja Petlje Donoenje Grafika odluke Varijable 3 - Kliknemo na OK. Na prvi program Uvod 2 - Kliknemo na kvadrati ispred opcije Brojevi linije.

1 - Kliknemo na karticu Prikaz.

PRO - MIL

31

Na prvi program

Mogui problem
1 - Ovo je prije spremljeni projekt.

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

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

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

2 - Klik na Yes i novi projekt bit e formiran, a stari obrisan.

32

PRO - MIL

C++ programiranje za apsolutne poetnike

Unos prvog programa

#include <cstdlib> #include <iostream> using namespace std; int main() { cout << "Ovo je moj tekst." << endl; system("PAUSE"); return 0; }

Na poetku e nam se esto dogaati da umjesto toke sa zarezom ovdje unesemo dvotoje to e uzrokovati greku u programu.

Ovdje se nalazi broj nula, a ne veliko slovo o.

PRO - MIL

Saimanje Veliki programi koda

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

Objekti

Lijevu vitiastu zagradu dobit emo tako da pritisnemo tipku AltGr i ne putajui tu tipku, pritisnemo tipku b.

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

To emo uiniti paljivo jer i najmanja greka moe prouzrokovati greku u programu.

Varijable

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

Na prvi program

Uvod

Sadraj

33

Na prvi program

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

Ovo je prevedeno kao Kompajlaj. Izaberemo li ovu opciju, na program e se prevesti u oblik razumljiv raunalu, ali se nee pokrenuti. elite li tako prevedeni program pokrenuti, morate izabrati opciju Pokreni.

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

Ovo je prevedeno kao Kompajlaj i pokreni. Ve iz naziva vidimo da je ovdje prevoenje i pokretanje objedinjeno. Izaberemo li ovu opciju, na program e se prevesti i odmah pokrenuti. Prvi put emo odabrati ovu opciju.

34

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Ovdje se nalazi naziv naeg programa, main.cpp. Iako bismo taj naziv mogli promijeniti, na poetku je najbolje da zadrimo naziv koji je predloilo raunalo. Obrada teksta Polja Petlje Donoenje Grafika odluke Mjesto na koje e raunalo spremiti na program. 3 - Prevoenje i pokretanje naeg programa zapoet emo klikom na Spremi. Varijable Na prvi program Uvod 2 - Otvara se prozor u kojem nas raunalo pita kamo i pod kojim nazivom emo spremiti na program. Raunalo e predloiti da to bude ono isto mjesto u koje smo spremili projekt to emo mi prihvatiti.

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

PRO - MIL

35

Na prvi program

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

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

36

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Ako ne elimo zadrati stari program, pa smo u prethodnom koraku kliknuli na Spremi bez da smo mijenjali novom programu naziv, raunalo e nas jo jednom upozoriti da e stari program biti obrisan. 1 - Kliknemo na Yes. Stari program e se obrisati, novi e se spremiti, a zatim e zapoeti prevoenje i pokretanje novog programa. Tijek prevoenja i pokretanja programa moemo vidjeti na prethodnoj stranici. Donoenje Grafika odluke Varijable Na prvi program Uvod

Mogui problem

Tijekom rada moe nam se dogoditi da nam raunalo predloi neki naziv programa, iako ve u tom prostoru postoji program s istim nazivom. U tom sluaju, ako elimo zadrati stari program, novom emo dati neki drugi naziv npr. main2.cpp i kliknut emo na Spremi. Ako stari program ne elimo sauvati, ostavit emo novom programu naziv main.cpp i kliknut emo na Spremi.

main.cpp

PRO - MIL

37

Na prvi program

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

2 - Kliknemo na Kompajlaj i pokreni.

1 - Umjesto toke sa zarezom unesemo dvotoje.

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

1 - Kad raunalo naie na greku, prevoenje programa se zaustavlja i raunalo oznaava red u kojem je dolo do greke.

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

38

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj 1 - Ovdje je dolo do greke jer nismo unijeli toku sa zarezom. Kad takav program pokuamo prevesti i pokrenuti, kao pogrean bit e oznaen deveti red, jer je u njemu greka primijeena, iako se greka zapravo nalazi u osmom redu. Zato imajmo na umu da je oznaavanje redova u kojim se pojavila greka samo gruba orijentacija, a ne precizni pokazatelj.

PRO - MIL

Saimanje Veliki programi koda

1 - Program pokreemo klikom na Kompajlaj i pokreni.

Objekti

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

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

Uvod

39

Na prvi program

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

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

using namespace std;

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

int main()

Naredba int main() oznaava da na ovom mjestu poinje sam program. Ono to smo pisali prije te naredbe ne smatra se programom, nego uputama prevoditelju kako e prevesti program koji slijedi, npr. koje biblioteke naredbi e koristiti prilikom prevoenja.

40

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Ovom naredbom nareujemo raunalu da stane i eka tako dugo dok ne pritisnemo neku tipku. system("PAUSE"); Da bismo bolje razumjeli ovu naredbu, obrisat emo ovaj red u programu, a zatim emo prevesti i pokrenuti program klikom na Kompajlaj i pokreni. return 0; Ova naredba oznauje kraj programa. Nakon te naredbe program se gasi. } Ova vitiasta zagrada oznaava kraj prostora unutar kojeg se nalazi program. Donoenje Grafika odluke Varijable Na prvi program Ovaj red sadri dvije naredbe. Prvom naredbom nareujemo raunalu da tekst koji se nalazi unutar navodnika ispie na zaslonu raunala. Drugom naredbom nareujemo raunalu da prijee u novi red. cout << "Ovo je moj tekst." << endl; Uvod

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

PRO - MIL

41

Na prvi program

Gruba skica programa


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

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

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

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

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

42

PRO - MIL

C++ programiranje za apsolutne poetnike

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

#include <cstdlib> #include <iostream> using namespace std; int main() { cout << "Ovo je moj tekst." << endl; system("PAUSE"); return 0; }

Kao to smo ve vidjeli, pokrenemo li ovaj program, na zaslonu raunala dobit emo ovakav rezultat.

#include <cstdlib> #include <iostream> using namespace std; int main() { cout << "OVDJE STAVLJAMO TEKST." << endl; system("PAUSE"); return 0; }

Promijenimo li ovaj red dobit emo ovakav rezultat. Oigledno je da je funkcija ovog reda u programu ispis teksta koji se nalazi unutar navodnika i da taj tekst moemo po volji mijenjati.

PRO - MIL

Saimanje Veliki programi koda

Objekti

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

Sadraj

43

Na prvi program

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

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

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

Navodnik koji smo dodali.

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

44

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj #include <cstdlib> #include <iostream> using namespace std; int main() { cout << "Ovo je moj tekst." << endl ; system("PAUSE"); return 0; } #include <cstdlib> #include <iostream> using namespace std; int main() { cout << "Ovo je moj tekst."; system("PAUSE"); return 0; } Da bismo bolje razumjeli njegovu funkciju, obriemo ovaj dio programa. Nova inaica programa trebala bi ovako izgledati. Klikom na Kompajlaj i pokreni pokrenemo program. Ovako bi trebao izgledati rezultat izvoenja ove inaice programa. Program radi i bez obrisanog dijela, ali nakon ispisa naeg teksta raunalo nije skoilo u novi red, nego je sljedei tekst nastavilo pisati u istom redu. Oigledno da je << endl naredba za skok u novi red.

PRO - MIL

Saimanje Veliki programi koda

Objekti

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

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

Varijable

Na prvi program

Uvod

45

Na prvi program

#include <cstdlib> #include <iostream> using namespace std; int main() { cout << "Ovo je moj tekst." << endl; cout << endl; system("PAUSE"); return 0; }

Vratimo obrisanu << endl naredbu.

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

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

Pokrenemo li takav program vidimo da se je razmak izmeu dva reda u programu poveao.

46

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Iako nevelik, ovo je JAKO vaan dio programa. Oznaava kraj naredbe ili grupe naredbi koje ine cjelinu. Na prvi program Uvod

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

Vie naredbi << endl moemo napisati i unutar jednog reda. Pokrenemo li ovu inaicu programa, uvjerit emo se da daje isti rezultat kao i prethodna.

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

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

Propisana rije kojom obavjetavamo raunalo da emo sadraj koji slijedi poslati na neku izlaznu jedinicu, u naem sluaju na zaslon raunala. Uoimo da naredbu << endl ne moemo koristiti ako prije nismo stavili naredbu cout.

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

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

Tekst unutar navodnika ispisat e se na zaslon raunala. Uoimo da ovaj dio ini cjelinu sa << oznakama i da bez tih oznaka nee funkcionirati.

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

PRO - MIL

47

Na prvi program

Distribucija programa

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

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

48

PRO - MIL

C++ programiranje za apsolutne poetnike

Uitavanje spremljenog projekta

Na projekt e se spremiti prilikom prevoenja programa. Ako projekt elimo spremiti bez da smo program preveli, kliknemo na ikonu Spremi.

Klikom na Yes spremit emo na program.

Spremljeni projekt moemo uitati u nae programsko okruenje na vie naina. Na najjednostavniji nain moemo uitati nekoliko prethodnih spremanja.

2 - Zatim na Ponovno otvori.

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

PRO - MIL

Saimanje Veliki programi koda

1 - Kliknemo na Datoteka.

Objekti

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

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

Varijable

Na prvi program

Uvod

Sadraj

49

Na prvi program

elimo li u nae programsko okruenje uitati program koji ne moemo uitati na nain koji smo vidjeli na prethodnoj stranici, uitat emo ga na neto sloeniji nain.

2 - Zatim na Otvori datoteku ili projekt.

1 - Kliknemo na Datoteka.

1 - Otvorit e se dodatni prozor u kojem emo izabrati mapu u kojoj se nalazi projekt i naziv projekta.

2 - Ovdje biramo mapu u kojoj se nalazi projekt.

3 - Kliknemo na projekt koji elimo uitati. Prepoznajemo ga po nastavku dev.

4 - Kliknemo na Otvori.

50

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Da bismo na program vidjeli, ovdje kliknemo na naziv programa, u naem sluaju to je main.cpp.

PRO - MIL

Saimanje Veliki programi koda

Objekti

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

Varijable

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

Na prvi program

Uvod

51

Varijable

52

PRO - MIL

PRO - MIL
Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Varijable

C++ programiranje za apsolutne poetnike

Saimanje Veliki programi koda

Objekti

Sadraj

53

Varijable

Osnovne raunske operacije


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

Sada emo raunalo iskoristiti za raunanje. Unesimo ovaj program u C++ programsko okruenje. Klikom na Kompajlaj i pokreni ga pokrenemo. Dobit emo ovakav rezultat.

Ovaj program zbraja broj 2 i broj 3, a rezultat koji je u ovom sluaju broj 5 ispisuje na zaslon. Pogledajmo vog programa. sada #include <cstdlib> #include <iostream> using namespace std; int main() { cout << 2+3; cout << endl; system("PAUSE"); return 0; Poetak i kraj programa isti su kao i do sada, dok je srednji dio promijenjen. } U ovom redu nareujemo raunalu da zbroj broja 2 i broja 3, a to je broj 5, ispie na zaslon raunala. U ovom redu nareujemo raunalo da skoi u novi red.

strukturu naeg no-

54

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Pokuajmo neku drugu raunsku operaciju, npr. oduzimanje. U ovom programu oduzet emo od broja 12 broj 8. Pokrenimo program i pogledajmo na rezultat. #include <cstdlib> #include <iostream> using namespace std; int main() { cout << 12-8; cout << endl; system("PAUSE"); return 0; } Varijable Na prvi program Uvod

Pokuajmo zbrojiti neka druga dva broja, npr. 8 i 4. Pokrenimo program i vidjet emo da e raunalo zbrojiti ta dva broja.

#include <cstdlib> #include <iostream> using namespace std; int main() { cout << 8+4; cout << endl; system("PAUSE"); return 0; }

PRO - MIL

55

Varijable

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

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

Oznaka za dijeljenje takoer ima drugaiji oblik od onog na koji smo navikli u matematici. Kao oznaka dijeljenje koristi se kosa crta koja se nalazi iznad broja 8 s desne strane, na brojanom dijelu tipkovnice. 12 podijeljeno sa 4 napisat emo kao 12/4. Pokrenimo program i pogledamo rezultat.

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

Na prvi pogled uinit e nam se da je program za dijeljenje ispravan.

56

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Rezultat je pogrean. Mogli bismo zakljuiti da e dijeljenje biti ispravno, ako je rezultat cjelobrojni broj. Ako je rezultat decimalni broj, dolazi do greke. Kako rijeiti taj problem, vidjet emo neto kasnije u ovom poglavlju. Polja Petlje Donoenje Grafika odluke Varijable Pokuajmo ovdje staviti 15/3 i pokrenimo program. Rezultat je ispravan. Na prvi program Uvod

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

Pokuajmo ovdje umjesto 12/4 staviti 13/4. Pokrenimo program i pogledajmo rezultat. Rezultat je oigledno pogrean.

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

Umjesto 15/3 stavimo 17/3 i pokrenimo program.

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

PRO - MIL

57

Varijable

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

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

Nakon pokretanja programa ugledat emo zbunjujui crni ekran bez sadraja.

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

58

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Pokrenimo bez ikakvih izmjena isti program jo jednom, ali sada unesimo neke druge brojeve, npr. broj 12 i broj 14. Na slian nain kao i u prethodnom primjeru, dakle tako da nakon svakog unosa broja pritisnemo tipku Enter na tipkovnici, unesimo brojeve 12 i 14. Kao rezultat dobit emo njihov zbroj, a to je broj 26. Vidimo da smo uspjeli postii ono to smo eljeli. Pomou jednog programa moemo zbrajati razliite brojeve, bez da program moramo mijenjati. Donoenje Grafika odluke Varijable Na prvi program Nakon pritiska na Enter tipku na tipkovnici, a zaslonu raunala ugledat em o r e zu lt at zbrajanja broja 3 i broja 5, a to je broj 8. Uvod

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

PRO - MIL

59

Varijable

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

Naredbom int formirat emo u raunalu prostor poput posude. U taj prostor moemo spremati brojeve. Formirat emo tri prostora, prostor a, prostor b i prostor c.

int a; int b; int c;

cin >> a; cin >> b;

Naredbom cin u prostor a i prostor b spremit emo broj koji smo unijeli preko tipkovnice, npr. broj 3 i broj 5.

3 a 5 b

c = a + b;

Zbrojimo sadraj prostora a i prostora b, a rezultat spremimo u prostor c.

8 cout << c; c =

3 a +

5 b

cout << endl;

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

c 8

system("PAUSE"); return 0; }

Skok u novi red.

Kraj programa.

60

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Naredba za unos. Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Ovom naredbom formiramo prostor u raunalu u koji emo spremati brojeve. Na poetku taj prostor moemo zamisliti kao posudice u koje moemo staviti brojeve, iako su to zapravo rezervirana mjesta u memoriji naeg raunala.

Naredba za formiranje prostora.

int a ;

Oznaka ; obvezno dolazi na kraju naredbe.

int b; int c;
Ovim naredbama se formiraju jo dva prostora, prostor b i prostor c.

Ovdje se nalazi naziv prostora. Zato svaki prostor ima naziv??? Zato to u jednom programu moemo imati vie takvih prostora, pa nam naziv prostora omoguuje da ih razlikujemo.

Nakon formiranja prostor za spremanje brojeva je prazan i bio bi nam sasvim beskoristan kad u njega ne bismo mogli staviti neki broj. U taj prostor broj moemo staviti na vie naina, a jedan od njih je da ga unesemo pomou tipkovnice. Za to emo koristiti naredbu cin.

cin >> a ;

Oznaka ; obvezno dolazi na kraju naredbe.

Ova oznaka stavlja se ispred naziva prostora u koji emo unijeti broj.

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

PRO - MIL

61

Varijable

cin >> b ;

Naredba slina prethodnoj, samo to e se u ovom sluaju unijeti broj spremiti u prostor b.

Osim to u te prostore moemo spremati brojeve, izmeu njih moemo izvoditi raunske operacije na isti nain kao to smo ih izvodili izmeu brojeva. U naem sluaju zbrojit emo sadraj prostora a i sadraj prostora b, a rezultat tog zbrajanja spremit emo u prostor c.

Prostor c u koji emo spremiti rezultat.

c = a + b ;

Oznaka ; obvezno dolazi na kraju naredbe.

Znak jednakosti ima istu funkciju kao i u matematici.

Oznaka raunske operacije izmeu prostora.

Naziv prvog prostora.

Naziv drugog prostora.

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

Naredba za ispis.

cout << c ;

Oznaka ; obavezno dolazi na kraju naredbe.

Oznaka ispred sadraja koji ispisujemo.

Prostor c u koji emo spremiti rezultat.

62

PRO - MIL

C++ programiranje za apsolutne poetnike

Varijacije programa
Da bismo bolje razumjeli izradu programa koji koriste prostor za spremanje brojeva, napravit emo niz izmjena na naem programu i opaat emo kako te izmijene utjeu na rad program.

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

Prevedimo i pokrenimo ovaj program i vidjet emo da radi jednako kao i prethodni program.

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

PRO - MIL

Saimanje Veliki programi koda

Objekti

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

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

Varijable

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

Na prvi program

Uvod

Sadraj

63

Varijable

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

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

64

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Ovaj tip greke veoma je teko pronai u sloenim programima, budui da raunalo nee dojaviti greku i poziciju greke prilikom prevoenja. To se dogaa zato to je program formalno ispravno napisan; cout << "c"; je ispravna naredba, ali ne radi ono to smo htjeli. Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

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

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

U ovom programu ovu naredbu nismo napisali u ispravnom obliku kao cout << c; nego u obliku cout << "c"; dakle sadraj koji se ispisuje stavili smo u navodnike kao to smo to naviknuli prilikom ispisa teksta koritenjem cout naredbe. Pokrenemo li ovaj program, on e se izvriti i raunalo nam nee dojaviti nikakvu greku, ali kao rezultat neemo dobiti ono to smo oekivali. Vidimo da smo u prostor a unijeli 8, u prostor b unijeli smo 4, ali kao rezultat nismo dobili broj 12, nego slovo c. Zato? cout << c; - ispisuje sadraj prostora c. cout << "c"; - ispisuje slovo c.

PRO - MIL

65

Varijable

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

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

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

Na slian nain moemo napraviti program za mnoenje sadraja dvaju prostora.

66

PRO - MIL

C++ programiranje za apsolutne poetnike

Problem dijeljenja
#include <cstdlib> #include <iostream> using namespace std; int main() { int broj1; int broj2; int rezultat; cin >> broj1; cin >> broj2; rezultat = broj1 / broj2; cout << rezultat; cout << endl; system("PAUSE"); return 0; } Ostao nam je nerijeen problem dijeljenja. Sadraje prostora za spremanje brojeva moemo dijeliti, ali e kao i proli put kad smo pokuali dijeliti, rezultat biti ispravan samo za brojeve iji rezultat dijeljenja nije decimalni broj. Ako je rezultat dijeljenja decimalni broj, rezultat e biti pogrean.

Problem emo rijeiti ovako napisanim programom. Umjesto naredbom int, prostor za spremanje brojeva formirat emo naredbom float; #include <cstdlib> #include <iostream> using namespace std; int main() { float broj1; float broj2; float rezultat; cin >> broj1; cin >> broj2; rezultat = broj1 / broj2; cout << rezultat; cout << endl; system("PAUSE"); return 0; } Pokrenemo li taj program, dobit emo ispravan rezultat.

PRO - MIL

Saimanje Veliki programi koda

Objekti

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

Sadraj

67

Varijable

Ovo je jo jedan nain na koji moemo formirati prostor za spremanje brojeva. U emu je razlika izmeu prostora formiranog int naredbom i prostora formiranog float naredbom??? U prostor formiran int naredbom moemo spremati samo brojeve bez decimalnog zareza, a u prostore formirane float naredbom moemo spremati brojeve s decimalnim zarezom.

Naredba za formiranje prostora za spremanje brojeva s decimalnim zarezom.

float broj1 ;

Oznaka ; obvezno dolazi na kraju naredbe.

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

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

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

68

PRO - MIL

C++ programiranje za apsolutne poetnike

Uljepavanje programa
Nai programi dodue rade, ali su tako runi da bi teko bili runiji. Korisnika doeka crni ekran bez ikakvih uputa. Nakon to unesemo dva broja, dobit emo trei bez ikakvog komentara to taj trei broj predstavlja. Budui da smo mi napisali program, mi znamo da treba unijeti dva broja, da nakon svakog unosa treba pritisnuti tipku Enter i mi znamo to predstavlja trei broj koji smo dobili kao rezultat, ali netko drugi veoma bi teko koristio na program. Unesite i pokrenite ovaj program.

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

Ovakav program puno je ugodniji za upotrebu od programa bez komentara.

PRO - MIL

Saimanje Veliki programi koda

Objekti

Obrada teksta

Polja

Petlje

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

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

Sadraj

69

Varijable

Prethodni program mogli bismo jo malo uljepati dodavanjem praznih redova. Unesimo i pokrenimo ovaj program.

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

Naslov programa.

Dva skoka u novi red.

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

70

PRO - MIL

C++ programiranje za apsolutne poetnike

Nekoliko primjera programa


// ********************************* // Program za izraun povrine // ********************************* #include <cstdlib> #include <iostream> using namespace std; int main() { float stranica_A; float stranica_B; float povrsina; cout << "Povrsina." << endl; cout << endl; cout << endl; cout << "Unesite prvu stranicu." << endl; cin >> stranica_A; cout << endl; cout << "Unesite drugu stranicu." << endl; cin >> stranica_B; cout << endl; povrsina = stranica_A * stranica_B; cout << "Povrsina je:" << endl; cout << povrsina; cout << endl; cout << endl; system("PAUSE"); return 0; } Ovo je program za izraun povrine pravokutnika. Unijet emo ga u raunalo i pokrenuti. Struktura je ista kao i struktura prethodnog programa, ali su prilagoeni komentari i nazivi prostora za spremanje brojeva. Jedina novost je komentar na poetku programa koji se nalazi iza // oznaka i opisuje namjenu programa.

Komentirati moemo namjenu programa ili pojedine segmente programa.

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

PRO - MIL

Saimanje Veliki programi koda

Komentar zapoinje // oznakom i pomae nam da se lake snaemo ako program elimo kasnije koristiti.

Objekti

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

Sadraj

71

Varijable

// ****************************** // Program za izraun brzine // ****************************** #include <cstdlib> #include <iostream> using namespace std; int main() { float put; // prostor za put float vrijeme; // prostor za vrijeme float brzina; // prostor za brzinu cout << "Brzina." << endl; cout << endl; cout << endl; cout << "Unesite prevaljeni put." << endl; cin >> put; cout << endl; cout << "Unesite vrijeme." << endl; cin >> vrijeme; cout << endl; brzina = put / vrijeme; cout << "Brzina je:" << endl; cout << brzina; cout << endl; cout << endl; system("PAUSE"); return 0; }

Osim

to

komentare

moemo pisati u zasebnom redu, moemo ih pisati i na kraju naredbi. Pri tome imajmo na umu da je float put; // komentar ispravno, ali // komentar float put; ili float // komentar put; nije. Dakle, ako komentar unosimo u red s naredbom, komentar mora biti na kraju reda.

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

72

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

// ********************************************* // Program za izraun volumena kvadrata // ********************************************* #include <cstdlib> #include <iostream> using namespace std; Pokuajmo za vjebu sami smisliti nekoint main() liko slinih programa. { float stranica_A; float stranica_B; float stranica_C; float volumen; cout << "Izracun volumena." << endl; cout << endl; cout << "Unesite stranicu a." << endl; cin >> stranica_A; cout << "Unesite stranicu b." << endl; cin >> stranica_B; cout << "Unesite stranicu c." << endl; cin >> stranica_C; cout << endl; volumen = stranica_A * stranica_B * stranica_C; cout << "Volumen je:" << endl; cout << volumen; cout << endl; cout << endl; system("PAUSE"); return 0; } Ovo je primjer programa za izraun volumena kvadrata.

PRO - MIL

73

Grafika

74

PRO - MIL

PRO - MIL

Grafika

C++ programiranje za apsolutne poetnike

Saimanje Veliki programi koda Obrada teksta

Objekti

Polja

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

Sadraj

75

Grafika

Podeavanje programskog okruenja


Da bi grafika funkcionirala, prilikom instalacije programa moramo instalirati dodatke kojim programskom okruenju omoguuje prikaz grafike. 1 - Kliknemo na Projekt. Ako to nismo uinili, vratimo se na uvodno poglavlje i instalirajmo potrebne dodatke. Nakon toga podesit emo programsko okruenje.

2 - Zatim na Postavke projekta.

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

Kliknemo na Ok.

76

PRO - MIL

C++ programiranje za apsolutne poetnike

Na prvi grafiki program


#include <cstdlib> #include <iostream> #include <winbgim.h> using namespace std; Unesimo i pokrenimo ovaj program. Uoimo da su poetak i kraj programa izmijenjeni. Na poetku dodan je ovaj red, a na kraju je izbaena naredba: system("PAUSE");

- grafiki u kojem e raunalo nacrtati krug.

PRO - MIL

Saimanje Veliki programi koda

Objekti

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

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

Varijable

Na prvi program

Uvod

Sadraj

77

Grafika

Analiza programa
#include <cstdlib> #include <iostream> #include <winbgim.h> using namespace std; int main() { Poetak programa. Za razliku od dosadanjih programa, u ovom smo korigirali poetak dodavi mu jo jednu naredbu. Ovom naredbom u program ukljuujemo grafike naredbe.

int gdriver = 9; int gmode = 2;

Ovdje odreujemo veliinu grafikog prozora i broj boja.

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

Otvaranje grafikog prozora.

setbkcolor(WHITE);

Odreivanje boje pozadine.

setcolor(BLACK);

Odreivanje boje crte.

cleardevice();

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

circle(320,240,180);

Naredba za crtanje kruga.

78

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

getch();

Ovom naredbom zaustavljamo izvoenje programa do trenutka dok ne pritisnemo neku tipku na tipkovnici. Ima istu namjenu kao i system(PAUSE) u normalnim programima. Da bismo bolje razumjeli ovu naredbu, izbacimo je iz programa i pokuajmo pokrenuti program bez nje.

closegraph();

Zatvaranje grafikog prozora.

return 0; }

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

Pogledajmo sada poblie odreene naredbe. Ovom naredbom odreujemo tip grafikog prozora.

int gdriver = 9 ;

Ovaj broj moe biti izmeu 1 i 10. Ako je 9, dobit emo VGA prozor ija maksimalna veliina moe biti 640 X 480 toaka i 16 boja. Ako umjesto broja 9 stavimo broj 6, dobit emo IBM 8514 prozor ija maksimalna veliina moe biti 1024 X 768 toaka i 256 boja. Upotrijebimo li druge brojeve, dobit emo manje prozore s manjim brojem boja.

PRO - MIL

79

Grafika

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

int gmode = 2 ;

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

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

Ovdje unosimo naziv boje. Naziv boje moe biti: BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY, DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE.

setbkcolor( WHITE );

80

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Kao i u prethodnoj naredbi, boje moemo odrediti navoenjem njihovog naziva, a moemo i pomou brojeva upotrebom naredbe COLOR. Obrada teksta Polja Ovom naredbom odreuje se boja kojom crtamo. Koristimo iste nazive boja kao i u prethodnoj naredbi. Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

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

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

Plava.

Crvena.

Zelena.

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

setcolor(BLACK);

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

PRO - MIL

81

Grafika

Ovo je naredba za crtanje kruga.

circle( 320, 240, 180 ) ;

Udaljenost sredita od lijevog ruba prozora

Udaljenost sredita od gornjeg ruba prozora

Polumjer kruga.

640

240 320 irina prozora, u naem sluaju 640 toaka.

180

480

Visina prozora, u naem sluaju 480 toaka.

82

PRO - MIL

C++ programiranje za apsolutne poetnike

Varijacije programa
#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); circle(320,240,165); circle(320,240,110); circle(320,240,55); getch(); closegraph(); return 0; } Napravit emo nekoliko primjera da bismo lake razumjeli kako radi naredba za crtanje kruga. Ovaj program slian je prethodnom. Razlika je u tome to je prethodni crtao samo jedan krug, a ovaj e nacrtati nekoliko krugova razliitog polumjera, ali sa sreditem u istoj toki. Ovdje se nalaze etiri naredbe za crtanje etiri kruga. Pokrenemo li ovaj program, trebali bismo dobiti ovakav rezultat.

PRO - MIL

Saimanje Veliki programi koda

Objekti

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

Obrada teksta

Pokuajmo program promijeniti tako da poveamo ili smanjimo broj krugova.

Polja

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

Sadraj

83

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(160,140,80); circle(320,140,80); circle(480,140,80); getch(); closegraph(); return 0; }

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

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

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

84

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

#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 (60, 60, 60); circle (180, 180, 60); circle (300, 300, 60); 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(); circle(320,240,220); circle(220,140,50); circle(420,140,50); circle(320,240,30); getch(); closegraph(); return 0; }

PRO - MIL

85

Grafika

Crtanje pravokutnika
#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(); rectangle (160, 100, 480, 380); getch(); closegraph(); return 0; } Osim krunice moemo nacrtati i druge oblike, npr. pravokutnik. Ovdje u program unesemo naredbu za crtanje pravokutnika, a na zaslonu raunala dobit emo ovakav rezultat.

rectangle ( 160, 100, 480, 380 );

Naredba za crtanje pravokutnika.

640 100 160 380

480 480

Naredbom rectangle crtamo pravokutnik, a sa etiri broja koji se nalaze iza naredbe rectangle odreujemo poloaj gornjeg lijevog i donjeg desnog ugla pravokutnika. Funkciju pojedinih brojeva moemo vidjeti na crteu.

86

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke #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); circle (220, 140, 50); circle (420, 140, 50); circle (320, 240, 30); rectangle (260, 342, 380, 338); getch(); closegraph(); return 0; } Varijable Na prvi program Uvod

#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(); rectangle (160, 100, 480, 380); rectangle (190, 130, 450, 350); rectangle (220, 160, 420, 320); rectangle (250, 190, 390, 290); getch(); closegraph(); return 0; }

Meusobno moemo kombinirati vie pravokutnika.

Pravokutnik moemo kombinirati s drugim oblicima. Pokuajmo za vjebu sami izmisliti nekoliko primjera, npr. deblo stabla nacrtamo kao pravokutnik, a kronju kao krug.

PRO - MIL

87

Grafika

Crtanje crte
#include <cstdlib> #include <iostream> #include <winbgim.h> using namespace std; int main() { int gdriver = 9; int gmode = 2; initgraph(&gdriver, &gmode, ""); setbkcolor(WHITE); setcolor(BLACK); cleardevice(); line (120, 100, 500, 380); getch(); closegraph(); return 0; } Crtu moemo nacrtati na vie naina, a uporaba naredbe line jedan je od njih.

line ( 160, 100, 480, 380 );

Naredba za crtanje crte.

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

500

480

88

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke #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); circle (320, 240, 165); circle (320, 240, 110); circle (320, 240, 55); line (100, 240, 540, 240); line (320, 20, 320, 460); getch(); closegraph(); return 0; } Varijable Na prvi program Uvod

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

Napravimo nekoliko crtea uporabom naredbe za crtanje crte.

PRO - MIL

89

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 (120, 100); lineto (500, 380); getch(); closegraph(); return 0; }

Osim uporabom naredbe line, crtu moemo nacrtati i uporabom naredbi moveto i lineto. Naredbom moveto odreujemo poetak crte, a naredbom lineto odreujemo kraj crte.

moveto ( 120, 100 );

Ovom naredbom odreujemo poetak crte.

640 100 120 380

Ovom naredbom odreujemo kraj crte.

500

lineto ( 500, 380 );

480

90

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja 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); cleardevice(); moveto(160, 240); lineto(160, 450); getch(); closegraph(); return 0; } Donoenje Grafika odluke Varijable Na prvi program Uvod

#include <cstdlib> #include <iostream> #include <winbgim.h> using namespace std; int main() { int gdriver = 9; int gmode = 2; initgraph(&gdriver, &gmode, ""); setbkcolor(WHITE); setcolor(BLACK); cleardevice(); moveto(160, 240); lineto(160, 450); lineto(480, 450); lineto(480, 240); lineto(160, 240); lineto(320, 120); lineto(480, 240); getch(); closegraph(); return 0; }

Ovaj nain crtanja pogodan je za crtanje vie crta u neprekinutom nizu. Pogledajmo ovaj primjer.

Pogledajmo, korak po korak, kako je nastao ovaj crte.

PRO - MIL

91

Grafika

#include <cstdlib> #include <iostream> #include <winbgim.h> using namespace std; int main() { int gdriver = 9; int gmode = 2; initgraph(&gdriver, &gmode, ""); setbkcolor(WHITE); setcolor(BLACK); cleardevice(); moveto(160, 240); lineto(160, 450); lineto(480, 450); getch(); closegraph(); return 0; }

#include <cstdlib> #include <iostream> #include <winbgim.h> using namespace std; int main() { int gdriver = 9; int gmode = 2; initgraph(&gdriver, &gmode, ""); setbkcolor(WHITE); setcolor(BLACK); cleardevice(); moveto(160, 240); lineto(160, 450); lineto(480, 450); lineto(480, 240); getch(); closegraph(); return 0; }

92

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj using namespace std; int main() { int gdriver = 9; int gmode = 2; initgraph(&gdriver, &gmode, ""); setbkcolor(WHITE); setcolor(BLACK); cleardevice(); moveto(160, 240); lineto(160, 450); lineto(480, 450); lineto(480, 240); lineto(160, 240); lineto(320, 120); getch(); closegraph(); return 0; } Polja Saimanje Veliki programi koda Objekti Obrada teksta Petlje #include <cstdlib> #include <iostream> #include <winbgim.h> Donoenje Grafika odluke Varijable Na prvi program Uvod

#include <cstdlib> #include <iostream> #include <winbgim.h> using namespace std; int main() { int gdriver = 9; int gmode = 2; initgraph(&gdriver, &gmode, ""); setbkcolor(WHITE); setcolor(BLACK); cleardevice(); moveto(160, 240); lineto(160, 450); lineto(480, 450); lineto(480, 240); lineto(160, 240); getch(); closegraph(); return 0; }

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); lineto(480, 450); lineto(480, 240); lineto(160, 240); lineto(320, 120); lineto(480, 240); 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); lineto(160, 240); lineto(320, 120); lineto(480, 240); rectangle(400, 320, 480, 450); rectangle(200, 260, 250, 340); rectangle(300, 260, 350, 340); circle (550, 90, 80); line (0, 450, 640, 450); getch(); closegraph(); return 0; }

94

PRO - MIL

C++ programiranje za apsolutne poetnike

Crtanje toke
#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); putpixel (320, 240, BLACK); getch(); closegraph(); return 0; } Ponekad nam je potrebna samo jedna toka, kao u ovom primjeru gdje smo tokom oznaili sredite kruga.

640 380

500

480

PRO - MIL

Saimanje Veliki programi koda

Objekti

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

Obrada teksta

Polja

putpixel ( 320, 240, BLACK );

Naredba za crtanje toke.

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

Sadraj

95

Grafika

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

96

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Upotrijebimo li ovu naredbu, tekst e se ispisati unutar grafikog prozora.

#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(); outtext ("Ovo je krug."); circle (320, 240, 220); 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 (320, 240); outtext ("Ovo je krug."); circle (320, 240, 220); getch(); closegraph(); return 0; }

Naredbu za odreivanje pozicije poetka crte moemo iskoristiti za odreivanje poetka teksta.

PRO - MIL

97

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(); outtextxy (320, 240, "Ovo je krug."); circle (320, 240, 220); getch(); closegraph(); return 0; }

Naredba outtextxy objedinjuje naredbu za odreivanje pozicije teksta i naredbu za ispis teksta.

Brojevima odreujemo poziciju ispisa.

Unutar navodnika je tekst koji ispisujemo.

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

640 240

320

Ovo je krug.

480

98

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Veliina slova. Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

#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(); settextstyle (9, HORIZ_DIR, 1); outtextxy (320, 240, "Ovo je krug."); circle (320, 240, 220); getch(); closegraph(); return 0; }

Naredbom settextstyle moemo mijenjati oblik i veliinu slova te smjer ispisa teksta. Stavljamo je prije naredbe za ispis teksta.

Naredba za odreivanje veliine i oblika slova te smjera ispisa.

settextstyle ( 9, HORIZ_DIR, 1 );
Ovaj broj odreuje oblik slova. Njegova vrijednost moe biti izmeu 0 i 10. Smjer teksta: HORIZ_DIR - vodoravni tekst. VERT_DIR - uspravni tekst od dolje prema gore. -VERT_DIR - uspravni tekst od gore prema dolje.

PRO - MIL

99

Grafika

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

Pogledajmo primjer promjene veliine slova.

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

Pogledajmo primjer promjene smjera ispisa teksta.

100

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

#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(0, HORIZ_DIR, 3); outtextxy(320, 40, "Ovo je krug."); settextstyle(1, HORIZ_DIR, 3); outtextxy(320, 80, "Ovo je krug."); settextstyle(2, HORIZ_DIR, 3); outtextxy(320, 120, "Ovo je krug."); settextstyle(3, HORIZ_DIR, 3); outtextxy(320, 160, "Ovo je krug."); settextstyle(4, HORIZ_DIR, 3); outtextxy(320, 200, "Ovo je krug."); settextstyle(5, HORIZ_DIR, 3); outtextxy(320, 240, "Ovo je krug."); settextstyle(6, HORIZ_DIR, 3); outtextxy(320, 280, "Ovo je krug."); settextstyle(7, HORIZ_DIR, 3); outtextxy(320, 320, "Ovo je krug."); settextstyle(8, HORIZ_DIR, 3); outtextxy(320, 360, "Ovo je krug."); settextstyle(9, HORIZ_DIR, 3); outtextxy(320, 400, "Ovo je krug."); settextstyle(10, HORIZ_DIR, 3); outtextxy(320, 440, "Ovo je krug."); getch(); closegraph(); return 0; }

Pogledajmo primjer promjene oblika slova.

PRO - MIL

101

Donoenje odluke

102

PRO - MIL

PRO - MIL
Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Donoenje odluke

C++ programiranje za apsolutne poetnike

Saimanje Veliki programi koda

Objekti

Sadraj

103

Donoenje odluke

Funkcije
#include <cstdlib> #include <iostream> #include <cmath> using namespace std; int main() { float broj; float potencija; float rezultat; cout << "Unesite broj:" << endl; cin >> broj; cout << endl; cout << "Unesite potenciju:" << endl; cin >> potencija; cout << endl; rezultat = pow(broj,potencija); cout << "Rezultat je:" << endl; cout << rezultat << endl; cout << endl; system("PAUSE"); return 0; } Pojam funkcije zvui jako pametno, ali iza tog naziva kriju se uglavnom jednostavne stvari, matematike operacije poput potenciranja ili vaenja kvadratnog korijena. Pogledajmo program potenciranje. za

Da bismo u programu mogli koristiti matematike funkcije, moramo u program ukljuiti biblioteku matematikih funkcija.

Varijabla u koju spremamo rezultat potenciranja.

rezultat = pow ( broj, potencija );

Potencija na koju potenciramo.

Naredba za potenciranje.

Broj koji potenciramo.

104

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Varijabla u koju spremamo veliinu kuta kojem emo raunati sinus. Kut mora biti izraen u radijanima, a ne u stupnjevima. Petlje Varijabla u koju spremamo rezultat. Donoenje Grafika odluke Varijable Na prvi program Uvod

#include <cstdlib> #include <iostream> #include <cmath> using namespace std; int main() { float kut; float rezultat; cout << "Kut u radijanima:" << endl; cin >> kut; cout << endl; rezultat = sin(kut); cout << "Sinus kuta je:" << endl; cout << rezultat << endl; cout << endl; system("PAUSE"); return 0; }

Ovo je program za izraun sinusa. Ako ne znate to je to sinus, nemojte se time optereivati. To nije bitno za razumijevanje C++ programskog jezika. Vano je uoiti da ova funkcija veliinu kuta ne izraava stupnjevima nego radijanima.

rezultat = sin ( kut );

Naredba za izraun sinusa kuta.

PRO - MIL

105

Donoenje odluke

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

Ponekad je u programu potrebno negativan broj pretvoriti u pozitivan.

Varijabla u koju spremamo rezultat.

rezultat = abs ( broj );

Naredba za pretvaranje negativnog broja u pozitivan broj.

Varijabla u koju spremamo broj koji emo iz negativnog pretvoriti u pozitivan.

106

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj #include <cstdlib> #include <iostream> #include <cmath> using namespace std; int main() { float broj; float rezultat; cout << "Unesite broj:" << endl; cin >> broj; cout << endl; rezultat = sqrt(broj); cout << "Kvadratni korijen je:" << endl; cout << rezultat << endl; cout << endl; system("PAUSE"); return 0; } Varijabla u koju spremamo rezultat. Pogledajmo program za vaenje kvadratnog korijena. to je to uope kvadrati korijen? Ako je 4 puta 4, odnosno 4 na kvadrat, jednako 16, onda je kvadratni korijen od 16 jedak 4.

rezultat = sqrt ( broj );

PRO - MIL

Saimanje Veliki programi koda

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

Objekti

Obrada teksta

Polja

Naredba za izraun kvadratnog korijena.

Petlje

Varijabla u koju spremamo broj iji kvadratni korijen elimo izraunati.

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

107

Donoenje odluke

Donoenje odluke
Pokuajmo kvadrati korijen izraunati pomou ovakvog programa.

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

Ova inaica programa izraunava kvadratni korijen ako smo unijeli pozitivan broj ili nas obavjetava da je unesen negativan broj ako unesemo broj. negativan

108

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

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

Pogledajmo bitne dijelove naeg programa.

Uobiajen poetak programa. Izvodi se prilikom svakog pokretanja programa

float broj; float rezultat; cout << "Unesite pozitivan broj." << endl; cin >> broj; cout << endl; Broj nula. if (broj < 0)

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

Naredbom if ispitujemo je li sadraj varijable manji od nule.

{ cout << "Broj je negativan!" << endl; } Ovaj dio programa izvodi se samo ako je sadraj varijable broj manji od nule.

else Naredbom else zapoi{ rezultat = sqrt(broj); cout << "Kvadratni korijen je:" << endl; cout << rezultat; cout << endl; } nje dio programa koji se izvodi samo ako sadraj varijable broj nije manji od nule.

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

Uobiajeni kraj programa. Izvodi se prilikom svakog pokretanja programa.

PRO - MIL

109

Donoenje odluke

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

Uvjet na temelju kojeg e raunalo odluiti hoe li se izvoditi sadraj a ili sadraj b.

U naem sluaju ispituje se je li sadraj varijable broj manji od broja nula.

Naredbom if zapoinje donoenje odluke.

if ( broj < 0 ) {

Sadraj a i sadraj b nalaze se unutar vitiastih zagrada. U poetku esto e nam se deavati da izostavimo vitiaste zagrade ili da ih krivo napiemo.

sadraj a } else { sadraj b }

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

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

110

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Ovaj program samo ispituje je li unesen broj vei od nule. Ako je broj vei od nule, izvodi se dio programa koji ispisuje tekst Broj je vei od nule. Ako broj nije vei od nule, izvodi se dio programa koji ispisuje tekst Broj vei od nule. nije Varijable Na prvi program Uvod

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

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

PRO - MIL

111

Donoenje odluke

U ovom programu ispitivat emo je li unesen broj jednak nuli. Za to ispitivanje koristit emo dvostruki znak jednakosti.

#include <cstdlib> #include <iostream> using namespace std; int main() { float broj; cout << "Unesite broj." << endl; cin >> broj; cout << endl; if (broj == 0) { cout << "Broj je jednak nuli." << endl; } else { cout << "Broj nije jednak nuli." << endl; } cout << endl; system("PAUSE"); return 0; } Ako je odgovor na pitanje je li sadraj varijable broj jednak nuli DA, izvrit e se ovaj dio programa. Ispisat e se poruka Broj je jednak nuli. Ako je odgovor na pitanje je li sadraj varijable broj jednak nuli NE, izvrit e se ovaj dio programa. Ispisat e se poruka Broj nije jednak nuli.

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

112

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj #include <cstdlib> #include <iostream> using namespace std; int main() { float broj; cout << "Unesite broj." << endl; cin >> broj; cout << endl; if (broj < 100) { cout << "Broj je manji od sto." << endl; } else { cout << "Broj nije manji od sto." << endl; } cout << endl; system("PAUSE"); return 0; } Vidjeli smo da moemo ispitivati je li varijabla vea, manja ili jednaka nekom broju. U dosadanjim primjerima to je bio broj nula, ali to moe biti bilo koji broj, npr. broj 100 kao primjeru. Polja Saimanje Veliki programi koda Objekti Obrada teksta to je to sluaj u ovom

PRO - MIL

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

113

Donoenje odluke

Osim varijable i broja, if naredbom moemo usporeivati dvije varijable.

#include <cstdlib> #include <iostream> using namespace std; int main() { float prvi; float drugi; cout << "Unesite prvi broj." << endl; cin >> prvi; cout << endl; cout << "Unesite drugi broj." << endl; cin >> drugi; cout << endl; if (prvi == drugi) { cout << "Brojevi su jednaki." << endl; } else { cout << "Brojevi su razliciti." << endl; } cout << endl; system("PAUSE"); return 0; } Ovdje ispitujemo jesu li sadraji dviju varijabli u koje smo prethodno unijeli brojeve jednaki. Ako unesemo jednake brojeve ispisat, e se obavijest Brojevi su jednaki. Ako unesemo razliite, ispisat e se obavijest Brojevi su razliiti.

114

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

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

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

PRO - MIL

115

Donoenje odluke

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

Osim jednostavnih ispitivanja if naredbom, mogua su i sloenija ispitivanja.

116

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod Ovdje imamo dva uvjeta, prvi uvjet i drugi uvjet. Svaki od ta dva uvjeta moe biti zadovoljen ili nezadovoljen. Mogue je da je sadraj varijable prvi manji od 5, a mogue je i da nije. Isto tako, mogue je da je sadraj varijable drugi manji od 5, a mogue je i da nije. Postavlja se pitanje u kojem sluaju e se izvravati sadraj a, a u kojem sluaju sadraj b. Ovim oznakama nareujemo raunalu da e se sadraj a izvoditi samo onda kad su zadovoljena oba uvjeta; u naem sluaju kad je sadraj varijable prvi manji od 5 i kad je sadraj varijable drugi manji od 5. U svim ostalim sluajevima izvrit e se sadraj b.

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

if ( (prvi < 5) && (drugi < 5) ) { sadraj a } else { sadraj b }

PRO - MIL

117

Donoenje odluke

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

Ako umjesto oznaka && stavimo oznake || ukupni uvjet bit e zadovoljen ako je barem jedan od dva uvjeta zadovoljen.

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

118

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Ovdje moemo vidjeti primjere jednostavnih ispitivanja na temelju kojih raunalo donosi odluku koji dio programa e se izvoditi, a koji preskoiti. Ovo su samo neki primjeri, dok je broj moguih kombinacija praktiki neogranien. Bilo koju varijablu koju koristimo u programu moemo usporediti s bilo kojim brojem. Isto tako bilo koje dvije varijable koje se koriste u programu moemo meusobno usporeivati.

Primjeri jednostavnih ispitivanja if (broj < 0) Ispitujemo je li sadraj varijable broj manji od broja nula.

if (broj > 0)

Ispitujemo je li sadraj varijable broj vei od broja nula.

if (broj == 0)

Ispitujemo je li sadraj varijable broj jednak broju nula. Ispitujemo je li sadraj varijable broj manji od broja pedeset. Ispitujemo je li sadraj varijable broj vei od broja pedeset.

if (broj < 50)

if (broj > 50)

if (broj == 50)

Ispitujemo je li sadraj varijable broj jednak broju pedeset. Ispitujemo je li sadraj varijable broj razliit od broja pedeset. Ispitujemo je li sadraj varijable prvi vei od sadraja varijable drugi. Ispitujemo je li sadraj varijable prvi manji od sadraja varijable drugi. Ispitujemo je li sadraj varijable prvi jednak sadraju varijable drugi.

if (broj != 50)

if (prvi > drugi)

if (prvi < drugi)

if (prvi == drugi)

PRO - MIL

119

Donoenje odluke

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

Primjeri sloenih ispitivanja Uvjet je zadovoljen ako je sadraj varijable prvi manji od 5 i ako je sadraj varijable drugi manji od 5. Uvjet je zadovoljen ako je ili sadraj varijable prvi manji od 5, ili ako je sadraj varijable drugi manji od 5, ili ako su obje varijable manje od 5.

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

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

Uvjet je zadovoljen ako je sadraj varijable prvi ili sadraj varijable drugi ili if (((prvi < 5) || (drugi < 5)) && (treci < 5)) sadraj obiju varijabli manji od 5 i ako je sadraj varijable treci manji od 5. Uvjet je zadovoljen ako je barem jedna od triju varijabli manja od pet, ili ako su dvije manje od 5, ili ako su sve tri manje od 5.

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

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

120

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj int main() { float prvi; float drugi; float treci; cout << "Unesite prvi broj." << endl; cin >> prvi; cout << "Unesite drugi broj." << endl; cin >> drugi; cout << "Unesite treci broj." << endl; cin >> treci; if (((prvi < 5) || (drugi < 5)) && (treci < 5)) { cout << "DA" << endl; } else { cout << "NE" << endl; } cout << endl; system("PAUSE"); return 0; } grama koji moemo iskoristiti za isprobavanje kombinacija s prethodne stranice. U ovom sluaju ukupni uvjet je ispunjen ako je prvi broj manji od 5 ili ako ako su oba manja od 5 i ako je trei broj manji od 5. Ako je ukupni uvjet zadovoljen, izvest e se ovaj dio programa. Ako ukupni uvjet nije Objekti Saimanje Veliki programi koda Obrada teksta Polja je drugi broj manji od 5 ili zadovoljen, izvest e se ovaj dio programa.

PRO - MIL

Petlje

Donoenje Grafika odluke

Ovdje vidimo primjer pro-

Varijable

Na prvi program

using namespace std;

Uvod

#include <cstdlib> #include <iostream>

121

Donoenje odluke

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

Osim to moemo u programu imati veoma sloena ispitivanja unutar if naredbe, mogue je jednu if naredbu staviti unutar druge if naredbe. To je nuno ako elimo ispitati vie stvari, npr. je li neki broj vei od nule ili jednak nuli ili je manji od nule. Takvo ispitivanje ne moemo napraviti s jednom if naredbom, nego su nune dvije if naredbe. Pogledajmo ram. ovaj prog-

122

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod Poetak programa. Prva if naredba. Ispituje je li broj manji od 0. Ako je uneseni broj manji od 0, izvodi se ovaj dio. Ako uneseni broj nije manji od 0, izvodi se ovaj dio. Unutar ovog dijela nalazi se druga if naredba. Ako je uneseni broj vei od 0, izvodi se ovaj dio. Ako uneseni broj nije vei od 0, izvodi se ovaj dio. Ako uneseni broj nije ni vei ni manji od nule, onda znamo da je nula. Kraj programa.

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

Pogledamo programa.

strukturu

PRO - MIL

123

Donoenje odluke

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

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

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

124

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod Bez uvlaenja pie se poetak programa i dvije glavne vitiaste zagrade. Sadraj unutar glavnih vitiastih zagrada uvlai se u desnu stranu. Na toj razini pie se ve ina jednostavnih naredbi. Sadraji unutar if naredbe dodatno se pomiu u desnu stranu. To nam pomae da lake uoimo gdje poinje, a gdje zavrava if naredba. Ako se unutar jedne if naredbe nalazi druga if naredba, njen sadraj dodatno se pomie u desnu stranu. To nam pomae da lake uoimo gdje poinje i gdje zavrava druga if naredba te pomae da njen sadraj lake razlikujemo od sadraja prve if naredbe.

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

Pogledajmo strukturu uvlaenja redova.

PRO - MIL

125

Donoenje odluke

Switch naredba

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

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

U ovom programu biramo jednu od etiri raunske operacije. Program bismo mogli realizirati i uporabom vie if naredbi, ali daleko je elegantniji ako upotrijebimo switch naredbu.

126

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Poetak switch naredbe.

Ovdje se nalazi int varijabla. Grananje se vri na temelju broja koji se nalazi u varijabli. Int tip je obvezan.

switch (od) { case 1:

Naredbom case 1: zapoinje dio programa koji e se izvriti ako se u varijabli od nalazi broj 1.

Naredbom break zavrava case 1: naredba. Pokuajmo je obrisati. Pokrenimo program i promatrajmo posljedice.

cout << "Prvi izbor." << endl; break; case 2: cout << "Drugi izbor." << endl; break; case 3: cout << "Treci izbor." << endl; break; case 4: cout << "Cetvrti izbor." << endl; break; default: cout << "Greska!!!" << endl; }

Naredbom case 2: zapoinje dio programa koji e se izvriti ako je sadraj varijable od broj 2. Na temelju sline logike biraju se ostali case dijelovi kojih moe biti proizvoljni broj. (U naem sluaju imamo jo case 3: i case 4:.)

Ovaj dio izvrava se ako ni jedan case uvjet nije zadovoljen, dakle ako u varijabli od nije bio ni broj 1, ni broj 2, ni broj 3, ni broj 4. Kraj switch naredbe.

PRO - MIL

127

Petlje

128

PRO - MIL

PRO - MIL

Petlje

C++ programiranje za apsolutne poetnike

Saimanje Veliki programi koda Obrada teksta

Objekti

Polja

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

Sadraj

129

Petlje

For petlja
#include <cstdlib> #include <iostream> #include <winbgim.h> using namespace std; Ovaj program crta niz krugova jednakog promjera. Svakome je sredite pomaknuto za pet toaka u desnu stranu u odnosu na sredite prethodnog.

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

130

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Kljuna naredba u novoj inaici programa je for naredba. Omoguuje nam izvravanje dijela programa vie puta. To viestruko ponavljanje dijela programa naziva se programska petlja. Slino kao if naredba, i for naredba je veoma sloena i protee se kroz vie redova programa. Pogledajmo sastavne elemente for naredbe.

Ovdje se definira poetna vrijednost varijable koju koristi for naredba i koju prije for naredbe moramo formirati. U naem sluaju poetna vrijednost varijable x je 260.

Petlja e se vrtjeti, odnosno petlja e ponavljati dio programa, tako dugo dok je ovaj uvjet zadovoljen; u naem sluaju, tako dugo dok je sadraj varijable x manji od 365. Kad uvjet vie nije zadovoljen; tj. kad x vie ne bude manji od 365, program e nastavit izvoenje od prve naredbe nakon druge vitiaste zagrade.

for ( x = 260 ; {

x < 365 ;

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

circle ( x, 240, 60 ); }

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

Sadraj unutar navodnika ponavlja se svaki put kad for naredba uvea vrijednost varijable x i provjeri je li x manji od 365.

PRO - MIL

131

Petlje

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

Pogledajmo dijelove naeg programa.

Uobiajeni poetak programa.

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

Naredbe za otvaranje grafikog prozora, odreivanje svojstava grafike i formiranje varijable x koju koristimo u for naredbi.

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

for (x = 260; x < 365; x = x + 5 ) Pri svakom ponavljanju petlje ponavlja se sadraj unutar vitiastih zagrada. U naem sluaju na grafikom ekranu e se crtati krug. { circle(x,240,60); } Udaljenost sredita kruga od lijevog ruba nije odreena brojem, nego vrijednou varijable x. Budui da vrijednost varijable x pri svakom ponavljanju raste za 5, sredie novog kruga bit e za pet toaka pomaknuto u desnu stranu.

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

Uobiajeni kraj programa.

132

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Vidimo da se ponavlja sadraj unutar vitiastih zagrada for naredbe. Sadraj prije i sadraj poslije for naredbe ne ponavlja se. Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Nemojmo se obeshrabriti ako nam trenutno nije previe jasno ni kako for naredba radi, ni emu bi to trebalo sluiti. Na poetku su takve nedoumice normalne i nipoto nisu dokaz da nismo talentirani za programiranje. Takve nedoumice prevladavaju se tako da napiemo odreenu koliinu programa jer emo jedino na taj nain do kraja shvatiti kako for naredba radi i emu slui. Drugaiji je problem ako nam se ne da pisati programe. Onda bismo doista mogli konstatirati da programiranje nije za nas i trebali bismo se pokuati baviti neim intelektualno manje zahtjevnim, npr. nogometom ili politikom.

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

Ovaj e nam program pomoi da lake shvatimo funkcioniranje if naredbe. Vrijednost varijable x mijenjat e se od 0 do 9 po 1. Jedino to ovaj program radi jest ispisivanje sadraj varijable x. To nam omoguuje lako opaanje kako se sadraj varijable x mijenja, te koji dio programa se ponavlja i koliko puta. Unoenjem varijacija u taj program najlake emo shvatiti for naredbu.

PRO - MIL

133

Petlje

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

Mijenjati moemo poetnu i krajnju vrijednost petlje. U ovom sluaju x e se mijenjati od 10 do 29.

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

134

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj using namespace std; int main() { int x; cout << "Prije for naredbe." << endl; for (x = 28; x > 9; x = x - 2 ) { cout << x << endl; } cout << "Nakon for naredbe." << endl; cout << endl; system("PAUSE"); return 0; } For naredba moe brojiti i unatrag. U ovom sluaju vrijednost varijable x mijenja se od 28 do 9 po 2.

PRO - MIL

Saimanje Veliki programi koda

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

Objekti

Obrada teksta

using namespace std;

Polja

U for naredbi mogu se koristiti i negativni brojevi.

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

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

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

Uvod

135

Petlje

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

Prilikom formiranja for naredbe mogue je napraviti greku koja se naziva mrtva petlja. Do te greke dolazi kad uvjete za kraj petlje tako formuliramo da se oni nikad nee ispuniti, pa e se petlja vjeno izvoditi. U ovom primjeru poetna vrijednost je 18. Ta poetna vrijednost uveava se za 2, a petlja e se ponavljati tako dugo dok je x vei od 9. Ako 18 uveavamo za 2, x e uvijek biti vei od 9 i petlja se nikad nee prekinuti.

Pogledajmo jo jedan primjer mrtve petlje.

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

136

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Ovaj primjer slian je primjeru na poetku ovog poglavlja. Razlika je u tome to su u ovom sluaju drugaije poetna i krajnja vrijednost x varijable, pa smo dobili drugaiji niz krugova. U ovom sluaju vrijednost varijable x mijenja se od 60 do 580 po 5. Pokuamo sami mijenjati vrijednosti unutar for naredbe i promatrajmo kakve efekte e izazvati te promjene. Uvod

Naredba for ne postoji zato da bi se niz brojeva ispisao na zaslon raunala, nego zato da bi se u programu postigli odreeni efekti. Iako to nije uvijek sluaj, najee se za postizanje eljenih ciljeva koristi varijabla petlje. Pogledajmo nekoliko primjera.

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

PRO - MIL

137

Petlje

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

Varijablu x moemo staviti umjesto broja koji odreuje udaljenost sredita od gornjeg ruba, pa e se krugovi crtati od gore prema dolje.

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

Uveavamo li varijablu x za 15 umjesto za 5, pomak sredita krugova bit e vei. Umjesto broja 15 pokuajmo staviti 10, a zatim 20.

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

138

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Osim pozicije sredita kruga, varijablom x moemo mijenjati polumjer kruga. #include <cstdlib> #include <iostream> #include <winbgim.h> using namespace std; Na slian nain moemo crtati nizove drugih geometrijskih oblika, npr. crta. int main() { int gdriver = 9; int gmode = 2; int x; initgraph(&gdriver, &gmode, ""); setbkcolor (WHITE); setcolor (BLACK); cleardevice(); for (x = 10; x < 640; x = x + 10 ) { line (x, 20, x, 400); } getch(); closegraph(); return 0; } Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

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

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

Ovo je primjer programa koji crta niz pravokutnika.

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

U dosadanjim programima koristili smo jednu varijablu. U ovom primjeru koristima dvije, jednom pomiemo udaljenost sredita od lijevog ruba, a drugom mijenjamo promjer.

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

140

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Prije for naredbe u varijablu r spremimo poetnu vrijednost polumjera kruga. U naem sluaju spremili smo broj 20. For naredba mijenja vrijednost varijable x o 20 do 475 po 15. U naredbi za crtanje kruga upotrijebili smo dvije varijable. Varijablom x odreujemo udaljenost sredita kruga od lijevog ruba, a varijablom r polumjer kruga. Zbog toga e pri svakom ponavljaju polumjer kruga biti vei. Saimanje Veliki programi koda Da bi kod svakog ponavljanja polumjer kruga bio vei, nakon to smo nacrtali krug, unutar vitiastih zagrada for naredbe, broj u varijabli r poveavamo za 5. Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Za razliku od dosadanjih primjera, u ovom formiramo jo jednu varijablu koju smo nazvali r. Uvod

Pogledajmo bitne dijelove ovog programa.

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

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

PRO - MIL

141

Petlje

Animacija

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

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

Ovom inaicom programa dobit emo privid kretanja pravokutnika.

Pravokutnik koji se kree na zaslonu raunala.

Ovom naredbom briemo ekran, a time i pravokutnik na staroj poziciji.

142

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj using namespace std; U ovom primjeru animiramo krug koji pada od gornjeg prema donjem rubu . int main() { int gdriver = 9; int gmode = 2; int x; initgraph(&gdriver, &gmode, ""); setbkcolor (WHITE); setcolor (BLACK); cleardevice(); for (x = 10; x < 465; x = x + 1 ) { cleardevice(); circle (320, x, 10); } getch(); closegraph(); return 0; } Polja Saimanje Veliki programi koda Objekti Obrada teksta Petlje #include <cstdlib> #include <iostream> #include <winbgim.h> Donoenje Grafika odluke Sve grafike elemente koje smo do sada mijenjali moemo animirati. U ovom programu animiramo irenje kruga. Varijable Na prvi program Uvod

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

Pokuajmo sami smisliti sline programe.

PRO - MIL

143

Petlje

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

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

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

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

144

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Skok u novi red. Obrada teksta Sadraj varijable x ispisuje se na zaslon raunala. Polja Petlje Da bi rezultat rada programa bio bolje vidljiv, ovdje smo naredbu cout koristili na nain na koji je do sada nismo koristili. U ovoj inaici sadri tri dijela. Donoenje Grafika odluke Varijable Na prvi program Uvod

#include <cstdlib> #include <iostream> using namespace std; int main() { int x; int r; cout << "Prije petlje." << endl; for (x = 0; x < 2; x = x + 1 ) { cout << "Vanjska petlja. x = " << x << endl; for (r = 0; r < 3; r = r + 1) { cout << "Nutarnja petlja. r = " << r << endl; } } cout << "Nakon petlje." << endl; cout << endl; system("PAUSE"); return 0; }

Analiziranje ovog programa pomoi e nam da u potpunosti razumijemo nain funkcioniranja petlje unutar petlje. Pri tome nismo ogranieni na to da moemo staviti jednu petlju unutar petlje. Mogue je unutar petlje staviti petlju, a unutar te petlje jo jednu petlju i tako petlje dodavati u skladu s ciljevima koje elimo postii.

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

Tekst unutar navodnika ispisuje se na zaslon raunala.

PRO - MIL

145

Petlje

Niz petlji
#include <cstdlib> #include <iostream> #include <winbgim.h> using namespace std; Osim to petlju moemo staviti unutar druge petlje, petlje moemo staviti jednu iza druge. U ovom sluaju prva petlja mali krug pomie od dolje prema gore, a zatim druga petlja mali krug iri tako da sve zajedno tvori jednostavan prikaz vatrometa.

int main() { int gdriver = 9; int gmode = 2; int x; int r; initgraph(&gdriver, &gmode, ""); setbkcolor (WHITE); setcolor (BLACK); cleardevice(); for (x = 465; x > 100; x = x - 1 ) { cleardevice(); Analiza ovog progcircle (320, x, 10); rama pomoi e } nam da lake razufor (r = 10; r < 91; r = r + 1) #include <cstdlib> mijemo funkcionira{ #include <iostream> nje niza petlji. cleardevice(); circle (320, x, r); using namespace std; } getch(); int main() closegraph(); { return 0; int x; } int r; cout << "Prije petlji." << endl; for (x = 2; x > 0; x = x - 1 ) { cout << "Prva petlja. x = " << x << endl; } for (r = 0; r < 3; r = r + 1) { cout << "Druga petlja. r = " << r << endl; } cout << "Nakon petlji." << endl; cout << endl; system("PAUSE"); return 0; }

146

PRO - MIL

C++ programiranje za apsolutne poetnike

Dozvoljene i nedozvoljene kombinacije petlji for (x = 30; x < 610; x = x + 60) { for (r = 5; r < 31; r = r + 5) { circle (x, 240, r); } }

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

Ovakva ispreplete-

{ circle (320, x, r); }

nost dviju for naredbi nije dozvoljena.

PRO - MIL

Saimanje Veliki programi koda

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

ovom

sluaju

druga for naredba nalazi se unutar prve for naredbe. Objekti

Obrada teksta

Polja

Petlje

Petlje se mogu nalaziti jedna iza druge

Donoenje Grafika odluke

Varijable

Na prvi program

Petlje se mogu nalaziti jedna unutar druge.

Uvod

Sadraj

147

Petlje

While petlja

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

Do sada smo za svaki novi proraun programe morali iznova pokretati. Daleko elegantnije bilo bi kad bi nas program nakon prorauna pitao elimo li proraun ponoviti ili elimo prekinuti izvoenje programa.

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

148

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Prije naredbe while moramo varijabli koju e while naredba koristiti dati neku poetnu vrijednost. Ovdje se unutar zagrada nalazi uvjet koji while naredba ispituje. Uvjeti se formiraju po istoj logici kao i kod for naredbe. Ako je uvjet zadovoljen, izvrit e se naredbe unutar vitiastih zagrada, a nakon Na prvi program Uvod

Kljuna naredba u novoj inaici programa je while naredba. Logika uporabe te naredbe slina je logici uporabe for naredbe i ako bismo se potrudili svaki program realiziran for naredbom mogli bismo realizirati while naredbom i svaki program realiziran while naredbom mogli bismo realizirati for naredbom. Zato imamo dvije naredbe ako rade isti posao? Zato to se neke stvari mogu lake realizirati for naredbom, a neke while naredbom. Pogledajmo elemente while naredbe.

a = 1; while (a == 1) { cin >> a; }

toga se raunalo vraa na while naredbu i ponovo ispituje je li uvjet zadovoljen. Ako jest, ponovo se izvode naredbe unutar vitiastih zagrada. Ako nije, izvodi se prva naredba poslije druge vitiaste zagrade. U naem sluaju ispituje se je li sadraj

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

varijable a jednak broju 1. Zato prije while naredbe moramo u varijablu a staviti broj jedan. Kad bi u varijabli a bio neki drugi broj, raunalo bi skoilo na prvi red nakon druge vitiaste zagrade.

PRO - MIL

149

Petlje

Pogledajmo dijelove naeg programa. #include <cstdlib> #include <iostream> using namespace std; int main() { int broj; int kvadrat; int odgovor; Uobiajeni poetak programa i formiranje varijabli.

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

odgovor = 1; Naredba while ispituje je li sadraj varijable odgovor jednak broju 1. while (odgovor == 1) Ako jest, izvode se ove naredbe.

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

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

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

Kraj programa. Izvodit e se kad while naredba ustanovi da sadraj varijable odgovor nije broj 1.

150

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Ovdje naredbom cin preko tipkovnice unosimo novu vrijednost varijable odgovor i time biramo hoemo li petlju ponoviti ili emo izai iz programa. Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable #include <cstdlib> #include <iostream> using namespace std; int main() { int odgovor; odgovor = 1; cout << "Prije while naredbe." << endl; while (odgovor == 1) { cout << "Prvi red bloka ponavljanja" << endl; cout << "1 = nastavak ili 2 = kraj." << endl; cin >> odgovor; cout << "Zadnji red bloka ponavljanja" << endl; } cout << "Nakon while naredbe." << endl; cout << endl; system("PAUSE"); return 0; } Na prvi program Uvod

Varijablu koju e koristiti while naredba moramo prije while naredbe formirati i moramo joj dati odgovarajuu poetnu vrijednost. Zato je u naem sluaju odgovarajua poetna vrijednost 1? Zato to while naredba ispituje je li vrijednost varijable odgovor 1. Ako bi vrijednost varijable odgovor bila npr. 2, nakon while naredbe program bi skoio na ovu naredbu i sadraj unutar navodnika ne bi se izvravao.

PRO - MIL

151

Petlje

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

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

152

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Ovdje se izraunava kvadrat unesenog broja. Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod #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; } Formiranje varijabli koje emo koristiti u programu. Formiranje varijable tipa char u koju moemo spremiti jedno slovo. Nakon formiranja u varijablu odgovor spremamo slovo d. while naredbom ispitujemo je li sadraj varijable odgovor razliit od slova n. Ako jest, izvodi se sadraj unutar vitiastih zagrada. Ovdje se unosi slovo d ili slovo n na temelju ega e while naredba ponovo izvesti naredbe unutar vitiastih zagrada ako smo unijeli slovo d ili e izvesti naredbe nakon vitiastih zagrada ako smo Kraj programa. unijeli slovo n.

Pogledajmo poblie dijelove programa.

Uobiajeni poetak programa.

PRO - MIL

153

Petlje

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

While naredbu moemo iskoristiti i za viestruko pokretanje grafikih programa.

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

Ako koristimo getch() naredbu, nakon unosa ne koristima Enter tipku. Dovoljno je pritisnuti slovo d ili slovo n.

154

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj grafikog Saimanje Veliki programi koda Objekti Obrada teksta Nakon izvoenja animacije unosi se odgovor na pitanje elimo li ponoviti animaciju. Kraj programa. Ovaj dio izvodi se kad while naredba ustanovi da sadraj varijable odgovor nije razliit od n. Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Pogledajmo dijelove naeg programa.

#include <cstdlib> #include <iostream> #include <winbgim.h> using namespace std; int main() { int gdriver = 9; int gmode = 2; int x; char odgovor; odgovor = 'd'; initgraph(&gdriver, &gmode, ""); setbkcolor (WHITE); setcolor (BLACK); while (odgovor != 'n') { cleardevice(); for (x = 10; x < 465; x = x + 1 ) { cleardevice(); circle (320, x, 10); }

Uobiajeni poetak programa.

Formiranje varijabli.

Formiranje varijable odgovor. Ta varijabla je char tipa i koristit e je while petlja unutar koje se nalazi program za animaciju. Slui nam za biranje ponavljanja animacije ili kraja programa. U varijablu odgovor sprema se slovo d.

Otvaranje prozora.

Vanjska while petlja.

For petlja slui za izvoenje animacije.

settextstyle(9, HORIZ_DIR, 1); outtextxy(20, 20, "elite li ponovo (d/n)?"); odgovor = getch(); } closegraph(); return 0; }

PRO - MIL

155

Petlje

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

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

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

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

Pravokutnik koji moemo pomicati u lijevu i desnu stranu.

156

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Pogledajmo dijelove naeg programa. #include <cstdlib> #include <iostream> #include <winbgim.h> using namespace std; int main() { int gdriver = 9; int gmode = 2; int x = 290; char odgovor = 'd'; initgraph(&gdriver, &gmode, ""); setbkcolor (WHITE); setcolor (BLACK); cleardevice(); while (odgovor != 'k') { rectangle(x, 432, x+60, 438); odgovor = getch(); if (odgovor == 75) { x = x - 5; } if (odgovor == 77) { x = x + 5; } cleardevice(); } closegraph(); return 0; } Naredbom za brisanje ekrana briemo pravokutnik na staroj poziciji da bismo ga nacrtali na novoj. (Pokuajmo ovu naredbu izbaciti.) Cijelo vrijeme dok naa primitivna igrica radi, vrtjet e se u ovoj while petlji. Ako pritisnemo tipku k program e izai iz petlje i naa igrica e se ugasiti.

Uobiajeni poetak programa, formiranje varijabli i otvaranje grafikog prozora.

Ovdje se crta pravokutnik koji pomiemo.

Ovdje program ispituje koja tipka je pritisnuta, a rezultat sprema u varijablu odgovor.

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

Ako pritisnemo desnu strelicu, varijabla x e se uveati za 5, pa e se pravokutnik drugi put crtati pomaknut 5 toaka u desnu stranu.

Kraj programa.

PRO - MIL

157

Petlje

Dodamo li u prethodni program ispitivanje je li pritisnuta strelica prema gore ili strelica prema dolje, na pravokutnik moi e se pomicati u sva etiri smjera. #include <cstdlib> #include <iostream> #include <winbgim.h> using namespace std; Varijablom x odreujemo udaljenost gornjeg lijevog ugla pravokutnika od lijevog ruba grafikog prozora, a varijablom y od gornjeg ruba grafikog prozora. Brojevi 290 i 220 odreuju poetnu poziciju pravokutnika. (Pokuajmo mijenjati te brojeve.)

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

158

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Ako ovu naredbu obriemo, pravokutnik e se crtati na novoj poziciji, ali e ostati i na staroj pa e rezultat kretanja pravokutnika biti trag na zaslonu raunala. Obriimo ovu naredbu i pokrenimo program. Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Da bismo dobili primitivni program za crtanje, dovoljno je da u prethodnom programu maknemo naredbu za brisanje zaslona raunala. #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(); while (odgovor != 'k') { rectangle(x, y, x+60, y+5); odgovor = getch(); if (odgovor == 75) { x = x - 5; } if (odgovor == 77) { x = x + 5; } if (odgovor == 72) { y = y - 5; } if (odgovor == 80) { y = y + 5; } cleardevice(); } closegraph(); return 0; }

Varijablama x i y odreena je pozicija gornjeg lijevog ugla pravokutnika. Varijabla x odreuje udaljenost od lijevog ruba, a varijabla y od gornjeg ruba. Udaljenost donjeg desnog ugla pravokutnika od lijevog ruba odreena je sa x + 60, a udaljenost donjeg desnog ugla od gornjeg ruba odreena je sa y+5. irina naeg pravokutnika je 60, a visina 5. (Pokuajmo promijeniti te brojeve.)

PRO - MIL

159

Petlje

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

elimo li napraviti program za crtanje, pogodnije je za crtanje koristiti toku umjesto pravokutnika.

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

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

elimo li dobiti punu crtu, toku moramo pomicati za 1. Pokuajmo umjesto 1 staviti 2 ili 5.

160

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Ovom naredbom ispisujemo krug. Varijabla x odreuje udaljenost sredita kruga od lijevog ruba, varijabla y udaljenost sredita od gornjeg ruba, a 20 je polumjer kruga. Broj 5 odreuje pomak novog sredita u odnosu na staro. Pokuajmo mijenjati taj broj. Saimanje Veliki programi koda Imajmo stalno na umu da emo razumijevanje programa i vjetinu pisanja vlastitih programa stei jedino tako da svaki primjer programa koji je dat u ovoj knjizi mijenjamo na sve naine koji nam padnu na pamet i onda promatramo kakve posljedice izaziva odreena promjena. Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod #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(); while (odgovor != 'k') { circle(x, y, 20); odgovor = getch(); if (odgovor == 75) { x = x - 5; } if (odgovor == 77) { x = x + 5; } if (odgovor == 72) { y = y - 5; } if (odgovor == 80) { y = y + 5; } } closegraph(); return 0; }

Za crtanje moemo koristiti i krug.

PRO - MIL

161

Petlje

Objekte na zaslonu raunala osim tipkovnicom moemo pomicati i miem. #include <cstdlib> #include <iostream> #include <winbgim.h> using namespace std; Naredbom kbhit ispituje se je li bilo koja tipka na tipkovnici pritisnuta.

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

Naredbom mousex() oitava se udaljenost pokazivaa mia od lijevog ruba grafikog prozora.

Naredbom mousey() oitava se udaljenost pokazivaa mia od gornjeg ruba grafikog prozora.

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

162

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Jasno je da osim postojeih dimenzija kruga i pravokutnika moemo koristi pravokutnike i krugove drugih dimenzija. Isto tako moemo koristiti i druge grafike elemente, npr. toke ili crte. Pokuajmo sami smisliti varijacije ovakvih programa. Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Miem moemo pokretati bilo koji grafiki objekt, npr. krug. #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()) { circle(mousex(),mousey(),100); } closegraph(); return 0; } Otvaranje grafikog prozora.

Poetak programa.

Varijable kojima odreujemo tip grafikog prozora.

Unutar while petlje stalno se oitava pozicija pokazivaa mia i crta se krug ije sredite odreuje poloaj pokazivaa mia, a polumjer je 100. Petlja se izvodi tako dugo dok niti jedna tipka na tipkovnici nije pritisnuta.

Kraj programa.

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); cleardevice(); while (!kbhit()) { cleardevice(); circle(mousex(),mousey(),100); } closegraph(); return 0; }

Ako u prethodne programe dodamo naredbu za brisanje sadraja grafikog prozora, dobit emo program koji nam omoguuje pomicanje objekta miem.

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

164

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Nedostatak prethodnih programa bio je to se ekran brie i objekt ponovo crta, bez obzira je li to potrebno ili nije, odnosno bez obzira je li dolo do pomaka mia ili nije. Ako nije dolo do pomaka mia, nema potrebe objekt brisati i ponovo crtati. Neprestano brisanje i crtanje moe na sporijim raunalima izazvati treperenje slike, to je veoma neugodno. Ovaj program ispituje je li dolo do pomaka mia ili nije. Ekran se brie i objekt crta na novoj poziciji jedino ako je dolo do pomicanja mia. #include <cstdlib> #include <iostream> #include <winbgim.h> using namespace std; int main() { int gdriver = 9; int gmode = 2; initgraph(&gdriver, &gmode, ""); setbkcolor (WHITE); setcolor (BLACK); cleardevice(); while (!kbhit()) { if (ismouseclick(WM_MOUSEMOVE)) { cleardevice(); circle(mousex(),mousey(),100); } clearmouseclick(WM_MOUSEMOVE); } closegraph(); return 0; } Da bi bilo mogue novo oitavanje mia, rezultat starog oitavanja ovom se naredbom mora obrisati. Kad ovu naredbu ne bismo upotrijebili, u programu bi bilo mogue samo jedno oitavanje mia. Ovom naredbom ispitujemo je li dolo do pomaka mia. Sadraj unutar vitiastih zagrada izvrit e se jedino ako je dolo do pomaka mia. U tom sluaju obrisat e se sadraj grafikog prozora i objekt e se nacrtati na novoj poziciji.

PRO - MIL

Saimanje Veliki programi koda

Objekti

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

165

Petlje

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

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

Ovom naredbom ispitujemo je li pritisnuta lijeva tipka mia. Ako jest izvodi se sadraj unutar vitiastih zagrada.

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

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

166

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje clearmouseclick(WM_RBUTTONDOWN) Brisanje oitavanja desnog klika. ismouseclick(WM_RBUTTONDBLCLK) Oitavanje duplog desnog klika. Brisanje oitavanja duplog desnog klika. Oitavanje srednjeg klika. Brisanje oitavanja srednjeg klika. Oitavanje duplog srednjeg klika. Brisanje oitavanja duplog srednjeg klika. clearmouseclick(WM_RBUTTONDBLCLK) ismouseclick(WM_MBUTTONDOWN) clearmouseclick(WM_MBUTTONDOWN) ismouseclick(WM_MBUTTONDBLCLK) clearmouseclick(WM_MBUTTONDBLCLK) Donoenje Grafika odluke Varijable Na prvi program Uvod

OITAVANJE MIA ismouseclick(WM_MOUSEMOVE) Oitavanje kretanja mia.

clearmouseclick(WM_MOUSEMOVE)

Brisanje oitavanja kretanja mia.

ismouseclick(WM_LBUTTONDOWN)

Oitavanje lijevog klika

clearmouseclick(WM_LBUTTONDOWN);

Brisanje oitavanja lijevog klika.

ismouseclick(WM_LBUTTONDBLCLK)

Oitavanje duplog lijevog klika. Brisanje oitavanja duplog lijevog klika. Oitavanje desnog klika.

clearmouseclick(WM_LBUTTONDBLCLK)

ismouseclick(WM_RBUTTONDOWN)

PRO - MIL

167

Petlje

Do while petlja
Pokrenemo li ova dva programa, vidjet emo da je rezultat njihovog rada potpuno jednak, iako prvi koristi while naredbu, a drugi do while naredbu. #include <cstdlib> #include <iostream> #include <winbgim.h> using namespace std; int main() { int gdriver = 9; int gmode = 2; initgraph(&gdriver, &gmode, ""); setbkcolor (WHITE); setcolor (BLACK); cleardevice(); while (!kbhit()) { if (ismouseclick(WM_LBUTTONDOWN)) { circle(mousex(),mousey(),100); } clearmouseclick(WM_LBUTTONDOWN); } closegraph(); return 0; }

#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(); do { if (ismouseclick(WM_LBUTTONDOWN)) { circle(mousex(),mousey(),100); } clearmouseclick(WM_LBUTTONDOWN); } while (!kbhit()); closegraph(); return 0; }

168

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Usporedimo strukture while petlje i do while petlje.

a = 1; while (a == 1) { cin >> a; }

Odreivanje vrijednosti varijable koju e koristiti while naredba.

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

Ovaj dio unutar vitiastih zagrada ponavlja se dok je uvjet zadovoljen, u naem sluaju dok je sadraj varijable a jednak broju 1.

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

a = 1; do { cin >> a; } while (a == 1);


Dio koji se ponavlja i u kojem mora postojati mogunost promjene vrijednosti varijable a. Ovaj tip petlje zapoinje naredbom do nakon koje slijede vitiaste zagrade unutar kojih se nalazi dio programa koji se ponavlja dok je uvjet zadovoljen

Ovdje se ispituje je li zadovoljen uvjet po istoj logici po kojoj se ispituje i u while naredbi. Uoimo da se ovdje na kraju while naredbe obavezno pie ; oznaka.

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

PRO - MIL

169

Petlje

Generator sluajnih brojeva


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

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

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

170

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Ako umjesto srand(1); stavimo srand (2); dobit emo neki drugi niz brojeva. Pokuajmo i vidjet emo da emo za srand(3); dobit neki trei niz brojeva, a za srand(4); neki etvrti. Problem je u tome to emo za isti broj unutar zagrade dobivati uvijek isti niz. Dakle srand(6) davat e pri svakom pokretanju isti niz brojeva, ali drugaiji nego npr. srand(5). Oito bi bilo dobro kad bismo na neki nain broj unutar zagrade mogli mijenjati. Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Stavimo li naredbu srand(1) prije naredbe rand() postii emo da naredba rand() generira neki niz brojeva. Varijable Na prvi program Uvod

Problem koji se sastoji u tome da naredba rand(); uvijek generira isti niz brojeva rijeit emo naredbom srand(1);.

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

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

PRO - MIL

171

Petlje

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

Da bi naredba time(NULL) funkcionirala, moramo naredbom #include <ctime> ukljuiti odgovarajuu biblioteku.

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

Budui da program ne moemo vie puta pokrenuti u istom trenutku, pri svakom pokretanju ove naredbe dobit emo drugi broj.

172

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Taj problem moemo najjednostavnije eliminirati tako da prvi broj koji generira generator sluajnih brojeva ne koristimo u programu. Obrada teksta Polja Petlje U ovom rjeenju problematino je to to su esto poetni brojevi veoma slini. Prvi put smo dobili 6089, drugi put 6132, a trei put 6171. Donoenje Grafika odluke Varijable Na prvi program Uvod

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

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

PRO - MIL

173

Petlje

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

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

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

Vidimo da smo uspjeli dobiti vie doista razliitih nizova.

174

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

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

#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 = rand() / RAND_MAX; cout << sb << endl; } system("PAUSE"); return 0; }

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

Maksimalnu moguu vrijednost generiranog sluajnog broja dobit emo naredbom RAND_MAX.

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

PRO - MIL

175

Petlje

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

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

static_cast <float> ( rand() )


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

Unutar navodnika navedemo varijablu ili izraz iji tip elimo mijenjati. Mi emo mijenjati tip rezultatu izvoenja rand () naredbe.

176

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Maksimalna vrijednost koju rand() generira. Saimanje Veliki programi koda Mnoimo li broj izmeu 0 i 1 brojem 640, dobit emo brojeve izmeu 0 i 640. Objekti Obrada teksta Za sve ostale vrijednosti rezultat e biti izmeu 0 i 640, a to je ono to smo htjeli postii. Polja Ako je sluajni broj imao maksimalnu moguu vrijednost 1, rezultat e biti 640. Petlje Ako je sluajni broj imao minimalnu moguu vrijednost 0, rezultat e biti nula. Pogledajmo dio programa kojim generiramo sluajni broj izmeu 0 i 640. Donoenje Grafika odluke Varijable Na prvi program Uvod

#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) * 640; cout << sb << endl; } system("PAUSE"); Kako emo postii da program ne generireturn 0; ra brojeve izmeu 0 i 1, nego izmeu 0 i } 640? Tako da sluajni broj koji raunalo generira izmeu 0 i 1 pomnoimo sa 640.

Ovaj dio pretvara int sluajni broj u float tip.

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

Generira sluajne brojeve.

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

PRO - MIL

177

Petlje

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

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

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

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

178

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Budui da poloaj kruga odreuju dva broja, jedan koji odreuje udaljenost sredita od desnog ruba i drugi koji odreuje udaljenost sredita od gornjeg ruba generirat emo dva sluajna broja. Donoenje Grafika odluke Varijable Na prvi program Uvod

Koritenje sluajnih brojeva


Ovaj program e generirati krugove na sluajno odabranim pozicijama. Na taj nain u igrama moemo generirati objekte na sluajno odabranim mjestima.

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

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

PRO - MIL

179

Petlje

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

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

180

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj 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; } Ispitivanje se ponavlja dok uneseni broj nije jednak zamiljenom. Ovdje unosimo odgovor. Ovdje se generira sluajni broj izmeu 0 i 100. Pri svakom unosu odgovora brojanik poveavamo za 1.

PRO - MIL

Saimanje Veliki programi koda

Objekti

Izvodi se ako je zamiljeni broj manji od unesenog.

Obrada teksta

Izvodi se ako je zamiljeni broj vei od unesenog.

Polja

Petlje

Donoenje Grafika odluke

Varijable

int main() { int odgovor; int slucajni_br;

Na prvi program

using namespace std;

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

Uvod

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

181

Polja

182

PRO - MIL

PRO - MIL

Polja

C++ programiranje za apsolutne poetnike

Saimanje Veliki programi koda Obrada teksta

Objekti

Polja

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

Sadraj

183

Polja

Jednodimenzionalna polja
#include <cstdlib> #include <iostream> #include <winbgim.h> using namespace std; int main() { int gdriver = 9; int gmode = 2; initgraph(&gdriver, &gmode, ""); setbkcolor (WHITE); setcolor (BLACK); cleardevice(); moveto (0, 200); lineto (10, 200); lineto (10, 50); lineto (100, 50); lineto (100, 200); lineto (120, 200); lineto (120, 150); lineto (300, 150); lineto (300, 200); lineto (350, 200); lineto (350, 30); lineto (400, 30); lineto (400, 200); lineto (450, 200); lineto (450, 20); lineto (550, 20); lineto (550, 200); lineto (560, 200); lineto (560, 40); lineto (600, 40); lineto (600, 200); lineto (620, 200); lineto (620, 20); lineto (635, 20); lineto (635, 200); lineto (640, 200); getch(); closegraph(); return 0; } Zamislimo da kao pozadinu neke jednostavne igrice elimo nacrtati neto to bi moglo asocirati na nebodere. To moemo uiniti nizom lineto naredbi i to rjeenje funkcionira, ali i sami vidimo da nije ba osobito elegantno. Zamislimo koliko bi to rjeenje bilo nepraktino ako bismo htjeli nacrtati crte s vie detalja, npr. prozorima.

184

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

U ovom programu pojavljuju se uglate zagrade. Dobit emo ih tako da drimo pritisnutu AltGr tipku, a zatim kliknemo slovo f ili slovo g.

Ovaj program radi isti posao kao i prethodni, ali je daleko elegantniji od njega. Pogledamo li paljivo program, vidjet emo da su nam svi elementi poznati od prije, osim neobino definirane varijable polje. Dok smo u dosadanje varijable mogli spremiti jedno slovo ili broj, ini se da u ovu varijablu moemo spremiti mnotvo brojeva. Paljivi analitiar moda bi uoio da broj u uglatoj zagradi odgovara koliini brojeva u vitiastim zagra-

#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();

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

PRO - MIL

185

Polja

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

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

int a = 12;

Naredbom int a = 12; u raunalu formiramo prostor odnosno varijablu kojoj smo dali naziv a i u koju smo spremili broj 12;

12 a

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

Ovom naredbom kao i prethodnom formiramo varijablu, ali dok smo u prethodnu varijablu mogli spremiti samo jedan broj, ova varijabla sadri 5 pretinaca koji se razlikuju po brojevima i u svaki od tih pretinaca moemo spremiti jedan broj.

10 0

20 1

30 2 polje

40 3

50 4

186

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Vidimo da #include <cstdlib> #include <iostream> using namespace std; int main() { int polje[5] = {10, 20, 30, 40, 50}; cout << polje[1] << endl; system("PAUSE"); return 0; } cout << polje[1] << endl; ispisuje sadraj druge elije. Pokuajmo na slian nain ispisati sadraj neke druge npr. sa: cout << polje[0] << endl; sadraj prve elije. (U uglatoj zagradi nalazi se broj nula, a ne veliko slovo o.) Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

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

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


Za razliku od obine varijable prilikom formiranja polja u uglatim zagradama moramo navesti koliko elija sadri polje. U naem sluaju polje koje smo nazvali polje sadri 5 elija.

U vitiastim zagradama navest emo vrijednosti pojedinih elija. Vrijednosti emo meusobno odvojiti zarezima.

cout << polje[1] << endl;

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

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

PRO - MIL

187

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

Pogledajmo bitne dijelove ovog programa.

Ovdje formiramo polje koje se sastoji od 5 elija. U prvu eliju spremamo broj 10, u drugu 20, u treu 30, u etvrtu 40 i u petu 50.

Sadraj polja ispisujemo tako da uz naziv polja u uglatim zagradama navodimo i broj elije koji elimo ispisati.

#include <cstdlib> #include <iostream> 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; }

Sadraj polja ne mora se ispisivati po redu, nego se moe ispisivati bilo kojim redoslijedom.

188

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Polja mogu biti i char tipa. Pokuajmo iz ispisa izbaciti endl naredbe: cout << polje[0] << endl; napiimo u obliku cout << polje[0]; Samo cout << polje[4] << endl; nemojmo mijenjati. Saimanje Veliki programi koda Objekti Obrada teksta Polja #include <cstdlib> #include <iostream> using namespace std; int main() { char polje[5] = {'P', 'O', 'L', 'J', 'A'}; cout << polje[0] << endl; cout << polje[1] << endl; cout << polje[2] << endl; cout << polje[3] << endl; cout << polje[4] << endl; system("PAUSE"); return 0; } Petlje Donoenje Grafika odluke Varijable Na prvi program #include <cstdlib> #include <iostream> using namespace std; int main() { float polje[5] = {10.12, 20.14, 30.16, 40.18, 50.19}; cout << polje[0] << endl; cout << polje[1] << endl; cout << polje[2] << endl; cout << polje[3] << endl; cout << polje[4] << endl; system("PAUSE"); return 0; } Uvod

Polja mogu biti float tipa. (Uoimo da zarezom odvajamo brojeve, a toka ima funkciju decimalnog zareza.)

PRO - MIL

189

Polja

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

Polja moemo koristiti na isti nain kao i varijable, npr. za izraune.

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

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

190

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Ovaj nain ispisa sadraja polja daleko je elegantniji. Formirali smo petlju koja e se vrtjeti onoliko puta koliko elija petlje elimo ispisati. Varijabla petlje mijenja se od #include <cstdlib> #include <iostream> using namespace std; int main() { int polje[5] = {10, 20, 30, 40, 50}; int x; for (x = 0; x < 5; x = x + 1) { cout << polje[x] << endl; } system("PAUSE"); return 0; } poetnog broja elije koju eliod 0, do broja krajnje elije koju elimo ispisati, u naem sluaju to je 4. Pri ispisu umjesto polje[1] koristimo polje[x] to znai da se ispisuje ono polje iji broj je jednak trenutnoj vrijednosti varijable x. Objekti Saimanje Veliki programi koda Obrada teksta mo ispisati, u naem sluaju Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Sadraj polja moemo ispisati na ovaj nain. Takav nain funkcionira, ali je neelegantan. Osobito je neprikladan ako bismo htjeli ispisati vee polje.

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

PRO - MIL

191

Polja

Moemo ispisati dio elija polja, npr. prvu, drugu i treu. To emo postii tako da varijablu petlje x mijenjamo od jedan do tri po jedan.

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

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

Sadraj polja moemo ispisivati i unatrag. To emo postii tako da varijablu petlje x mijenjamo unatrag od etiri do nula po jedan.

192

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Kao to je to vrijedilo za sve elemente programa koje smo vidjeli do sada, i za polja vrijedi da emo ih najbolje shvatiti i usvojiti ako napravimo to vei broj varijacija primjera koje smo vidjeli do sada. Pokuajmo sami smisliti to vie slinih primjera. Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

#include <cstdlib> #include <iostream> using namespace std; int main() { int polje[5]; int x; cout << "Unos polja." << endl; for (x = 0; x < 5; x = x + 1) { cin >> polje[x]; } cout << "Ispis polja." << endl; for (x = 0; x < 5; x = x + 1) { cout << polje[x] << endl; } system("PAUSE"); return 0; }

Na slian nain pomou petlje moemo uporabom tipkovnice unijeti brojeve u pojedine elije.

Ovu petlju koristimo za unos brojeva u polje. Opet umjesto cin >> polje [0] imamo cin >> polje[x], a varijablu x petlja mijenja od nula do etiri i tako e se unijeti sadraj cijelog polja. Kao i do sada nakon svakog unosa broja pritisnemo Enter tipku.

Koristei isti trik ovdje ispisujemo sadraj polja. Umjesto cout << polje[0] stavili smo cout << polje[x], a x for petlja mijenja od nula do etiri i tako e se ispisati sadraj cijelog polja.

PRO - MIL

193

Polja

Pogledajmo program koji smo vidjeli na poetku ovog poglavlja.

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

Ovdje se formira polje u kojem se nalazi poloaj toaka ijim emo spajanjem dobiti crte. Na prvi pogled moe nam se uiniti da smo to ovdje uinili drugaije nego do sada. Paljivom analizom vidjet emo da nismo.

Najprije imamo int polje[54] =, a zatim u vitiasint main() tim zagradama vrijednosti pojedinih elija. { int gdriver = 9; int gmode = 2; int x; initgraph(&gdriver, &gmode, ""); setbkcolor (WHITE); setcolor (BLACK); cleardevice(); int polje[54] = { 0, 200, 10, 200, 10, 50, 100, 50, 100, 200, 120, 200, 120, 150, 300, 150, 300, 200, 350, 200, 350, 30, 400, 30, 400, 200, 450, 200, 450, 20, 550, 20, 550, 200, 550, 200, 560, 200, 560, 40, 600, 40, 600, 200, 620, 200, 620, 20, 635, 20, 635, 200, 640, 200 }; moveto (polje[0], polje[1]); for (x = 2; x < 54; x = x + 2 ) { lineto(polje[x], polje[x+1]); } getch(); closegraph(); return 0; }

Ovom naredbom odreuje se poetak niza crta.

Ovom petljom crta se ostatak crtea.

194

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Petlja e se izvoditi dok je x manji od 54. Budui da se x uveava za 2 vrijednost varijable x e rasti od 2 do 52. Varijabla x uveava se za 2. To nam odgovara zato to je kraj svake crte odreen s dva broja, pa kad elimo oitati poziciju novog kraja crte, moramo se u polju pomaknuti za dva lana polja unaprijed. Udaljenost kraja crte od gornjeg ruba grafikog prozora. Donoenje Grafika odluke Varijable Ovaj oblik pogodniji je za koritenje kad u veliko polje elimo unijeti veliku koliinu brojeva. Na prvi program Uvod int polje[5] = {10, 20, 30, 40, 50}; Ovu naredbu moemo napisati i ovako. int polje[5] = { 10, 20, 30, 40, 50 }; moveto (polje[0], polje[1]); Ova naredba odreuje poetak niza crta. Udaljenost od lijevog ruba odreena je sadrajem elije polje[0], tj. prve elije, a udaljenost od gornjeg ruba sa polje[1], tj. sadrajem druge elije. Poetna vrijednost varijable x je 2. for (x = 2; x < 54; x = x + 2 ) { lineto(polje[x], polje[x+1]); } Udaljenost kraja crte od lijevog ruba grafikog prozora.

Pogledajmo podrobnije neke detalje programa.

PRO - MIL

195

Polja

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

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

Vidimo da ovakav program moemo realizirati obinim varijabla#include <cstdlib> #include <iostream> using namespace std; ma, ali ovakav, koji koristi for naredbu, ne moemo realizirati sa-

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

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

196

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje U ovom dijelu ispisuje se sadraj varijable r, odnosno najvei broj unesen u polje. Donoenje Grafika odluke Varijable Unos polja. U ovom dijelu programa pretrauje se uneseno polje i najvei broj naen u polju sprema se u varijablu r. Na prvi program Uvod

Ne samo da uporabom polja moemo pisati elegantnije programe, nego nam polja omoguuju realizaciju programa koje bi bilo veoma teko realizirati na neki drugi nain. Pogledajmo nekoliko primjera takvih programa.

#include <cstdlib> #include <iostream> using namespace std; int main() { int polje[5]; int x; int r;

Polja nam omoguuju operacije sa elijama polja. Ovo je primjer programa koji pretrauje uneseno polje i ispisuje najvei broj u polju.

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

PRO - MIL

197

Polja

Pogledajmo detaljnije najzanimljiviji dio prethodnog program, dio u kojem se pretrauje polje i najvei pronaeni broj sprema u r varijablu.

Prvi lan polja, dakle polje[0] sprema se u varijablu r.

Pretraivanje se nastavlja unutar for petlje, ija se varijabla x mijenja od 1 do 5 po 1. Zato petlja ne poinje s nula? Zato to smo prvu eliju (polje[0]) ve proitali pa je neemo itati unutar for petlje.

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

Unutar for petlje za svaku vrijednost varijable x ispituje se je li sadraj varijable r manji od polje[x]. Ako jest, znai da je u eliji polje[x] vei broj od onog u varijabli r, pa e se sadraj elije polje[r] spremiti u varijablu r. Ako nije, znai da je broj u polje[x] manji i u tom sluaju nee se izvoditi sadraj unutar vitiastih zagrada.

Ova if naredbe je neobina. Nema else dijela. To je dozvoljeno. Ako nam else dio ne treba, moemo ga izostaviti. U tom sluaju, ako je uvjet zadovoljen, izvodi se sadraj u vitiastim zagradama, a ako nije, nastavlja se izvoenje programa.

Na kraju, u varijabli r ostaje najvea vrijednost naena u polju.

198

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

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

Jednostavnim promjenama program koji pretrauje polje sa ciljem da nae najvei broj u polju moemo preurediti u program koji trai najmanji broj. emu slue takvi programski postupci? Na slian nain bismo u programu za voenje videoteke mogli pronai korisnike koji nisu vratili film dulje od npr. tjedan dana ili korisnike koji su u proloj godini posudili najvie filmova.

Dovoljno je da umjesto ispitivanja je li r < polje[x] stavimo ispitivanje je li r > polje[x].

Odgovarajue obavijesti.

preuredimo

ispis

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

PRO - MIL

199

Polja

#include <cstdlib> #include <iostream> using namespace std; int main() { int p[5]; int zamjena; int privremeni; int x; cout << "Unos polja." << endl; for (x = 0; x < 5; x = x + 1) { cin >> p[x]; } do { zamjena = 0; for (x = 0; x < 4; x = x + 1) { if (p[x] < p[x+1]) { privremeni = p[x]; p[x] = p[x+1]; p[x+1] = privremeni; zamjena = 1; } } } while (zamjena ==1); cout << "Sortirano polje." << endl; for (x = 0; x < 5; x = x +1) { cout << p[x] << endl; } system("PAUSE"); return 0; } Ovo je sasvim sigurno najsloeniji program koji smo do sada vidjeli u ovoj knjizi. Slui za sortiranje polja. Unesemo razliite brojeve u polje, a program e ih sortirati tako da e u prvom polju biti najvei broj, a u posljednjem najmanji.

U ovom dijelu programa unosimo brojeve u polje.

U ovom dijelu vri se sortiranje polja.

U ovom dijelu sortirano polje ispisuje se na zaslon raunala.

200

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Ako jest, znai da imamo prvo manji, a zatim vei broj, pa ih treba zamijeniti. U tom sluaju u ovom dijelu e se izvriti zamjena. Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Pogledamo podrobnije dio programa u kojem se vri sortiranje.

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

Na poetku ispitivanja u varijablu zamjena stavlja se broj 0. Ako ne bude potrebno vriti nikakve zamjene u polju, varijabla zamjena ostat e jednaka nuli i izvoenje do ... while petlje e se zaustaviti.

do { zamjena = 0; for (x = 0; x < 4; x = x + 1) { if (p[x] < p[x+1]) { privremeni = p[x]; p[x] = p[x+1]; p[x+1] = privremeni; zamjena = 1; } } } while (zamjena ==1);

U for petlji ita se cijelo polje, s time da se varijabla petlje mijenja za jedan manje od veliine petlje; dakle u naem sluaju ne ide do 4 nego, do 3.

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

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

PRO - MIL

201

Polja

Pogledajmo kako funkcionira zamjena sadraja elija.

Za zamjenu sadraja dviju susjednih elija u polju treba nam pomona varijabla; u naem sluaju to je varijabla privremeni. Zato?

privremeni = p[x];

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

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

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

p[x+1] = privremeni;

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

Na kraju zamjene u varijablu zamjena stavljamo broj jedan. Time smo obavijestili raunalo da je bilo potrebno vriti zamjene u polju, tj. da polje nije bilo sortirano po redu, te da do ... while petlja mora jo jednom provjeriti je li polje sortirano. Kad se ni u jednom sluaju nee dogoditi da je neka elija manja od sljedee, sortiranje je zavreno.

zamjena = 1;

202

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Pokuajmo napisati sline programe koji e vriti neke operacije izmeu polje; npr. programe koji e mnoiti ili dijeliti lanove dvaju polja i rezultat spremati u tree polje. Program koji e usporeivati pojedine elije dvaju polja, a zatim e u tree polje spremiti vrijednost one elije koja sadri vei broj ili manji broj. Program koji e brojiti koliko puta se neki broj pojavljuje u nekom polju. Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Izmeu polja mogu se vriti matematike operacije kao i izmeu varijabli. Ovaj program e zbrojiti sadraje polja po1 i polja po2, a rezultat spremiti u polje po3 i zatim ga ispisati na zaslon raunala.

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

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

PRO - MIL

203

Polja

Spremanje brojeva u datoteku


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

204

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Ako je sve u redu, u onom istom prostoru u kojem se nalazi na projekt i na program morala bi se nalaziti i datoteka podaci.txt. Za sada je bitno imati na umu da u int ili float varijablu ne moemo staviti neogranieno velik broj.

PRO - MIL

Saimanje Veliki programi koda

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

Mogu li se u programima koristiti i vei brojevi? Naravno, ali taj problem nadilazi potrebe naeg uvodnog prirunika.

Objekti

Ako mijenjamo koliinu brojeva, onda u programu koji e ih itati moramo na isti nain promijeniti veliinu polja i for petlju.

Float tip moe imati najveu vrijednost od 3.40282 * 10-38. To se u programu pie kao 3.40285e-38.

Obrada teksta

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

Int tip u sluaju da koristimo Dev-C++ moe biti od 2147483648 do 2147483647.

Polja

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

205

Polja

Ovim programom proitat emo brojeve koji su spremljeni u datoteku podaci.txt, spremit emo ih u polje i na kraju ispisati na zaslon raunala. #include <cstdlib> #include <iostream> #include <fstream> using namespace std; int main() { int x; int polje[8]; ifstream ulaz("podaci.txt"); for (x = 0; x < 8; x = x + 1) { ulaz >> polje[x]; } for (x = 0; x < 8; x = x +1) { cout << polje[x] << endl; } system("PAUSE"); return 0; } Ispis sadraja polja. Ovdje formiramo neto s ime se do sada nismo sretali, a to je objekt. Trenutno nije vano to je to tono objekt. Za sada emo rei da je to element programa pomou kojeg emo itati sadraj datoteke.

Dodat emo novu biblioteku.

Ova petlja mora se vrtjeti onoliko puta koliko brojeva elimo proitati, odnosno koliko nae polje ima elija. U naem sluaju to je osam puta.

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

206

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Kada uitamo brojeve u polje, s tim brojevima moemo raditi sve ono to moemo raditi i s brojevima koje smo unijeli preko tipkovnice. U ovom programu izraunat emo prosjenu vrijednost unesenih brojeva. Budemo li eksperimentirali s drugim brojevima, imajmo na umu da njihova ukupna suma ne smije biti vea od maksimalne dozvoljene vrijednosti varijable. Donoenje Grafika odluke Varijable #include <cstdlib> #include <iostream> #include <fstream> using namespace std; int main() { int x; int polje[8]; float a = 0; ifstream ulaz("podaci.txt"); for (x = 0; x < 8; x = x + 1) { ulaz >> polje[x]; } for (x = 0; x < 8; x = x +1) { a = a + polje[x]; } a = a / 8; cout << "Prosjek je " << a << endl; cout << endl; system("PAUSE"); return 0; } Na prvi program Uvod

Naredba za formiranje objekta pomou kojeg emo itati sadraj datoteke.

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

ifstream ulaz ("podaci.txt");

Naziv datoteke koju emo itati pomou objekta ulaz.

PRO - MIL

207

Polja

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

Ovaj program omoguuje nam da sadraj polja koji smo unijeli preko tipkovnice spremimo u datoteku.

I u ovom sluaju moramo imati ukljuenu fstream biblioteku.

int main() { int x; int polje[8]; ofstream izlaz("podaci.txt"); for (x = 0; x < 8; x = x + 1) { cin >> polje[x]; } for (x = 0; x < 8; x = x + 1) { izlaz << polje[x]; izlaz << " "; }

Ovdje formiramo objekt izlaz pomou kojeg emo brojeve iz polja spremiti u datoteku podaci.txt.

Na uobiajeni nain unosimo brojeve u polje.

cout << "Spremanje je gotovo." << endl; cout << endl; system("PAUSE"); return 0; }

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

208

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod Naziv datoteke u koju emo spremati pomou objekta ulaz. #include <cstdlib> #include <iostream> #include <fstream> using namespace std; int main() { int x; int polje[8]; ifstream ulaz("podaci.txt"); for (x = 0; x < 8; x = x + 1) { ulaz >> polje[x]; } for (x = 0; x < 8; x = x +1) { cout << polje[x] << endl; } system("PAUSE"); return 0; }

Naredba za formiranje objekta pomou kojeg emo spremati sadraj datoteke.

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

ofstream izlaz ("podaci.txt");

to smo spremili moemo pogledati editorom, a moemo i programom koji sadraj datoteke ispisuje na zaslon raunala.

PRO - MIL

209

Polja

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

U ovom programu nema nieg novog. Samo smo kao lego kocke sloili elemente koje smo do sada upoznali. Ovaj program uitava datoteku u polje, sortira polje i zatim sortirano polje sprema natrag u datoteku.

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

U ovom djelu programa itamo sadraj datoteke i spremamo ga u polje.

Doslovno sa Copy Paste kopiran dio programa koji sortira sadraj polja od najveeg prema najmanjem.

U ovom djelu programa sadraj polja sprema se u datoteku.

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

210

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable #include <cstdlib> #include <iostream> #include <fstream> using namespace std; int main() { int x; int polje[8]; ifstream ulaz("podaci.txt"); for (x = 0; x < 8; x = x + 1) { ulaz >> polje[x]; } for (x = 0; x < 8; x = x +1) { cout << polje[x] << endl; } system("PAUSE"); return 0; } Na prvi program Uvod

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

Da bismo provjerili funkcionira li na program, najprije emo programom koji smo malo prije obradili unijeti brojeve u datoteku.

Nakon to smo brojeve unijeli u datoteku, pokrenemo program za sortiranje datoteke koji vidimo na lijevoj stranici.

Programom za itanje sadraja datoteke pogledat emo rezultat sortiranja.

PRO - MIL

211

Polja

Dvodimenzionalna polja
Ako postoje jednodimenzionalna polja, moraju postojati i dvodimenzionalna. (U suprotnom bismo imali situaciju kao kad je jedan novinar govorio o lokalnim stanovnicima nekog mjesta, iako nam vjerojatno ne bi mogao objasniti kako izgledaju globalni stanovnici istog mjesta.)

1.stupac 1. red 2. red 11 21

2. stupac 12 22

3. stupac 13 23

4. stupac 14 24

Dvodimenzionalne matrice pogodne su za spremanje sadraja tabela.

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

U ovom programu emo gornju tabelu spremiti u dvodimenzionalnu matricu, a zatim emo prvi i drugi red ispisati.

int main() { int polje[2] [4] = {{11, 12, 13, 14}, {21, 22, 23, 24}}; int x; cout << "Prvi red." << endl; for (x = 0; x < 4; x = x + 1) { cout << polje[0] [x] << endl; } cout << endl; 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.

Ispis prvog reda.

212

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod Naziv polja. Prvi red polja. Nalazi se unutar vitiastih zagrada.

Tip polja u naem sluaju je int, a moglo je biti npr. float ili char.

Drugi red polja. Nalazi se unutar vitiastih zagrada.

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

Broj redova polja.

Broj stupaca polja.

Cjelokupni sadraj polja nalazi se unutar posebnih vitiastih zagrada.

Budui da su u ovom tipu polja podaci rasporeeni u redove i stupce, prilino logino je da kad elimo pristupiti nekoj eliji takvog polja moramo navesti u uglatim zagradama broj reda i broj stupca elije kojoj elimo pristupiti.

cout << polje [0] [x]

Broj stupca kojem pristupamo, u naem sluaju je to sadraj varijable x.

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

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

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

PRO - MIL

213

Obrada teksta

214

PRO - MIL

PRO - MIL
Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Obrada teksta

C++ programiranje za apsolutne poetnike

Saimanje Veliki programi koda

Objekti

Sadraj

215

Obrada teksta

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

#include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { string odgovor; cout << "Unesite vase ime." << endl; cin >> odgovor; cout << endl; cout << odgovor << ", dobar dan!" << endl; cout << endl; system("PAUSE"); return 0; } Pogledamo li ovaj program, uinit e nam se da smo za lake baratanje tekstom upotrijebili novi tip varijable, string tip; te da smo u programu koristili varijablu koju smo nazvali odgovor.

Pogledajmo nove elemente u ovom programu.

string odgovor;

Iako ovaj red izgleda kao da formiramo varijablu string tipa koju smo nazivali odgovor, string nije tip varijable nego klasa, a odgovor nije varijabla nego objekt. Time se trenutno ne moramo optereivati i moemo objekt odgovor koristiti kao da smo formirali varijablu string tipa pod nazivom odgovor. Tek neto vee mogunosti koje e nam string pruiti dat e nam naslutiti da se iza toga naziva krije kompleksnija struktura od obine varijable.

216

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti cin >> odgovor; U naredbi cin koju koristimo za unos preko tipkovnice objekt odgovor koristimo kao to bismo koristili varijablu. Dok smo u varijablu char tipa mogli spremiti jedno slovo, u objekt klase string moemo spremati vei tekst. Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable cout << odgovor << ", dobar dan!" << endl; Vidimo da objekt odgovor u naredbi cout koristimo kao da koristimo varijablu. Najprije e se ispisati sadraj objekta odgovor, zatim tekst unutar navodnika i konano skok u novi red. Na prvi program Uvod

#include <string>

Da bi program mogao koristiti string objekte, ovu naredbu moramo staviti na poetak programa. U naem programskom okruenju program e raditi i bez ovog reda, ali je mogue da u nekom drugom programskom okruenju nee. Zbog toga emo stavljati tu naredbu

PRO - MIL

217

Obrada teksta

Oigledno je da u string objekt moemo spremiti tekst i postavlja se pitanje koliko najvie znakova smije sadravati taj tekst. U naelu raunalo bi se samo trebalo brinuti da osigura dovoljno mjesta za spremanje bilo kojeg teksta. U sluaju koritenja kraih tekstova, poput imena, naziva gradova i slino o tome ne moramo voditi brigu. elimo li u string objekt unijeti veu koliinu teksta, da bismo bili sigurni da e sve biti u redu, moemo unaprijed naredbom reserve rezervirati potreban prostor.

#include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { string odgovor; odgovor.reserve(256); cout << "Unesite vase ime." << endl; cin >> odgovor; cout << endl; cout << odgovor << ", dobar dan!" << endl; cout << endl; system("PAUSE"); return 0; }

Program radi jednako kao i prethodni, osim to smo u ovom sluaju za spremanje imena osigurali veliki prostor.

odgovor.reserve(256)

Operacija koja se vri nad objektom. Ovom naredbom se za objekt odgovor rezervira 256 mjesta za spremanje znakova.

Objekt na koji se naredba odnosi, u naem sluaju je to objekt odgovor.

Obratimo panju na toku koja se obvezno nalazi izmeu oznake objekta i oznake operacije koja se nad njim vri.

218

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj using namespace std; int main() { string odgovor; odgovor.reserve(256); cout << "Unesite vase ime." << endl; cin >> odgovor; cout << endl; cout << odgovor << ", dobar dan!" << endl; cout << endl; cout << "Imamo " << odgovor.size() << " slova." << endl; cout << endl; cout << "Imamo " << odgovor.capacity() << " prostora." << endl; cout << endl; system("PAUSE"); return 0; }

odgovor.size()
Objekt na koji se naredba odnosi.

Objekt na koji se naredba odnosi.

Zato ih je na raspolaganju 355, ako smo naredbom odgovor.reserve(256) rezervirali 256 mjesta? Zato to je 256 mjesta samo polazite na temelju kojeg prevoditelj rezervira neto vei prostor.

PRO - MIL

Saimanje Veliki programi koda

odgovor.capacity()

Naredba capacity() slui za odreivanje broja mjesta koja nam stoje na raspolaganju za unos znakova u objekt odgovor.

Objekti

Obrada teksta

Naredba size() oigledno slui za odreivanje broja znakova unesenog teksta. Rije Stjepan sastoji se od sedam slova.

Polja

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

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

Uvod

219

Obrada teksta

#include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { string odgovor; odgovor.reserve(256); cout << "Unesite vase ime." << endl; cin >> odgovor; cout << endl; cout << odgovor << ", dobar dan!" << endl; cout << endl; system("PAUSE"); return 0; }

Naredbom cin nije mogue u objekt odgovor unijeti vie odvojenih rijei. Iako smo napisali prezime i ime, uspjeli smo unijeti samo prezime.

#include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { string odgovor; odgovor.reserve(256); cout << "Unesite vase ime." << endl; getline(cin, odgovor); cout << endl; cout << odgovor << ", dobar dan!" << endl; cout << endl; system("PAUSE"); return 0; }

Ako umjesto cin naredbe upotrijebimo ovu naredbu, moi emo unijeti vie rijei u objekt odgovor.

220

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Jedan od problema pri izradi programa javlja se kad korisnik unese neodgovarajuu vrijednost. U ovom sluaju, umjesto da unesemo ime, samo smo pritisnuli tipku enter. Na prvi program Uvod Naredba koja nam omoguuje unos vie rijei u string objekt. #include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { string odgovor; odgovor.reserve(256); cout << "Unesite vase ime." << endl; cin >> odgovor; cout << endl; cout << odgovor << ", dobar dan!" << endl; cout << endl; system("PAUSE"); return 0; } U ovom sluaju, na mjestu gdje se oekivalo da emo unijeti tekst, mi smo unijeli brojeve. Postavlja se pitanje na koji bismo nain mogli sprijeiti ili barem smanjiti mogunost unoenja besmislenih odgovora.

getline(cin, odgovor);

String objekt u koji emo unositi tekst. U naem sluaju to je objekt odgovor.

PRO - MIL

221

Obrada teksta

#include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { string odgovor; do { cout << "Unesite vase ime." << endl; getline(cin, odgovor); } while (odgovor.size() == 0); cout << endl; cout << odgovor << ", dobar dan!" << endl; cout << endl; system("PAUSE"); return 0; }

Ova inaica programa e zahtijevati da ponovimo unos ako pritisnemo tipku Enter, a da prije toga nismo nita unijeli.

do { cout << "Unesite vase ime." << endl; getline(cin, odgovor); } while (odgovor.size() == 0);

Naredbu za unos teksta u objekt odgovor stavili smo u do ... while petlju koja se izvodi tako dugo dok je broj slova koja smo unijeli jednak nuli. Kad je taj broj razliit od nule, nastavlja se izvoenje programa.

222

PRO - MIL

C++ programiranje za apsolutne poetnike

Polje char tipa

#include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { char niz[255]; cout << "Unesite vase ime." << endl; cin.getline(niz,255); cout << endl; cout << niz << ", dobar dan!" << endl; cout << endl; system("PAUSE"); return 0; }

Formiranje niza ije elije su char tipa. U svaku moemo staviti jedno slovo. Polja Saimanje Veliki programi koda Objekti Obrada teksta

Tip niza. U naem sluaju niz je char tipa.

char niz[255];
Naziv niza, u naem sluaju naziv niza je niz.

Broj elija niza. U naem sluaju niz sadri 255 elija to znai da u taj niz moemo spremiti 255 slova.

cin.getline( niz, 255);


Broj elija niza. Naredbe za unos tekst u char niz.

Ovom naredbom preko tipkovnice unosimo tekst u niz char tipa.

Naziv niza.

PRO - MIL

Petlje

Tekst se moe unijeti u program i obraivati i na drugi nain; uporabom polja char tipa.

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

Sadraj

223

Obrada teksta

cout << niz << ", dobar dan!" << endl;


Naziv niza char tipa koji ispisujemo. Ispisujem tekst unutar navodnika. Skok u novi red.

Sadraj niza char tipa ispisuje se na isti nain na koji se ispisuje sadraj varijable.

#include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { char niz[255]; cout << "Unesite vase ime." << endl; cin >> niz; cout << endl; cout << niz << ", dobar dan!" << endl; cout << endl; system("PAUSE"); return 0; }

Umjesto naredbe: cin.getline(niz,255); moemo staviti naredbu: cin >> niz; ali u tom sluaju moi emo unijeti samo jednu rije. Nakon pritiska razmaknice unos e se prekinuti pa, kao to moemo vidjeti na donjoj slici, iako smo napisali Bunic Stjepan, uneseno je samo prezime. Jasno, ako ba elimo unijeti samo jednu rije onda emo upotrijebiti ovu naredbu jer je jednostavnija.

cin >> niz;


Naziv char polja u koje unosimo tekst.

Naredba za unos teksta tipkovnicom.

224

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Poetni dio programa i formiranje potrebnih varijabli. Ovo je glavni dio programa. Ovdje se unosi tekst i ispituje jesu li unesena slova ili brojevi. Ako su uneseni brojevi, unos se ponavlja. Oznaku \ dobit emo pritiskom na AltGr i Q. Zavrni dio programa, ime se spaja s pozdravom i gasi se program. Na prvi program Uvod

U ovu inaicu programa nije mogue unijeti broj na mjestu na kojem oekujemo tekst. U sluaju da unesemo brojeve, raunalo e zahtijevati da ponovimo upis.

#include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { char niz[255]; int x; int p; do { cout << "Unesite vase ime." << endl; cout << endl; cin.getline(niz,255); x = 0; p = 1; while (niz[x] != '\0') { if (isdigit(niz[x])) { p = 0; } x = x + 1; } } while (p == 0); cout << endl; cout << niz << ", dobar dan!" << endl; cout << endl; system("PAUSE"); return 0; }

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 { cout << "Unesite vase ime." << endl; cout << endl; cin.getline(niz,255); x = 0; p = 1; while (niz[x] != '\0') { if (isdigit(niz[x])) { p = 0; } x = x + 1; } } while (p == 0); Varijabla x uveava se za jedan da bi se pri svakom ponavljanju naredbom niz[x] itao slijede i lan niza. Postavljanje odgovarajuih vrijednosti varijabli. Unos teksta.

While petlja ita niz, slovo po slovo, dok ne doe do kraja niza. Oznaka \0 nalazi se na kraju niza pa niz[x] != '\0' ispituje je li element niza niz[1] jednak znaku za kraj, odnosno jesmo li doli do kraja niza. To radi tako da je na poetku vrijednost varijable x nula, a zatim se uveava po jedan

If naredbom ispitujemo je li znak u nizu broj. Ako jest, u p varijablu se sprema broj nula to e imati za posljedicu da e se ponoviti do ... while petlja, odnosno unos. Ako ni jedan lan niza nije broj, u varijabli p e ostati broj jedan i do ... while petlja se nee ponavljati, odnosno upis se nee ponavljati.

Ovdje se ispituje je li vrijednost varijable p nula i ako jest, do ... while petlja se ponavlja.

226

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Na poetku se x postavlja na nulu, to znai da e se prvi put sa niz[x] ispitivati niz[0] odnosno prva elija niza. x = 0; p = 1; while (niz[x] != '\0') { if (isdigit(niz[x])) { p = 0; } x = x + 1; } While petlja ponavlja se tako dugo dok elija niz[x] nije jednaka oznaci za kraj. Prvi put se ispituje prva elija odnosno elija niz[0]. Nakon to smo while naredbom ispitali jesmo li doli do kraja niza, if naredbom ispitujemo je li elija koju trenutno ispitujemo jednaka nuli. Ako jest, varijabla p postavlja se na nulu, to znai da e se ponoviti glavna do ... while petlja. Ovdje se varijabla x uveava za jedan. To znai da e pri sljedeem izvoenju while petlje x biti 1, pa e se sa niz[x] ispitivati niz[1], zatim pri sljedeem izvoenju while petlje niz[2] i tako do kraja niza. Donoenje Grafika odluke Varijable Na prvi program Uvod

Ovaj program je veoma sloen pa emo odvojeno pogledati vanije elemente programa. Pogledajmo prvo glavnu do ... while petlju.

do Ovdje poinje petlja. { cout << "Unesite vase ime." << endl; cout << endl; cin.getline(niz,255); x = 0; p = 1; while (niz[x] != '\0') { Ovdje e se varijabla p postaviti na nula ako je if (isdigit(niz[x])) jedan od znakova u nizu broj. To e imati za { posljedicu da e se do ... while petlja ponoviti, p = 0; odnosno da e se unos teksta ponoviti. } x = x + 1; } Ovdje se ispituje je li sadraj varijable p jednak } nuli. Ako jest do ... while petlja e se ponoviti, a while (p == 0); to znai da e se upis ponoviti.

Ovdje se u varijablu p sprema broj jedan. To je varijabla o kojoj ovisi hoe li se do ... while petlja ponoviti ili ne.

PRO - MIL

227

Obrada teksta

Ovom naredbom ispitujemo je li jedan znak broj. Moe se ispitivati varijabla char tipa ili jedna elija niza char tipa.

if ( isdigit ( niz [x] ) )


Ispitujemo eliju niza char tipa. Broj elije odreen je vrijednou varijable x.

#include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { char slovo; cin >> slovo; if (isdigit(slovo)) { cout << "Ovo je broj " << slovo << endl; } else { cout << slovo << " nije broj." << endl; } cout << endl; system("PAUSE"); return 0; } U ovom jednostavnom programu moemo vidjeti kako funkcionira ispitivanje je li unesen znak broj ili nije. Osim ispitivanje je li unijeti znak broj, mogua su i druga ispitivanja. U tablici s desne strane moemo vidjeti druge mogunosti.

Pokuajmo u gornji program staviti ostala ispitivanja koja moemo vidjeti u tablici. U tom sluaju morat emo modificirati obavijesti koje daje program.

228

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod ISPITIVANJE ZNAKOVA if (isdigit(slovo)) Ispituje je li sadraj varijable slovo neki broj. if (isalnum(slovo)) Ispituje je li sadraj varijable slovo broj ili slovo. Odgovor je negativan ako unesemo upitnik, toku ili neto slino. if (isalpha(slovo)) Ispituje je li sadraj varijable slovo neko slovo. if (iscntrl(slovo)) Ispituje je li sadraj varijable slovo kontrolni znak. To je znak koji se dobiva ako drimo tipku Ctrl i onda pritisnem npr. slovo v. Je li sadraj varijable slovo neto to se ispisuje na zaslon raunala, dakle slovo, broj ili interpunkcija. U ovu grupu ne pripada prazno mjesto izmeu dviju rijei. if (isgraph(slovo)) if (islower(slovo)) Je li sadraj varijable slovo malo slovo. if (isprint(slovo)) Je li sadraj varijable neto to se ispisuje. Za razliku od sline naredbe if (isgraph(slovo)) ovdje pripada i prazno mjesto izmeu dviju rijei. if (isupper(slovo)) Je li sadraj varijable slovo veliko slovo. if (ispunct(slovo)) Je li sadraj varijable slovo neka interpunkcija.

Osim to moemo ispitivati je li sadraj varijable broj, ispitivati moemo i druga svojstva sadraja varijable char tipa.

PRO - MIL

229

Obrada teksta

#include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { char slovo[9] = {'8','?','b','\v','*','a',' ','A','#'}; if (isdigit(slovo[0])) { cout << "Prvi znak je broj." << endl; } if (isalnum(slovo[1])) { cout << "Drugi je slovo ili broj." << endl; } else { cout << "Drugi nije ni slovo ni broj." << endl; } if (isalpha(slovo[2])) { cout << "Treci je slovo." << endl; } if (iscntrl(slovo[3])) { cout << "Cetvrti je kontrolni znak." << endl; } if (isgraph(slovo[4])) { cout << "Peti nesto sto se ispisuje." << endl; } if (islower(slovo[5])) { cout << "Sesti je malo slovo." << endl; }

230

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj } Ovaj malo vei program morali smo staviti na dvije stranice. Moemo vidjeti uporabu naredbi za ispitivanje znakova primijenjenu na polje char tipa. Vidimo da ne moemo odjednom ispitivati cijelo polje, nego da ispitujemo pojedine elije u polju. Program moemo korigirati mijenjanjem sadraj polja ili tako da, umjesto stalnog sadraja polja, sadraj polja unosimo preko tipkovnice. Uvijek imajmo u vidu da emo odreenu naredbu usvojiti tek kad napravimo mnotvo primjera u kojima se ta naredba koristi. Odreenu naredbu nismo usvojili kad smo je shvatili. Shvaanje naredbe je samo uvjet da bismo uope mogli poeti uiti. Naredbu smo usvojili tek kad smo je puno puta uspjeno primijenili u raznim programima i na razne naine. Polja Saimanje Veliki programi koda Objekti Obrada teksta

PRO - MIL

Petlje

Donoenje Grafika odluke

if (isprint(slovo[6])) { cout << "Sedmi moze biti prazno mjesto." << endl; } if (isupper(slovo[7])) { cout << "Osmi je veliko slovo." << endl; } if (ispunct(slovo[8])) { cout << "Deveti je neka interpunkcija." << endl; } cout << endl; system("PAUSE"); return 0;

Varijable

Na prvi program

Uvod

231

Obrada teksta

Pogledajmo jo nekoliko detalja vezanih uz char varijable i char polja.

#include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { char slovo1; char slovo2; cout << "Unesite prvo slovo." << endl; cin >> slovo1; cout << "Unesite drugo slovo." << endl; cin >> slovo2; Iako to na prvi pogled nema smisla, znakovi se mogu usporeivati kao i brojevi. Na prvi pogled izgleda da se usporeuju na temelju abecede, ali to nije ba tako. Ovaj program dobro radi ako usporeujemo samo velika ili samo mala slova.

if (slovo1 < slovo2) { cout << "Prvo slovo je prije po abecedi." << endl; } else { cout << "Drugo slovo je prije po abecedi." << endl; } cout << endl; system("PAUSE"); return 0; }

Zato na taj nain ne moemo usporeivati velika i mala slova? Zato to raunalo smatra da velika slova dolaze prije malih. Ako elimo napisati program koji sva slova rasporeuje po abecedi, morali bismo najprije ustanoviti je li neko slovo veliko ili malo, odnosno program bi morao biti neto sloeniji. (Pokuajmo ga napisati.)

232

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj using namespace std; int main() { char slovo = 'A'; char NizSlova[18] = "Ovo je niz slova."; cout << "Jedno slovo je " << slovo << endl; cout << "Tekst je: " << NizSlova << endl; cout << endl; system("PAUSE"); return 0; } Mogla bi nas zbuniti uporaba znaka " i znaka '. Pravilo je jednostavno, jedno slovo pie se u obliku 'a', a vie slova u obliku "Ovo je tekst.". using namespace std; int main() { char slovo; cout << "Unesite slovo." << endl; cin >> slovo; slovo = slovo - 1; cout << "Prethodni znak je " << slovo << endl; slovo = slovo + 2; cout << "slijedeci znak je " << slovo << endl; cout << endl; system("PAUSE"); return 0; } Obrada teksta Slovima moemo dodavati ili oduzimati brojeve. Saimanje Veliki programi koda Objekti

PRO - MIL

Polja

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

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

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

Uvod

233

Obrada teksta

Obrada string objekata


Do sada smo uglavnom vidjeli operacije koje se mogu provoditi nad jednim slovom spremljenim u char varijablu ili char polje. Pogledajmo sada operacije nad veim tekstom spremljenim u objekt string klase.

#include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { string tekst1 = "Ovo je prvi tekst."; string tekst2 = " Ovo je drugi tekst."; string tekst3; tekst3 = tekst1 + tekst2; cout << tekst3 << endl; cout << endl; system("PAUSE"); return 0; }

Objekte string klase moemo jednostavno zbrojiti i rezultat zbrajanja spremiti u trei objekt.

234

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj using namespace std; int main() { string tekst1; string tekst2; cout << "Unesite prvu rijec." << endl; cin >> tekst1; cout << endl; cout << "Unesite drugu rijec." << endl; cin >> tekst2; cout << endl; if (tekst1 == tekst2) { cout << "Rijeci su jednake." << endl; } else { cout << "Rijeci nisu jednake." << endl; } cout << endl; system("PAUSE"); return 0; } Objekti klase string mogu se meusobno usporeivati. U ovom programu usporeujemo jesu li jednaki.

PRO - MIL

Saimanje Veliki programi koda

Objekti

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

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

Uvod

235

Obrada teksta

#include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { string tekst1; string tekst2; cout << "Unesite prvu rijec." << endl; cin >> tekst1; cout << endl; cout << "Unesite drugu rijec." << endl; cin >> tekst2; cout << endl; if (tekst1 < tekst2) { cout << "Prva je manja." << endl; } else { cout << "Prva nije manja." << endl; } cout << endl; system("PAUSE"); return 0; }

Dva objekta klase string moemo usporeivati i tako da ispitujemo je li prvi manji od drugog. Ostaje nejasno u kojem smislu se ispituje je li prvi manji od drugog. Oito se ne ispituje koliina slova, nego se objekti rangiraju po abecedi, ab je po abecedi nakon aaaaa, pa u tome smislu ab nije manje nego je vee od aaaaa.

Kao i kod char polja, sustav je prilino primitivan i dobro radi jedino ako se ne mijeaju velika i mala slova, budui da raunalo smatra da su sva velika slova prije malih, pa su u tom smislu manja od malih. Zato raunalo smatra da je AB manje od aaaaa.

236

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program #include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { string odgovor; getline(cin, odgovor); cout << "Tekst sadrzi " << odgovor.size() << " znakova." << endl; cout << endl; system("PAUSE"); return 0; Naredba size(). } Uvod

Mogue su i sloenije manipulacije nad tekstom. Ponovno pogledajmo naredbu size() koju smo vidjeli na poetku ovog poglavlja. Omoguuje nam odreivanje broja znakova koje sadri tekst. Pri tome imajmo na umu da raunalo i prazno mjesto izmeu rijei smatra jednim znakom.

PRO - MIL

237

Obrada teksta

Ovaj program pretrauje sadraj objekta tekst i trai pojavljuje li se u tom objektu sadraj objekta trazi. Ako se pojavljuje, obavjetava nas na kojoj poziciji zapoinje traeni tekst. (Prva pozicija nema broj jedan nego broj nula.)

#include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { string tekst; string trazi; int pozicija; cout << "Unesite tekst." << endl; getline(cin, tekst); cout << endl; cout << "Sto trazim?" << endl; getline(cin, trazi); cout << endl; pozicija = tekst.find(trazi); if (pozicija != string::npos) { cout << "Pocetak je na " << pozicija << ". poziciji." << endl; } else { cout << "Nema trazene rijeci." << endl; } cout << endl; system("PAUSE"); return 0; }

238

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Problem ovog programa, odnosno ove naredbe, je u tome to e pronai samo prvo pojavljivanje neke rijei, ako se ista rije vie puta pojavljuje u tekstu. elimo li ispitati sva pojavljivanja neke rijei, morat emo napisati malo sloeniji program. Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Naziv objekta u kojem se nalazi tekst koji pretraujemo. Naredba za pretraivanja. Objekt koji pretraujemo. Ovom naredbom provjeravamo je li traena rije naena u pretraivanom objektu. Uvod

Ovom naredbom utvrujemo poziciju traenog teksta, a rezultat spremamo u varijablu pozicija.

Varijabla u koju spremamo rezultat.

pozicija = tekst.find(trazi);

if (pozicija != string::npos)

Ovom naredbom dobivamo oznaku koja oznaava da traena rije nije naena. Usporeujemo rezultat pretraivanja u pozicija varijabli i obavijest da traena rije nije naena.

U varijabli pozicija nalazi se rezultat pretraivanja objekta.

PRO - MIL

239

Obrada teksta

Ovaj program radi slian posao kao i prethodni, ali pretraivanje zapoinje od kraja teksta. Ako traimo rije koja se pojavljuje vie puta, ovaj program nai e posljednje pojavljivanje.

#include <cstdlib> #include <iostream> #include <string> using namespace std; Program je u potpunosti identiint main() an prethodnome, samo to { ovdje umjesto naredbe find string tekst; imamo naredbu rfind. string trazi; int pozicija; Time smo raunalu naredili da cout << "Unesite tekst." << endl; pretraivanje zapone od kraja getline(cin, tekst); teksta koji se nalazi u objektu cout << endl; tekst. cout << "Sto trazim?" << endl; getline(cin, trazi); cout << endl; pozicija = tekst.rfind(trazi); if (pozicija != string::npos) { cout << "Pocetak je na " << pozicija << ". poziciji." << endl; } else { cout << "Nema trazene rijeci." << endl; } cout << endl; system("PAUSE"); return 0; }

240

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj using namespace std; int main() Ovaj program smo tako korigirali da { smo, iako s naredbom find zapoistring tekst; njemo pretraivanje s lijeve strane, string trazi; pronali drugo pojavljivanje traene int pozicija; rijei. cout << "Unesite tekst." << endl; getline(cin, tekst); cout << endl; cout << "Sto trazim?" << endl; getline(cin, trazi); cout << endl; pozicija = tekst.find(trazi,6); if (pozicija != string::npos) { cout << "Pocetak je na " << pozicija << ". poziciji." << endl; } else { cout << "Nema trazene rijeci." << endl; } cout << endl; system("PAUSE"); return 0; pozicija = tekst.find(trazi,6); } Budui da prva rije radi poinje na 5, raunalo je nalo drugo pojavljivanje rijei radi. Pomou ove naredbe napravit emo program koji e pronai sva pojavljivanja neke rijei, a ne samo prvo ili posljednje.

PRO - MIL

Saimanje Veliki programi koda

U ve poznatu naredbu find dodali smo broj 6 ime smo naredili raunalu da pretraivanje objekta tekst zapone od znaka na poziciji 6.

Objekti

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

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

Uvod

241

Obrada teksta

Ovaj program moe pronai svako pojavljivanje neke rijei u nekom tekstu.

#include <cstdlib> #include <iostream> #include <string> using namespace std; int main() U ovom programu koristimo nared{ bu find, a pozicija poetka pretraistring tekst; vanja nije odreena brojem, nego string trazi; sadrajem varijable trenutno. int duljina; int trenutno = 0; Varijabla trenutno je na poetku 0, int polozaj; da bi prvo pretraivanje poelo od cout << "Unesite tekst." << endl; poetka teksta. Ako na nekoj pozigetline(cin, tekst); ciji pronaemo traenu rije, varicout << endl; jablu trenutno uveavamo za tu cout << "Sto trazim?" << endl; poziciju + 1, da bi novo pretraivagetline(cin, trazi); nje poelo nakon poetka ve nacout << endl; ene rijei i da bi se eventualno duljina = tekst.size(); pronala nova rije, a ne ponovo while (trenutno < (duljina + 1)) ista. { polozaj = tekst.find(trazi,trenutno); if (polozaj != string::npos) { cout << "Nalazi se na " << polozaj << ". mjestu." << endl; trenutno = polozaj + 1; } else Budui da smo doavi do ove toe ve { prilino napredovali u vjetini programiratrenutno = duljina + 1; nja, ovaj put je objanjenje funkcioniranja } programa neto skromnije. } cout << endl; Pokuajmo shvatiti kako funkcionira progsystem("PAUSE"); ram i pokuajmo ga korigirati tako da ispie return 0; adekvatnu obavijest, ako se traena rije } uope ne pojavljuje. Pokuajmo isti program napisati koritenjem rfind naredbe.

242

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Naredba za dodavanje teksta. Sadraj koji dodajemo.

Na neku poziciju unutar teksta moemo dodati tekst.

Objekt u koji dodajemo tekst.

tekst.insert(6,umetak);

Pozicija na koju dodajemo tekst. Obrada teksta Saimanje Veliki programi koda Objekti #include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { string tekst = "Ovo je tekst."; tekst.insert(6," dobar"); cout << tekst << endl; cout << endl; system("PAUSE"); return 0; Naredba insert moe se napisati } i na ovaj nain.

PRO - MIL

Polja

Petlje

Donoenje Grafika odluke

int main() { string tekst = "Ovo je tekst."; string umetak = " moj"; tekst.insert(6,umetak); cout << tekst << endl; cout << endl; system("PAUSE"); return 0; }

Varijable

using namespace std;

Na prvi program

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

Uvod

243

Obrada teksta

Dio teksta spremljenog u objekt klase string moemo obrisati erase naredbom.

#include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { string tekst = "Ovo je dobar tekst."; tekst.erase(7,6); cout << tekst << endl; cout << endl; system("PAUSE"); return 0; } Pozicija od kojem poinje brisanje.

Naredba za brisanje.

Objekt u kojem briemo.

tekst.erase(7,6);

Broj znakova koje emo obrisati.

244

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Pozicija od koje zapoinje zamjena teksta. Koliko emo znakova zamijeniti. Donoenje Grafika odluke Varijable Na prvi program #include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { string tekst = "Ovo je dobar tekst."; string drugi = "dodatan"; tekst.replace(7,5,drugi); cout << tekst << endl; cout << endl; system("PAUSE"); return 0; } Naredba za zamjenu teksta. Objekt u kojem mijenjamo dio teksta. Uvod

Naredbom replace moemo dio teksta koji se nalazi u objektu klase string zamijeniti nekim drugim tekstom.

tekst.replace(7,5,drugi);

Sadraj kojim emo zamijeniti tekst u objektu tekst. Zamijenit emo 5 znakova, poevi od sedmog sa sadrajem objekta drugi. Umjesto objekta drugi mogli bismo staviti i tekst unutar navodnika.

PRO - MIL

245

Obrada teksta

Premjetanje teksta iz char polja u string


Postavlja se pitanje bismo li mogli tekst iz jednog oblika pretvoriti u drugi, ovisno o tome koji oblik nam je pogodniji za obradu.

#include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { Ovdje, na nain koji smo ve vidjeli u ovom pogchar niz[255]; lavlju, ime unosimo u char polje i provjeravamo string tekst; jesu li uneseni brojevi ili slova. Ako su uneseni tekst.reserve(256); brojevi, unos se ponavlja. Naredba isdigit ne bi int x; radila da smo koristili objekt klase string. int p; do { cout << "Unesite vase ime." << endl; cout << endl; cin >> niz; x = 0; p = 1; while (niz[x] != '\0') Ovdje tekst iz polja tipa { char premjetamo u obif (isdigit(niz[x])) jekt klase string koji smo { nazvali tekst. p = 0; } To smo uinili da bismo x = x + 1; mogli koristiti size nared} bu. } while (p == 0); cout << endl; tekst = niz; cout << "Ime " << tekst << " sadrzi " << tekst.size() << " slova." << endl; cout << endl; system("PAUSE"); Naredba niz.size nije dozvoljena. Naredba return 0; size radi jedino s objektima, ali ne i s poljima. }

246

PRO - MIL

C++ programiranje za apsolutne poetnike

Premjetanje teksta iz stringa u char polje


Mogue je i tekst iz objekta klase string premjestiti u polje char tipa, ali je naredba kojom to izvodimo neto sloenija.

using namespace std; int main() { string tekst = "Tekst."; char *polje = (char*)tekst.c_str(); cout << polje[0] << endl; cout << polje[1] << endl; cout << polje[2] << endl; cout << polje[3] << endl; cout << polje[4] << endl; cout << polje[5] << endl; cout << endl; system("PAUSE"); return 0; } Tekst iz objekta selimo u char polje koje smo nazvali polje.

Formiramo objekt klase string i u njega spremamo tekst Tekst.

Ispisujemo sadraj polja da bismo vidjeli nalazi li se u njemu doista Tekst.

Naziv char polja u koje emo spremiti tekst iz objekta. U naem sluaju naziv je polje.

Naziv objekta iz kojeg tekst selimo u char polje. U naem sluaju naziv objekta je tekst.

PRO - MIL

Saimanje Veliki programi koda

char *polje = (char*)tekst.c_str();

Objekti

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

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

Varijable

Na prvi program

Uvod

Sadraj

247

Obrada teksta

Spremanje teksta u datoteku


Pomou objekata klase string moemo formirati liste i te liste moemo spremati u datoteke na slian nain na koji smo spremali brojane liste

#include <cstdlib> #include <iostream> #include <string> #include <fstream> using namespace std; int main() { int x; Kad smo spremali brojeve, izmeu string tekst[8]; brojeva stavljali smo prazno mjesto ofstream izlaz("podaci.txt"); da bismo znali gdje zavrava jedan for (x = 0; x < 8; x = x + 1) broj, a po inje drugi. { getline(cin, tekst[x]); U ovom programu prazna mjesta } nisu prikladna za razlikovanje sadrfor (x = 0; x < 8; x = x + 1) aja pojedinih elija jer se prazna { mjesta nalaze izmeu rijei. izlaz << tekst[x]; izlaz << " # "; } cout << endl; cout << "Spremanje je gotovo." << endl; cout << endl; system("PAUSE"); return 0; }

Umjesto praznih mjesta, izmeu sadraja pojedinih elija stavljamo # Ta oznaka e nam pomoi prilikom itanja datoteke.

Na ovoj slici vidi se samo dio datoteke podaci.txt.

248

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Oznaku # koristit emo da bismo utvrdili jesmo li doli do kraja sadraja jedne elije polja. Ovo rjeenje je jednostavno, ali je manjkavo. Ako bi netko prilikom unosa teksta unio # oznaku, poremetio bi ispravno funkcioniranje programa. Zbog toga bi program za unos teksta trebalo tako modificirati da ne dozvoljava unos # oznake. Donoenje Grafika odluke Varijable Na prvi program Uvod #include <cstdlib> #include <iostream> #include <string> #include <fstream> using namespace std; int main() { int x; string tekst[8]; string privremeni; ifstream ulaz("podaci.txt"); for (x = 0; x < 8; x = x + 1) { do { ulaz >> privremeni; if (privremeni != "#") { tekst[x] = tekst[x] + privremeni + " "; } } while (privremeni != "#"); } for (x = 0; x < 8; x = x +1) { cout << tekst[x] << endl; } cout << endl; system("PAUSE"); return 0; }

Programom slinim programu za itanje datoteka u kojima se nalaze brojevi itat emo sadraj datoteke u kojoj se nalaze tekstovi.

PRO - MIL

249

Objekti

250

PRO - MIL

PRO - MIL

Objekti

C++ programiranje za apsolutne poetnike

Saimanje Veliki programi koda Obrada teksta

Objekti

Polja

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

Sadraj

251

Objekti

Jednostavan primjer klase i objekata


U ovom trenutku mogla bi se javiti dva pitanja koja su meusobno povezana. Jedno pitanje je imamo li na raspolaganju samo one klase koje su napisali autor C++ jezika ili bismo mogli napisati svoje vlastite klase. Pitanje zato bismo to uope radili usko je povezano s drugim pitanjem, a to je na koji nain se piu veliki programi. Mi smo do sada pisali male programe. Piu li se na isti nain programi koji sadre nekoliko stotina tisua redova? Piu li se oni na nain da po nemo s #include <cstdlib> napiemo nekoliko stotina tisua redova, na kraju napiemo } i program je gotov. Naravno da ne. To bi bilo nepraktino iz niza razloga. U sluaju da program piemo na taj nain (to je tehniki mogue), jako teko bismo pisanje programa raspodijelili na vie osoba i u tako velikom programu jako teko bismo pronalazili greke. Postoji jo jedan problem. U veim programima esto se isti posao mora obaviti na vie mjesta u programu. Npr. ako u telefonski imenik elimo unijeti ime, prezime, ulicu, grad, zanimanje i tome slino, istu provjeru, npr. provjeru je li umjesto slova netko unio brojeve morali bismo ponoviti prilikom svakog od nabrojenih unosa. Svi navedeni problemi rjeavaju se tako da se program razdijeli u manje cjeline. U tom sluaju lake se posao podijeli na vie programera. Svaki radi svoju manju cjelinu. Manje cjeline lake se piu i u njima se lake pronalaze greke. Ako dio programa koji se esto ponavlja izdvojimo u manju cjelinu, koju pozivamo kad nam je potrebna, dobit emo manji program u kojem se lake vre izmjene. Lake je izmjenu unijeti u jedan dio koji se poziva na vie mjesta, nego u sluaju kad se isti dio programa ponavlja na desetak mjesta. U tom sluaju trebali bi pronai svih desetak mjesta i na svima promijeniti program na isti nain, to je velik posao, a postoji i velika vjerojatnost da e doi do greke. Vidimo da bi bilo dobro podijeliti program na manje dijelove pa se postavlja pitanje kako emo to uiniti. To emo uiniti kreiranjem vlastitih objekata ili preciznije reeno, kreiranjem vlastitih klasa na temelju kojih emo formirati objekte. Postoji jo jedan razlog zato je dobro poznavati uporabu klasa i objekata. elimo li pisati programa koji e se umjesto u pojednostavljenom crnom prozoru odvijati u normalnom windows prozoru, apsolutno je nuno razumjeti uporabu klasa i objekata.

252

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja #include <cstdlib> #include <iostream> Uoimo da taj program radi potpuno isti posao kao ovaj. Oito je da se u malim programima ne isplati koristiti klase i objekte. Njihove prednosti dolaze do izraaja u veim programima. using namespace std; int main() { cout << "Ovo je nas tekst." << endl; cout << endl; system("PAUSE"); return 0; } Petlje Donoenje Grafika odluke Varijable Unesimo u programsku okolinu i pokrenimo na prvi program koji koristi klase i objekte. Na prvi program #include <cstdlib> #include <iostream> using namespace std; class tekst { public: void pisi() { cout << "Ovo je nas tekst." << endl; } }; int main() { tekst t; t.pisi(); cout << endl; system("PAUSE"); return 0; } Uvod

Imajmo u vidu da prednost uporabe objekata dolazi do izraaja u veim programima. Manji programi koje emo vidjeti u ovom poglavlju mogu se elegantnije napraviti bez uporabe objekata. Unato tome, mi emo vidjeti primjere uporabe objekata u malim programima jer emo na primjerima malih programa lake shvatiti princip uporabe objekata.

PRO - MIL

253

Objekti

Najprije emo pogledati zanimljive dijelove naeg programa, a zatim funkcioniranje programa kao cjeline.

Ovaj dio programa izrazito je slian ovom dijelu programa iz prolog poglavlja.

tekst t; t.pisi();

string tekst; tekst.reserve(256);

U prvom redu formira se objekt klase tekst koji smo nazvali t. U drugom redu nad objektom t vri se operacija pisi(). Unutar zagrada nema sadraja, jer se nita ne unosi u objekt t, ali su zagrade svejedno obvezne. Oblik t.pisi bez zagrada nije ispravan.

U prvom redu formirali smo objekt klase string koji smo nazvali tekst. U drugom redu nad objektom tekst izvrili smo operaciju reserve(250) kojom smo osigurali prostor za spremanje teksta. Izmeu naziva objekta i naziva operacije nalazi se toka.

Naziv klase na temelju koje emo formirati objekt. U naem sluaju naziv klase je tekst.

tekst t ;

Naziv objekta koji formiramo na temelju klase. U naem sluaju formiramo objekt t klase tekst.

t . pisi() ;
Naziv objekta iju metodu emo koristiti. U naem sluaju koristit emo metodu t. Obvezna toka. Naziv metode koju sadri objekt t. U naem sluaju koristimo metodu pisi().

254

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj #include <cstdlib> #include <iostream> using namespace std; class tekst { public: void pisi() { cout << "Ovo je nas tekst." << endl; } }; int main() { tekst reci; reci.pisi(); cout << endl; system("PAUSE"); return 0; } Ovdje vidimo da objekt moemo nazvati i drugaije, npr. reci. Ako smo formirali objekt reci, onda naredba koja je do sada imala oblik: t.pisi(); dobiva oblik: reci.pisi(); Dakle, sad se operacija pisi vri nad objektom reci. #include <cstdlib> #include <iostream> using namespace std; int main() { int a; a = 12; cout << a << endl; cout << endl; system("PAUSE"); return 0; } Uoimo da postoji slinost izmeu formiranja objekta reci klase tekst i varijable a tipa int. I ovdje se najprije navodi tip varijable, a zatim naziv a. Nad varijablom moemo vriti razne operacije. U naem sluaju u varijablu a spremamo broj 12.

PRO - MIL

Saimanje Veliki programi koda

Objekti

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

255

Objekti

#include <cstdlib> #include <iostream> using namespace std; class tekst { public: void pisi() { cout << "Ovo je nas tekst." << endl; } }; int main() { tekst prvi; tekst drugi; tekst treci; prvi.pisi(); drugi.pisi(); treci.pisi(); cout << endl; system("PAUSE"); return 0; }

Kao to moemo formirati vie varijabli int tipa, tako moemo formirati vie objekata klase tekst. U ovom primjeru formirali smo tri objekta, objekt prvi, objekt drugi i objekt trei. Za biranje naziva objekata vrijede slina pravila kao i za biranje naziva varijabli.

class tekst { public: void pisi() { cout << "Ovo je nas tekst." << endl; } };

Za razliku od klase string koju je ve netko prije napisao, a mi je samo koristimo, klasu tekst morali smo sami napisati. U ovom dijelu programa formira se klasa tekst.

256

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Vidimo da je rezultat rada takvog programa potpuno jednak kao i rezultat rada programa u kojem smo formirali klasu tekst. Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Formiranje klase zapo inje naredbom class. To je naredba C++ jezika i ne moe se mijenjati.

class tekst

Nakon naredbe class slijedi naziv klase. U naem sluaju klasu smo nazvali tekst, ali mogli smo i drugaije.

#include <cstdlib> #include <iostream> using namespace std; class BrdaIDoline { public: void pisi() { cout << "Ovo je nas tekst." << endl; } }; int main() { BrdaIDoline t; t.pisi(); cout << endl; system("PAUSE"); return 0; }

U ovoj inaici programa klasu smo nazvali BrdaIDoline. To je dozvoljeno, samo to sad naredbu koja je prije imala oblik: tekst t; moramo napisati u obliku: BrdaIDoline t; Dakle, formiramo objekt t klase BrdaIDoline. (Drugo je to je pametno da nam naziv klase govori emu klasa slui, pa je loginije da se klasa za ispis teksta zove tekst, a ne BrdaIDoline.)

PRO - MIL

257

Objekti

public: void pisi() { cout << "Ovo je nas tekst." << endl; }

U ovom djelu nalazi se popis varijabli i metoda koje posjeduje neka klasa. Metode su mudar naziv za operacije koje neka klasa moe izvriti. U naem sluaju klasa ne sadri varijable. Ima samo jednu metodu koju smo nazivali pisi(). Popis metoda poinje naredbom public: Poblie znaenje te naredbe vidjet emo kasnije.

void pisi() { cout << "Ovo je nas tekst." << endl; }

Ova naa mala klasa ne sadri varijable i sadri samo jednu metodu odnosno moe napraviti samo jednu operaciju. Tu metodu nazvali smo pisi (). Ispred naziva metode nalazi se naredba void. Njeno znaenje poblie emo objasniti kasnije.

{ cout << "Ovo je nas tekst." << endl; }

Unutar vitiastih zagrada nalaze se naredbe koje pojedina metoda izvrava. Naa jednostavna metoda samo naredbom cout ispisuje tekst unutar navodnika na zaslon raunala.

258

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj #include <cstdlib> #include <iostream> using namespace std; class tekst { public: void Pero() { cout << "Ovo je nas tekst." << endl; } }; int main() { tekst t; t.Pero(); cout << endl; system("PAUSE"); return 0; } t.pisi(); pisati u obliku: t.Pero(); Kao i kod biranja naziva varijabli i klasa, i ovdje je pametno da nam naziv metode govori to metoda radi. Zato je naziv pisi za metodu koja ispisuje tekst bolji od naziva Pero. Naziv metode biramo po volji, pazei na ogranienja o kojima smo govorili kad smo govorili o biranju naziva varijabli. Pametno je da naziv metode tako izaberemo da nam govori emu metoda slui.

PRO - MIL

Saimanje Veliki programi koda

U kojem smislu ne vraa vrijednost vidjet emo kasnije kad ovakvu metodu usporedimo s onima koje vraaju vrijednost.

Objekti

Void naredba ispred naziva metode oznauje da metoda ne vraa nikakvu vrijednost.

void pisi ()

Dok naziv metode uz odreena ogranienja moemo birati po volji, ove dvije zagrade se ovdje moraju obavezno nalaziti.

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

To je dozvoljeno, samo to emo naredbu koju smo do sada pisali u obliku:

Varijable

U ovom primjeru metodu smo nazvali Pero().

Na prvi program

Kao to smo klasu mogli nazvati drugaije, mogli smo i metodu.

Uvod

259

Objekti

Pogledajmo strukturu naeg programa. #include <cstdlib> #include <iostream> using namespace std; class tekst { public: void pisi() { cout << "Ovo je nas tekst." << endl; } }; int main() { tekst t; t.pisi(); cout << endl; system("PAUSE"); return 0; } Poetni dio programa.

U ovom dijelu nalaze se klase koje program koristi. U naem sluaju imamo samo jednu klasu, klasu pisi().

Glavni dio programa. Sada moemo vidjeti zato smo program zapoinjali s int main() oznakom, odnosno oznakom da je to glavni dio. Kad raunalo pokrene program, najprije e se pokrenuti ovaj dio, a ostali dijelovi e se koristiti po potrebi.

Sadra klase nalazi se unutar vitiastih zagrada.

Klasa se moe sastojati od vie tipova sadraja. Jedan od njih je public. Kasnije emo podrobnije vidjeti to oznaka public oznaava.

class tekst { public: void pisi() { cout << "Ovo je nas tekst." << endl; } };

U klasi se mogu nalaziti varijable i metode. U naem sluaju varijable ne koristimo, a imamo jednu metodu koju smo nazvali pisi(). Metode su zapravo programi koji odreuju koje operacije neka klasa moe izvesti .

260

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Umjesto class tekst stavit emo class slika. Umjesto t.pisi(); tj. umjesto pozivanja metode pisi() u klasi tekst stavit emo crtaj.krug(); Saimanje Veliki programi koda Objekti Obrada teksta Umjesto tekst t; tj. umjesto naredbe formiranja objekta t klase tekst stavimo slika crtaj. Time emo formirati objekt crtaj klase slika. Polja Petlje Umjesto void pisi() stavit emo void krug(). Donoenje Grafika odluke Iako program i ovako radi, malo emo ga preurediti. Varijable Na prvi program Uvod

Unutar metode ne mora se nalaziti program za ispis. Moe se nalaziti bilo to, npr. program za crtanje kruga.

#include <cstdlib> #include <iostream> #include <winbgim.h> using namespace std; class tekst { public: void pisi() { int gdriver = 9; int gmode = 2; initgraph(&gdriver, &gmode, ""); setbkcolor(WHITE); setcolor(BLACK); cleardevice(); circle(320,240,180); getch(); closegraph(); } }; int main() { tekst t; t.pisi(); cout << endl; system("PAUSE"); return 0; }

Izbacimo naredbu cout << endl; i naredbu system("PAUSE");. Iako program radi i s tim naredbama, bez njih e raditi neto elegantnije. Ovaj se program odvija u grafikom prozoru pa su nepotrebni razmak i pauza u tekstualnom prozoru.

PRO - MIL

261

Objekti

Sloeniji primjeri klasa i objekata


Klasa moe sadravati vie metoda, npr. u ovom sluaju sadri tri metode.

#include <cstdlib> #include <iostream> using namespace std; class tekst { public: void prva() { cout << "Ovo je prva metoda." << endl; } void druga() { cout << "Ovo je druga metoda." << endl; } void treca() { cout << "Ovo je treca metoda." << endl; } }; int main() { tekst t; t.prva(); t.druga(); t.treca(); cout << endl; system("PAUSE"); return 0; }

Prva metoda koju smo nazvali prva().

Druga metoda koju smo nazvali druga().

Trea metoda koju smo nazvali treca().

Objekt formiramo jednom, a zatim pozivamo metode po logici da najprije navedemo naziv objekta, zatim stavimo toku i konano naziv metoda. Zagrade na kraju te ; oznaka su obvezne.

262

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Prva klasa koju smo nazvali tekst1. Druga klasa koju smo nazvali tekst2. Uoimo da je dozvoljeno da se metoda pod istim nazivom pisi() nalazi u obje klase. Saimanje Veliki programi koda Ovdje na temelju svake klase formiramo objekt, a zatim pozivamo metodu od svake klase odnosno operaciju koju objekt moe izvriti Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program #include <cstdlib> #include <iostream> using namespace std; class tekst1 { public: void pisi() { cout << "Ovo je klasa tekst1." << endl; } }; class tekst2 { public: void pisi() { cout << "Ovo je klasa tekst2." << endl; } }; int main() { cout << "Zovemo metodu klase tekst1." << endl; tekst1 t1; t1.pisi(); cout << endl; cout << "Zovemo metodu klase tekst2." << endl; tekst2 t2; t2.pisi(); cout << endl; system("PAUSE"); return 0; } Uvod

Program moe sadravati vie klasa, npr. u ovom sluaju klasu tekst1 i klasu tekst2.

PRO - MIL

263

Objekti

#include <cstdlib> #include <iostream> using namespace std; class tekst { public: void pisi() { cout << "Upravo koristimo objekt." << endl; } }; int main() { tekst t; cout << "Objekt koristimo 1. put." << endl; t.pisi(); cout << endl; cout << "Objekt koristimo 2. put." << endl; t.pisi(); cout << endl; cout << "Objekt koristimo 3. put." << endl; t.pisi(); cout << endl; system("PAUSE"); return 0; }

Jednom formirani objekt moemo proizvoljni broj puta koristiti u programu. To je jedna od prednosti koritenja klasa i objekata. Operaciju koja se u programu esto ponavlja stavimo u klasu, u programu formiramo objekt i pozivamo odreenu operaciju kad god nam zatreba, bez potrebe da je ponovo piemo.

Sve klase koje smo do sada formirali bile su veoma jednostavne budui da nisu komunicirale s ostatkom programa na nain da bi bilo mogue u klasu unijeti neke podatke ili iz klase iitati neke podatke, npr. brojeve ili tekst. U nastavku ovog poglavlja vidjet emo na koji nain moemo u klase unositi ili iz klasa iitavati podatke.

Uporaba klasa i objekata veoma je sloena ideja, i kao uvijek do sada, imajmo na umu da emo te programske tehnike usvojiti tek kad napravimo velik broj primjera.

264

PRO - MIL

C++ programiranje za apsolutne poetnike

Komunikacija s metodama
Pogledajmo sada program koji sadri klasu u koju je mogue unijeti podatke iz drugih dijelova programa.

#include <cstdlib> #include <iostream> using namespace std; class pravokutnik { private: int c; public: void naslov() { cout << "Povrsina pravokutnika." << endl; cout << endl; } int povrsina (int a, int b) { c = a * b; return (c); } }; int main() { pravokutnik p; p.naslov(); cout << "Povrsina je "; cout << p.povrsina(2,3); cout << endl << endl; system("PAUSE"); return 0; } Klasa pravokutnik sadri jednu varijablu. To je varijabla c int tipa, a nalazi se u private grupi.

Osim varijable u sa sadri i dvije metode u public grupi. To su metoda naslov() i metoda povrsina (int a, int b). Objekti Saimanje Veliki programi koda Obrada teksta Polja private grupi, kla-

U glavnom programu formiramo objekt p klase pravokutnik i koristimo ga.

PRO - MIL

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

Sadraj

265

Objekti

#include <cstdlib> #include <iostream> using namespace std; class pravokutnik { private: int c; Prethodni program malo smo modificirali da bi lake mogli shvatiti razliku izmeu naredbe private i naredbe public.

public: U public podruju dodali smo int pov; varijablu koju smo nazvali pov. void naslov() { cout << "Povrsina pravokutnika." << endl; cout << endl; } Sadraj varijable c koja je formirana u int povrsina (int a, int b) { c = a * b; pov = c; return (c); } }; int main() { pravokutnik p; p.naslov(); cout << "Povrsina je "; cout << p.povrsina(2,3); cout << endl; cout << "p.pov je " << p.pov << endl; // cout << "p.c je " << p.c << endl; cout << endl << endl; system("PAUSE"); return 0; } private podruju i u kojoj se nalazi rezultat izrauna povrine spremili smo u varijablu pov koja je formirana u public podruju.

Ovdje vidimo da sadraju varijable pov moemo pristupiti u glavnom programu, iako je formirana u objektu. Pristupamo joj tako da prvo napiemo naziv objekta zatim toku i na kraju varijablu, dakle u p.pov obliku. Pokuamo li na isti nain pristupiti varijabli c, doi e do greke. (elimo li probati, maknimo // oznaku na poetku reda.) Ve iz ovog primjera bismo mogli zakljuiti u kojem smislu je c varijabla private, a kojem smislu je pov varijabla public.

266

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Ovdje su formirane jo dvije varijable, varijabla a i varijabla b. Iako bi bilo logino da tim varijablama moemo pristupiti izvan klase odnosno izvan objekta, jer su formirane u public podruju, to ipak nije sluaj. Pokuamo li im pristupiti izvan objekta doi e do greke. Dakle izvana moemo pristupiti samo onim varijablama koje su u public podruju formirane samostalno kao pov varijabla, a ne moemo onima koje su formirane unutar neke metode. Polja Petlje Donoenje Grafika odluke Varijable Na prvi program class pravokutnik { private: int c; public: int pov; void naslov() { cout << "Povrsina pravokutnika." << endl; cout << endl; } int povrsina (int a, int b) { c = a * b; pov = c; return (c); } }; Za razliku od private podruja, svemu to formiramo u public podruju moemo pristupiti i izvan klase, odnosno izvan objekta. To ne moemo uiniti tako da samo navedemo naziv varijable ili procedure nego tako da prvo navedemo naziv objekta, zatim toku i na kraju naziv varijable ili procedure. Ako pristupamo proceduri, moramo navesti i zagrade. Uvod

Naredba private oznaava podruje u kojem se nalaze varijable i metode koje se mogu koristiti unutar klase odnosno unutar objekta, ali se njima ne moe pristupiti iz glavnog programa, odnosno izvan objekta. U ovom programu u private podruju imamo samo varijablu c. Mogli bismo imati i procedure.

PRO - MIL

267

Objekti

private: int c;

Unutar private podruja u ovom sluaju formirali smo samo varijablu c. Mogli bismo staviti i procedure, ali u tom sluaju bismo tim procedurama mogli pristupiti samo unutar klase odnosno samo unutar objekta. Nain pisanja bio bi isti kao i unutar public podruja.

Ovdje formiramo pov varijablu int tipa. Varijable unutar klase formiramo na potpuno jednak nain kao i unutar glavnog programa.

public: int pov; void naslov() { cout << "Povrsina pravokutnika." << endl; cout << endl; } int povrsina (int a, int b) { c = a * b; pov = c; return (c); }

Ovdje formiramo metodu za ispis teksta na zaslon raunala. Takav tip procedure ve smo vidjeli u prethodnim primjerima.

Ovdje formiramo metodu za izraun povrine pravokutnika. Vidimo da joj je oblik drugaiji od oblika naslov() metode pa emo je poblie pogledati.

Do sada smo formiranje metode zapoinjali s void. Ova metoda zapoinje s int. to to znai? To znai da e ova metoda biti int tipa, odnosno da e rezultat njenog rada biti broj int tipa. Naredbom: cout << p.povrsina(2,3); ispisat emo rezultat rada metode povrsina na zaslon, a rezultat je broj int tipa.

Naziv metode.

Ulazne varijable su unutar zagrada.

int povrsina ( int a, int b )


Ovdje je popis varijabli koje moemo unijeti u metodu. U ovu metodu moemo unijeti dva broja. Prvi e biti spremljen u varijablu a, drugi u varijablu b, a oba su int tipa.

268

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta c = a * b; pov = c; Unutar metode mogu se koristiti varijable koje smo koristili za unos, varijabla a i varijabla b, te se mogu koristiti sve one varijable koje su formirane u public ili private podruju, dakle varijabla c i varijabla pov. return (c); Ovom naredbom odreujemo koju vrijednost e procedura vraati u glavni program, odnosno to e naredba cout << p.povrsina(2,3); ispisati. Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Pogledajmo jo jednom naredbu za formiranje metode koja zapoinje void naredbom.

Void naredba znai da metoda naslov nee vraati nikakav rezultat rada. Sad e netko upitati, kako ne vraa kad ispisuje tekst na zaslon. Ispisuje, ali se ispisivanje zbiva unutar metode. U glavnom programu mogue je napisati: cout << p.povrsina(2,3); ali nije mogue napisati: cout << p.naslov(); Mogue je jedino s: p.naslov(); pozvati metodu naslov koja onda unutar sebe ispisuje tekst na zaslon raunala.

Prazne zagrade znae da u ovu metodu nita nije mogue unijeti na nain da se napie: p.naslov(2,3); Mogue je unutar metode staviti cin naredbu pa neto unijeti npr. preko tipkovnice, ali nije mogue nita unijeti na gore opisan nain.

void naslov ()

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; return (c); } int metoda2(int a, int b) { c = a + b; return (a); } int metoda3(int a, int b) { c = a + b; return (b); } }; int main() { racunaj r; cout << "return(c) daje " << r.metoda1(2,4) << endl; cout << "return(a) daje " << r.metoda2(2,4) << endl; cout << "return(b) daje " << r.metoda3(2,4) << endl; system("PAUSE"); return 0; }

U ovom programu moemo lijepo vidjeti kako o naredbi return ovisi to e se naredbom r.metoda1(2,4) ispisati na zaslon raunala.

Ako smo u metodi upotrijebili naredbu return (c), naredbom r.metoda1(2,4) ispisat e se sadraj varijable c. Naredbom return(a) ispisat e se sadraj varijable a, a naredbom return(b) ispisat e se sadraj varijable b.

270

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj using namespace std; class racunaj { private: int a; int b; int c; public: void unesi(void) { cout << "Unesite stranicu a." << endl; cin >> a; cout << "Unesite stranicu b." << endl; cin >> b; } void povrsina(void) { c = a * b; cout << "Povrsina je " << c << endl; } }; int main() { racunaj p; p.unesi(); p.povrsina(); cout << endl; system("PAUSE"); return 0; } Na prvi program p.povrsina(2,3); Mogue je jedino naredbom: p.unesi(); pozvati metodu za unos brojeva. Petlje Saimanje Veliki programi koda Objekti Obrada teksta Metodom povrsina izraunava se povrina i ispisuje rezultat. Rezultat se ispisuje unutar metode. Nije mogua naredba: cout << p.povrsina(); Polja Donoenje Grafika odluke U ovom programu imamo dvije void metode. Metodom unesi unose se brojevi u varijablu a i varijablu b. To se vri unutar metode. Nije mogue napisati naredbu: Varijable

PRO - MIL

Uvod

#include <cstdlib> #include <iostream>

271

Objekti

#include <cstdlib> #include <iostream> using namespace std; class racunaj { private: int a; int b; int c; U ovom programu najprije raunamo povrinu, a zatim dobiveni rezultat mnoimo sa cijenom kvadratnog metra povrine da bismo dobili cijenu povrine.

public: void unesi(void) { cout << "Unesite stranicu a." << endl; cin >> a; cout << "Unesite stranicu b." << endl; cin >> b; } int povrsina(void) { c = a * b; return (c); } Obratimo panju na }; injenicu da unutar glavnog programa smiint main() jemo koristiti c varijab{ lu, iako c varijabla posint c; toji u klasi racunaj. int u; racunaj p; p.unesi(); cout << "Cijena kvadratnog metra." << endl; cin >> c; u = c * p.povrsina(); cout << "Cijena poda je " << u << endl; cout << endl; system("PAUSE"); return 0; }

Vidjeli smo da rezultat izrauna unutar metode moemo ispisati na dva naina. Ako je metoda tipa void onda se rezultat ispisuje unutar metode. Tada naredba tipa: cout << povrsina(); nije mogua. Ako metoda nije void tipa, nego int ili float ili char, onda je mogue napisati gore navedenu naredbu. Postavlja se pitanje u emu je razlika u funkcionalnosti tih dvaju naina ispisa. Razlika je u tome da ako metoda nije void tipa, onda metodu moemo koristiti unutar izraza poput: u = c * p.povrsina();

272

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj #include <cstdlib> #include <iostream> using namespace std; class racunaj { private: int a; int b; int c; int p; int u; public: void unesi(void) { cout << "Unesite stranicu a." << endl; cin >> a; cout << "Unesite stranicu b." << endl; cin >> b; cout << "Cijena kvadratnog metra." << endl; cin >> c; } void cijena(void) { p = a * b; cout << "Povrsina je " << p << endl; u = p * c; cout << "Cijena je " << u << endl; } }; int main() { racunaj p; p.unesi(); p.cijena(); cout << endl; system("PAUSE"); return 0; } Da je to int metoda i da rezultat vra amo return naredbom, mogli bi napisati ili return (p) ili return(u), ali ne bismo mogli vratiti obje vrijednosti. Ukratko, koju od metoda ispisa emo upotrijebiti ovisi o potrebama koje moramo zadovoljiti.

PRO - MIL

Saimanje Veliki programi koda

Objekti

Obrada teksta

Polja

U ovom sluaju u metodi cijena mi ispisujemo povrinu i cijenu.

Petlje

Ako za ispis koristimo void metodu pa uporaba naredbe return nije mogua, ispisom rezultata unutar metode moemo ispisati vie vrijednosti.

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

273

Objekti

Naredba cout << p.povrsina(2,3); zbunjujua je izmeu ostalog i zato to istovremeno slui za unos broja 2 i broja 3 u metodu i za ispis rezultata mnoenja, odnosno rezultata rada metode.

cout << p.povrsina( 2, 3 );

Kad raunalo naie na ovakvu naredbu, najprije e broj dva i broj tri proslijediti u varijablu a i varijablu b koje se nalaze u metodi povrsina.

int povrsina ( int a, int b ) { c = a * b; return ( c ); }

Unutar metode povrsina raunalo e sadraj varijable a i varijable b pomnoiti, a rezultat spremiti u varijablu c.

cout << p.povrsina(2,3) ;

Kad raunalo naie na naredbu return(c) , sadraj varijable c ispisat e na zaslon raunala. Ova naredba tada e funkcionirati kao da smo u programu koji ne sadri klase i objekte napisali: cout << c;

274

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj #include <cstdlib> #include <iostream> using namespace std; class pravokutnik { private: float c; public: void naslov() { cout << "Povrsina pravokutnika." << endl; cout << endl; } float povrsina (float a, float b) { c = a * b; return (c); } }; int main() { float a1; float b1; pravokutnik p; p.naslov(); cout << "Unesite stranicu a." << endl; cin >> a1; cout << "Unesite stranicu b." << endl; cin >> b1; cout << "Povrsina je "; cout << p.povrsina(a1,b1); cout << endl << endl; system("PAUSE"); return 0; } Kao to smo ve rekli, metode ne moraju biti int tipa. Mogu biti i nekog drugog tipa. U ovom programu imamo metodu float tipa. Vidimo da naredbu: p.povrsina(a1,b1) moemo pisati i tako da unutar zagrada umjesto konkretnih brojeva stavimo varijable.

PRO - MIL

Saimanje Veliki programi koda

Objekti

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

275

Objekti

Razdvajanje deklaracije i definicije


Do sada su se metode nalazile unutar klase. U sloenijim programima najee je deklaracija klase odvojena od definicija metoda. U deklaraciji klase metode se samo nabroje, a definicije metoda se nalaze drugdje.

#include <cstdlib> #include <iostream> using namespace std; class pravokutnik { private: int c; public: int povrsina (int a, int b); }; int pravokutnik :: povrsina (int a, int b) { c = a * b; return (c); };

U deklaraciji klase samo su nabrojeni elementi klase i podijeljeni u private i public podruje. Ovdje se nalazi samo zaglavlje metode pravokutnik u kojem su odreena ulazna i izlazna svojstva metode, ali ovdje nema sadraja metode.

int main() { cout << "Povrsina pravokutnika" << endl; cout << endl; pravokutnik p; cout << "Povrsina je = " << p.povrsina(2,3) << endl; cout << endl; system("PAUSE"); return 0; }

Sadraj metode pravokutnik, odnosno dio programa kojim odreujemo to e metoda pravokutnik raditi nalazi se ovdje.

Ovako napisanu klasu koristimo na isti nain kao i klase koje smo do sada koristili.

276

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Pogledajmo kako su povezane deklaracija metode i definicije metode.

Tip vrijednosti koju e metoda vraati kao rezultat. U ovom sluaju je int, a mogao bi biti i neki drugi npr. float.

Obvezna ; oznaka Deklaracija metode u deklaraciji klase. Ovdje je naveden naziv metode i ulazno-izlazna svojstva metode, ali ne i program metode.

int povrsina (int a, int b) ;

int pravokutnik :: povrsina (int a, int b)

Definicija metode. Ovdje se nalazi program koji odreuje to ta metoda radi, odnosno svojstva metode.

Naziv klase.

Naziv metode.

Popis varijabli preko kojih se brojevi mogu unijeti u metodu.

Obvezna :: oznaka izmeu naziva klase i naziva metode.

U veini sluajeva do sada noviji nain izrade programa bio je elegantniji od starog. U ovom sluaju to ba ne izgleda tako. Ovakav nain pisanja klase oigledno je manje elegantan od prethodnog. Postoji vea vjerojatnost da e doi do greke budui da treba uskladiti deklaraciju metode i definiciju metode. Ovaj nain pisanja klasa doista je manje elegantan od naina koji smo koristili u prethodnim programima i ima ga smisla upotrebljavati samo kad elimo vei program razdijeliti u vie datoteka. Ako klase piemo na ovaj nain, tada moemo u jednu datoteku staviti sve deklaracije klasa, a u druge datoteke definicije metoda. Ako se program nalazi u jednoj datoteci, bolje je definiciju metode napisati unutar deklaracije metode kao to smo to inili u prethodnim programima.

PRO - MIL

277

Objekti

Uporaba konstruktora

#include <cstdlib> #include <iostream> using namespace std; class pravokutnik { private: int a; int b; public: pravokutnik(void) { cout << "Stranica a:" << endl; cin >> a; cout << "Stranica b:" << endl; cin >> b; } int povrsina(void) { return (a * b); } }; U ovom programu nalazi se nekoliko neobinosti. Prva neobinost jest ova metoda. Neobino je to to ima isti naziv kao i klasa. Klasu smo nazvali pravokutnik i ova metoda zove se pravokutnik. Druga neobinost jest to ova metoda nema nikakvu oznaku povratne vrijednosti, nije ni void pravokutnik(), ni int pravokutnik().

int main() { pravokutnik p; cout << "Povrsina je " << p.povrsina() << "." << endl; cout << endl; system("PAUSE"); return 0; }

Neobino je i to to je nigdje ne pozivamo. U ovom redu formiramo objekt p klase pravokutnik, a ve u sljedeem redu pozivamo metodu povrsina.

Iako nigdje u programu nije vidljivo pozivanje metode pravokutnik, njen sadraj se oigledno izvrava. Oigledno je da prije izvoenja metode povrina raunalo unosi stranicu a i stranicu b. Takva metoda naziva se konstruktor, a izvrava se u trenutku formiranja objekta. Dakle, ova metoda izvrila se u trenutku kad smo naredbom pravokutnik.p formirali objekt p klase pravokutnik.

278

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj using namespace std; class pravokutnik { U ovom programu imamo private: dva konstruktora. int a; int b; Jednome je ulazni dio void public: tipa, to znai da se u njega pravokutnik(void) ne moe unositi vrijednost { tako da napiemo: cout << "Stranica a:" << endl; cin >> a; pravokutnik p2(3,4); cout << "Stranica b:" << endl; cin >> b; } Drugome je ulazni dio (int a1, pravokutnik(int a1, int b1) int b1), to znai da se u nje{ ga moe vrijednost unositi a = a1; tako da napiemo: b = b1; } pravokutnik p2(3,4); int povrsina(void) { return (a * b); } Ovdje formiramo objekt klase pravokutnik bez }; vrijednosti u zagradi. U tom sluaju primijenit e se pravokutnik(void) konstruktor. int main() { pravokutnik p1; cout << "Povrsina je " << p1.povrsina() << "." << endl; cout << endl; pravokutnik p2(3,4); cout << "Za p2(3,4) povrsina je " << p2.povrsina() << "." << endl; cout << endl; system("PAUSE"); Objekt p2(3,4); u zagradi ima dva broja, pa e se u return 0; tom sluaju primijeniti pravokutnik(int a1, int b1) kon} struktor. U tom sluaju povrina e se izraunati mnoenjem brojeva 3 i 4, bez unosa tipkovnicom.

PRO - MIL

Saimanje Veliki programi koda

Objekti

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

#include <cstdlib> #include <iostream>

Uvod

279

Objekti

Nasljeivanje

#include <cstdlib> #include <iostream> using namespace std; class kvadrat Klasa kvadrat napisana je na { uobiajeni nain. protected: int br; public: void unos (void) Klasa kub napisana je na nain koji { do sada nismo koristili. cout << "Unesite broj:" << endl; cin >> br; Naredbom: } int izracun (void) class kub : public kvadrat { return (br * br); formiramo klasu kub koja nasljeuje } varijable i metode klase kvadrat. Dak}; le klasa kub moe koristiti metodu class kub : public kvadrat unos, iako je ona definirana u klasi { unos. public: int izracun(void) { return (br * br * br); Objekt objekt2 klase kub moe koristiti meto} du unos koja se nalazi u klasi kvadrat kao da }; je njezina klasa. To je mogue jer je klasa kub naslijedila klasu kvadrat. int main() { kvadrat objekt1; objekt1.unos(); cout << "Kvadrat je " << objekt1.izracun() << endl; Metodu izracun cout << endl; posjeduju obje kub objekt2; klase. U tom sluobjekt2.unos(); aju klasa kub kocout << "Kub je " << objekt2.izracun() << endl; ristit e svoju inaicout << endl; cu objekta izracun. system("PAUSE"); Inaica u klasi kub return 0; prekrila je inaicu } u klasi kvadrat.

280

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Pogledajmo meusobnu povezanost bitnih dijelova programa u kojem je primijenjena tehnika nasljeivanja klasa.

class kvadrat void unos (void) int izracun (void)

U klasi kvadrat definirane su dvije metode, metoda unos i metoda izraun. Klasu kvadrat moemo koristiti na nain koji smo koristili u dosadanjim primjerima.

Naziv nove klase.

Naredba za nasljeivanje klase.

Klasa koju klasa kub nasljeuje.

class kub : public kvadrat int izracun (void)

Ovako deklarirana klasa kub nasljeuje sve varijable i metode klase kvadrat. Klasa sadri metodu izracun, iako metodu izraun posjeduje i klasa kvadrat koju nasljeuje. U tom sluaju klasa kub koristit e vlastitu inaicu metode izracun.

kub objekt2; objekt2.unos();

Ovdje koristimo metodu unos, iako je klasa kub ne posjeduje. To je mogue jer klasa kub nasljeuje klasu kvadrat, a klasa kvadrat sadri klasu unos.

objekt2.izracun()

Iako metodu izracun posjeduje i klasa kvadrat, objekt2 koristit e vlastitu inaicu metode izraun.

PRO - MIL

281

Veliki programi

282

PRO - MIL

PRO - MIL
Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Veliki programi

C++ programiranje za apsolutne poetnike

Saimanje Veliki prokoda grami

Objekti

Sadraj

283

Veliki programi

Jednostavna igra u jednoj datoteci


#include <cstdlib> #include <iostream> #include <winbgim.h> #include <ctime> using namespace std; class objekt { private: int x; char kretanje; public: objekt() { x = 290; } void pomak(char); void crtaj(); }; void objekt :: pomak(char tipka) { kretanje = tipka; if (kretanje == 75) { setcolor (WHITE); rectangle(x, 432, x+60, 438); setcolor (BLACK); x = x - 5; } if (kretanje == 77) { setcolor (WHITE); rectangle(x, 432, x+60, 438); setcolor (BLACK); x = x + 5; } } void objekt :: crtaj() { rectangle(x, 432, x+60, 438); } Ovdje se nalazi deklaracija klase objekt. Sastoji se od dvije varijable, x i kretanje; te od dvije metode, pomak i crtaj. Ovaj program neto je vei od programa koje smo do sada pisali, pa e se zato protezati kroz nekoliko stranica.

Unutar deklaracije klase nalazi se konstruktor koji varijabli x daje poetnu vrijednost 290. Ta varijabla odreuje poziciju objekta koji pomiemo pomou tipkovnice.

Ovdje je sadraj metode pomak. U metodu se unosi podatak o tome koja tipka je pritisnuta. Metoda ispituje je li pritisnuta strelica u lijevu ili strelica u desnu stranu. Ako je neka od tih tipki pritisnuta, vrijednost varijable x koja odreuje poloaj objekta koji pomiemo adekvatno e se poveati ili smanjiti.

Ovdje je sadraj metode crtaj. Ona crta objekt koji pomiemo pomou strelica na tipkovnici.

284

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki prokoda grami Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Male programe moemo smjestiti u jednu datoteku. Za vee programe to nije praktino rjeenje. Ako je veliki program u jednoj velikoj datoteci tee je pronai greku, tee je napraviti izmjenu programa i tee je podijeliti posao izmeu vie programera. U ovom poglavlju vidjet emo kako podijeliti jedan neto vei program u vie datoteka. Najprije emo program napisati u jednoj velikoj datoteci, a zatim ga podijeliti u vie manjih datoteka.

class bomba { Deklaracija sadri konstruktor koji odreuje poetprivate: nu poziciju bombe. int x, y; public: bomba() { x = (static_cast <float> (rand()) / RAND_MAX) * 620; y = -((static_cast <float> (rand()) / RAND_MAX) * 480); } void crtanje(); void brisanje(); }; void bomba :: crtanje() Sadraj metode crtanje. { rectangle (x,y,(x+20),(y+5)); } void bomba :: brisanje() Sadraj metode brisanje. { setcolor(WHITE); rectangle (x,y,(x+20),(y+5)); setcolor(BLACK); y = y + 5; if (y > 490) { y = -((static_cast <float> (rand()) / RAND_MAX) * 480); x = (static_cast <float> (rand()) / RAND_MAX) * 620; } }

Ovdje se nalazi deklaracija klase bomba. Sastoji se od varijabli x i y koje odreuju poloaj bombe na zaslonu te metode crtanje koja crta bombu i od metode brisanje koja brie bombu da bi se dobila iluzija kretanje bombe.

PRO - MIL

285

Veliki programi

Ovdje se nalazi glavni dio programa koji e koristiti prije formirane klase.

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

Odreivanja svojstva grafike, veliine grafikog prozora, boje pozadine i boje objekata.

Formiranje varijable odgovor u kojoj e se nalaziti podatak o trenutno pritisnutoj tipki.

char odgovor = 'd';

Formiranje generatora sluajnih brojeva kojim emo odreivati mjesto pojavljivanja bombi, odnosno objekata koji se kreu odozgo prema dolje.

srand(time(NULL)); Formiranje triju objekta klase bomba, bomba1, bomba2 i bomba3. To su objekti koji se kreu odozgo prema dolje.

bomba bomba1, bomba2, bomba3;

objekt brod;

Formiranje objekata brod klase objekt. To je objekt koji mi pomiemo pomou tipkovnice, koristei strelicu u lijevo i strelicu u desno.

brod.crtaj(); Crtanje objekta koji pomiemo na poetnoj poziciji koritenjem metode crtaj.

do { bomba1.brisanje(); bomba2.brisanje(); bomba3.brisanje();

Ovdje se u svakom objektu klase bomba poziva metoda brisanje bombe na staroj poziciji.

286

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki prokoda grami Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Ovdje se u svakom objektu klase bomba poziva metoda za crtanje bombe na novoj poziciji. Neprestanim brisanjem bombe na staroj poziciji i crtanjem na novoj stvara se iluzija kretanja, odnosno padanja bombi.

bomba1.crtanje(); bomba2.crtanje(); bomba3.crtanje();

delay(1);

Naredba koja zaustavlja program odreeno vrijeme. Slui za regulaciju brzine igre.

if (kbhit()) {

Ovdje ispitujemo je li pritisnuta neka tipka na tipkovnici.

odgovor = getch();

Ako je pritisnuta neka tipka na tipkovnici, ovdje se kod pritisnute tipke sprema u varijablu odgovor.

brod.pomak(odgovor); }

Ovdje se poziva metoda pomak koja e obrisati objekt na staroj poziciji.

brod.crtaj();

Ovdje se poziva metoda crtaj koja e nacrtati objekt na novoj poziciji.

Izvoenje igre prekida se pritiskom na tipku k. Ovdje se ispituje je li pritisnuta tipka k i, ako je pritisnuta, izvoenje igre se zaustavlja.

while (odgovor != 'k');

return 0; }

Nemojmo zaboraviti da sva etiri dijela programa moraju biti unijeta u nau programsku okolinu da bismo mogli pokrenuti program.

PRO - MIL

287

Veliki programi

Jednostavna igra u vie datoteka

Pogledajmo sada kako emo prethodni program raspodijeliti u vie datoteka. Otvorimo novi projekt na uobiajen nain. Prije toga otvorimo praznu mapu u koju emo spremiti novi projekt.

Izaberemo Console Application.

288

PRO - MIL

PRO - MIL
Izaberemo Postavke projekta. C++ programiranje za apsolutne poetnike Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod Sadraj

Saimanje Veliki prokoda grami

Objekti

U Parameters unesemo -lbgi -lgdi32

289

Veliki programi

1 - Desni klik na naziv projekta. U naem sluaju je to Projekt1.

2 - Klik na Novo.

Otvorit e se nova datoteka pod nazivom Neimenovano1.

290

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Datoteku preimenujemo u bomba.cpp i kliknemo na OK.

PRO - MIL

Saimanje Veliki prokoda grami

Objekti

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

2 - Klik na Preimenuj datoteku.

Varijable

Na prvi program

Uvod

1 - Desni klik na Neimenovano1.

291

Veliki programi

Na taj nain formirali smo datoteku bomba.cpp.

Na slian nain formirat emo datoteke: - bomba.h - objekt.cpp - objekt.h

292

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki prokoda grami Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Ovaj dio isti je kao u programu koji se nalazi u jednoj datoteci. Ovom naredbom ukljuuje se biblioteka grafikih naredbi. Razlika je u tome to su dodane dvije include naredbe. #include <winbgim.h> #include "bomba.h" Ovom naredbom ukljuuje se datoteka bomba.h u kojoj se nalazi deklaracija klase bomba. void bomba :: crtanje() Ovdje ukljuujmo datoteku u { kojoj se nalazi deklaracija klarectangle (x,y,(x+20),(y+5)); se ije metode ovdje definira} mo. void bomba :: brisanje() { setcolor(WHITE); rectangle (x,y,(x+20),(y+5)); Ovaj dio programa isti je kao i u setcolor(BLACK); prethodnoj inaici. y = y + 5; if (y > 490) { y = -((static_cast <float> (rand()) / RAND_MAX) * 480); x = (static_cast <float> (rand()) / RAND_MAX) * 620; } } Na prvi program Uvod

U datoteku bomba.cpp spremimo metode klase bomba; metodu crtanje i metodu brisanje.

PRO - MIL

293

Veliki programi

U datoteku bomba.h spremimo deklaraciju klase bomba.

Ovo je dio programa koji se u ovoj inaici razlikuje od inaice sa samo jednom datotekom. Ako je naziv datoteke bomba.h, ovaj dio imat e oblik: #ifndef BOMBA_H #define BOMBA_H Kad bi se datoteka zvala npr. datoteka.h, ovaj dio imao bi oblik:

#ifndef BOMBA_H #define BOMBA_H

class bomba { #ifndef DATOTEKA_H private: #define DATOTEKA_H int x, y; public: bomba() { x = (static_cast <float> (rand()) / RAND_MAX) * 620; y = -((static_cast <float> (rand()) / RAND_MAX) * 480); } void crtanje(); void brisanje(); Naredbu #endif pisat emo na kraju }; svake datoteke koja poinje naredbom #ifndef. #endif

294

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki prokoda grami Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable #include <winbgim.h> #include "objekt.h" void objekt :: pomak(char tipka) { kretanje = tipka; if (kretanje == 75) { setcolor (WHITE); rectangle(x, 432, x+60, 438); setcolor (BLACK); x = x - 5; } if (kretanje == 77) { setcolor (WHITE); rectangle(x, 432, x+60, 438); setcolor (BLACK); x = x + 5; } } void objekt :: crtaj() { rectangle(x, 432, x+60, 438); } Naredbama #include ukljuimo grafiku biblioteku winbgim.h i datoteku objekt.h u kojoj se nalazi deklaracija klase objekt. Kad bi se deklaracija klase nalazila u drugaije nazvanoj datoteci, npr. datoteci naziv.h, morali bismo napisati: #include "naziv.h" Naziv datoteka moemo birati, a nastavak h je obvezan. Na program naredbom: #include <winbgim.h> ukljuuje samo grafiku biblioteku jer druge biblioteke ne koristimo. Da npr. neto raunamo morali bismo naredbom: #include <cmath> ukljuiti i matematiku biblioteku. Na prvi program Uvod

U datoteku objekt.cpp spremimo metode klase bomba; metodu pomak i metodu crtaj.

PRO - MIL

295

Veliki programi

U datoteku objekt.h unosimo deklaraciju klase objekt.

I ova deklaracija klase zapoinje naredbom #ifndef i naredbom #define iza kojih se nalazi naziv datoteke u kojoj je deklaracija klase. #ifndef OBJEKT_H #define OBJEKT_H class objekt { private: int x; char kretanje; public: objekt() { x = 290; } void pomak(char); void crtaj(); }; #endif Budui da se deklaracija klase objekt nalazi u datoteci objekt.h iza naredbe #ifndef i naredbe #define, pie se OBJEKT_H. Kad bi se deklaracija klase nalazila npr. u datoteci klasa.h, ovaj dio imao bi oblik: #ifndef KLASA_H #define KLASA_H

Naredbu #endif pisat emo na kraju svake datoteke koja poinje naredbom #ifndef.

296

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki prokoda grami Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Glavni program se u ovoj inaici razlikuje od inaice koja se cijela nalazi u jednoj datoteci po tome to u ovoj inaici moramo osim: #include <cstdlib> #include <iostream> #include <winbgim.h> dodati i naredbe: #include "objekt.h" #include "bomba.h" kojima se u program ukljuuju datoteke koje sadre deklaracije klase objekt i klase bomba.

#include <cstdlib> #include <iostream> #include <winbgim.h> #include <ctime> using namespace std; #include "objekt.h" #include "bomba.h" int main() { int gdriver = 9; int gmode = 2; initgraph(&gdriver, &gmode, ""); setbkcolor(WHITE); setcolor(BLACK); cleardevice(); char odgovor = 'd'; srand(time(NULL)); bomba bomba1, bomba2, bomba3; objekt brod; brod.crtaj(); do { bomba1.brisanje(); bomba2.brisanje(); bomba3.brisanje(); bomba1.crtanje(); bomba2.crtanje(); bomba3.crtanje(); delay(2); if (kbhit()) { odgovor = getch(); brod.pomak(odgovor); } brod.crtaj(); } while (odgovor != 'k'); return 0; }

Glavni program nalazi se u datoteci mani.cpp.

PRO - MIL

297

Veliki programi

Rezultat izvoenja naeg programa izgledat e otprilike ovako. Ovo su bombe koje se kreu odozgo prema dolje. Ovo je brod koji strelicom lijevo moemo pomicati u lijevu stranu i strelicom desno u desnu stranu.

Prilikom prvog prevoenja i pokretanja ovog programa programska okolina e nas upozoriti da je dolo do pretvaranja varijable float tipa u varijablu int tipa. Upozorenje emo zanemariti, budui da to nije greka, ve smo to uinili namjerno prilikom generiranja sluajnog broja. Prilikom sljedeeg prevoenja i pokretanja programa ovo upozorenje se vie nee pojavljivati.

298

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj

main.cpp
using namespace std; #include "objekt.h" #include "bomba.h" int main() { GLAVNI PROGRAM; } U ovom shematskom prikazu naeg programa moemo vidjeti logiku po kojoj se program podijeljen u vie datoteka povezuje u jednu cjelinu. Koristei ovu logiku, moemo daleko vei program razdijeliti na vei broj datoteka.

objekt.h
#ifndef OBJEKT_H #define OBJEKT_H class objekt { DEKLARACIJA KLASE; }; #endif }; #endif

bomba.h
#ifndef BOMBA_H #define BOMBA_H class bomba { DEKLARACIJA KLASE;

objekt.cpp
#include "objekt.h" void objekt :: pomak(char tipka) { SADRAJ OBJEKTA; } void objekt :: crtaj() { SADRAJ OBJEKTA; }

bomba.cpp
#include "bomba.h" void bomba :: crtanje() { SADRAJ OBJEKTA; } void bomba :: brisanje() { SADRAJ OBJEKTA; }

PRO - MIL

Saimanje Veliki prokoda grami

Objekti

Obrada teksta

Polja

Petlje

Donoenje Grafika odluke

Varijable

Na prvi program

Uvod

299

Saimanje koda

300

PRO - MIL

PRO - MIL
Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

Saimanje koda

C++ programiranje za apsolutne poetnike

Saimanje Veliki programi koda

Objekti

Sadraj

301

Saimanje koda

Primjeri saetog pisanja koda


Do sada smo, osim u nekoliko izuzetaka, programe pisali na kolski nain trudei se da naredbe prije svega budu to razumljivije. Mnoge naredbe mogu se, osim na nain koji smo do sada vidjeli, pisati na nain koji skrauje pisanje, ponekad ak ubrzava rad programa, ali koji je poetnicima moda neto manje razumljiv. Doavi do kraja knjige, vie nismo poetnici i vrijeme je da se upoznamo s nekim nainima skraenog pisanja programa.

Obje inaice programa radit e potpuno isti pisao, zbrojit e dva broja.

#include <cstdlib> #include <iostream> #include <cstdlib> #include <iostream> using namespace std; int main() { int a; int b; int c; cin >> a; cin >> b; c = a + b; cout << c << endl; system("PAUSE"); return 0; } U sluaju da formiramo vie varijabli istog tipa, ne moramo svaku staviti u zasebni red, nego ih moemo formirati u jednom redu. Dakle umjesto: int a; int b; int c; moemo napisati: int a, b, c; using namespace std; int main() { int a, b, c; cin >> a; cin >> b; c = a + b; cout << c << endl; system("PAUSE"); return 0; }

302

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

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

Umjesto: int a; a = 12; moemo napisati: int a = 12; #include <cstdlib> #include <iostream> using namespace std; int main() { int a = 12; cout << a << endl; system("PAUSE"); return 0; }

U if naredbi mogu se izbaciti vitiaste zagrade, ako se unutar vitiastih zagrada nalazi jedan red. Ako se nalazi vie redova, uporaba vitiastih zagrada je obvezna.

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

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

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

Ova inaica programa radit e jednako kao i gornja inaica s vitiastim zagradama.

PRO - MIL

303

Saimanje koda

#include <cstdlib> #include <iostream> #include <cmath> using namespace std; int main() { float a, b; cin >> a; if (a < 0) { cout << "Broj je negativan." << endl; } else { b = sqrt(a); cout << b << endl; } system("PAUSE"); return 0; }

Ovo je program za vaenje kvadratnog korijena. Ako je broj pozitivan, izraunat e kvadratni korijen, a ako je negativan, ispisat e obavijest da je broj negativan. U ovom dijelu programa vitiaste zagrade moemo izbaciti jer se unutar vitiastih zagrada nalazi samo jedan red. U ovom dijelu programa vitiaste zagrade ne moemo izbaciti jer se unutar vitiastih zagrada nalazi vie od jednog reda.

#include <cstdlib> #include <iostream> #include <cmath> using namespace std; int main() { float a, b; cin >> a; if (a < 0) cout << "Broj je negativan." << endl; else b = sqrt(a); cout << b << endl; system("PAUSE"); return 0; }

Ako bismo ovom djelu vitiaste zagrade izbacili, ne bismo dobili obavijest o greki, ali program ne bi ispravno radio, ako bismo pokuali izraunati kvadratni korijen iz negativnog broja.

304

PRO - MIL

C++ programiranje za apsolutne poetnike Sadraj Saimanje Veliki programi koda Objekti Obrada teksta Polja Petlje Donoenje Grafika odluke Varijable Na prvi program Uvod

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

I u petljama se moe izostaviti vitiasta zagrada ako se unutar vitiaste zagrade nalazi samo jedan red.

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

U ovoj inaici programa unutar for petlje ne koriste se vitiaste zagrade.

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

Umjesto napisati: x++

x=x+1

moemo

Pokrenemo li bilo koju od ove tri inaice programa, dobit emo jednak rezultat.

Na slian nain moemo umjesto: x = x - 1; napisati: x-- (Dva minusa, bez razmaka.)

PRO - MIL

305

Saimanje koda

Umjesto x=x+5; moemo napisati x+=5;

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

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

int main() { int x; for (x=5; x<51; x+=5) cout << x << endl; system("PAUSE"); return 0; }

Umjesto x=x-5 moemo napisati x-=5.

Umjesto if (x != 0) moemo napisati if (x)

#include <cstdlib> #include <iostream> using namespace std; int main() { int x; cin >> x; if (x) cout << "Broje nije nula." << endl; else cout << "Broje je nula." << endl; system("PAUSE"); return 0; }

#include <cstdlib> #include <iostream> using namespace std; int main() { int x; cin >> x; if (x != 0) cout << "Broje nije nula." << endl; else cout << "Broje je nula." << endl; system("PAUSE"); return 0; }

Korisnost nekih od navedenih kraenja prilino je dvojbena jer u nekim sluajevima zbog utede jednog znaka naruavamo itljivost programa.

306

PRO - MIL

You might also like