Professional Documents
Culture Documents
C++ Za Apsolutne Pocetnike PDF
C++ Za Apsolutne Pocetnike PDF
programiranje
za apsolutne početnike
PRO - MIL
Naslov knjige: C++ programiranje za apsolutne početnike
Autor: Jakopec Ratko, ing
Naklada: PRO-MIL d.o.o. za nakladu, informatiku i edukaciju, Varaždin,
R. Boškovića 20, 42000 Varaždin, tel: 042 / 203 981, 233 971,
fax: 042 / 203 991, www.pro-mil.hr
Urednik: Nenad Milijaš, dipl. inf.
Lektura: Ružica Gregurić, dipl. učitelj
Korektura: PRO-MIL d.o.o.
Recenzija: Igor Kos, dipl. inf.
Naslovnica: Ratko Jakopec, ing., Nenad Milijaš, dipl. inf.
Tiskara: Tiskara Varteks, Varaždin
ISBN: 953-7156-19-2
Copyright: © PRO-MIL d.o.o. za nakladu, informatiku i edukaciju, Varaždin
Sva prava pridržana. Nije dozvoljeno kopirati ili reproducirati ni jedan dio knjige u bilo kojem obliku bez
prethodne pismene dozvole nakladnika.
Sve o čemu smo pisali u ovoj knjizi, uspješno je primijenjeno na računalima, stoga ne snosimo nikakvu
odgovornost za eventualnu štetu koja bi se mogla povezati s uputama iz knjige.
U ovoj knjizi objašnjen je program Dev C++, autora: Colin Laplace, Mike Berg, Hongli Lai. Program se
nalazi na priloženom CD-u, slobodan je za objavljivanje i umnožavanje.
Pojmovi za koje se zna da su zaštitni znakovi napisani su početnim velikim slovom. Nakladnik ne može
provjeriti točnost niti želi utjecati na vjerodostojnost zaštitnih znakova.
2 PRO - MIL
PRO - MIL
Sadržaj
Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program
3
C++ programiranje za apsolutne početnike
Sadržaj
Uvod 7
Što je to program, a što programiranje? 8
Je li teško naučiti programirati? 8
Zašto baš C++? 9
Zašto baš Dev-C++? 10
Kako se uči programiranje? 10
Kako dalje nakon ove knjige? 10
Instaliranje Dev-C++ programskog okruženja 12
Formiranje radne mape 20
Instalacija grafike 22
Naš prvi program 25
Formiranje projekta 26
Mogući problem 32
Pokretanje programa 34
Greška u programu 38
Analiza programa 40
Gruba skica programa 42
Varijacije programa 43
Distribucija programa 47
Učitavanje spremljenog projekta 49
Varijable 53
Osnovne računske operacije 54
Varijable 58
4 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Analiza programa 60
Varijacije programa 63
Uvod
Problem dijeljenja 67
69
program
Naš prvi
Uljepšavanje programa
Varijable
Podešavanje programskog okruženja 76
Naš prvi grafički program 77
Donošenje Grafika
Analiza programa 78
Varijacije programa 83
odluke
Crtanje pravokutnika 86
Crtanje crte 88
Petlje
Crtanje točke 95
Ispis teksta 97
Polja
Donošenje odluke 103
Funkcije 104
Obrada
teksta
Petlje 129
Sažimanje Veliki pro-
PRO - MIL
Sadržaj
Polja 183
Jednodimenzionalna polja 184
Spremanje brojeva u datoteku 204
Dvodimenzionalna polja 212
Obrada teksta 215
String objekti 216
Polje char tipa 223
Obrada string objekata 234
Premještanje teksta iz char polja u string 246
Premještanje teksta iz stringa u char polje 247
Spremanje teksta u datoteku 248
Objekti 251
Jednostavan primjer klase i objekata 252
Složeniji primjeri klasa i objekata 262
Komunikacija s metodama 265
Razdvajanje deklaracije i definicije 276
Uporaba konstruktora 278
Nasljeđivanje 280
Veliki program 283
Jednostavna igra u jednoj datoteci 284
Jednostavna igra u više datoteka 288
Sažimanje koda 301
Primjeri sažetog pisanja koda 302
6 PRO - MIL
PRO - MIL
Uvod
Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program
7
C++ programiranje za apsolutne početnike
Uvod
Program je niz uputa računalu o tome kako da napravi određeni posao. Posao
može bit vođenje skladišta, izračun plaće radnicima ili pretvaranje slike u boji u
crno bijelu sliku. Programiranje je pisanje tih uputa. Za pisanje uputa odnosno
programa koriste se određene naredbe. Skup naredbi koje čine cjelinu naziva se
programski jezik.
Da, teško je. Ako mislimo da ćemo uzeti nekakav programski jezik i da ćemo za
par dana pisati programe, kao što možemo uzeti FrontPage pa za par dana napra-
viti WEB stranicu, od toga neće biti ništa.
8 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Zbog svega toga trebat će nam dvije do tri godine svakodnevnog rada da bismo
koliko - toliko naučili programirati. Pod pojmom naučiti programirati ne mislim na
dobivanje dvojke u školi ili pisanje programa za zbrajanje dva broja. Pod poj-
mom naučiti programirati mislim na to da smo u stanju napisati program koji za-
Uvod
dovoljava nečije potrebe i taj netko nam je spreman za to platiti. Nema puno
smisla reći da znam programirati, ali ne znam napraviti ništa za što bi netko bio
spreman platiti.
program
Naš prvi
Zbog svega toga važno je da smo radišni i strpljivi. Nemojmo iz činjenice da prva
tri mjeseca nećemo puno toga razumjeti, zaključiti da nismo nadareni za progra-
miranje i odustati. Nakon tri mjeseca nećemo puno toga razumjeti, ali nakon tri
godine sasvim sigurno hoćemo.
Varijable
Ovim uvodom vas nisam htio preplašiti, već sam vas htio ohrabriti da ustrajete u
učenju programiranja, iako će vam se na početku možda činiti da ništa ne razu-
mijete i da sporo napredujete.
Donošenje Grafika
Zašto baš C++?
odluke
Zato što je to trenutno najrašireniji jezik, osobito u profesionalnoj uporabi. U ra-
čunalstvu se klonite ekskluzivnosti. Ako vas veseli da budete posebni, obrijte
glavu ili obojite kosu na zeleno. Imate bezbroj mogućnosti, ali kad su računala u
pitanju, najbolje je koristiti računalo koje koristi većina i programski jezik koji ko-
Petlje
risti većina.
U tom slučaju lako dolazimo do programa, lako dolazimo do literature, puno ljudi
se razumije u to pa možemo dobiti savjet. Konačno, ako tražimo posao u smislu
Polja
da programerska ekipa treba još jednoga (jednu), veća je vjerojatnost da oni već
koriste sustav s kojim znamo raditi.
Zamislite koliko je ugodno živjeti u malom gradu i biti jedini vlasnik takvog geni-
jalnog sustava. Nema literature, nema programa, nema savjeta i kad konačno
savladamo rad u takvom sustavu nitko nas ne treba jer svi rade na nekim drugim
sustavima.
Objekti
Iako po mom sudu C++ ima niz prednosti u odnosu na druge jezike, nemojmo se
suviše opterećivati time koji ćemo jezik započeti učiti i koju inačicu tog jezika.
Glavni problem je naučiti jedan jezik, a kad nam to uspije, ako se ukaže potreba,
Sažimanje Veliki pro-
lako ćemo prijeći na drugi. Da bi netko tko nikad nije programirao naučio jedan
grami
jezik, treba mu do tri godine, ali kad već jedan jezik naučimo, da bismo naučili
drugi, dovoljno nam je do tri mjeseca. Naučivši jedan jezik, počinjemo razumije-
vati kako se programira, a to je najteže i najdulje traje. Najlakše je naučiti nove
naredbe ili bolje rečeno novi način pisanja sličnih naredbi u drugom jeziku.
koda
PRO - MIL 9
Uvod
Iako je taj program relativno malih dimenzija, posjeduje sve osobine koje su potre-
bne za učenje programiranja, a mogao bi poslužiti i za manje složeno profesional-
no programiranje.
Nakon što smo određenu naredbu shvatili, nismo završili s učenjem. Nakon toga
treba napraviti nekoliko desetaka manjih programa u kojima ćemo tu naredbu kori-
stiti da bismo stekli rutinu u njenom korištenju.
Ova knjiga nije zamišljena kao knjiga iz koje ćemo saznati sve tajne programiranja,
nego kao knjiga koja bi ljudima koji nikad nisu programirali i ništa o tome na znaju
trebala pomoći da započnu učenje programiranja.
Postoje velike i debele knjige s puno sitnog teksta koje na 1000 stranica objašnja-
vaju sve tajne pojedinih programskih jezika. Takve knjige su korisne i nabavite ih
ako vam se ukaže prilika, ali takve knjige nisu pogodne za početnike. Zbog mnoš-
tva detalja i šturih opisa, početnik će se u njima jako teško snaći.
Nakon što proučite ovu knjigu, imat ćete dovoljno predznanja da možete pratiti knji-
ge koje detaljno govore o programskom jeziku C++. (Ili nekom drugom program-
skom jeziku.)
Kakve knjige biste trebali nabaviti i s čime biste se trebali baviti nakon što proučite
ovu knjigu i želite dalje napredovati?
- Svakako neku knjigu koja na barem 800 stanica detaljno opisuje programski jezik
koji želite naučiti.
10 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
ma, proučite upute za njegovo korištenje. Naravno, te upute ne moraju biti u ob-
liku tiskane knjige. Najčešće će biti u obliku teksta na računalu.
Uvod
Linuxa. Da bi mogli pisati programe za pojedine operacijske sustave, moramo
razumjeti kako ti sustavi funkcioniraju pa ćemo morati nabaviti knjigu koja govori
o strukturi operacijskog sustava za koji želimo pisati programe.
program
Naš prvi
- Dobro je nabaviti i knjige koje govore općenito o programiranju i o načinima
rješavanja pojedinih programskih problema. Želimo li napisati program koji sorti-
ra određenu grupu podataka na određeni način, ne moramo ga izmišljati. Drugi
ljudi prije nas susreli su se s problemom sortiranja i o tom problemu napisali knji-
Varijable
ge u kojima iznose optimalna rješenja za pojedine probleme.
Donošenje Grafika
toj problematici.
odluke
komercijalne programe, odnosno programirati za novce.
Zbog toga sam na početku rekao da nam treba dvije do tri godine da naučimo
programirati.
Petlje
U ovom trenutku to vam možda zvuči obeshrabrujuće, ali ako sve to savladate,
steći ćete vještinu kojom ne vlada baš svatko i koja ima svoju tržišnu cijenu.
Polja
Obrada
teksta
Objekti
Sažimanje Veliki pro-
koda grami
PRO - MIL 11
Uvod
12 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
1 - Izaberemo jezik.
Uvod
program
Naš prvi
Varijable
Donošenje Grafika
2 - Klikom na OK nastavljamo
odluke
instalaciju.
Petlje
Polja
Obrada
teksta
PRO - MIL 13
Uvod
2 - Instaliranje nastavljamo
klikom na Instaliraj.
14 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Nakon klika na Instaliraj započet
će instaliranje programa.
Uvod
program
Naš prvi
Varijable
Donošenje Grafika
odluke
Petlje
Kliknemo na Da.
Polja
Obrada
teksta
Objekti
Sažimanje Veliki pro-
koda grami
PRO - MIL 15
Uvod
Kliknemo na Kraj.
Kliknemo na U redu.
16 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
1 - Izaberemo
hrvatski jezik.
Uvod
program
Naš prvi
2 - Izaberemo Use XP
Theme.
Varijable
Donošenje Grafika
3 - Klik na Next.
odluke
Petlje
Polja
Obrada
teksta
Objekti
Sažimanje Veliki pro-
grami
Klik na Next.
koda
PRO - MIL 17
Uvod
Klik na Next.
18 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Uvod
program
Naš prvi
Varijable
Donošenje Grafika
odluke
Na kraju klik na OK.
Petlje
Klikom ovdje ugasimo ovaj prozor.
Time je instaliranje Dev-C++ progra-
Polja
ma završeno.
Obrada
teksta
Objekti
Sažimanje Veliki pro-
koda grami
PRO - MIL 19
Uvod
20 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Uvod
program
Naš prvi
Varijable
Donošenje Grafika
Unesemo naziv mape, u
mojem slučaju Radni.
odluke
Petlje
Polja
Obrada
teksta
Objekti
Sažimanje Veliki pro-
grami
PRO - MIL 21
Uvod
Instalacija grafike
pi Dev-Cpp nalazit će se
22 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Uvod
program
Naš prvi
Varijable
Sadržaj mape include na CD-u
Donošenje Grafika
disku.
odluke
Petlje
Polja
Obrada
teksta
PRO - MIL 23
Naš prvi program
24 PRO - MIL
PRO - MIL
Naš prvi program
Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program
25
C++ programiranje za apsolutne početnike
Naš prvi program
Formiranje projekta
1 - Kliknemo na Datoteka.
3 - Izaberemo Projekt.
2 - Izaberemo Nova.
26 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Otvorit će se novi prozor koji se naziva Novi projekt i u kojem ćemo izab-
rati tip projekta. Najvažniji tipovi su Windows Application i Console Ap-
plication.
Uvod
U čemu je razlika?
program
Naš prvi
Windows Application – izvodi se unutar klasičnog windows prozora. Pre-
dnost ovog načina pisanja jest što ćemo dobiti program koji će izgledati
kao svaki drugi windows program. Nedostatak mu je što je ovaj način pisa-
nja programa nešto složeniji, pa je manje prikladan za početnike.
Varijable
Console Application – ne izvodi se unutar klasičnog windows prozora,
već unutar pojednostavljene verzije s crnom pozadinom. Nedostatak ovog
načina pisanja programa jest što je program veoma ružan i što taj oblik
prozora ima manje mogućnosti od klasičnog prozora. Jedina prednost mu
Donošenje Grafika
je što je jednostavan, pa je prikladniji za početnike.
odluke
1 - Izaberemo Basic.
Petlje
2 - Zatim Console Application.
Polja
3 - Ovdje unosimo naziv pro-
jekta. Na početku možemo
Obrada
teksta
4 - Ovdje odredimo da
5 - Biranje završavamo
će naš projekt sadrža-
klikom na OK.
vati C++ program.
koda
PRO - MIL 27
Naš prvi program
Najbolje je da ga spremimo
u prije pripremljenu praznu
mapu.
Kliknemo ovdje.
2 - Kliknemo na Spremi.
28 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
1 - Ovdje bi se trebala nalaziti oznaka diska na kojem
smo pripremili prazni prostor za smještaj našeg projekta.
Uvod
2 - Sadržaj ovog prozo-
ra na vašem računalu
program
Naš prvi
bit će sasvim sigurno
drugačiji nego na mo-
jem, budući da njegov
sadržaj ovisi o progra-
Varijable
mima koji su instalirani
u računalu i načinu ko-
rištenja računala. Ne-
mojte brinuti zbog toga.
Donošenje Grafika
odluke
3 - Pronaći ćemo mapu Radni i kliknuti na
nju. (Ako mapu Radni niste do sada formira- 4 - Klik na Otvori.
li, formirajte je prema uputama danim u uvo-
dnom poglavlju.
Petlje
Polja
2 - Klik na Spremi.
Sažimanje Veliki pro-
koda grami
PRO - MIL 29
Naš prvi program
Računalo će automatski
generirati jednostavan
C++ program i time je
otvaranje projekta zavr-
šeno.
1 - Kliknemo na Alati.
30 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
1 - Kliknemo na karticu
Prikaz.
Uvod
2 - Kliknemo na kvadratić ispred
opcije Brojevi linije.
program
Naš prvi
Varijable
3 - Kliknemo na OK.
Donošenje Grafika
odluke
Petlje
Polja
Obrada
teksta
Objekti
PRO - MIL 31
Naš prvi program
Mogući problem
3 - Klik na Spremi.
32 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Unos prvog programa
Uvod
Umjesto programa
program
Naš prvi
koji je generiralo
računalo prilikom
otvaranja novog
projekta, unesemo
Varijable
ovakav program.
Donošenje Grafika
rokovati grešku u
programu.
odluke
Petlje
Na početku će nam se često
događati da umjesto točke sa
zarezom ovdje unesemo dvo-
Polja
#include <cstdlib> točje što će uzrokovati grešku
#include <iostream> u programu.
int main()
Lijevu vitičastu zagradu dobit
{
ćemo tako da pritisnemo tipku
cout << "Ovo je moj tekst." << endl;
AltGr i ne puštajući tu tipku,
Objekti
system("PAUSE");
pritisnemo tipku b.
return 0;
}
Desnu ćemo dobiti tako da
pritisnemo AltGr i, ne puštajući
Sažimanje Veliki pro-
grami
PRO - MIL 33
Naš prvi program
Pokretanje programa
Već smo rekli da računalo razumije samo nule i jedinice. Svi sadržaji, muzika,
filmovi, slike itd. moraju biti prevedeni u nule i jedinice da bi ih računalo ra-
zumjelo. Tako je i s programom.
34 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
1 - Klikom na Kompajlaj i pokreni započet ćemo prevođenje i
pokretanje našeg programa.
Uvod
program
Naš prvi
2 - Otvara se prozor u kojem nas računalo pita kamo i
pod kojim nazivom ćemo spremiti naš program.
Varijable
koje smo spremili projekt što ćemo mi prihvatiti.
Donošenje Grafika
odluke
Mjesto na koje će računalo spremiti naš
Petlje
program.
PRO - MIL 35
Naš prvi program
36 PRO - MIL
C++ programiranje za apsolutne početnike
Mogući problem
Sadržaj
Tijekom rada može nam se dogoditi da nam
računalo predloži neki naziv programa, iako već
u tom prostoru postoji program s istim nazivom.
Uvod
U tom slučaju, ako želimo zadržati stari prog-
program
Naš prvi
ram, novom ćemo dati neki drugi naziv npr.
main2.cpp i kliknut ćemo na Spremi.
Varijable
Ako stari program ne želimo sačuvati, ostavit
ćemo novom programu naziv main.cpp i kliknut
ćemo na Spremi.
Donošenje Grafika
odluke
main.cpp
Petlje
Ako ne želimo zadržati stari prog-
ram, pa smo u prethodnom koraku
Polja
kliknuli na Spremi bez da smo
mijenjali novom programu naziv,
računalo će nas još jednom upozo-
riti da će stari program biti obrisan.
Obrada
teksta
Objekti
PRO - MIL 37
Naš prvi program
Greška u programu
Gotovo je nemoguće unijeti program, a da
se tijekom unosa ne pojavi greška.
1 - Umjesto
2 - Kliknemo na Kompajlaj i pokreni. točke sa zare-
zom unesemo
dvotočje.
2 - Istovremeno se otvara
prozor u kojem možemo
vidjeti dodatne informacije
o uočenoj greški.
38 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Označavanje pozicije greške prilič-
Uvod
no je nepouzdano budući da raču-
nalo zapravo ne označava poziciju
greške, nego poziciju na kojoj je
greška primijećena. Pogledajmo
program
Naš prvi
ovaj primjer.
Varijable
Donošenje Grafika
1 - Ovdje je došlo do greške jer
nismo unijeli točku sa zarezom.
odluke
Kad takav program pokušamo prevesti i pok-
Petlje
renuti, kao pogrešan bit će označen deveti
red, jer je u njemu greška primijećena, iako
se greška zapravo nalazi u osmom redu.
Polja
Zato imajmo na umu da je označavanje re-
dova u kojim se pojavila greška samo gruba
orijentacija, a ne precizni pokazatelj.
Obrada
teksta
Objekti
Kompajlaj i pokreni.
koda grami
PRO - MIL 39
Naš prvi program
Analiza programa
#include <cstdlib>
#include <iostream> Ove naredbe ćemo pisati na početku sva-
kog C++ programa. Zašto? C++ organizi-
ran je tako da su njegove naredbe organi-
zirane u grupe ili, kako bi programeri rek-
li, biblioteke i na početku programa mora-
mo reći računalu koje biblioteke naredbi
namjeravamo koristiti.
40 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
{ } - Iako neveliki, ovo su jako važni dijelovi
programa. Označuju prostor unutar kojeg se
{
nalazi program, { označuje početak, a } kraj
Uvod
programa.
program
Naš prvi
Varijable
Ovaj red sadrži dvije naredbe.
Donošenje Grafika
cout << "Ovo je moj tekst." << endl;
zaslonu računala.
odluke
red.
Petlje
Ovom naredbom naređujemo računalu
Polja
da stane i čeka tako dugo dok ne pritis-
nemo neku tipku.
system("PAUSE");
Da bismo bolje razumjeli ovu naredbu,
Obrada
teksta
PRO - MIL 41
Naš prvi program
42 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Varijacije programa
Uvod
nje programa i pojedinih naredbi jest da u program unosimo manje izmjene, a
zatim opažamo kakve posljedice će takve izmjene izazvati.
program
Naš prvi
Kao što smo već vidjeli, pok-
#include <cstdlib>
#include <iostream> renemo li ovaj program, na
Varijable
zaslonu računala dobit ćemo
using namespace std;
ovakav rezultat.
int main()
{
Donošenje Grafika
cout << "Ovo je moj tekst." << endl;
system("PAUSE");
return 0;
}
odluke
Petlje
#include <cstdlib>
#include <iostream>
system("PAUSE");
teksta
return 0;
}
Objekti
Sažimanje Veliki pro-
grami
PRO - MIL 43
Naš prvi program
#include <cstdlib>
#include <iostream>
int main()
{
cout << "Jaa jesm nism ghgh." << endl;
system("PAUSE");
return 0;
}
44 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Uvod
#include <cstdlib>
#include <iostream>
program
Naš prvi
using namespace std;
int main()
{
Varijable
cout << "Ovo je moj tekst." << endl ;
system("PAUSE");
return 0;
}
Vratimo naš program u
Donošenje Grafika
prvobitno stanje, a zatim
ga pokrenimo klikom na
Kompajlaj i pokreni.
Ovako će izgledati rezul-
odluke
tat rada našeg programa.
#include <cstdlib>
#include <iostream>
Da bismo bolje razumjeli
njegovu funkciju, obriše-
using namespace std;
mo ovaj dio programa.
Petlje
Nova inačica programa
int main()
trebala bi ovako izgledati.
{
cout << "Ovo je moj tekst.";
Klikom na Kompajlaj i
system("PAUSE");
Polja
pokreni pokrenemo pro-
return 0;
gram.
}
Obrada
teksta
PRO - MIL 45
Naš prvi program
Vidimo da se je dogodilo
ono što smo očekivali.
46 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Više naredbi << endl možemo napisati i
#include <cstdlib> unutar jednog reda.
#include <iostream>
Uvod
Pokrenemo li ovu inačicu programa, uvje-
using namespace std; rit ćemo se da daje isti rezultat kao i pret-
hodna.
int main()
program
Naš prvi
{
cout << "Ovo je moj tekst." << endl << endl << endl << endl;
system("PAUSE");
return 0;
Varijable
}
Donošenje Grafika
skok u novi red.
odluke
Propisana riječ kojom obavještavamo računalo
Ove oznake obvezno
da ćemo sadržaj koji slijedi poslati na neku izla-
se stavljaju ispred
znu jedinicu, u našem slučaju na zaslon raču-
sadržaja koji će iz
nala.
Petlje
računala ići na neku
izlaznu jedinicu, npr.
Uočimo da naredbu << endl ne možemo koris-
zaslon računala.
titi ako prije nismo stavili naredbu cout.
Polja
Iako nevelik,
Obrada
ovo je JAKO
važan dio pro-
grama.
Objekti
Označava kraj
Tekst unutar navod- naredbe ili
Ovom naredbom
nika ispisat će se na grupe naredbi
naređujemo računalu
zaslon računala. koje čine cjeli-
da prilikom ispisa
Sažimanje Veliki pro-
nu.
grami
kcionirati.
PRO - MIL 47
Naš prvi program
Distribucija programa
Nakon što naše programersko remek djelo proradi, osjetit ćemo potrebu naš
program podijeliti s prijateljima ili ga staviti na internet. Postavlja se pitanje
što moramo učiniti da bi naš program proradio i na prijateljevom računalu.
Otvorimo Windows Explorer i u njemu otvorimo mapu u koju smo koristili tije-
kom prevođenja programa. U našem slučaju to je Radni mapa na C disku.
48 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Učitavanje spremljenog projekta
Uvod
program
Naš prvi
Varijable
Ako pokušamo ugasiti prog-
ramsko okruženje, a da nis-
Donošenje Grafika
mo spremili program, raču-
Naš projekt će se spremiti prili- nalo će nas upozoriti.
kom prevođenja programa.
Klikom na Yes spremit ćemo
odluke
Ako projekt želimo spremiti bez naš program.
da smo program preveli, kliknemo
na ikonu Spremi.
Petlje
Spremljeni projekt može-
Polja
mo učitati u naše prog-
ramsko okruženje na više
načina.
Obrada
teksta
Na najjednostavniji način
možemo učitati nekoliko
2 - Zatim na Ponovno otvori. prethodnih spremanja.
Objekti
1 - Kliknemo na Datoteka.
Sažimanje Veliki pro-
grami
3 - Na ovom popisu
kliknemo na projekt
koji želimo otvoriti.
koda
PRO - MIL 49
Naš prvi program
1 - Kliknemo na Datoteka.
4 - Kliknemo na Otvori.
50 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Nakon što se
Uvod
spremljeni projekt
učitao, mogli bismo
biti zbunjeni činjeni-
com da ga ne vidi-
program
Naš prvi
mo u prostoru u
kojem smo očeki-
vali da ćemo ga
vidjeti.
Varijable
Donošenje Grafika
odluke
Petlje
Polja
Obrada
teksta
Objekti
Sažimanje Veliki pro-
grami
PRO - MIL 51
Varijable
52 PRO - MIL
PRO - MIL
Varijable
Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program
53
C++ programiranje za apsolutne početnike
Varijable
#include <cstdlib>
#include <iostream> Sada ćemo računalo iskoristiti za računa-
nje.
using namespace std;
Unesimo ovaj program u C++ programsko
int main() okruženje.
{
cout << 2+3; Klikom na Kompajlaj i pokreni ga pokre-
cout << endl; nemo. Dobit ćemo ovakav rezultat.
system("PAUSE");
return 0;
}
54 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Pokušajmo zbrojiti neka druga dva broja, #include <cstdlib>
npr. 8 i 4. #include <iostream>
Uvod
Pokrenimo program i vidjet ćemo da će using namespace std;
računalo zbrojiti ta dva broja.
int main()
program
Naš prvi
{
cout << 8+4;
cout << endl;
system("PAUSE");
return 0;
Varijable
}
Donošenje Grafika
odluke
Pokušajmo neku drugu računsku opera- #include <cstdlib>
Petlje
ciju, npr. oduzimanje. #include <iostream>
system("PAUSE");
teksta
return 0;
}
Objekti
Sažimanje Veliki pro-
koda grami
PRO - MIL 55
Varijable
12 podijeljeno sa 4 napi-
sat ćemo kao 12/4.
#include <cstdlib>
#include <iostream> Pokrenimo program i po-
gledamo rezultat.
using namespace std;
int main()
{
cout << 12/4;
cout << endl;
system("PAUSE");
return 0;
}
56 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
#include <cstdlib> Pokušajmo ovdje umjesto 12/4 staviti 13/4.
#include <iostream>
Pokrenimo program i pogledajmo rezultat.
Uvod
using namespace std;
Rezultat je očigledno pogrešan.
int main()
program
Naš prvi
{
cout << 13/4;
cout << endl;
system("PAUSE");
return 0;
Varijable
}
Donošenje Grafika
#include <cstdlib>
#include <iostream>
odluke
int main()
{ Pokušajmo ovdje staviti
cout << 15/3; 15/3 i pokrenimo program.
cout << endl;
Rezultat je ispravan.
Petlje
system("PAUSE");
return 0;
}
#include <cstdlib>
#include <iostream>
Objekti
{
grami
PRO - MIL 57
Varijable
Varijable
Na tipkovnici iza-
beremo prvi broj
koji želimo zbrajati,
npr. broj 3 i zatim
pritisnemo Enter
tipku na tipkovnici.
58 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Na tipkovnici izaberemo
drugi broj koji želimo
zbrajati, npr. broj 5 i
Uvod
zatim pritisnemo Enter
tipku na tipkovnici.
program
Naš prvi
Nakon pritiska na
Varijable
Enter tipku na tip-
kovnici, a zaslonu
računala ugledat
ć em o r e zu lt at
zbrajanja broja 3 i
Donošenje Grafika
broja 5, a to je broj
8.
odluke
Petlje
Polja
Pokrenimo bez ikakvih izmjena isti prog- Na sličan način kao i u
ram još jednom, ali sada unesimo neke prethodnom primjeru,
druge brojeve, npr. broj 12 i broj 14. dakle tako da nakon sva-
kog unosa broja pritisne-
Obrada
PRO - MIL 59
Varijable
Analiza programa
5
Zbrojimo sadržaj prostora a i prostora
c = a + b;
b, a rezultat spremimo u prostor c. b
8 3 5
cout << c;
c = a + b
Sadržaj prostora c, a to je
c
cout << endl; rezultat zbrajanja, ispišemo
na zaslon računala. 8
60 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Ovom naredbom formiramo prostor u računalu u koji ćemo spremati brojeve.
Na početku taj prostor možemo zamisliti kao posudice u koje možemo staviti
Uvod
brojeve, iako su to zapravo rezervirana mjesta u memoriji našeg računala.
program
Naš prvi
Naredba za formiranje Oznaka ; obvezno dolazi
prostora. int a ; na kraju naredbe.
Varijable
int b; Ovdje se nalazi naziv prostora.
int c;
Zašto svaki prostor ima naziv???
Donošenje Grafika
Zato što u jednom programu može-
Ovim naredbama se for- mo imati više takvih prostora, pa
miraju još dva prostora, nam naziv prostora omogućuje da ih
odluke
prostor b i prostor c. razlikujemo.
Petlje
Nakon formiranja prostor za spremanje brojeva je prazan i bio bi nam sasvim
beskoristan kad u njega ne bismo mogli staviti neki broj.
Polja
U taj prostor broj možemo staviti na više načina, a jedan od njih je da ga une-
semo pomoću tipkovnice. Za to ćemo koristiti naredbu cin. Obrada
teksta
PRO - MIL 61
Varijable
Osim što u te prostore možemo spremati brojeve, između njih možemo izvoditi
računske operacije na isti način kao što smo ih izvodili između brojeva.
Oznaka ; obvezno
Prostor c u koji će-
mo spremiti rezultat. c = a + b ; dolazi na kraju na-
redbe.
Oznaka ; obavezno
Naredba za ispis. cout << c ; dolazi na kraju na-
redbe.
62 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Varijacije programa
Uvod
brojeva, napravit ćemo niz izmjena na našem programu i opažat ćemo kako te
izmijene utječu na rad program.
program
Naš prvi
#include <cstdlib> Ovaj program ima potpuno istu struktu-
#include <iostream> ru kao prethodni, samo što ima drugači-
je nazive prostora za spremanje broje-
Varijable
using namespace std; va.
Donošenje Grafika
int drugi; naziva c, nego rezultat.
int rezultat;
cin >> prvi; Prevedimo i pokrenimo ovaj program i
cin >> drugi; vidjet ćemo da radi jednako kao i pret-
odluke
rezultat = prvi + drugi; hodni program.
cout << rezultat;
cout << endl;
system("PAUSE");
Petlje
return 0;
}
Sad se postavlja pitanje po kojoj logici se biraju nazivi prostora za spre- Polja
manje brojeva. Pogledajmo neka pravila i sugestije.
Obrada
- Ne smiju se koristi naredbe; npr. int aaa; je dozvoljeno, a int cout; nije.
teksta
- Ako naziv sadrži brojeve, prvi znak mora biti slovo, dakle a1 je dozvolje-
Sažimanje Veliki pro-
no, a 1a nije.
grami
PRO - MIL 63
Varijable
#include <cstdlib>
#include <iostream> Pokušamo li pokrenuti ovaj program, ra-
čunalo će dojaviti grešku.
using namespace std;
Do greške je došlo zato što smo ovdje
int main() formirali prostor A, a ovdje smo pokušali
{ unijeti broj u prostor a.
int A;
int B; Računalo razlikuje velika i mala slova pa
int c; njemu prostor a i prostor A nisu isto.
cin >> a;
cin >> b; S njegove točke gledišta mi ovdje poku-
c = a + b; šavamo unijeti broj u prostor koji ne pos-
cout << c; toji.
cout << endl;
system("PAUSE"); Zato će nas računalo u komentaru greške
return 0; upozoriti da ne zna što je to a.
}
64 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
#include <cstdlib>
#include <iostream> U ovom programu ovu naredbu nismo napi-
sali u ispravnom obliku kao cout << c; nego
Uvod
using namespace u obliku cout << "c"; dakle sadržaj koji se
std; ispisuje stavili smo u navodnike kao što
smo to naviknuli prilikom ispisa teksta koriš-
int main() tenjem cout naredbe.
program
Naš prvi
{
int a; Pokrenemo li ovaj program, on će se izvršiti
int b; i računalo nam neće dojaviti nikakvu greš-
int c; ku, ali kao rezultat nećemo dobiti ono što
Varijable
cin >> a; smo očekivali.
cin >> b;
c = a + b; Vidimo da smo u prostor a unijeli 8, u pros-
cout << "c"; tor b unijeli smo 4, ali kao rezultat nismo
cout << endl; dobili broj 12, nego slovo c.
Donošenje Grafika
system("PAUSE");
return 0; Zašto?
}
cout << c; - ispisuje sadržaj prostora c.
odluke
cout << "c"; - ispisuje slovo c.
Petlje
Polja
Ovaj tip greške veo-
ma je teško pronaći
Obrada
teksta
u složenim programi-
ma, budući da raču-
nalo neće dojaviti
grešku i poziciju gre-
Objekti
To se događa zato
Sažimanje Veliki pro-
htjeli.
PRO - MIL 65
Varijable
#include <cstdlib>
#include <iostream> Na sličan način možemo napraviti program
za množenje sadržaja dvaju prostora.
using namespace std;
int main()
{
int broj1;
int broj2;
int rezultat;
cin >> broj1;
cin >> broj2;
rezultat = broj1 * broj2;
cout << rezultat;
cout << endl;
system("PAUSE");
return 0;
}
66 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Problem dijeljenja
Uvod
#include <cstdlib>
#include <iostream> nja.
program
Naš prvi
va možemo dijeliti, ali će kao i prošli put
int main()
{ kad smo pokušali dijeliti, rezultat biti
int broj1; ispravan samo za brojeve čiji rezultat
Varijable
int broj2;
int rezultat; dijeljenja nije decimalni broj.
cin >> broj1;
cin >> broj2; Ako je rezultat dijeljenja decimalni broj,
rezultat = broj1 / broj2;
Donošenje Grafika
cout << rezultat; rezultat će biti pogrešan.
cout << endl;
system("PAUSE");
return 0;
odluke
}
Petlje
Problem ćemo riješiti ovako napisanim
programom. Umjesto naredbom int,
prostor za spremanje brojeva formirat
ćemo naredbom float;
Polja
#include <cstdlib>
#include <iostream> Pokrenemo li taj program, dobit ćemo
ispravan rezultat.
using namespace std;
Obrada
teksta
int main()
{
float broj1;
float broj2;
Objekti
float rezultat;
cin >> broj1;
cin >> broj2;
Sažimanje Veliki pro-
PRO - MIL 67
Varijable
Ovo je još jedan način na koji možemo formirati prostor za spremanje brojeva.
U prostor formiran int naredbom možemo spremati samo brojeve bez decimal-
nog zareza, a u prostore formirane float naredbom možemo spremati brojeve
s decimalnim zarezom.
Oznaka ; obvezno
Naredba za formi-
ranje prostora za
float broj1 ; dolazi na kraju na-
redbe.
spremanje brojeva
s decimalnim zare-
zom.
Postavlja se pitanje bismo li mogli u naš program unijeti broj s decimalnim zare-
zom. Pokrenimo još jednom program iz prethodnog primjera i pokušajmo.
68 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Uljepšavanje programa
Naši programi doduše rade, ali su tako ružni da bi teško bili ružniji. Korisnika
Uvod
dočeka crni ekran bez ikakvih uputa. Nakon što unesemo dva broja, dobit
ćemo treći bez ikakvog komentara što taj treći broj predstavlja.
program
Naš prvi
Budući da smo mi napisali program, mi znamo da treba unijeti dva broja, da
nakon svakog unosa treba pritisnuti tipku Enter i mi znamo što predstavlja
treći broj koji smo dobili kao rezultat, ali netko drugi veoma bi teško koristio
naš program. Unesite i pokrenite ovaj program.
Varijable
U ovom programu na
Donošenje Grafika
#include <cstdlib> početku programa, te
#include <iostream> prije svakog unosa i
ispisa rezultata nared-
using namespace std; bom cout ispisali smo
odluke
adekvatan komentar
int main() koji pomaže korisniku
{ da lakše shvati čemu
float broj1; program služi, što mora
float broj2; unijeti i što je dobio kao
Petlje
float rezultat; rezultat.
cout << "Dijeljenje." << endl;
cout << "Unesite prvi broj." << endl; Ovakav program puno
cin >> broj1; je ugodniji za upotrebu
Polja
cout << "Unesite drugi broj." << endl; od programa bez ko-
cin >> broj2; mentara.
rezultat = broj1 / broj2;
cout << "Rezultat dijeljenja je:" << endl;
Obrada
teksta
}
Sažimanje Veliki pro-
koda grami
PRO - MIL 69
Varijable
Prethodni program mogli bismo još malo uljepšati dodavanjem praznih redova.
Unesimo i pokrenimo ovaj program.
int main()
{ Komentar prvog unosa.
float broj1;
float broj2;
float rezultat;
cout << "Dijeljenje." << endl;
cout << endl;
Prvi unos.
cout << endl;
cout << "Unesite prvi broj." << endl;
cin >> broj1;
cout << endl; Prazni red.
cout << "Unesite drugi broj." << endl;
cin >> broj2;
cout << endl; Komentar drugog unosa.
rezultat = broj1 / broj2;
cout << "Rezultat dijeljenja je:" << endl;
cout << rezultat; Drugi unos.
cout << endl;
cout << endl;
system("PAUSE"); Komentar rezultata.
return 0;
}
Dva skoka u novi red. Ispis rezultata.
70 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Nekoliko primjera programa
Uvod
// Program za izračun površine izračun površine
// ********************************* pravokutnika. Uni-
jet ćemo ga u ra-
program
Naš prvi
#include <cstdlib> čunalo i pokrenuti.
#include <iostream>
Struktura je ista
using namespace std; kao i struktura
prethodnog prog-
Varijable
int main() rama, ali su prila-
{ gođeni komentari i
float stranica_A; nazivi prostora za
float stranica_B; spremanje broje-
Donošenje Grafika
float povrsina; va.
cout << "Povrsina." << endl;
cout << endl; Jedina novost je
cout << endl; komentar na po-
cout << "Unesite prvu stranicu." << endl; četku programa
odluke
cin >> stranica_A; koji se nalazi iza //
cout << endl; oznaka i opisuje
cout << "Unesite drugu stranicu." << endl; namjenu progra-
cin >> stranica_B; ma.
Petlje
cout << endl;
povrsina = stranica_A * stranica_B;
cout << "Povrsina je:" << endl;
cout << povrsina;
Polja
cout << endl;
cout << endl;
system("PAUSE");
return 0;
Obrada
}
teksta
Objekti
PRO - MIL 71
Varijable
72 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
// *********************************************
// Program za izračun volumena kvadrata
// *********************************************
Uvod
#include <cstdlib>
#include <iostream> Ovo je primjer programa za izračun volu-
program
Naš prvi
mena kvadrata.
using namespace std;
Pokušajmo za vježbu sami smisliti neko-
int main() liko sličnih programa.
{
Varijable
float stranica_A;
float stranica_B;
float stranica_C;
float volumen;
Donošenje Grafika
cout << "Izracun volumena." << endl;
cout << endl;
cout << "Unesite stranicu a." << endl;
cin >> stranica_A;
cout << "Unesite stranicu b." << endl;
odluke
cin >> stranica_B;
cout << "Unesite stranicu c." << endl;
cin >> stranica_C;
cout << endl;
Petlje
volumen = stranica_A * stranica_B * stranica_C;
cout << "Volumen je:" << endl;
cout << volumen;
cout << endl;
cout << endl;
system("PAUSE"); Polja
return 0;
}
Obrada
teksta
Objekti
Sažimanje Veliki pro-
koda grami
PRO - MIL 73
Grafika
74 PRO - MIL
PRO - MIL
Grafika
Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program
75
C++ programiranje za apsolutne početnike
Grafika
Da bi grafika funkcionirala,
prilikom instalacije progra-
ma moramo instalirati do-
datke kojim programskom
okruženju omogućuje pri-
kaz grafike.
1 - Kliknemo na Projekt. Ako to nismo učinili, vrati-
mo se na uvodno poglavlje
i instalirajmo potrebne do-
datke.
2 - Zatim na Postavke projekta.
Nakon toga podesit ćemo
programsko okruženje.
1 - Kliknemo na Parametes.
Kliknemo na Ok.
76 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Naš prvi grafički program
Uvod
#include <cstdlib>
ram. Uočimo da su početak i kraj
#include <iostream>
programa izmijenjeni.
#include <winbgim.h>
Na početku dodan je ovaj red, a
program
Naš prvi
using namespace std;
na kraju je izbačena naredba:
system("PAUSE");
int main()
{
Varijable
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
Donošenje Grafika
Klikom na Kompajlaj i pokreni pokrenemo
cleardevice();
program.
circle(320,240,180);
getch();
Otvorit će se dva prozora:
closegraph();
odluke
return 0;
- tekstualni koji smo do sada koristili
}
- grafički u kojem će računalo nacrtati krug.
Petlje
Polja
Obrada
teksta
Objekti
Sažimanje Veliki pro-
koda grami
PRO - MIL 77
Grafika
Analiza programa
#include <cstdlib>
Početak programa. Za razliku od dosa-
#include <iostream>
dašnjih programa, u ovom smo korigi-
#include <winbgim.h>
rali početak dodavši mu još jednu na-
redbu.
using namespace std;
Ovom naredbom u program uključuje-
int main()
mo grafičke naredbe.
{
78 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Ovom naredbom zaustavljamo izvođe-
nje programa do trenutka dok ne priti-
getch(); snemo neku tipku na tipkovnici. Ima
Uvod
istu namjenu kao i system(“PAUSE”)
u “normalnim” programima.
program
Naš prvi
izbacimo je iz programa i pokušajmo
pokrenuti program bez nje.
Varijable
closegraph(); Zatvaranje grafičkog prozora.
Donošenje Grafika
Kraj programa. Uočimo da ovdje više
return 0;
nema naredbe system(“PAUSE”); Njenu
}
funkciju sada ima getch(); naredba.
odluke
Pogledajmo sada pobliže određene naredbe. Ovom naredbom određujemo tip
Petlje
grafičkog prozora.
Polja
256 boja.
PRO - MIL 79
Grafika
Nakon što smo naredbom int gdriver = 9; odabrali tip grafičkog prozora, ovom
naredbom biramo rezoluciju grafičkog prozora.
BLACK,
BLUE,
GREEN,
CYAN,
RED,
setbkcolor( WHITE ); MAGENTA,
BROWN,
LIGHTGRAY,
DARKGRAY,
LIGHTBLUE,
LIGHTGREEN,
LIGHTCYAN,
LIGHTRED,
LIGHTMAGENTA,
YELLOW,
WHITE.
80 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Osim navođenja imena boja, boje možemo odrediti i navođenjem njihove broj-
čane vrijednosti.
Uvod
program
Naš prvi
setbkcolor(COLOR( 255, 255, 255 )); Plava.
Varijable
Crvena. Zelena.
Donošenje Grafika
Dodat ćemo naredbu COLOR iza koje se nalaze tri broja čija vrijednost mo-
že biti između 0 i 255.
odluke
Boje u računalu sastoje se od tri boje; crvene, zelene i plave. Sve ostale
boje nastaju miješanjem tih boja.
Petlje
trećim intenzitet plave boje.
Polja
Obrada
teksta
Ovom naredbom određuje se boja kojom crtamo. Koristimo iste nazive boja
kao i u prethodnoj naredbi.
Objekti
setcolor(BLACK);
Sažimanje Veliki pro-
PRO - MIL 81
Grafika
640
240
Širina prozora,
320
u našem slu-
čaju 640 toča-
ka.
180
480
82 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Varijacije programa
Uvod
#include <iostream> jera da bismo lakše razumjeli
#include <winbgim.h> kako radi naredba za crtanje
kruga.
using namespace std;
program
Naš prvi
Ovaj program sličan je pretho-
int main() dnom. Razlika je u tome što je
{ prethodni crtao samo jedan
int gdriver = 9; krug, a ovaj će nacrtati nekoli-
Varijable
int gmode = 2; ko krugova različitog polumje-
initgraph(&gdriver, &gmode, ""); ra, ali sa središtem u istoj toč-
setbkcolor(WHITE); ki.
setcolor(BLACK);
Donošenje Grafika
cleardevice(); Ovdje se nalaze četiri nared-
circle(320,240,220); be za crtanje četiri kruga.
circle(320,240,165);
circle(320,240,110); Pokrenemo li ovaj program,
circle(320,240,55); trebali bismo dobiti ovakav
odluke
getch(); rezultat.
closegraph();
return 0;
}
Petlje
Polja
Pokušajmo program pro-
Obrada
Pokušajmo promijeniti
brojeve koji određuju po-
Objekti
PRO - MIL 83
Grafika
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle (320, 60, 60);
circle (320, 180, 60);
circle (320, 300, 60);
getch();
closegraph();
return 0;
}
84 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
#include <cstdlib>
#include <iostream>
Uvod
#include <winbgim.h>
program
Naš prvi
int main()
{
int gdriver = 9;
int gmode = 2;
Varijable
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle (60, 60, 60);
Donošenje Grafika
circle (180, 180, 60);
circle (300, 300, 60);
getch();
closegraph();
odluke
return 0;
}
Petlje
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
Polja
using namespace std;
int main()
{
Obrada
teksta
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
Objekti
setcolor(BLACK);
cleardevice();
circle(320,240,220);
circle(220,140,50);
Sažimanje Veliki pro-
circle(420,140,50);
grami
circle(320,240,30);
getch();
closegraph();
return 0;
koda
PRO - MIL 85
Grafika
Crtanje pravokutnika
Naredba za crtanje
rectangle ( 160, 100, 480, 380 ); pravokutnika.
640
Naredbom rectan-
100 gle crtamo pravo-
kutnik, a sa četiri
160 380 broja koji se nala-
ze iza naredbe
rectangle određu-
jemo položaj gor-
njeg lijevog i do-
njeg desnog ugla
480 pravokutnika.
86 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
#include <cstdlib> Međusobno možemo kombinirati
#include <iostream> više pravokutnika.
#include <winbgim.h>
Uvod
using namespace std;
int main()
program
Naš prvi
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
Varijable
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
rectangle (160, 100, 480, 380);
Donošenje Grafika
rectangle (190, 130, 450, 350);
rectangle (220, 160, 420, 320);
rectangle (250, 190, 390, 290);
getch();
closegraph();
odluke
return 0;
}
Petlje
Pravokutnik možemo kombini- #include <cstdlib>
rati s drugim oblicima. #include <iostream>
#include <winbgim.h>
Pokušajmo za vježbu sami iz-
Polja
misliti nekoliko primjera, npr. using namespace std;
deblo stabla nacrtamo kao pra-
vokutnik, a krošnju kao krug. int main()
{
Obrada
teksta
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
Objekti
setcolor(BLACK);
cleardevice();
circle (320, 240, 220);
circle (220, 140, 50);
Sažimanje Veliki pro-
return 0;
}
PRO - MIL 87
Grafika
Crtanje crte
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
line (120, 100, 500, 380);
getch();
closegraph();
return 0;
}
Naredba za crtanje
line ( 160, 100, 480, 380 ); crte.
640
100
Funkciju pojedinih
480 brojeva možemo
vidjeti na crtežu.
88 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Napravimo nekoliko crteža upo-
#include <cstdlib> rabom naredbe za crtanje crte.
#include <iostream>
#include <winbgim.h>
Uvod
using namespace std;
program
Naš prvi
int main()
{
int gdriver = 9;
int gmode = 2;
Varijable
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
line (100, 240, 540, 240);
Donošenje Grafika
line (320, 20, 320, 460);
getch();
closegraph();
return 0;
odluke
}
#include <cstdlib>
Petlje
#include <iostream>
#include <winbgim.h>
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
Objekti
cleardevice();
circle (320, 240, 220);
circle (320, 240, 165);
circle (320, 240, 110);
Sažimanje Veliki pro-
return 0;
}
PRO - MIL 89
Grafika
120 380
480
90 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
#include <cstdlib>
Ovaj način crtanja pogodan
#include <iostream>
je za crtanje više crta u nep-
#include <winbgim.h>
rekinutom nizu.
Uvod
using namespace std;
Pogledajmo ovaj primjer.
int main()
program
Naš prvi
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
Varijable
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto(160, 240);
lineto(160, 450);
Donošenje Grafika
lineto(480, 450);
lineto(480, 240);
lineto(160, 240);
lineto(320, 120);
odluke
lineto(480, 240);
getch();
closegraph();
return 0;
Petlje
}
#include <cstdlib>
#include <iostream>
Pogledajmo, korak po korak, #include <winbgim.h> Polja
kako je nastao ovaj crtež.
using namespace std;
Obrada
teksta
int main()
{
int gdriver = 9;
int gmode = 2;
Objekti
cleardevice();
grami
moveto(160, 240);
lineto(160, 450);
getch();
closegraph();
return 0;
koda
PRO - MIL 91
Grafika
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
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>
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto(160, 240);
lineto(160, 450);
lineto(480, 450);
lineto(480, 240);
getch();
closegraph();
return 0;
}
92 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
Uvod
using namespace std;
int main()
program
Naš prvi
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
Varijable
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto(160, 240);
lineto(160, 450);
Donošenje Grafika
lineto(480, 450);
lineto(480, 240);
lineto(160, 240);
getch();
odluke
closegraph();
return 0;
}
#include <cstdlib>
#include <iostream>
Petlje
#include <winbgim.h>
Polja
int main()
{
int gdriver = 9;
int gmode = 2;
Obrada
teksta
moveto(160, 240);
lineto(160, 450);
lineto(480, 450);
lineto(480, 240);
Sažimanje Veliki pro-
lineto(160, 240);
grami
lineto(320, 120);
getch();
closegraph();
return 0;
koda
PRO - MIL 93
Grafika
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto(160, 240);
lineto(160, 450);
#include <cstdlib> lineto(480, 450);
#include <iostream> lineto(480, 240);
#include <winbgim.h> lineto(160, 240);
lineto(320, 120);
using namespace std; lineto(480, 240);
getch();
int main() closegraph();
{ return 0;
int gdriver = 9; }
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto(160, 240);
lineto(160, 450);
lineto(480, 450);
lineto(480, 240);
lineto(160, 240);
lineto(320, 120);
lineto(480, 240);
rectangle(400, 320, 480, 450);
rectangle(200, 260, 250, 340);
rectangle(300, 260, 350, 340);
circle (550, 90, 80);
line (0, 450, 640, 450);
getch();
closegraph();
return 0;
}
94 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Crtanje točke
Uvod
#include <cstdlib> jedna točka, kao u ovom primje-
#include <iostream> ru gdje smo točkom označili
#include <winbgim.h> središte kruga.
program
Naš prvi
using namespace std;
int main()
{
Varijable
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
Donošenje Grafika
cleardevice();
circle (320, 240, 220);
putpixel (320, 240, BLACK);
getch();
odluke
closegraph();
return 0;
}
Petlje
Naredba za crtanje
putpixel ( 320, 240, BLACK );
Polja
točke.
Obrada
teksta
640
Ovdje unosimo boju
točke koju određuje-
380
mo na isti način kao i
boju pozadine ili boju
Objekti
crte.
500
Sažimanje Veliki pro-
grami
480
koda
PRO - MIL 95
Grafika
Ispis teksta
96 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
Upotrijebimo li ovu naredbu, #include <cstdlib>
#include <iostream>
tekst će se ispisati unutar
#include <winbgim.h>
Uvod
grafičkog prozora.
using namespace std;
program
Naš prvi
int main()
{
int gdriver = 9;
int gmode = 2;
Varijable
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
outtext ("Ovo je krug.");
Donošenje Grafika
circle (320, 240, 220);
getch();
closegraph();
return 0;
odluke
}
Petlje
#include <cstdlib> Naredbu za određivanje pozici-
#include <iostream>
#include <winbgim.h> je početka crte možemo iskori-
Polja
stiti za određivanje početka
using namespace std;
teksta.
int main()
Obrada
{
teksta
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
Objekti
setcolor(BLACK);
cleardevice();
moveto (320, 240);
outtext ("Ovo je krug.");
Sažimanje Veliki pro-
grami
PRO - MIL 97
Grafika
#include <cstdlib>
#include <iostream>
#include <winbgim.h> Naredba outtextxy objedi-
njuje naredbu za određivanje
using namespace std; pozicije teksta i naredbu za
ispis teksta.
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
outtextxy (320, 240, "Ovo je krug.");
circle (320, 240, 220);
getch();
closegraph();
return 0;
}
640
240
480
98 PRO - MIL
C++ programiranje za apsolutne početnike
Sadržaj
#include <cstdlib>
#include <iostream> Naredbom settextstyle mo-
Uvod
#include <winbgim.h> žemo mijenjati oblik i veličinu
slova te smjer ispisa teksta.
using namespace std;
Stavljamo je prije naredbe za
program
Naš prvi
int main()
ispis teksta.
{
int gdriver = 9;
int gmode = 2;
Varijable
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
settextstyle (9, HORIZ_DIR, 1);
Donošenje Grafika
outtextxy (320, 240, "Ovo je krug.");
circle (320, 240, 220);
getch();
closegraph();
odluke
return 0;
}
Petlje
Naredba za određivanje veličine i oblika slova te smjera ispisa.
Polja
settextstyle ( 9, HORIZ_DIR, 1 );
Obrada
teksta
Smjer teksta:
Sažimanje Veliki pro-
grami
PRO - MIL 99
Grafika
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle (320, 240, 220);
settextstyle(9, HORIZ_DIR, 1); Pogledajmo primjer prom-
outtextxy(320, 200, "Ovo je krug."); jene veličine slova.
settextstyle(9, HORIZ_DIR, 2);
outtextxy(320, 240, "Ovo je krug.");
settextstyle(9, HORIZ_DIR, 3);
outtextxy(320, 280, "Ovo je krug.");
settextstyle(9, HORIZ_DIR, 4); #include <cstdlib>
outtextxy(320, 320, "Ovo je krug.");
#include <iostream>
getch();
#include <winbgim.h>
closegraph();
return 0; using namespace std;
}
int main()
{
int gdriver = 9;
Pogledajmo primjer prom- int gmode = 2;
jene smjera ispisa teksta. initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle (320, 240, 220);
settextstyle(9, HORIZ_DIR, 1);
outtextxy(320, 240, "Ovo je krug.");
settextstyle(9, VERT_DIR, 1);
outtextxy(300, 240, "Ovo je krug.");
settextstyle(9, -VERT_DIR, 1);
outtextxy(500, 240, "Ovo je krug.");
getch();
closegraph();
return 0;
}
Sadržaj
#include <cstdlib> Pogledajmo primjer promjene
#include <iostream> oblika slova.
Uvod
#include <winbgim.h>
program
Naš prvi
int main()
{
int gdriver = 9;
int gmode = 2;
Varijable
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
circle (320, 240, 220);
Donošenje Grafika
settextstyle(0, HORIZ_DIR, 3);
outtextxy(320, 40, "Ovo je krug.");
settextstyle(1, HORIZ_DIR, 3);
outtextxy(320, 80, "Ovo je krug.");
odluke
settextstyle(2, HORIZ_DIR, 3);
outtextxy(320, 120, "Ovo je krug.");
settextstyle(3, HORIZ_DIR, 3);
outtextxy(320, 160, "Ovo je krug.");
settextstyle(4, HORIZ_DIR, 3);
Petlje
outtextxy(320, 200, "Ovo je krug.");
settextstyle(5, HORIZ_DIR, 3);
outtextxy(320, 240, "Ovo je krug.");
settextstyle(6, HORIZ_DIR, 3);
Polja
outtextxy(320, 280, "Ovo je krug.");
settextstyle(7, HORIZ_DIR, 3);
outtextxy(320, 320, "Ovo je krug.");
settextstyle(8, HORIZ_DIR, 3);
Obrada
teksta
}
koda grami
Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program
103
C++ programiranje za apsolutne početnike
Donošenje odluke
Funkcije
Potencija na koju
rezultat = pow ( broj, potencija ); potenciramo.
Sadržaj
Ovo je program za izra-
#include <cstdlib> čun sinusa.
#include <iostream>
Uvod
#include <cmath> Ako ne znate što je to
sinus, nemojte se time
using namespace std; opterećivati. To nije bitno
program
Naš prvi
za razumijevanje C++
int main() programskog jezika.
{
float kut; Važno je uočiti da ova
float rezultat; funkcija veličinu kuta ne
Varijable
cout << "Kut u radijanima:" << endl; izražava stupnjevima ne-
cin >> kut; go radijanima.
cout << endl;
rezultat = sin(kut);
Donošenje Grafika
cout << "Sinus kuta je:" << endl;
cout << rezultat << endl;
cout << endl;
system("PAUSE");
return 0;
odluke
}
Ponekad je u programu
#include <cstdlib> potrebno negativan broj
#include <iostream> pretvoriti u pozitivan.
#include <cmath>
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;
}
Naredba za pretvaranje
Varijabla u koju spremamo broj koji
negativnog broja u poziti-
ćemo iz negativnog pretvoriti u poziti-
van broj.
van.
Sadržaj
Uvod
#include <cstdlib>
#include <iostream>
#include <cmath>
program
Naš prvi
using namespace std;
Pogledajmo program
int main() za vađenje kvadratnog
{ korijena.
Varijable
float broj;
float rezultat; Što je to uopće kvadrati
cout << "Unesite broj:" << endl; korijen?
cin >> broj;
cout << endl; Ako je 4 puta 4, odnos-
Donošenje Grafika
rezultat = sqrt(broj); no 4 na kvadrat, jedna-
cout << "Kvadratni korijen je:" << endl; ko 16, onda je kvadrat-
cout << rezultat << endl; ni korijen od 16 jedak
cout << endl; 4.
odluke
system("PAUSE");
return 0;
}
Varijabla u koju spremamo
Varijabla u koju spre- broj čiji kvadratni korijen
Petlje
mamo rezultat. želimo izračunati.
Polja
tnog korijena.
rezultat = sqrt ( broj ); Obrada
teksta
besmisleni rezultat.
grami
Donošenje odluke
#include <cstdlib>
#include <iostream>
#include <cmath>
int main()
{
float broj; Ova inačica programa
float rezultat;
cout << "Unesite pozitivan broj." << endl; izračunava kvadratni
cin >> broj; korijen ako smo unijeli
cout << endl;
if (broj < 0) pozitivan broj ili nas
{ obavještava da je une-
cout << "Broj je negativan!" << endl;
} sen negativan broj ako
else unesemo negativan
{
rezultat = sqrt(broj); broj.
cout << "Kvadratni korijen je:" << endl;
cout << rezultat;
cout << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
Sadržaj
Pogledajmo bitne dijelo-
#include <cstdlib> ve našeg programa.
#include <iostream>
Uvod
#include <cmath>
program
Naš prvi
int main()
{ rama
Varijable
Formiranje varijabli i
unos broja iz kojeg će-
float broj; mo vaditi kvadratni kori-
float rezultat; jen.
cout << "Unesite pozitivan broj." << endl; Izvodi se prilikom sva-
Donošenje Grafika
cin >> broj; kog pokretanja progra-
cout << endl; ma.
Broj nula.
odluke
Naredbom if ispitujemo
if (broj < 0) je li sadržaj varijable ma-
nji od nule.
Petlje
{
cout << "Broj je negativan!" << endl; Ovaj dio programa izvo-
} di se samo ako je sadr-
žaj varijable broj manji
Polja
od nule.
else
Obrada
teksta
Svi programi koje smo do sada vidjeli izvodili su se redom od prve do posljed-
nje naredbe. U slučaju programa za vađenje kvadratnog korijena to nam ne
odgovara jer želimo da program na jedan način reagira ako unesemo poziti-
van broj, a na drugi način ako unesemo negativan.
Ako unesemo pozitivan broj, izračunat ćemo kvadratni korijen i nećemo ispisi-
vati obavijest da je broj negativan, a ako unesemo negativan broj, ispisat će-
mo obavijest da je broj negativan i nećemo računati kvadratni korijen, budući
da iz negativnog broja nije moguće izračunati kvadratni korijen.
Sadržaj
Da bismo lakše shvatili način korištenja if ... else naredbi, napravit ćemo niz
programa. Ti programi neće raditi ništa osobito korisno, već će im jedina svrha
biti uvježbavanje pisanja programa unutar kojih računalo donosi odluku.
Uvod
program
Naš prvi
#include <cstdlib>
#include <iostream>
Varijable
using namespace std;
int main()
{
Donošenje Grafika
float broj;
cout << "Unesite broj." << endl;
cin >> broj;
cout << endl;
if (broj > 0)
odluke
{
cout << "Broj je veci od nule." << endl;
}
else Ovaj program samo
Petlje
{
ispituje je li unesen
cout << "Broj nije veci od nule." << endl;
} broj veći od nule.
cout << endl;
system("PAUSE");
return 0; Ako je broj veći od Polja
}
nule, izvodi se dio
programa koji ispisu-
Obrada
teksta
#include <cstdlib>
#include <iostream>
Ako je odgovor na pitanje
using namespace std;
je li sadržaj varijable broj
int main()
jednak nuli DA, izvršit će
{
float broj; se ovaj dio programa.
cout << "Unesite broj." << endl;
Ispisat će se poruka Broj
cin >> broj;
cout << endl; je jednak nuli.
if (broj == 0)
{ Ako je odgovor na pitanje
cout << "Broj je jednak nuli." << endl;
je li sadržaj varijable broj
}
else jednak nuli NE, izvršit će
{
se ovaj dio programa.
cout << "Broj nije jednak nuli." << endl;
} Ispisat će se poruka Broj
cout << endl;
nije jednak nuli.
system("PAUSE");
return 0;
}
Sadržaj
Uvod
program
Naš prvi
#include <cstdlib>
#include <iostream>
Varijable
using namespace std;
int main()
{
float broj;
Donošenje Grafika
cout << "Unesite broj." << endl; Vidjeli smo da možemo
cin >> broj;
cout << endl; ispitivati je li varijabla
if (broj < 100) veća, manja ili jednaka
odluke
{
cout << "Broj je manji od sto." << endl; nekom broju.
} U dosadašnjim primje-
else
{ rima to je bio broj nula,
Petlje
cout << "Broj nije manji od sto." << endl; ali to može biti bilo koji
}
cout << endl; broj, npr. broj 100 kao
system("PAUSE"); što je to slučaj u ovom
Polja
return 0;
} primjeru. Obrada
teksta
Objekti
Sažimanje Veliki pro-
koda grami
#include <cstdlib>
#include <iostream>
int main()
{ Ovdje ispitujemo jesu li sa-
float prvi; držaji dviju varijabli u koje
float drugi;
cout << "Unesite prvi broj." << endl; smo prethodno unijeli broje-
cin >> prvi; ve jednaki.
cout << endl;
cout << "Unesite drugi broj." << endl;
cin >> drugi; Ako unesemo jednake bro-
cout << endl;
if (prvi == drugi) jeve ispisat, će se obavijest
{
Brojevi su jednaki.
cout << "Brojevi su jednaki." << endl;
}
else Ako unesemo različite, ispi-
{
cout << "Brojevi su razliciti." << endl; sat će se obavijest Brojevi
}
su različiti.
cout << endl;
system("PAUSE");
return 0;
}
Sadržaj
U ovom primjeru ispitujemo je
li sadržaj varijable prvi manji
od sadržaja varijable drugi.
Uvod
#include <cstdlib>
program
Naš prvi
#include <iostream>
Varijable
int main()
{
float prvi;
float drugi;
cout << "Unesite prvi broj." << endl;
Donošenje Grafika
cin >> prvi;
cout << endl;
cout << "Unesite drugi broj." << endl;
cin >> drugi;
odluke
cout << endl;
if (prvi < drugi)
{
cout << "Prvi broj je manji." << endl;
}
Petlje
else
{
cout << "Prvi broj nije manji." << endl;
}
Polja
cout << endl;
system("PAUSE");
return 0;
}
Obrada
teksta
Objekti
Sažimanje Veliki pro-
koda grami
#include <cstdlib>
#include <iostream>
int main()
{
float prvi;
float drugi;
cout << "Unesite prvi broj." << endl;
cin >> prvi;
cout << endl;
cout << "Unesite drugi broj." << endl; Osim jednos-
cin >> drugi; tavnih ispitiva-
cout << endl; nja if nared-
if ((prvi < 5) && (drugi < 5)) bom, moguća
{ su i složenija
cout << "Oba broja su manja od pet." << endl; ispitivanja.
}
else
{
cout << "Oba broja nisu manja od pet." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
Sadržaj
Prilikom formiranja složenih uvjeta moramo paziti na raspored zagrada. Svaki
uvjet, prvi i drugi nalaze se unutar svojih zagrada, a svi zajedno nalaze se
Uvod
unutar još jednog para zagrada.
program
Naš prvi
if ( (prvi < 5) && (drugi < 5) )
Varijable
{
Donošenje Grafika
uvjet. Svaki od ta dva uvjeta može biti zado-
} voljen ili nezadovoljen.
odluke
else
Moguće je da je sadržaj varijable prvi manji
od 5, a moguće je i da nije. Isto tako, mogu-
{
će je da je sadržaj varijable drugi manji od
Petlje
sadržaj b 5, a moguće je i da nije.
}
Polja
Postavlja se pitanje u kojem slučaju će se
izvršavati sadržaj a, a u kojem slučaju sadr-
žaj b.
Obrada
teksta
#include <cstdlib>
#include <iostream>
int main()
{
float prvi;
float drugi;
cout << "Unesite prvi broj." << endl;
cin >> prvi;
cout << endl;
cout << "Unesite drugi broj." << endl; Ako umjesto ozna-
cin >> drugi; ka && stavimo
cout << endl; oznake || ukupni
if ((prvi < 5) || (drugi < 5)) uvjet bit će zado-
{ voljen ako je ba-
cout << "Barem jedan je manji od 5." << endl; rem jedan od dva
} uvjeta zadovoljen.
else
{
cout << "Niti jedan nije manji od 5." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}
Sadržaj
Ovdje možemo vidjeti primjere jednostavnih ispitivanja na temelju kojih raču-
nalo donosi odluku koji dio programa će se izvoditi, a koji preskočiti.
Uvod
Ovo su samo neki primjeri, dok je broj mogućih kombinacija praktički neog-
raničen. Bilo koju varijablu koju koristimo u programu možemo usporediti s
bilo kojim brojem.
program
Naš prvi
Isto tako bilo koje dvije varijable koje se koriste u programu možemo među-
sobno uspoređivati.
Varijable
Primjeri jednostavnih ispitivanja
Donošenje Grafika
if (broj < 0) Ispitujemo je li sadržaj varijable broj manji od broja nula.
odluke
if (broj > 0) Ispitujemo je li sadržaj varijable broj veći od broja nula.
Petlje
Ispitujemo je li sadržaj varijable broj manji od broja pede-
if (broj < 50)
set.
if (broj > 50) Ispitujemo je li sadržaj varijable broj veći od broja pedeset. Polja
Obrada
teksta
jable drugi.
Simbol && između dva uvjeta znači da oba uvjeta moraju biti zadovoljena da
bi bio zadovoljen ukupni uvjet.
Sadržaj
#include <cstdlib>
Uvod
#include <iostream>
program
Naš prvi
int main()
{
float prvi;
float drugi;
Varijable
float treci;
cout << "Unesite prvi broj." <<
endl;
cin >> prvi; Ovdje vidimo primjer pro-
Donošenje Grafika
cout << "Unesite drugi broj." << endl;
cin >> drugi; grama koji možemo isko-
cout << "Unesite treci broj." << endl; ristiti za isprobavanje
cin >> treci;
if (((prvi < 5) || (drugi < 5)) && (treci < 5)) kombinacija s prethodne
odluke
{ stranice.
cout << "DA" << endl;
}
else U ovom slučaju ukupni
Petlje
{
cout << "NE" << endl; uvjet je ispunjen ako je
} prvi broj manji od 5 ili ako
cout << endl;
system("PAUSE"); je drugi broj manji od 5 ili
return 0; ako su oba manja od 5 i Polja
}
ako je treći broj manji od
Obrada
5.
teksta
#include <cstdlib>
#include <iostream>
int main()
{
float broj; Osim što možemo u pro-
cout << "Unesite broj." << endl; gramu imati veoma slože-
cin >> broj; na ispitivanja unutar if
if (broj < 0) naredbe, moguće je jed-
{ nu if naredbu staviti unu-
cout << "Broj je manji od 0." << endl; tar druge if naredbe.
}
else To je nužno ako želimo
{ ispitati više stvari, npr. je
if (broj > 0) li neki broj veći od nule ili
{ jednak nuli ili je manji od
cout << "Broj je veci od 0." << endl; nule. Takvo ispitivanje ne
} možemo napraviti s jed-
else nom if naredbom, nego
{ su nužne dvije if naredbe.
cout << "Broj je 0." << endl;
} Pogledajmo ovaj prog-
} ram.
cout << endl;
system("PAUSE");
return 0;
}
Sadržaj
Pogledamo strukturu
#include <cstdlib> programa.
Uvod
#include <iostream>
program
Naš prvi
Početak programa.
int main()
{
float broj;
cout << "Unesite broj." << endl;
Varijable
cin >> broj; Prva if naredba. Ispitu-
je je li broj manji od 0.
if (broj < 0)
Donošenje Grafika
{ Ako je uneseni broj
cout << "Broj je manji od 0." << endl; manji od 0, izvodi se
} ovaj dio.
odluke
else
{
if (broj > 0) Ako uneseni broj nije
manji od 0, izvodi se
Petlje
{ ovaj dio. Unutar ovog
cout << "Broj je veci od 0." << endl; dijela nalazi se druga
} if naredba.
Polja
else
Ako je uneseni broj
{ veći od 0, izvodi se
cout << "Broj je 0." << endl; ovaj dio.
Obrada
teksta
}
Ako uneseni broj nije
Objekti
veći od 0, izvodi se
cout << endl; ovaj dio.
system("PAUSE");
return 0; Ako uneseni broj nije
Sažimanje Veliki pro-
} ni veći ni manji od
grami
Kraj programa.
Sadržaj
Pogledajmo strukturu
uvlačenja redova.
#include <cstdlib>
Uvod
#include <iostream>
program
Naš prvi
int main() početak programa i dvije
{ glavne vitičaste zagrade.
float broj;
Varijable
cout << "Unesite broj." << endl;
cin >> broj; Sadržaj unutar glavnih
vitičastih zagrada uvlači
se u desnu stranu.
if (broj < 0)
Donošenje Grafika
Na toj razini piše se
{ većina jednostavnih
cout << "Broj je manji od 0." << endl; naredbi.
}
odluke
else
Sadržaji unutar if na-
{ redbe dodatno se pomi-
if (broj > 0) ču u desnu stranu.
Petlje
{ To nam pomaže da
cout << "Broj je veci od 0." << endl; lakše uočimo gdje poči-
} nje, a gdje završava if
Polja
naredba.
else
{
Obrada
teksta
} ga if naredba te poma-
že da njen sadržaj lak-
še razlikujemo od sadr-
žaja prve if naredbe.
koda
Switch naredba
#include <cstdlib>
#include <iostream>
int main()
{
float a;
float b; If naredba nam
int od; omogućuje gra-
cout << "Unesite 1. broj:" << endl; nanje na dvije
cin >> a; grane. Jedna će
cout << "Unesite 2. broj:" << endl; se izvršiti ako je
cin >> b; uvjet zadovo-
cout << "Brojeve cemo:" << endl; ljen, a druga ako
cout << "1 - zbrojiti" << endl; uvjet nije zado-
cout << "2 - oduzeti" << endl; voljen.
cout << "3 - mnoziti" << endl;
cout << "4 - dijeliti" << endl; Primjena nared-
cin >> od; be if nije elegan-
switch (od) tna ako se u
{ programu javi
case 1: potreba za gra-
cout << a << " + " << b << " = " << a + b << endl; nanjem u više
break; od dvije grane.
case 2:
cout << a << " - " << b << " = " << a - b << endl;
break;
U ovom progra-
case 3:
mu biramo jed-
cout << a << " x " << b << " = " << a * b << endl;
nu od četiri ra-
break;
čunske operaci-
case 4:
je.
cout << a << " : " << b << " = " << a / b << endl;
break;
Program bismo
default:
mogli realizirati i
cout << "Morate unijeti 1,2,3 ili 4." << endl;
uporabom više
}
if naredbi, ali
cout << endl;
daleko je ele-
system("PAUSE");
gantniji ako upo-
return 0;
trijebimo switch
}
naredbu.
Sadržaj
Početak switch naredbe. Ovdje se nalazi int varijabla. Grana-
nje se vrši na temelju broja koji se
nalazi u varijabli. Int tip je obvezan.
Uvod
Naredbom case 1: započinje dio programa koji
switch (od)
program
Naš prvi
će se izvršiti ako se u varijabli od nalazi broj 1.
Varijable
Naredbom break
case 1: završava case 1:
naredba.
Donošenje Grafika
sati. Pokrenimo
program i promat-
break; rajmo posljedice.
odluke
case 2:
cout << "Drugi izbor." << endl;
break;
Petlje
Naredbom case 2:
započinje dio pro-
case 3: grama koji će se
izvršiti ako je sadr-
cout << "Treci izbor." << endl; žaj varijable od
Polja
break; broj 2.
Na temelju slične
case 4: logike biraju se
Obrada
teksta
}
Ovaj dio izvršava se ako ni jedan case uvjet
nije zadovoljen, dakle ako u varijabli od nije bio
koda
Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program
129
C++ programiranje za apsolutne početnike
Petlje
For petlja
Sadržaj
Ključna naredba u novoj inačici programa je for naredba. Omogućuje nam
izvršavanje dijela programa više puta. To višestruko ponavljanje dijela prog-
rama naziva se programska petlja. Slično kao if naredba, i for naredba je
Uvod
veoma složena i proteže se kroz više redova programa.
program
Naš prvi
Ovdje se definira početna Petlja će se vrtjeti, odnosno petlja će po-
vrijednost varijable koju navljati dio programa, tako dugo dok je
Varijable
koristi for naredba i koju ovaj uvjet zadovoljen; u našem slučaju,
prije for naredbe moramo tako dugo dok je sadržaj varijable x manji
formirati. od 365.
U našem slučaju početna Kad uvjet više nije zadovoljen; tj. kad x više
Donošenje Grafika
vrijednost varijable x je ne bude manji od 365, program će nastavit
260. izvođenje od prve naredbe nakon druge
vitičaste zagrade.
odluke
for ( x = 260 ; x < 365 ; x=x+5 )
Petlje
{ Ovdje određujemo na-
čin na koji će se vrijed-
circle ( x, 240, 60 ); Polja
nost varijable x mije-
njati.
spremiti u varijablu x.
Udaljenost središta kruga od lije-
vog ruba nije određena brojem,
nego vrijednošću varijable x.
Sažimanje Veliki pro-
int main()
{
Sadržaj
Nemojmo se obeshrabriti ako nam trenutno nije previše jasno ni kako for
naredba radi, ni čemu bi to trebalo služiti. Na početku su takve nedoumice
normalne i nipošto nisu dokaz da nismo talentirani za programiranje.
Uvod
Takve nedoumice prevladavaju se tako da napišemo određenu količinu pro-
grama jer ćemo jedino na taj način do kraja shvatiti kako for naredba radi i
čemu služi.
program
Naš prvi
Drugačiji je problem ako nam se ne da pisati programe. Onda bismo doista
mogli konstatirati da programiranje nije za nas i trebali bismo se pokušati
baviti nečim intelektualno manje zahtjevnim, npr. nogometom ili politikom.
Varijable
Ovaj će nam program po-
#include <cstdlib> moći da lakše shvatimo
Donošenje Grafika
#include <iostream> funkcioniranje if naredbe.
#include <winbgim.h> Vrijednost varijable x mije-
njat će se od 0 do 9 po 1.
using namespace std;
odluke
Jedino što ovaj program
int main() radi jest ispisivanje sadržaj
{ varijable x.
int x;
To nam omogućuje lako
Petlje
cout << "Prije for naredbe." << endl;
for (x = 0; x < 9; x = x + 1 ) opažanje kako se sadržaj
{ varijable x mijenja, te koji
cout << x << endl; dio programa se ponavlja i
} koliko puta.
Polja
cout << "Nakon for naredbe." << endl;
cout << endl; Unošenjem varijacija u taj
system("PAUSE"); program najlakše ćemo
return 0; shvatiti for naredbu.
Obrada
teksta
}
Objekti
Vidimo da se ponavlja
Sažimanje Veliki pro-
lja se.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
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;
}
Sadržaj
Uvod
#include <cstdlib>
#include <iostream>
program
Naš prvi
#include <winbgim.h>
int main()
Varijable
{
int x;
cout << "Prije for naredbe." << endl;
for (x = 28; x > 9; x = x - 2 )
Donošenje Grafika
{
cout << x << endl; For naredba može brojiti i
} unatrag.
cout << "Nakon for naredbe." << endl;
cout << endl; U ovom slučaju vrijednost
odluke
system("PAUSE"); varijable x mijenja se od 28
return 0; do 9 po 2.
}
Petlje
U for naredbi mogu se koristi- #include <cstdlib>
ti i negativni brojevi. #include <iostream>
#include <winbgim.h> Polja
using namespace std;
Obrada
teksta
int main()
{
int x;
cout << "Prije for naredbe." << endl;
Objekti
#include <cstdlib>
#include <iostream> Prilikom formiranja for nared-
#include <winbgim.h> be moguće je napraviti grešku
koja se naziva “mrtva petlja”.
using namespace std;
Do te greške dolazi kad uvjete
int main() za kraj petlje tako formuliramo
{ da se oni nikad neće ispuniti,
int x; pa će se petlja vječno izvoditi.
cout << "Prije for naredbe." << endl;
for (x = 18; x > -9; x = x + 2 ) U ovom primjeru početna vri-
{ jednost je 18. Ta početna vri-
cout << x << endl; jednost uvećava se za 2, a
} petlja će se ponavljati tako
cout << "Nakon for naredbe." << endl; dugo dok je x veći od –9.
cout << endl;
system("PAUSE"); Ako 18 uvećavamo za 2, x će
return 0; uvijek biti veći od –9 i petlja se
} nikad neće prekinuti.
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;
}
Sadržaj
Naredba for ne postoji zato da bi se niz brojeva ispisao na zaslon računala,
nego zato da bi se u programu postigli određeni efekti.
Uvod
Iako to nije uvijek slučaj, najčešće se za postizanje željenih ciljeva koristi va-
rijabla petlje. Pogledajmo nekoliko primjera.
program
Naš prvi
#include <cstdlib>
#include <iostream> Ovaj primjer sličan je primjeru
Varijable
#include <winbgim.h> na početku ovog poglavlja.
using namespace std; Razlika je u tome što su u ovom
slučaju drugačije početna i kraj-
int main()
Donošenje Grafika
nja vrijednost x varijable, pa
{ smo dobili drugačiji niz krugova.
int gdriver = 9;
int gmode = 2; U ovom slučaju vrijednost varija-
int x; ble x mijenja se od 60 do 580 po
odluke
initgraph(&gdriver, &gmode, ""); 5.
setbkcolor (WHITE);
setcolor (BLACK); Pokušamo sami mijenjati vrijed-
cleardevice(); nosti unutar for naredbe i pro-
for (x = 60; x < 580; x = x + 5 )
Petlje
matrajmo kakve efekte će izaz-
{ vati te promjene.
circle(x,240,60);
}
getch();
Polja
closegraph();
return 0;
}
Obrada
teksta
Objekti
Sažimanje Veliki pro-
koda grami
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice(); Varijablu x možemo staviti umjesto
for (x = 60; x < 390; x = x + 5 ) broja koji određuje udaljenost središ-
{
ta od gornjeg ruba, pa će se krugovi
circle(320,x,60);
} crtati od gore prema dolje.
getch();
closegraph();
return 0;
} #include <cstdlib>
#include <iostream>
#include <winbgim.h>
Sadržaj
#include <cstdlib>
#include <iostream>
Uvod
#include <winbgim.h>
program
Naš prvi
int main()
{
int gdriver = 9;
int gmode = 2;
Varijable
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
Donošenje Grafika
for (x = 20; x < 210; x = x + 10 ) Osim pozicije središta kruga,
{ varijablom x možemo mijenjati
circle(320,240,x);
} polumjer kruga.
odluke
getch();
closegraph();
return 0;
}
#include <cstdlib>
Petlje
#include <iostream>
#include <winbgim.h>
Polja
Na sličan način možemo crtati ni-
zove drugih geometrijskih oblika, int main()
npr. crta. {
int gdriver = 9;
Obrada
teksta
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
Objekti
setcolor (BLACK);
cleardevice();
for (x = 10; x < 640; x = x + 10 )
{
Sažimanje Veliki pro-
}
getch();
closegraph();
return 0;
koda
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
int main()
{
int gdriver = 9;
int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice(); Ovo je primjer programa koji crta
for (x = 10; x < 640; x = x + 30 ) niz pravokutnika.
{
rectangle (x, 20, x+20, 380);
}
getch();
closegraph();
return 0; #include <cstdlib>
} #include <iostream>
#include <winbgim.h>
Sadržaj
Pogledajmo bitne dijelove ovog programa.
Uvod
Za razliku od dosadašnjih primje-
#include <cstdlib> ra, u ovom formiramo još jednu
#include <iostream> varijablu koju smo nazvali r.
program
Naš prvi
#include <winbgim.h>
int main()
Varijable
Prije for naredbe u varijablu r spre-
{
mimo početnu vrijednost polumje-
int gdriver = 9;
ra kruga. U našem slučaju spremili
int gmode = 2; smo broj 20.
int x;
Donošenje Grafika
int r;
odluke
varijable x o 20 do 475 po 15.
setcolor (BLACK);
cleardevice();
r = 20;
Petlje
for (x = 20; x < 475; x = x + 15 ) U naredbi za crtanje kruga upotri-
{ jebili smo dvije varijable.
}
teksta
getch();
closegraph();
return 0;
}
Objekti
+ 15 pokušajmo staviti x = x + 5.
Animacija
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
int main()
{
Ovom inačicom programa dobit int gdriver = 9;
ćemo privid kretanja pravokutnika. int gmode = 2;
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
for (x = 10; x < 620; x = x + 1 )
Pravokutnik koji se kreće {
na zaslonu računala. cleardevice();
rectangle (x, 20, x+20, 60);
}
getch();
Ovom naredbom brišemo ekran, a closegraph();
time i pravokutnik na staroj poziciji. return 0;
}
Sadržaj
#include <cstdlib>
#include <iostream>
Uvod
#include <winbgim.h>
program
Naš prvi
int main()
{
int gdriver = 9;
int gmode = 2;
Varijable
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice(); Sve grafičke elemente koje smo
Donošenje Grafika
for (x = 10; x < 200; x = x + 1 ) do sada mijenjali možemo ani-
{ mirati.
cleardevice(); U ovom programu animiramo
circle (320, 240, x); širenje kruga.
odluke
}
getch();
closegraph();
return 0; #include <cstdlib>
} #include <iostream>
Petlje
#include <winbgim.h>
Polja
int main()
U ovom primjeru animiramo krug {
koji pada od gornjeg prema do- int gdriver = 9;
njem rubu . int gmode = 2;
Obrada
teksta
int x;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
Objekti
cleardevice();
for (x = 10; x < 465; x = x + 1 )
{
cleardevice();
Sažimanje Veliki pro-
}
getch();
closegraph();
Pokušajmo sami smi- return 0;
koda
Petlja u petlji
Sadržaj
Analiziranje ovog
#include <cstdlib> programa pomoći
#include <iostream> će nam da u pot-
Uvod
punosti razumije-
using namespace std; mo način funkcio-
niranja petlje unu-
int main() tar petlje.
program
Naš prvi
{
int x; Pri tome nismo
int r; ograničeni na to
cout << "Prije petlje." << endl; da možemo staviti
Varijable
for (x = 0; x < 2; x = x + 1 ) jednu petlju unutar
{ petlje. Moguće je
cout << "Vanjska petlja. x = " << x << endl; unutar petlje staviti
for (r = 0; r < 3; r = r + 1) petlju, a unutar te
{ petlje još jednu
Donošenje Grafika
cout << "Nutarnja petlja. r = " << r << endl; petlju i tako petlje
} dodavati u skladu
} s ciljevima koje
cout << "Nakon petlje." << endl; želimo postići.
odluke
cout << endl;
system("PAUSE");
return 0;
}
nala.
Niz petlji
Sadržaj
Dozvoljene i nedozvoljene kombinacije petlji
Uvod
{
for (r = 5; r < 31; r = r + 5) Petlje se mogu na-
program
Naš prvi
{ laziti jedna unutar
druge.
circle (x, 240, r);
}
Varijable
}
Donošenje Grafika
for (x = 465; x < 100; x = x - 1)
{
circle (320, x, 10);
odluke
} Petlje se mogu na-
laziti jedna iza dru-
ge
for (r = 10; r < 91; y = y + 1)
Petlje
{
circle (320, x, r);
}
Polja
Obrada
teksta
U ovom slučaju
for (x = 465; x < 100; x = x - 1)
druga for naredba
{
Objekti
Ovakva ispreplete-
grami
na.
While petlja
U čemu je razlika?
Sadržaj
Ključna naredba u novoj inačici programa je while naredba. Logika uporabe
te naredbe slična je logici uporabe for naredbe i ako bismo se potrudili svaki
program realiziran for naredbom mogli bismo realizirati while naredbom i
Uvod
svaki program realiziran while naredbom mogli bismo realizirati for nared-
bom.
program
Naš prvi
Zato što se neke stvari mogu lakše realizirati for naredbom, a neke while
naredbom. Pogledajmo elemente while naredbe.
Varijable
Prije naredbe while mo-
Ovdje se unutar zagrada nalazi uvjet koji
Donošenje Grafika
ramo varijabli koju će
while naredba koristiti while naredba ispituje. Uvjeti se formiraju
dati neku početnu vrije-
po istoj logici kao i kod for naredbe.
dnost.
odluke
Ako je uvjet zadovoljen, izvršit će se na-
redbe unutar vitičastih zagrada, a nakon
a = 1; toga se računalo vraća na while naredbu i
Petlje
ponovo ispituje je li uvjet zadovoljen.
while (a == 1)
Polja
Ako jest, ponovo se izvode naredbe unu-
{ tar vitičastih zagrada.
cin >> a;
Obrada
teksta
nost.
odgovor = 1;
Naredba while ispituje je li sadržaj
varijable odgovor jednak broju 1.
Sadržaj
Varijablu koju će koristiti while naredba moramo prije while naredbe
formirati i moramo joj dati odgovarajuću početnu vrijednost.
Uvod
Zašto je u našem slučaju odgovarajuća početna vrijednost 1?
program
Naš prvi
Ako bi vrijednost varijable odgovor bila npr. 2, nakon while naredbe
program bi skočio na ovu naredbu i sadržaj unutar navodnika ne bi se
izvršavao.
Varijable
#include <cstdlib>
Donošenje Grafika
#include <iostream>
int main()
odluke
{
int odgovor;
odgovor = 1;
cout << "Prije while naredbe." << endl;
Petlje
while (odgovor == 1)
{
cout << "Prvi red bloka ponavljanja" << endl;
cout << "1 = nastavak ili 2 = kraj." << endl;
cin >> odgovor;
Polja
cout << "Zadnji red bloka ponavljanja" << endl;
}
cout << "Nakon while naredbe." << endl;
cout << endl;
Obrada
teksta
system("PAUSE");
return 0;
}
Objekti
ko tipkovnice unosimo
novu vrijednost varijable
odgovor i time biramo ho-
ćemo li petlju ponoviti ili
ćemo izaći iz programa.
koda
Da bi to bilo moguće, upotrijebili smo novi tip varijable, varijablu char tipa u
koju možemo spremiti jedno slovo.
#include <cstdlib>
#include <iostream>
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;
}
Sadržaj
Pogledajmo pobliže dijelove programa. Uobičajeni početak programa.
Uvod
Formiranje varijabli koje ćemo koristiti
#include <cstdlib>
program
Naš prvi
u programu.
#include <iostream>
Varijable
int main() možemo spremiti jedno slovo.
{
Nakon formiranja u varijablu odgo-
int broj; vor spremamo slovo d.
int kvadrat;
Donošenje Grafika
char odgovor;
while nared-
odgovor = 'd';
bom ispituje-
mo je li sadr-
odluke
while (odgovor != 'n')
žaj varijable
odgovor razli-
{
čit od slova n.
cout << "Unesite broj" << endl;
Petlje
Ako jest, izvo-
cin >> broj;
di se sadržaj
kvadrat = broj * broj;
unutar vitičas-
cout << "Kvadrat unesenog broja je:" << endl;
tih zagrada.
cout << kvadrat;
Polja
cout << endl;
čunava kvad-
} rat unesenog
broja.
Objekti
#include <cstdlib>
#include <iostream> While naredbu možemo iskoris-
#include <winbgim.h> titi i za višestruko pokretanje
int main()
{ Mali krug kreće se od gore pre-
int gdriver = 9; ma dolje, a zatim nas računalo
int gmode = 2;
int x; pita želimo li ponoviti animaciju.
char odgovor;
odgovor = 'd';
initgraph(&gdriver, &gmode, ""); U ovom programu koristimo dvi-
setbkcolor (WHITE); je različite vrste petlji.
setcolor (BLACK);
while (odgovor != 'n')
{ While naredbom ponavlja se
cleardevice();
for (x = 10; x < 465; x = x + 1 ) animacija, a for naredbom, koja
{ se nalazi unutar while petlje,
cleardevice();
circle (320, x, 10); animira se kretanje kruga.
}
settextstyle(9, HORIZ_DIR, 1);
outtextxy(20, 20, "Želite li ponovo (d/n)?"); U grafičkom prozoru
odgovor = getch(); za unos slova u vari-
} jablu odgovor ne
closegraph(); koristi se cin nared-
return 0; ba, nego getch() na-
} redba.
Sadržaj
Pogledajmo dijelove našeg programa.
Uvod
#include <cstdlib>
#include <iostream> Uobičajeni početak programa.
#include <winbgim.h>
program
Naš prvi
using namespace std; Formiranje varijabli.
int main()
{
Varijable
Formiranje varijable odgovor. Ta
varijabla je char tipa i koristit će je
int gdriver = 9; while petlja unutar koje se nalazi
int gmode = 2; program za animaciju.
int x;
Donošenje Grafika
Služi nam za biranje ponavljanja
char odgovor; animacije ili kraja programa. U vari-
odgovor = 'd'; jablu odgovor sprema se slovo d.
initgraph(&gdriver, &gmode, "");
odluke
setbkcolor (WHITE);
setcolor (BLACK);
Otvaranje grafičkog
while (odgovor != 'n') prozora.
Petlje
{
Vanjska while petlja.
cleardevice();
closegraph();
return 0;
}
Kraj programa. Ovaj dio izvodi se kad
while naredba ustanovi da sadržaj
koda
Ovaj program već bismo mogli smatrati jednim elementom primitivne igrice.
Dovoljno bi bilo dodati kretanje malih krugova od gore prema dolje i brojač koji
bi brojio koliko krugova smo ovim pravokutnikom uspjeli “uhvatiti”.
Umjesto:
int x; #include <cstdlib>
x =290; #include <iostream>
#include <winbgim.h>
možemo napisati
int x = 290; using namespace std;
int main()
{
int gdriver = 9;
int gmode = 2;
int x = 290;
Umjesto: char odgovor = 'd';
char odgovor; initgraph(&gdriver, &gmode, "");
odgovor = ‘d’; setbkcolor (WHITE);
setcolor (BLACK);
možemo napisati cleardevice();
char odgovor = 'd'; while (odgovor != 'k')
{
rectangle(x, 432, x+60, 438);
odgovor = getch();
if (odgovor == 75)
{
x = x - 5;
Pravokutnik koji može- }
mo pomicati u lijevu i if (odgovor == 77)
desnu stranu. {
x = x + 5;
}
cleardevice();
}
closegraph();
return 0;
}
Sadržaj
Pogledajmo dijelove našeg programa.
Uvod
#include <cstdlib> Uobičajeni početak programa,
#include <iostream> formiranje varijabli i otvaranje
#include <winbgim.h> grafičkog prozora.
program
Naš prvi
using namespace std;
Varijable
int gdriver = 9; se u ovoj while petlji.
int gmode = 2;
int x = 290; Ako pritisnemo tipku k prog-
char odgovor = 'd'; ram će izaći iz petlje i naša
initgraph(&gdriver, &gmode, ""); igrica će se ugasiti.
Donošenje Grafika
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice(); Ovdje se crta pravokutnik koji
pomičemo.
odluke
while (odgovor != 'k')
{
Ovdje program ispituje koja
rectangle(x, 432, x+60, 438);
tipka je pritisnuta, a rezultat
Petlje
sprema u varijablu odgovor.
odgovor = getch();
if (odgovor == 75)
{ Ako pritisnemo lijevu strelicu, varija-
Polja
x = x - 5; bla x, koja određuje udaljenost pra-
} vokutnika od lijeve strane, umanjit
će se za 5, pa će se pravokutnik
if (odgovor == 77) drugi put crtati pomaknut 5 točaka u
Obrada
teksta
{ lijevu stranu.
x = x + 5;
}
Ako pritisnemo desnu strelicu, varija-
Objekti
cleardevice();
bla x će se uvećati za 5, pa će se
} pravokutnik drugi put crtati pomaknut
5 točaka u desnu stranu.
Sažimanje Veliki pro-
closegraph();
grami
return 0;
} Naredbom za brisanje ekrana bri-
šemo pravokutnik na staroj poziciji
da bismo ga nacrtali na novoj.
koda
Sadržaj
Da bismo dobili primitivni program za crtanje, dovoljno je da u prethod-
nom programu maknemo naredbu za brisanje zaslona računala.
Uvod
#include <cstdlib>
#include <iostream>
Varijablama x i y određena je
#include <winbgim.h>
pozicija gornjeg lijevog ugla pra-
program
Naš prvi
vokutnika. Varijabla x određuje
using namespace std;
udaljenost od lijevog ruba, a
varijabla y od gornjeg ruba.
int main()
{
Varijable
Udaljenost donjeg desnog ugla
int gdriver = 9;
int gmode = 2; pravokutnika od lijevog ruba
int x = 290;
određena je sa x + 60, a udalje-
int y = 220;
char odgovor = 'd'; nost donjeg desnog ugla od gor-
Donošenje Grafika
initgraph(&gdriver, &gmode, "");
njeg ruba određena je sa y+5.
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice(); Širina našeg pravokutnika je 60,
odluke
while (odgovor != 'k') a visina 5. (Pokušajmo promije-
{ niti te brojeve.)
rectangle(x, y, x+60, y+5);
odgovor = getch();
Petlje
if (odgovor == 75)
{
x = x - 5;
}
if (odgovor == 77)
Polja
{
x = x + 5;
}
if (odgovor == 72)
Obrada
teksta
{
y = y - 5;
}
if (odgovor == 80)
Objekti
{
y = y + 5;
} Ako ovu naredbu obrišemo, pra-
cleardevice(); vokutnik će se crtati na novoj po-
Sažimanje Veliki pro-
mo program.
int main()
{
int gdriver = 9;
int gmode = 2;
int x = 290;
int y = 220;
char odgovor = 'd';
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice(); Ovom naredbom ispisujemo jednu
while (odgovor != 'k') točku na zaslon računala. Varijabla
{ x određuje udaljenost točke od lije-
putpixel(x, y, BLACK); vog ruba, varijabla y od gornjeg ruba,
odgovor = getch(); a BLACK određuje boju točke.
if (odgovor == 75)
{
x = x - 1;
}
if (odgovor == 77) Želimo li dobiti punu crtu, točku mo-
{ ramo pomicati za 1.
x = x + 1;
} Pokušajmo umjesto 1 staviti 2 ili 5.
if (odgovor == 72)
{
y = y - 1;
}
if (odgovor == 80)
{
y = y + 1;
}
}
closegraph();
return 0;
}
Sadržaj
Za crtanje možemo koristiti i krug.
Uvod
#include <cstdlib>
program
Naš prvi
#include <iostream>
#include <winbgim.h>
Varijable
int main()
{
int gdriver = 9;
int gmode = 2;
Donošenje Grafika
int x = 290;
int y = 220;
char odgovor = 'd'; Ovom naredbom ispisujemo krug.
initgraph(&gdriver, &gmode, ""); Varijabla x određuje udaljenost
središta kruga od lijevog ruba,
odluke
setbkcolor (WHITE);
setcolor (BLACK); varijabla y udaljenost središta od
cleardevice(); gornjeg ruba, a 20 je polumjer
while (odgovor != 'k') kruga.
{
Petlje
circle(x, y, 20);
odgovor = getch();
if (odgovor == 75)
{
Polja
x = x - 5; Broj 5 određuje pomak novog sre-
} dišta u odnosu na staro.
if (odgovor == 77)
{ Pokušajmo mijenjati taj broj.
Obrada
teksta
x = x + 5;
}
if (odgovor == 72)
{
Objekti
y = y - 5;
} Imajmo stalno na umu da ćemo
if (odgovor == 80) razumijevanje programa i vješti-
{ nu pisanja vlastitih programa
steći jedino tako da svaki primjer
Sažimanje Veliki pro-
y = y + 5;
grami
Sadržaj
Mišem možemo pokretati bilo koji grafički ob-
jekt, npr. krug.
Uvod
#include <cstdlib>
#include <iostream> Početak programa.
#include <winbgim.h>
program
Naš prvi
using namespace std; Varijable kojima određujemo tip
grafičkog prozora.
int main()
{
Varijable
Otvaranje grafičkog prozora.
int gdriver = 9;
int gmode = 2;
Donošenje Grafika
initgraph(&gdriver, &gmode, ""); Unutar while petlje stalno se
setbkcolor (WHITE); očitava pozicija pokazivača
setcolor (BLACK); miša i crta se krug čije središte
cleardevice(); određuje položaj pokazivača
miša, a polumjer je 100.
odluke
while (!kbhit())
{ Petlja se izvodi tako dugo dok
circle(mousex(),mousey(),100); niti jedna tipka na tipkovnici
} nije pritisnuta.
Petlje
closegraph();
return 0; Kraj programa.
}
Polja
Obrada
teksta
dimenzija.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
Ako u prethodne programe doda- cleardevice();
mo naredbu za brisanje sadržaja while (!kbhit())
grafičkog prozora, dobit ćemo pro- {
gram koji nam omogućuje pomica- cleardevice();
nje objekta mišem. circle(mousex(),mousey(),100);
}
closegraph();
return 0;
}
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE);
setcolor (BLACK);
cleardevice();
while (!kbhit())
{
cleardevice();
line (mousex()+40, mousey(), mousex()-40, mousey());
line (mousex(), mousey()-40, mousex(), mousey()+40);
}
closegraph();
return 0; Na sličan način možemo mišem
} pomicati nešto drugo, npr. dvije
crte koje bi u igri mogle biti nišan.
Sadržaj
Nedostatak prethodnih programa bio je što se
ekran briše i objekt ponovo crta, bez obzira je li
Uvod
to potrebno ili nije, odnosno bez obzira je li
došlo do pomaka miša ili nije.
program
Naš prvi
Ako nije došlo do pomaka miša, nema potrebe
objekt brisati i ponovo crtati.
Varijable
računalima izazvati treperenje slike, što je veo-
ma neugodno.
Donošenje Grafika
voj poziciji jedino ako je došlo do pomicanja
miša.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
odluke
using namespace std; Ovom naredbom ispituje-
mo je li došlo do pomaka
int main() miša.
{
Petlje
int gdriver = 9; Sadržaj unutar vitičastih
int gmode = 2; zagrada izvršit će se jedi-
initgraph(&gdriver, &gmode, ""); no ako je došlo do poma-
setbkcolor (WHITE); ka miša.
Polja
setcolor (BLACK);
cleardevice(); U tom slučaju obrisat će
while (!kbhit()) se sadržaj grafičkog pro-
{ zora i objekt će se nacrta-
Obrada
teksta
{
cleardevice();
Objekti
sati.
grami
}
closegraph(); Kad ovu naredbu ne bis-
return 0; mo upotrijebili, u progra-
} mu bi bilo moguće samo
koda
Osim što možemo očitati je li došlo do pomaka miša, možemo isto tako očitati je
li pritisnuta neka tipka na mišu. Ovaj program će nam omogućiti da pritiskom na
lijevu tipku miša nacrtamo objekt u grafičkom prozoru.
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
int main()
{
int gdriver = 9;
int gmode = 2;
initgraph(&gdriver, &gmode, ""); Ovom naredbom ispituje-
setbkcolor (WHITE); mo je li pritisnuta lijeva
setcolor (BLACK); tipka miša.
cleardevice();
while (!kbhit()) Ako jest izvodi se sadržaj
{ unutar vitičastih zagrada.
if (ismouseclick(WM_LBUTTONDOWN))
{
cleardevice();
circle(mousex(),mousey(),100);
} Ovom naredbom brišemo
clearmouseclick(WM_LBUTTONDOWN); rezultat očitavanja lijeve
} tipke na mišu.
closegraph();
return 0; Novo očitavanje je mogu-
} će jedino nakon brisanja
starog očitavanja.
Sadržaj
OČITAVANJE MIŠA
Uvod
ismouseclick(WM_MOUSEMOVE) Očitavanje kretanja miša.
program
Naš prvi
clearmouseclick(WM_MOUSEMOVE) Brisanje očitavanja kretanja miša.
Varijable
clearmouseclick(WM_LBUTTONDOWN); Brisanje očitavanja lijevog klika.
Donošenje Grafika
ismouseclick(WM_LBUTTONDBLCLK) Očitavanje duplog lijevog klika.
odluke
clearmouseclick(WM_LBUTTONDBLCLK)
klika.
Petlje
clearmouseclick(WM_RBUTTONDOWN) Brisanje očitavanja desnog klika.
clearmouseclick(WM_RBUTTONDBLCLK)
nog klika.
njeg klika.
Do while petlja
Sadržaj
Usporedimo strukture while petlje i do while petlje.
a = 1;
Uvod
Određivanje vrijednosti varijable koju će koristiti
while naredba.
while (a == 1)
program
Naš prvi
Ispitivanje je li uvjet zadovoljen, u našem sluča-
{ ju, je li sadržaj varijable a jednak broju 1.
Varijable
cin >> a;
Ovaj dio unutar vitičastih zagrada ponavlja se
dok je uvjet zadovoljen, u našem slučaju dok je
} sadržaj varijable a jednak broju 1.
Donošenje Grafika
Petlja do while započinje određivanjem vrijed-
nosti varijable koju će koristiti while naredba.
odluke
a = 1;
Ovaj tip petlje započinje naredbom do nakon
koje slijede vitičaste zagrade unutar kojih se
do
Petlje
nalazi dio programa koji se ponavlja dok je uv-
jet zadovoljen
{
Polja
Dio koji se ponavlja i u kojem mora postojati
cin >> a; mogućnost promjene vrijednosti varijable a. Obrada
}
teksta
U čemu je razlika između ovih dviju petlji, osim očigledne razlike u načinu
grami
pisanja? Razlika je u tome što se sadržaj while petlje neće izvesti niti jednom
ako uvjet nije zadovoljen jer se ispitivanje nalazi prije djela koji se ponavlja.
Sadržaj do while petlje će se bez obzira na uvjet izvesti barem jednom jer se
najprije izvodi dio koji se ponavlja, a tek nakon toga ispituje se je li uvjet za-
koda
dovoljen.
#include <cstdlib>
#include <iostream>
int main()
{
int x;
for (x = 0; x < 11; x = x + 1)
{
cout << rand() << endl;
}
system("PAUSE");
return 0;
}
Slučajne brojeve generirat
ćemo naredbom rand().
Sadržaj
Problem koji se sastoji u tome
da naredba rand(); uvijek gene-
rira isti niz brojeva riješit ćemo
Uvod
naredbom srand(1);.
program
Naš prvi
#include <cstdlib>
#include <iostream>
Varijable
using namespace std;
int main()
{
Stavimo li naredbu srand(1) prije na-
int x;
Donošenje Grafika
redbe rand() postići ćemo da naredba
srand(1);
rand() generira neki niz brojeva.
for (x = 0; x < 11; x = x + 1)
{
Ako umjesto srand(1); stavimo srand
cout << rand() << endl;
(2); dobit ćemo neki drugi niz brojeva.
odluke
}
Pokušajmo i vidjet ćemo da ćemo za
system("PAUSE");
srand(3); dobit neki treći niz brojeva, a
return 0;
za srand(4); neki četvrti.
}
Petlje
Problem je u tome što ćemo za isti broj
unutar zagrade dobivati uvijek isti niz.
Dakle srand(6) davat će pri svakom
pokretanju isti niz brojeva, ali drugačiji
Polja
nego npr. srand(5). Očito bi bilo dobro
kad bismo na neki način broj unutar
#include <cstdlib> zagrade mogli mijenjati.
#include <iostream>
Obrada
teksta
int main()
{
Objekti
int x;
srand(2);
for (x = 0; x < 11; x = x + 1)
Sažimanje Veliki pro-
{
grami
Sadržaj
#include <cstdlib> Stavimo li u naredbu srand(1); umjesto
#include <iostream> konkretnog broja jedan naredbu time
#include <ctime> (NULL) koja će u svakom trenutku gene-
Uvod
rirati drugačiji broj, naredba rand() pri
using namespace std; svakom će pokretanju generirati drugačiji
brojčani niz. Sada smo već blizu onome
što smo željeli, a to je generator slučajnih
program
Naš prvi
int main()
{ brojeva.
int x;
srand(time(NULL));
for (x = 0; x < 11; x = x + 1)
Varijable
{
cout << rand() << endl;
}
system("PAUSE");
Donošenje Grafika
return 0;
}
odluke
Petlje
U ovom rješenju problematič-
no je to što su često početni
brojevi veoma slični. Prvi put
smo dobili 6089, drugi put Polja
6132, a treći put 6171.
Obrada
teksta
Objekti
Sažimanje Veliki pro-
grami
timo u programu.
Sadržaj
Sad kad smo konačno dobili niz slučajnih brojeva, postavlja se pitanje kako
postići da ti slučajni brojevi budu unutar unaprijed određenih granica. Ako
želim da se objekt pojavi na slučajnoj poziciji unutar prozora širokog 640 to-
Uvod
čaka, bilo bi zgodno da generator slučajnih brojeva generira slučajni broj iz-
među 0 i 640.
program
Naš prvi
#include <cstdlib> Najprije ćemo program preurediti
#include <iostream> tako da generira brojeve između 0 i
#include <ctime> 1. To ćemo postići tako da generi-
Varijable
rani broj podijelimo maksimalnom
using namespace std; mogućom vrijednošću slučajnog
broja. U tom slučaju, ako je generi-
int main() rani slučajni broj nula, rezultat će
biti nula, a ako je jednak maksimal-
Donošenje Grafika
{
int x; noj mogućoj vrijednosti bit će 1. Za
float sb; sve ostale vrijednosti dobit ćemo
srand(time(NULL)); broj između nula i jedan.
rand();
odluke
for (x = 0; x < 11; x = x + 1)
{ Maksimalnu moguću vrijednost gene-
sb = rand() / RAND_MAX; riranog slučajnog broja dobit ćemo
cout << sb << endl; naredbom RAND_MAX.
Petlje
}
system("PAUSE");
return 0;
} Pokrenemo li takav program kao
Polja
rezultat dobit ćemo samo nule, i
možda ponekad broj 1.
Zašto?
Obrada
teksta
pretvara u float.
grami
#include <cstdlib>
#include <iostream>
#include <ctime>
int main()
{
int x;
float sb;
srand(time(NULL));
rand();
for (x = 0; x < 11; x = x + 1)
{
sb = static_cast <float> (rand()) / RAND_MAX;
cout << sb << endl;
}
system("PAUSE");
return 0;
Problem koji se javio u prethodnom pro-
}
gramu riješit ćemo tako da računalu
naredimo da broj koji će generirati na-
redba rand() i koji je int tipa, prije dijelje-
nja s RAND_MAX pretvori u float tip. To
ćemo učiniti naredbom:
Sadržaj
#include <cstdlib>
#include <iostream>
Uvod
#include <ctime>
program
Naš prvi
int main()
{
int x;
float sb;
Varijable
srand(time(NULL));
rand();
for (x = 0; x < 11; x = x + 1)
{
Donošenje Grafika
sb = (static_cast <float> (rand()) / RAND_MAX) * 640;
cout << sb << endl;
}
system("PAUSE");
Kako ćemo postići da program ne generi-
return 0;
odluke
ra brojeve između 0 i 1, nego između 0 i
}
640? Tako da slučajni broj koji računalo
generira između 0 i 1 pomnožimo sa 640.
Petlje
ću vrijednost 0, rezultat će biti nula.
Pogledajmo dio programa
kojim generiramo slučajni Ako je slučajni broj imao maksimalnu mo-
broj između 0 i 640. guću vrijednost 1, rezultat će biti 640.
Budući da je to upravo
ono što smo željeli, ovo
upozorenje ćemo zane-
mariti.
Sadržaj
Korištenje slučajnih brojeva
Uvod
Ovaj program će generirati
krugove na slučajno odabra-
nim pozicijama.
program
Naš prvi
Na taj način u igrama može-
mo generirati objekte na slu-
čajno odabranim mjestima.
Varijable
#include <cstdlib>
#include <iostream>
Donošenje Grafika
#include <winbgim.h>
#include <ctime>
odluke
dva broja, jedan koji određuje uda-
int main() ljenost središta od desnog ruba i
{ drugi koji određuje udaljenost sre-
int x; dišta od gornjeg ruba generirat
int sx; ćemo dva slučajna broja.
Petlje
int sy;
int gdriver = 9; Prvi ćemo spremiti u int varijablu
int gmode = 2; sx i bit će između 0 i 640. Drugi
initgraph(&gdriver, &gmode, ""); ćemo spremiti u sy i bit će između
Polja
setbkcolor (WHITE); 0 i 480.
setcolor (BLACK);
cleardevice(); (Dimenzije grafičkog prozora su
srand(time(NULL)); 640x480).
Obrada
teksta
rand();
for (x = 1; x < 60; x = x + 1 )
{
sx = (static_cast <float> (rand()) / RAND_MAX) * 640;
Objekti
closegraph();
grami
return 0;
} Položaj kruga ovisit će o slučajno generiranim brojevima.
#include <cstdlib>
#include <iostream>
#include <ctime>
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;
}
Sadržaj
#include <cstdlib>
#include <iostream>
Uvod
Varijablu brojcanik na početku ćemo posta-
#include <ctime> viti za nulu, a nakon svakog pogađanja uve-
ćat ćemo je za jedan i tako ćemo znati koliko
using namespace std; nam je pokušaja trebalo za pogađanje zami-
program
Naš prvi
šljenog broja.
int main()
{
int odgovor;
int slucajni_br;
Varijable
Ovdje se generira slučaj-
int brojcanik = 0; ni broj između 0 i 100.
srand(time(NULL));
Donošenje Grafika
rand();
odluke
cout << "Pogodite koji je to broj" << endl;
Petlje
cout << "Unestite odgovor." << endl;
cin >> odgovor; Pri svakom unosu odgovora
brojčanik povećavamo za 1.
brojcanik = brojcanik + 1;
}
teksta
} nji od unesenog.
}
while (slucajni_br != odgovor);
Sažimanje Veliki pro-
grami
cout << "Pogodili ste " << brojcanik << ". put." << endl;
Ispitivanje se
system("PAUSE");
ponavlja dok
return 0;
uneseni broj
}
nije jednak
koda
zamišljenom.
Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program
183
C++ programiranje za apsolutne početnike
Polja
Jednodimenzionalna polja
#include <cstdlib>
Zamislimo da kao pozadinu neke
#include <iostream>
jednostavne igrice želimo nacrtati
#include <winbgim.h>
nešto što bi moglo asocirati na
nebodere.
using namespace std;
To možemo učiniti nizom lineto
int main()
naredbi i to rješenje funkcionira, ali
{
i sami vidimo da nije baš osobito
int gdriver = 9;
elegantno.
int gmode = 2;
initgraph(&gdriver, &gmode, "");
Zamislimo koliko bi to rješenje bilo
setbkcolor (WHITE);
nepraktično ako bismo htjeli nacr-
setcolor (BLACK);
tati crtež s više detalja, npr. prozo-
cleardevice();
rima.
moveto (0, 200);
lineto (10, 200);
lineto (10, 50);
lineto (100, 50);
lineto (100, 200);
lineto (120, 200);
lineto (120, 150);
lineto (300, 150);
lineto (300, 200);
lineto (350, 200);
lineto (350, 30);
lineto (400, 30);
lineto (400, 200);
lineto (450, 200);
lineto (450, 20);
lineto (550, 20);
lineto (550, 200);
lineto (560, 200);
lineto (560, 40);
lineto (600, 40);
lineto (600, 200);
lineto (620, 200);
lineto (620, 20);
lineto (635, 20);
lineto (635, 200);
lineto (640, 200);
getch();
closegraph();
return 0;
}
Sadržaj
U ovom programu pojavljuju se Ovaj program radi isti posao kao i
uglate zagrade.
prethodni, ali je daleko elegantniji
Uvod
Dobit ćemo ih tako da držimo pri- od njega.
tisnutu AltGr tipku, a zatim klikne-
mo slovo f ili slovo g.
program
Naš prvi
Pogledamo li pažljivo program,
vidjet ćemo da su nam svi elemen-
ti poznati od prije, osim neobično
Varijable
#include <cstdlib> definirane varijable polje.
#include <iostream>
#include <winbgim.h>
Dok smo u dosadašnje varijable
Donošenje Grafika
using namespace std; mogli spremiti jedno slovo ili broj,
int main() čini se da u ovu varijablu možemo
{ spremiti mnoštvo brojeva.
int gdriver = 9;
odluke
int gmode = 2;
int x; Pažljivi analitičar možda bi uočio
initgraph(&gdriver, &gmode, "");
setbkcolor (WHITE); da broj u uglatoj zagradi odgovara
Petlje
setcolor (BLACK); količini brojeva u vitičastim zagra-
cleardevice();
dama.
int polje[54] =
{
0, 200, 10, 200, 10, 50, 100, 50, 100, 200, Polja
120, 200, 120, 150, 300, 150, 300, 200, 350, 200,
350, 30, 400, 30, 400, 200, 450, 200, 450, 20,
Obrada
550, 20, 550, 200, 550, 200, 560, 200, 560, 40,
teksta
600, 40, 600, 200, 620, 200, 620, 20, 635, 20,
635, 200, 640, 200
};
moveto (polje[0], polje[1]);
Objekti
getch();
closegraph();
return 0;
}
koda
#include <cstdlib>
#include <iostream>
int main()
{
int polje[5] = {10, 20, 30, 40, 50}; Detaljno objašnjenje funkcionira-
cout << polje[0] << endl; nja programa s prethodne strani-
cout << polje[1] << endl; ce vidjet ćemo kasnije, a sada
cout << polje[2] << endl; ćemo pogledati kako funkcionira-
cout << polje[3] << endl; ju neobične varijable koje smo
cout << polje[4] << endl; uočili u prethodnom programu.
system("PAUSE");
return 0; Ovaj program pomoći će nam da
} lakše shvatimo ovaj novi tip vari-
jable.
int polje[5] = {10, 20, 30, 40, 50}; Ovom naredbom kao i prethod-
nom formiramo varijablu, ali dok
smo u prethodnu varijablu mogli
spremiti samo jedan broj, ova
varijabla sadrži 5 pretinaca koji se
razlikuju po brojevima i u svaki od
tih pretinaca možemo spremiti
jedan broj.
10 20 30 40 50
0 1 2 3 4
polje
Sadržaj
Novi tip varijable ima poseban naziv, naziva se polje. Ćelije polja međusobno
razlikujemo po brojevima, a problem donekle komplicira činjenica da prvo
polje nije polje 1 nego polje 0, pa onda polje sa 5 elemenata ne sadrži polja
Uvod
od 1 do 5 nego od 0 do 4. U početku će nas ta činjenica često zbunjivati.
program
Naš prvi
int polje[5] = {10, 20, 30, 40, 50}; U vitičastim zagrada-
ma navest ćemo vri-
jednosti pojedinih
Varijable
ćelija.
Za razliku od obične varijable prilikom
formiranja polja u uglatim zagradama Vrijednosti ćemo me-
moramo navesti koliko ćelija sadrži po- đusobno odvojiti za-
lje. U našem slučaju polje koje smo
Donošenje Grafika
rezima.
nazvali polje sadrži 5 ćelija.
odluke
cout << polje[1] << endl; čan način kao i sadržaj varijable.
Petlje
osim naziva u uglatim zagradama moramo navesti broj ćelije koju želimo ispi-
sati. U gornjem primjeru imajmo na umu da ćemo ispisati sadržaj druge ćelije,
a ne sadržaj prve. Prvu bismo ispisali naredbom cout << polje[0] << endl;.
Polja
Obrada
teksta
Vidimo da
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;
}
Sadržaj
Polja mogu biti float tipa.
Uvod
mo brojeve, a točka ima fun-
kciju decimalnog zareza.)
program
Naš prvi
#include <cstdlib>
Varijable
#include <iostream>
Donošenje Grafika
int main()
{
float polje[5] = {10.12, 20.14, 30.16, 40.18, 50.19};
cout << polje[0] << endl;
cout << polje[1] << endl;
odluke
cout << polje[2] << endl;
cout << polje[3] << endl;
cout << polje[4] << endl;
system("PAUSE");
Petlje
return 0;
}
Polja
#include <cstdlib>
#include <iostream>
Obrada
teksta
naredbe:
char polje[5] = {'P', 'O', 'L', 'J', 'A'};
cout << polje[0] << endl; cout << polje[0] << endl;
cout << polje[1] << endl;
Sažimanje Veliki pro-
nemojmo mijenjati.
#include <cstdlib>
#include <iostream>
int main()
{
int a[3] = {2, 3, 0};
a[2] = a[0] + a[1];
cout << a[2] << endl;
system("PAUSE");
return 0;
}
#include <cstdlib>
Kao što je slučaj i kod varijabli, sadržaj po-
#include <iostream>
lja ne moramo definirati prilikom formiranja
using namespace std;
polja.
U ovom slučaju sadržaj prve i druge ćelije int main()
{
polja unosimo cin naredbom, a u treću ćeli-
int b[3];
ju spremamo rezultat zbrajanja. cin >> b[0];
cin >> b[1];
b[2] = b[0] + b[1];
cout << b[2] << endl;
system("PAUSE");
return 0;
}
Sadržaj
Sadržaj polja možemo ispi-
sati na ovaj način. Takav
način funkcionira, ali je nee-
Uvod
legantan. Osobito je neprikla-
dan ako bismo htjeli ispisati
veće polje.
program
Naš prvi
#include <cstdlib>
#include <iostream>
Varijable
using namespace std;
int main()
{
Donošenje Grafika
int polje[5] = {10, 20, 30, 40, 50};
cout << polje[0] << endl;
cout << polje[1] << endl;
cout << polje[2] << endl; Ovaj način ispisa sadržaja
odluke
cout << polje[3] << endl; polja daleko je elegantniji.
cout << polje[4] << endl;
system("PAUSE");
return 0; Formirali smo petlju koja će
Petlje
}
se vrtjeti onoliko puta koliko
ćelija petlje želimo ispisati.
Polja
Varijabla petlje mijenja se od
#include <cstdlib> početnog broja ćelije koju želi-
#include <iostream>
mo ispisati, u našem slučaju
Obrada
teksta
slučaju to je 4.
int polje[5] = {10, 20, 30, 40, 50};
int x;
for (x = 0; x < 5; x = x + 1) Pri ispisu umjesto polje[1] ko-
Sažimanje Veliki pro-
{
ristimo polje[x] što znači da se
grami
#include <cstdlib>
#include <iostream>
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>
int main()
{
int polje[5] = {10, 20, 30, 40, 50};
int x;
for (x = 4; x > -1; x = x - 1)
{ Sadržaj polja možemo ispisivati i
cout << polje[x] << endl;
unatrag. To ćemo postići tako da
}
system("PAUSE"); varijablu petlje x mijenjamo unat-
return 0;
rag od četiri do nula po jedan.
}
Sadržaj
#include <cstdlib> Na sličan način pomoću petlje mo-
#include <iostream> žemo uporabom tipkovnice unijeti
brojeve u pojedine ćelije.
Uvod
using namespace std;
int main()
program
Naš prvi
{ Ovu petlju koristimo za unos
int polje[5]; brojeva u polje.
int x;
cout << "Unos polja." << endl; Opet umjesto cin >> polje [0]
Varijable
imamo cin >> polje[x], a varijab-
for (x = 0; x < 5; x = x + 1) lu x petlja mijenja od nula do
{ četiri i tako će se unijeti sadržaj
cin >> polje[x]; cijelog polja.
}
Donošenje Grafika
Kao i do sada nakon svakog
cout << "Ispis polja." << endl; unosa broja pritisnemo Enter
tipku.
for (x = 0; x < 5; x = x + 1)
odluke
{
cout << polje[x] << endl;
} Koristeći isti trik ovdje ispisujemo
sadržaj polja.
system("PAUSE");
Petlje
return 0; Umjesto cout << polje[0] stavili
} smo cout << polje[x], a x for pet-
lja mijenja od nula do četiri i tako
Polja
će se ispisati sadržaj cijelog po-
lja.
Obrada
teksta
Objekti
Sažimanje Veliki pro-
int polje[54] =
{
0, 200, 10, 200, 10, 50, 100, 50, 100, 200,
120, 200, 120, 150, 300, 150, 300, 200, 350, 200,
350, 30, 400, 30, 400, 200, 450, 200, 450, 20, Ovom naredbom
550, 20, 550, 200, 550, 200, 560, 200, 560, 40, određuje se po-
600, 40, 600, 200, 620, 200, 620, 20, 635, 20, četak niza crta.
635, 200, 640, 200
};
{
lineto(polje[x], polje[x+1]);
}
getch();
closegraph();
return 0;
} Ovom petljom crta se
ostatak crteža.
Sadržaj
Pogledajmo podrobnije neke detalje programa.
Uvod
int polje[5] = {10, 20, 30, 40, 50};
program
Naš prvi
Ovu naredbu int polje[5] = Ovaj oblik pogodniji je za
{ korištenje kad u veliko po-
možemo napi-
Varijable
10, 20, 30, 40, 50 lje želimo unijeti veliku koli-
sati i ovako. }; činu brojeva.
Donošenje Grafika
Ova naredba određuje početak niza crta.
Udaljenost od lijevog ruba određena je
moveto (polje[0], polje[1]); sadržajem ćelije polje[0], tj. prve ćelije, a
odluke
udaljenost od gornjeg ruba sa polje[1], tj.
sadržajem druge ćelije.
Petlje
Početna vrijednost
varijable x je 2.
Petlja će se izvoditi dok je x manji od 54. Budući
da se x uvećava za 2 vrijednost varijable x će rasti
od 2 do 52. Polja
Obrada
teksta
Udaljenost kraja
crte od lijevog ruba Udaljenost kraja crte od gornjeg
koda
#include <cstdlib>
#include <iostream>
int main()
{
int polje[5] = {10, 20, 30, 40, 50};
cout << polje[0] << endl;
cout << polje[1] << endl;
cout << polje[2] << endl;
cout << polje[3] << endl;
cout << polje[4] << endl;
system("PAUSE");
return 0;
} Mogli bismo postaviti pitanje trebaju
li nam uopće polja, budući da bismo
ovaj program mogli i ovako realizira-
ti, običnim varijablama.
Sadržaj
Ne samo da uporabom polja možemo pisati elegantnije programe, nego nam
polja omogućuju realizaciju programa koje bi bilo veoma teško realizirati na
neki drugi način. Pogledajmo nekoliko primjera takvih programa.
Uvod
#include <cstdlib>
program
Naš prvi
#include <iostream> Polja nam omogućuju operacije sa ćelijama polja.
Varijable
int main()
{
int polje[5];
int x;
int r; Unos polja.
Donošenje Grafika
cout << "Unos polja." << endl;
for (x = 0; x < 5; x = x + 1)
{
U ovom dijelu programa pretražuje
odluke
cin >> polje[x];
se uneseno polje i najveći broj na-
}
đen u polju sprema se u varijablu
r.
r = polje[0];
for (x = 1; x < 5; x = x +1)
Petlje
{
if (r < polje[x])
{
U ovom dijelu ispisuje se sadržaj
r = polje[x];
varijable r, odnosno najveći broj
Polja
}
unesen u polje.
}
system("PAUSE");
return 0;
Objekti
}
Sažimanje Veliki pro-
koda grami
{
Unutar for petlje za svaku vrijed-
if (r < polje[x]) nost varijable x ispituje se je li sa-
{
držaj varijable r manji od polje[x].
r = polje[x];
}
Ako jest, znači da je u ćeliji polje[x]
}
veći broj od onog u varijabli r, pa
će se sadržaj ćelije polje[r] spremiti
Sadržaj
Jednostavnim promjenama pro-
#include <cstdlib>
gram koji pretražuje polje sa
#include <iostream>
ciljem da nađe najveći broj u
Uvod
polju možemo preurediti u prog-
using namespace std;
ram koji traži najmanji broj.
int main()
program
Naš prvi
Čemu služe takvi programski
{
postupci?
int polje[5];
int x;
Na sličan način bismo u progra-
int r;
mu za vođenje videoteke mogli
Varijable
cout << "Unos polja." << endl;
pronaći korisnike koji nisu vratili
for (x = 0; x < 5; x = x + 1)
film dulje od npr. tjedan dana ili
{
korisnike koji su u prošloj godini
cin >> polje[x];
posudili najviše filmova.
}
Donošenje Grafika
r = polje[0];
for (x = 1; x < 5; x = x +1)
{ Dovoljno je da umjesto ispitivanja
if (r > polje[x]) je li r < polje[x] stavimo ispitivanje
odluke
{ je li r > polje[x].
r = polje[x];
}
}
cout << "Najmanji je." << endl; Odgovarajuće preuredimo ispis
Petlje
cout << r << endl; obavijesti.
system("PAUSE");
return 0;
}
Polja
Obrada
teksta
se pojavljuje određen
broj.
Sažimanje Veliki pro-
na pretraživanja slova.
koda
#include <cstdlib>
#include <iostream>
int main()
{
int p[5];
int zamjena;
int privremeni;
int x;
cout << "Unos polja." << endl; Ovo je sasvim sigurno najslo-
for (x = 0; x < 5; x = x + 1) ženiji program koji smo do sa-
{ da vidjeli u ovoj knjizi.
cin >> p[x];
} Služi za sortiranje polja. Une-
semo različite brojeve u polje,
do a program će ih sortirati tako
{ da će u prvom polju biti najveći
zamjena = 0; broj, a u posljednjem najmanji.
for (x = 0; x < 4; x = x + 1)
{
if (p[x] < p[x+1])
{ U ovom dijelu programa unosi-
privremeni = p[x]; mo brojeve u polje.
p[x] = p[x+1];
p[x+1] = privremeni;
zamjena = 1;
}
} U ovom dijelu vrši se sortiranje
} polja.
while (zamjena ==1);
system("PAUSE");
return 0;
}
Sadržaj
Pogledamo podrobnije dio programa u kojem se vrši sortiranje.
Uvod
Sortiranje se odvija u do ... while pet- Na početku ispitivanja u varija-
lji. Petlja se ponavlja tako dugo dok je blu zamjena stavlja se broj 0.
varijabla zamjena jednaka broju 1. Ako ne bude potrebno vršiti
program
Naš prvi
nikakve zamjene u polju, varija-
bla zamjena ostat će jednaka
nuli i izvođenje do ... while pet-
lje će se zaustaviti.
Varijable
do U for petlji čita se cijelo polje, s
time da se varijabla petlje mije-
{ nja za jedan manje od veličine
Donošenje Grafika
zamjena = 0; petlje; dakle u našem slučaju ne
ide do 4 nego, do 3.
for (x = 0; x < 4; x = x + 1)
{
odluke
if (p[x] < p[x+1])
If naredbom ispitujemo je li broj
u nekoj ćeliji polja (p[x]) manji
{
privremeni = p[x]; od broja u sljedećoj ćeliji (p
Petlje
p[x] = p[x+1]; [x+1]. Ako nije, znači da imamo
prvo veći broj, a zatim manji.
p[x+1] = privremeni;
To je ono što želimo i petlja se
zamjena = 1;
vrti dalje.
}
} Polja
Zbog toga do ... while petlja će cijeli postupak ponavljati tako dugo dok više
ne bude obavljena ni jedna zamjena i varijabla zamjena ostane jednaka nuli.
Zašto?
Sadržaj
Između polja mogu se vršiti matematičke ope-
racije kao i između varijabli.
Uvod
Ovaj program će zbrojiti sadržaje polja po1 i
#include <cstdlib> polja po2, a rezultat spremiti u polje po3 i zatim
#include <iostream> ga ispisati na zaslon računala.
program
Naš prvi
using namespace std;
int main()
{
Varijable
int po1[5] = {10, 15, 20, 25, 30};
int po2[5] = {35, 40, 35, 50, 55};
int po3[5];
int a;
Donošenje Grafika
for (a = 0; a < 5; a = a +1)
{
po3[a] = po1[a] + po2[a];
cout << po1[a] << " + " << po2[a] << " = " << po3[a] << endl;
}
odluke
system("PAUSE");
return 0;
}
Petlje
Polja
Obrada
teksta
Objekti
Pokušajmo napisati slične programe koji će vršiti neke operacije između po-
lje; npr. programe koji će množiti ili dijeliti članove dvaju polja i rezultat spre-
Sažimanje Veliki pro-
Program koji će brojiti koliko puta se neki broj pojavljuje u nekom polju.
Postavlja se pitanje na
koji način bismo mogli
podatke umjesto preko
tipkovnice unijeti u po-
lje iz neke datoteke. U
tu svrhu otvorit ćemo
Nopetad (u hrvatskoj
inačici Blok za pisanje)
i unijet ćemo osam raz-
ličitih brojeva koji će biti
odvojeni praznim mjes-
tima.
Važno je napomenuti
da to moramo učiniti
tim programom, a nipo-
što Wordom ili nekim
sličnim programom.
Te brojeve, odnosno taj tekst spre-
mit ćemo pod imenom podaci.txt u
onu istu mapu u kojoj se nalazi
naš program.
Sadržaj
Uvod
program
Naš prvi
Varijable
Ako je sve u redu, u onom istom
prostoru u kojem se nalazi naš
Donošenje Grafika
projekt i naš program morala bi se
nalaziti i datoteka podaci.txt.
odluke
Petlje
Polja
Int tip u slučaju da koristimo
Jasno je da možemo staviti i
Dev-C++ može biti od –
neke druge brojeve, a možemo
2147483648 do 2147483647.
ih staviti više ili manje nego u
našem primjeru.
Obrada
uvodnog priručnika.
raničeno velik. Koliki broj može-
grami
Sadržaj
Naredba za formiranje objekta pomo- Naziv objekta. Bira se po istoj logi-
ću kojeg ćemo čitati sadržaj datoteke. ci po kojoj biramo nazive varijabli.
Uvod
program
Naš prvi
Naziv datoteke koju ćemo čitati
ifstream ulaz ("podaci.txt"); pomoću objekta ulaz.
Varijable
Donošenje Grafika
odluke
#include <cstdlib>
#include <iostream>
#include <fstream>
Petlje
int main()
{
int x;
Polja
int polje[8];
float a = 0; Kada učitamo brojeve u polje,
ifstream ulaz("podaci.txt"); s tim brojevima možemo raditi
for (x = 0; x < 8; x = x + 1) sve ono što možemo raditi i s
Obrada
teksta
cout << "Prosjek je " << a << endl; drugim brojevima, imajmo na
grami
Sadržaj
Naredba za formiranje objekta pomo-
Naziv objekta. Bira se po istoj logi-
ću kojeg ćemo spremati sadržaj dato-
ci po kojoj biramo nazive varijabli.
teke.
Uvod
program
Naš prvi
Naziv datoteke u koju ćemo
ofstream izlaz ("podaci.txt"); spremati pomoću objekta ulaz.
Varijable
Što smo spremili možemo pogledati editorom, a možemo i programom koji
sadržaj datoteke ispisuje na zaslon računala.
Donošenje Grafika
odluke
Petlje
#include <cstdlib>
#include <iostream>
#include <fstream>
int x;
teksta
int polje[8];
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{
Objekti
int main()
{
int x;
int p[8];
int zamjena;
int privremeni;
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1) U ovom djelu programa čitamo
{ sadržaj datoteke i spremamo ga
ulaz >> p[x]; u polje.
}
cout << "Zapocinje sortiranje." << endl;
do
{
Doslovno sa Copy Paste kopi-
zamjena = 0;
ran dio programa koji sortira
for (x = 0; x < 7; x = x + 1)
sadržaj polja od najvećeg prema
{
najmanjem.
if (p[x] < p[x+1])
{
privremeni = p[x];
p[x] = p[x+1];
p[x+1] = privremeni;
U ovom djelu programa sadržaj
zamjena = 1;
polja sprema se u datoteku.
}
}
}
while (zamjena ==1);
ofstream izlaz("podaci.txt");
for (x = 0; x < 8; x = x + 1) Ovdje vidimo i jedan jako va-
{ žan element programiranja.
izlaz << p[x]; Ne moramo svaku stvar svaki
izlaz << " "; put kad nam treba iznova pro-
} gramirati. Segment programa
cout << "Sortiranje je zavrsilo" << endl; koji dobro radi obilno proko-
system("PAUSE"); mentiramo i spremimo, a za-
return 0; tim ga ubacujemo u programe
} kad nam zatreba, kao što smo
ovdje ubacili segment progra-
ma koji sortira sadržaj polja.
Sadržaj
#include <cstdlib> Da bismo provjerili funkcio-
#include <iostream> nira li naš program, najpri-
#include <fstream> je ćemo programom koji
Uvod
smo malo prije obradili
using namespace std; unijeti brojeve u datoteku.
int main()
program
Naš prvi
{
int x;
int polje[8];
ofstream izlaz("podaci.txt");
Varijable
for (x = 0; x < 8; x = x + 1)
{
cin >> polje[x];
}
Donošenje Grafika
for (x = 0; x < 8; x = x + 1)
{ #include <cstdlib>
izlaz << polje[x]; #include <iostream>
izlaz << " "; #include <fstream>
}
odluke
cout << "Spremanje je gotovo." << endl; using namespace std;
cout << endl;
system("PAUSE"); int main()
return 0; {
Petlje
} int x;
int polje[8];
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
Polja
{
ulaz >> polje[x];
}
for (x = 0; x < 8; x = x +1)
Obrada
{
teksta
Dvodimenzionalna polja
int main()
{
int polje[2] [4] = {{11, 12, 13, 14}, {21, 22, 23, 24}};
int x;
system("PAUSE");
return 0;
}
Ispis drugog reda.
Sadržaj
Tip polja u našem slučaju je int, Drugi red polja. Nalazi se
a moglo je biti npr. float ili char. unutar vitičastih zagrada.
Uvod
Prvi red polja. Nalazi se
program
Naš prvi
Naziv polja. unutar vitičastih zagrada.
Varijable
int polje [2] [4] = { {11, 12, 13, 14} , {21, 22, 23, 24} };
Donošenje Grafika
Cjelokupni sadržaj polja
nalazi se unutar poseb-
Broj redova polja. Broj stupaca polja.
nih vitičastih zagrada.
odluke
Petlje
Budući da su u ovom tipu polja podaci raspoređeni u redove i stupce, prilično
logično je da kad želimo pristupiti nekoj ćeliji takvog polja moramo navesti u
uglatim zagradama broj reda i broj stupca ćelije kojoj želimo pristupiti.
Polja
Broj stupca kojem pristupamo, u našem
cout << polje [0] [x] slučaju je to sadržaj varijable x.
Obrada
teksta
Broj reda kojem pristupamo, u našem slučaju je to prvi red koji se označava
Objekti
brojem nula. Dakle prvi red označava broj nula, a drugi broj jedan.
Sažimanje Veliki pro-
grami
proračuni.
Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program
215
C++ programiranje za apsolutne početnike
Obrada teksta
String objekti
#include <cstdlib>
#include <iostream>
#include <string>
Sadržaj
#include <string> Da bi program mogao koristiti string objekte,
ovu naredbu moramo staviti na početak prog-
Uvod
rama.
program
Naš prvi
kom drugom programskom okruženju neće.
Varijable
Donošenje Grafika
odluke
cout << odgovor << ", dobar dan!" << endl; Vidimo da objekt odgovor
u naredbi cout koristimo
kao da koristimo varijab-
lu.
Petlje
Najprije će se ispisati
sadržaj objekta odgovor,
zatim tekst unutar navod-
nika i konačno skok u
Polja
novi red.
Obrada
teksta
Objekti
cin >> odgovor; U naredbi cin koju koristimo za unos preko tipkovni-
Sažimanje Veliki pro-
varijablu.
tekst.
Želimo li u string objekt unijeti veću količinu teksta, da bismo bili sigurni da će
sve biti u redu, možemo unaprijed naredbom reserve rezervirati potreban pro-
stor.
#include <cstdlib>
#include <iostream>
#include <string>
int main()
{
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
cin >> odgovor; Program radi jednako
cout << endl; kao i prethodni, osim
cout << odgovor << ", dobar dan!" << endl; što smo u ovom slučaju
cout << endl; za spremanje imena
system("PAUSE"); osigurali veliki prostor.
return 0;
}
Sadržaj
Uvod
#include <cstdlib>
#include <iostream>
#include <string>
program
Naš prvi
using namespace std;
int main()
Varijable
{
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
cin >> odgovor;
Donošenje Grafika
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
cout << "Imamo " << odgovor.size() << " slova." << endl;
odluke
cout << endl;
cout << "Imamo " << odgovor.capacity() << " prostora." << endl;
cout << endl;
system("PAUSE");
return 0;
Petlje
}
#include <cstdlib>
#include <iostream>
#include <string>
int main()
{
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
cin >> odgovor; Naredbom cin nije mo-
cout << endl; guće u objekt odgovor
cout << odgovor << ", dobar dan!" << endl; unijeti više odvojenih
cout << endl; riječi.
system("PAUSE");
return 0; Iako smo napisali prezi-
} me i ime, uspjeli smo
unijeti samo prezime.
#include <cstdlib>
#include <iostream>
#include <string>
int main()
{
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
getline(cin, odgovor);
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl; Ako umjesto cin nared-
system("PAUSE"); be upotrijebimo ovu na-
return 0; redbu, moći ćemo unijeti
} više riječi u objekt odgo-
vor.
Sadržaj
String objekt u koji ćemo unositi tekst.
getline(cin, odgovor); U našem slučaju to je objekt odgovor.
Uvod
Naredba koja nam omogućuje
program
Naš prvi
unos više riječi u string objekt.
Varijable
#include <cstdlib>
#include <iostream>
#include <string>
Donošenje Grafika
using namespace std;
int main()
{
odluke
string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl; Jedan od problema
cin >> odgovor; pri izradi programa
cout << endl; javlja se kad korisnik
Petlje
cout << odgovor << ", dobar dan!" << endl; unese neodgovara-
cout << endl; juću vrijednost.
system("PAUSE");
return 0; U ovom slučaju, um-
Polja
} jesto da unesemo
ime, samo smo priti-
snuli tipku enter.
Obrada
teksta
U ovom slučaju, na
mjestu gdje se očekiva-
lo da ćemo unijeti tekst,
mi smo unijeli brojeve.
Objekti
Postavlja se pitanje na
koji bismo način mogli
Sažimanje Veliki pro-
#include <cstdlib>
#include <iostream>
#include <string>
int main()
{
string odgovor;
do
{ Ova inačica programa
cout << "Unesite vase ime." << endl; će zahtijevati da pono-
getline(cin, odgovor); vimo unos ako pritisne-
} mo tipku Enter, a da
while (odgovor.size() == 0); prije toga nismo ništa
unijeli.
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}
Sadržaj
Polje char tipa
Uvod
program
Naš prvi
#include <cstdlib>
#include <iostream>
#include <string>
Varijable
int main()
{
char niz[255];
Donošenje Grafika
cout << "Unesite vase ime." << endl;
cin.getline(niz,255);
cout << endl;
cout << niz << ", dobar dan!" << endl;
cout << endl;
odluke
system("PAUSE"); Tekst se može unijeti u prog-
return 0; ram i obrađivati i na drugi
} način; uporabom polja char
tipa.
Petlje
Formiranje niza čije ćelije su char tipa. U svaku možemo staviti jedno slovo.
Naredba za unos
teksta tipkovnicom.
Sadržaj
U ovu inačicu programa nije moguće unijeti broj na mjestu na kojem očekuje-
mo tekst. U slučaju da unesemo brojeve, računalo će zahtijevati da ponovimo
upis.
Uvod
program
Naš prvi
#include <cstdlib>
#include <iostream>
Varijable
#include <string>
Donošenje Grafika
int main()
{
char niz[255];
int x;
int p;
odluke
do Početni dio programa i
{ formiranje potrebnih vari-
cout << "Unesite vase ime." << endl; jabli.
Petlje
cout << endl;
cin.getline(niz,255);
x = 0;
p = 1;
while (niz[x] != '\0') Ovo je glavni dio prog-
Polja
{ rama. Ovdje se unosi
if (isdigit(niz[x])) tekst i ispituje jesu li
{ unesena slova ili broje-
vi.
Obrada
p = 0;
teksta
}
x = x + 1; Ako su uneseni brojevi,
} unos se ponavlja.
}
Objekti
Cijeli ovaj dio nalazi se unutar do ... while petlji koja će se ponavljati ako korisnik
umjesto slova unese brojeve.
{
p = 0;
}
If naredbom ispitujemo je
li znak u nizu broj.
x = x + 1;
Ako jest, u p varijablu se
} sprema broj nula što će
imati za posljedicu da će
}
se ponoviti do ... while
while (p == 0);
petlja, odnosno unos.
Varijabla x uve-
ćava se za jedan Ako ni jedan član niza
da bi se pri sva- nije broj, u varijabli p će
Ovdje se ispituje je li kom ponavljanju ostati broj jedan i do ...
vrijednost varijable p naredbom niz[x] while petlja se neće po-
nula i ako jest, do ... čitao slijedeći navljati, odnosno upis se
while petlja se ponavlja. član niza. neće ponavljati.
Sadržaj
Ovaj program je veoma složen pa ćemo odvojeno pogledati važnije elemente
programa. Pogledajmo prvo glavnu do ... while petlju.
Uvod
Ovdje se u varijablu p
sprema broj jedan. To je
do Ovdje počinje petlja.
program
Naš prvi
varijabla o kojoj ovisi
{
hoće li se do ... while
cout << "Unesite vase ime." << endl;
petlja ponoviti ili ne.
cout << endl;
cin.getline(niz,255);
Varijable
x = 0;
p = 1;
while (niz[x] != '\0')
{ Ovdje će se varijabla p postaviti na nula ako je
if (isdigit(niz[x])) jedan od znakova u nizu broj. To će imati za
Donošenje Grafika
{ posljedicu da će se do ... while petlja ponoviti,
p = 0; odnosno da će se unos teksta ponoviti.
}
x = x + 1;
odluke
}
Ovdje se ispituje je li sadržaj varijable p jednak
}
nuli. Ako jest do ... while petlja će se ponoviti, a
while (p == 0);
to znači da će se upis ponoviti.
Petlje
Na početku se x postavlja na nulu, što znači da će se prvi
put sa niz[x] ispitivati niz[0] odnosno prva ćelija niza.
Polja
x = 0; While petlja ponavlja se tako dugo dok ćelija niz[x]
nije jednaka oznaci za kraj. Prvi put se ispituje
Obrada
p = 1;
teksta
#include <cstdlib>
#include <iostream>
#include <string>
Sadržaj
Osim što možemo ispitivati je li sadržaj varijable broj, ispitivati možemo i druga
svojstva sadržaja varijable char tipa.
Uvod
program
Naš prvi
ISPITIVANJE ZNAKOVA
Varijable
if (isdigit(slovo)) Ispituje je li sadržaj varijable slovo neki broj.
Donošenje Grafika
je negativan ako unesemo upitnik, točku ili nešto slično.
odluke
Ispituje je li sadržaj varijable slovo kontrolni znak. To je
if (iscntrl(slovo)) znak koji se dobiva ako držimo tipku Ctrl i onda pritis-
Petlje
nem npr. slovo v.
Polja
grupu ne pripada prazno mjesto između dviju riječi.
#include <cstdlib>
#include <iostream>
#include <string>
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;
}
Sadržaj
Uvod
if (isprint(slovo[6]))
{
cout << "Sedmi moze biti prazno mjesto." << endl;
program
Naš prvi
}
if (isupper(slovo[7]))
{
cout << "Osmi je veliko slovo." << endl;
Varijable
}
if (ispunct(slovo[8]))
{
cout << "Deveti je neka interpunkcija." << endl;
Donošenje Grafika
}
cout << endl;
system("PAUSE");
return 0;
}
odluke
Petlje
Ovaj malo veći program morali smo staviti na dvije
stranice.
#include <cstdlib>
#include <iostream>
#include <string>
Zato što računalo smatra da velika slova dolaze prije malih. Ako želi-
mo napisati program koji sva slova raspoređuje po abecedi, morali
bismo najprije ustanoviti je li neko slovo veliko ili malo, odnosno prog-
ram bi morao biti nešto složeniji. (Pokušajmo ga napisati.)
Sadržaj
Uvod
#include <cstdlib>
#include <iostream>
program
Naš prvi
#include <string>
Varijable
int main() Mogla bi nas zbuniti
{ uporaba znaka " i zna-
char slovo = 'A'; ka '.
char NizSlova[18] = "Ovo je niz slova.";
Pravilo je jednostavno,
Donošenje Grafika
cout << "Jedno slovo je " << slovo << endl;
cout << "Tekst je: " << NizSlova << endl; jedno slovo piše se u
cout << endl; obliku 'a', a više slova u
system("PAUSE"); obliku "Ovo je tekst.".
return 0;
odluke
}
Petlje
#include <cstdlib>
#include <iostream>
Polja
#include <string>
int main()
{
char slovo;
cout << "Unesite slovo." << endl; Slovima možemo do-
Objekti
Do sada smo uglavnom vidjeli operacije koje se mogu provoditi nad jednim slo-
vom spremljenim u char varijablu ili char polje. Pogledajmo sada operacije nad
većim tekstom spremljenim u objekt string klase.
#include <cstdlib>
#include <iostream>
#include <string>
int main()
{
string tekst1 = "Ovo je prvi tekst.";
string tekst2 = " Ovo je drugi tekst.";
string tekst3;
tekst3 = tekst1 + tekst2; Objekte string klase možemo jed-
cout << tekst3 << endl; nostavno zbrojiti i rezultat zbraja-
cout << endl; nja spremiti u treći objekt.
system("PAUSE");
return 0;
}
Sadržaj
Uvod
#include <cstdlib>
#include <iostream>
#include <string>
program
Naš prvi
using namespace std;
int main()
{
Varijable
string tekst1;
string tekst2;
cout << "Unesite prvu rijec." << endl;
cin >> tekst1;
Donošenje Grafika
cout << endl;
cout << "Unesite drugu rijec." << endl; Objekti klase string
cin >> tekst2; mogu se međusobno
cout << endl; uspoređivati.
if (tekst1 == tekst2)
odluke
{ U ovom programu us-
cout << "Rijeci su jednake." << endl; poređujemo jesu li jed-
} naki.
else
Petlje
{
cout << "Rijeci nisu jednake." << endl;
}
cout << endl;
Polja
system("PAUSE");
return 0;
}
Obrada
teksta
Objekti
Sažimanje Veliki pro-
koda grami
#include <cstdlib>
#include <iostream>
#include <string>
int main()
{
string tekst1;
string tekst2;
cout << "Unesite prvu rijec." << endl;
cin >> tekst1;
cout << endl;
cout << "Unesite drugu rijec." << endl; Dva objekta klase string mo-
cin >> tekst2; žemo uspoređivati i tako da
cout << endl; ispitujemo je li prvi manji od
if (tekst1 < tekst2) drugog.
{
cout << "Prva je manja." << endl; Ostaje nejasno u kojem smis-
} lu se ispituje je li prvi manji od
else drugog.
{
cout << "Prva nije manja." << endl; Očito se ne ispituje količina
} slova, nego se objekti rangira-
cout << endl; ju po abecedi, ab je po abece-
system("PAUSE"); di nakon aaaaa, pa u tome
return 0; smislu ab nije manje nego je
} veće od aaaaa.
Sadržaj
Moguće su i složenije manipulacije nad tekstom. Ponovno pogledajmo nared-
bu size() koju smo vidjeli na početku ovog poglavlja. Omogućuje nam određi-
vanje broja znakova koje sadrži tekst. Pri tome imajmo na umu da računalo i
Uvod
prazno mjesto između riječi smatra jednim znakom.
program
Naš prvi
#include <cstdlib>
Varijable
#include <iostream>
#include <string>
Donošenje Grafika
int main()
{
string odgovor;
getline(cin, odgovor);
odluke
cout << "Tekst sadrzi " << odgovor.size() << " znakova." << endl;
cout << endl;
system("PAUSE");
return 0;
} Naredba size().
Petlje
Polja
Obrada
teksta
Objekti
Sažimanje Veliki pro-
koda grami
Ovaj program pretražuje sadržaj objekta tekst i traži pojavljuje li se u tom objektu
sadržaj objekta trazi. Ako se pojavljuje, obavještava nas na kojoj poziciji započi-
nje traženi tekst. (Prva pozicija nema broj jedan nego broj nula.)
#include <cstdlib>
#include <iostream>
#include <string>
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;
}
Sadržaj
Ovom naredbom utvrđujemo poziciju traženog teksta, a rezultat spremamo u
varijablu pozicija.
Uvod
Varijabla u koju spre-
mamo rezultat. pozicija = tekst.find(trazi);
program
Naš prvi
Naziv objekta u kojem se nalazi Naredba za Objekt koji pre-
Varijable
tekst koji pretražujemo. pretraživanja. tražujemo.
Donošenje Grafika
jektu.
odluke
if (pozicija != string::npos) oznaku koja označava da tra-
žena riječ nije nađena.
Petlje
živanja u pozicija varijabli i
U varijabli pozicija nalazi se re- obavijest da tražena riječ nije
zultat pretraživanja objekta. nađena.
Polja
Obrada
teksta
pojavljuje u tekstu.
grami
program.
Ovaj program radi sličan posao kao i prethodni, ali pretraživanje započinje od
kraja teksta. Ako tražimo riječ koja se pojavljuje više puta, ovaj program naći će
posljednje pojavljivanje.
#include <cstdlib>
#include <iostream>
#include <string>
Sadržaj
Uvod
#include <cstdlib>
#include <iostream>
program
Naš prvi
#include <string>
Varijable
int main() Ovaj program smo tako korigirali da
{ smo, iako s naredbom find započi-
string tekst; njemo pretraživanje s lijeve strane,
string trazi; pronašli drugo pojavljivanje tražene
int pozicija; riječi.
Donošenje Grafika
cout << "Unesite tekst." << endl;
getline(cin, tekst);
cout << endl;
cout << "Sto trazim?" << endl;
odluke
getline(cin, trazi);
cout << endl;
pozicija = tekst.find(trazi,6);
if (pozicija != string::npos)
{
Petlje
cout << "Pocetak je na " << pozicija << ". poziciji." << endl;
}
else
{
Polja
cout << "Nema trazene rijeci." << endl;
}
cout << endl;
system("PAUSE");
Obrada
pozicija = tekst.find(trazi,6);
teksta
return 0;
}
Objekti
U već poznatu naredbu find dodali smo broj 6 čime smo naredili računalu da
pretraživanje objekta tekst započne od znaka na poziciji 6.
Sažimanje Veliki pro-
grami
Pomoću ove naredbe napravit ćemo program koji će pronaći sva pojavljiva-
koda
Ovaj program može pronaći svako pojavljivanje neke riječi u nekom tekstu.
#include <cstdlib>
#include <iostream>
#include <string>
int main()
{ U ovom programu koristimo nared-
string tekst; bu find, a pozicija početka pretraži-
string trazi; vanja nije određena brojem, nego
int duljina; sadržajem varijable trenutno.
int trenutno = 0;
int polozaj; Varijabla trenutno je na početku 0,
cout << "Unesite tekst." << endl; da bi prvo pretraživanje počelo od
getline(cin, tekst); početka teksta. Ako na nekoj pozi-
cout << endl; ciji pronađemo traženu riječ, vari-
cout << "Sto trazim?" << endl; jablu trenutno uvećavamo za tu
getline(cin, trazi); poziciju + 1, da bi novo pretraživa-
cout << endl; nje počelo nakon početka već na-
duljina = tekst.size(); đene riječi i da bi se eventualno
while (trenutno < (duljina + 1)) pronašla nova riječ, a ne ponovo
{ ista.
polozaj = tekst.find(trazi,trenutno);
if (polozaj != string::npos)
{
cout << "Nalazi se na " << polozaj << ". mjestu." << endl;
trenutno = polozaj + 1;
}
else Budući da smo došavši do ove toče već
{ prilično napredovali u vještini programira-
trenutno = duljina + 1; nja, ovaj put je objašnjenje funkcioniranja
} programa nešto skromnije.
}
cout << endl; Pokušajmo shvatiti kako funkcionira prog-
system("PAUSE"); ram i pokušajmo ga korigirati tako da ispiše
return 0; adekvatnu obavijest, ako se tražena riječ
} uopće ne pojavljuje. Pokušajmo isti prog-
ram napisati korištenjem rfind naredbe.
Sadržaj
Na neku poziciju unutar teks-
ta možemo dodati tekst.
Uvod
#include <cstdlib>
program
Naš prvi
#include <iostream>
#include <string>
Varijable
int main()
{
string tekst = "Ovo je tekst.";
string umetak = " moj";
Donošenje Grafika
tekst.insert(6,umetak);
cout << tekst << endl;
cout << endl; Naredba za dodavanje teksta.
system("PAUSE");
odluke
return 0;
}
Sadržaj koji dodajemo.
Petlje
Objekt u koji dodajemo tekst. tekst.insert(6,umetak);
Polja
Pozicija na koju dodajemo tekst.
#include <cstdlib>
Obrada
teksta
#include <iostream>
#include <string>
int main()
{
string tekst = "Ovo je tekst.";
Sažimanje Veliki pro-
tekst.insert(6," dobar");
grami
i na ovaj način.
Dio teksta spremljenog u objekt klase string možemo obrisati erase naredbom.
#include <cstdlib>
#include <iostream>
#include <string>
int main()
{
string tekst = "Ovo je dobar tekst.";
tekst.erase(7,6);
cout << tekst << endl;
cout << endl;
system("PAUSE");
return 0;
}
Pozicija od kojem po-
činje brisanje.
Naredba za brisanje.
Sadržaj
Naredbom replace možemo dio teksta koji se nalazi u objektu klase string
zamijeniti nekim drugim tekstom.
Uvod
program
Naš prvi
Varijable
#include <cstdlib>
#include <iostream>
#include <string>
Donošenje Grafika
using namespace std;
int main()
odluke
{
string tekst = "Ovo je dobar tekst.";
string drugi = "dodatan";
tekst.replace(7,5,drugi);
cout << tekst << endl;
Petlje
cout << endl;
system("PAUSE");
return 0; Pozicija od koje zapo-
} činje zamjena teksta.
Polja
zamijeniti.
Naredba za zamjenu teksta.
Objekti
Sadržaj kojim ćemo zamijeniti tekst u objektu tekst. Zamijenit ćemo 5 znako-
va, počevši od sedmog sa sadržajem objekta drugi. Umjesto objekta drugi
koda
#include <cstdlib>
#include <iostream>
#include <string>
int main()
{
char niz[255]; Ovdje, na način koji smo već vidjeli u ovom pog-
string tekst; lavlju, ime unosimo u char polje i provjeravamo
tekst.reserve(256); jesu li uneseni brojevi ili slova. Ako su uneseni
int x; brojevi, unos se ponavlja. Naredba isdigit ne bi
int p; radila da smo koristili objekt klase string.
do
{
cout << "Unesite vase ime." << endl;
cout << endl;
cin >> niz;
x = 0;
p = 1;
while (niz[x] != '\0') Ovdje tekst iz polja tipa
{ char premještamo u ob-
if (isdigit(niz[x])) jekt klase string koji smo
{ nazvali tekst.
p = 0;
} To smo učinili da bismo
x = x + 1; mogli koristiti size nared-
} bu.
}
while (p == 0);
cout << endl;
tekst = niz;
cout << "Ime " << tekst << " sadrzi " << tekst.size() << " slova." << endl;
cout << endl;
system("PAUSE");
return 0; Naredba niz.size nije dozvoljena. Naredba
} size radi jedino s objektima, ali ne i s poljima.
Sadržaj
Premještanje teksta iz stringa u char polje
Moguće je i tekst iz objekta klase string premjestiti u polje char tipa, ali je na-
Uvod
redba kojom to izvodimo nešto složenija.
program
Naš prvi
Varijable
#include <cstdlib>
#include <iostream>
#include <string>
Donošenje Grafika
using namespace std;
odluke
int main()
{
Formiramo objekt klase string i u
string tekst = "Tekst.";
njega spremamo tekst “Tekst”.
char *polje = (char*)tekst.c_str();
Petlje
cout << polje[0] << endl;
cout << polje[1] << endl; Tekst iz objekta selimo u char
cout << polje[2] << endl; polje koje smo nazvali polje.
Polja
cout << polje[3] << endl;
cout << polje[4] << endl;
cout << polje[5] << endl;
Ispisujemo sadržaj polja da bis-
Obrada
teksta
Naziv char polja u koje ćemo Naziv objekta iz kojeg tekst seli-
spremiti tekst iz objekta. U na- mo u char polje. U našem sluča-
koda
Pomoću objekata klase string možemo formirati liste i te liste možemo spremati u
datoteke na sličan način na koji smo spremali brojčane liste
#include <cstdlib>
#include <iostream>
#include <string>
#include <fstream>
int main()
{
int x;
string tekst[8]; Kad smo spremali brojeve, između
ofstream izlaz("podaci.txt"); brojeva stavljali smo prazno mjesto
for (x = 0; x < 8; x = x + 1) da bismo znali gdje završava jedan
{ broj, a počinje drugi.
getline(cin, tekst[x]);
} U ovom programu prazna mjesta
for (x = 0; x < 8; x = x + 1) nisu prikladna za razlikovanje sadr-
{ žaja pojedinih ćelija jer se prazna
izlaz << tekst[x]; mjesta nalaze između riječi.
izlaz << " # ";
}
cout << endl;
cout << "Spremanje je gotovo." << endl;
cout << endl;
system("PAUSE");
return 0;
}
Sadržaj
Programom sličnim programu za čitanje datoteka u kojima se nalaze brojevi
čitat ćemo sadržaj datoteke u kojoj se nalaze tekstovi.
Uvod
program
Naš prvi
#include <cstdlib>
#include <iostream>
Varijable
#include <string>
#include <fstream>
Donošenje Grafika
int main()
{
int x;
string tekst[8];
odluke
string privremeni;
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{
do
Petlje
{
ulaz >> privremeni;
if (privremeni != "#")
{
Polja
tekst[x] = tekst[x] + privremeni + " "; Oznaku # koristit ćemo
} da bismo utvrdili jesmo
} li došli do kraja sadrža-
while (privremeni != "#"); ja jedne ćelije polja.
Obrada
teksta
}
for (x = 0; x < 8; x = x +1) Ovo rješenje je jednos-
{ tavno, ali je manjkavo.
cout << tekst[x] << endl; Ako bi netko prilikom
}
Objekti
}
grami
nake.
Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program
251
C++ programiranje za apsolutne početnike
Objekti
Sadržaj
Imajmo u vidu da prednost uporabe objekata dolazi do izražaja u većim prog-
ramima. Manji programi koje ćemo vidjeti u ovom poglavlju mogu se elegan-
tnije napraviti bez uporabe objekata. Unatoč tome, mi ćemo vidjeti primjere
Uvod
uporabe objekata u malim programima jer ćemo na primjerima malih progra-
ma lakše shvatiti princip uporabe objekata.
program
Naš prvi
Varijable
#include <cstdlib>
#include <iostream>
Donošenje Grafika
class tekst
{
public:
void pisi()
odluke
{
cout << "Ovo je nas tekst." << endl;
} Unesimo u program-
}; sku okolinu i pokreni-
Petlje
mo naš prvi program
int main() koji koristi klase i ob-
{ jekte.
tekst t;
t.pisi();
cout << endl; Polja
system("PAUSE");
return 0;
Obrada
}
teksta
#include <cstdlib>
#include <iostream>
Objekti
ramima.
Ovaj dio programa izrazito je sličan ovom dijelu programa iz prošlog poglavlja.
U drugom redu nad objektom t vrši U drugom redu nad objektom tekst
se operacija pisi(). Unutar zagrada izvršili smo operaciju reserve(250)
nema sadržaja, jer se ništa ne uno- kojom smo osigurali prostor za spre-
si u objekt t, ali su zagrade svejed- manje teksta. Između naziva objekta
no obvezne. i naziva operacije nalazi se točka.
t . pisi() ;
Naziv objekta čiju meto-
Naziv metode koju sadrži
du ćemo koristiti. U na-
objekt t. U našem slučaju
šem slučaju koristit će-
koristimo metodu pisi().
mo metodu t.
Obvezna točka.
Sadržaj
Uvod
#include <cstdlib>
#include <iostream>
program
Naš prvi
using namespace std;
Ovdje vidimo da objekt
class tekst možemo nazvati i dru-
{ gačije, npr. reci.
Varijable
public:
void pisi() Ako smo formirali ob-
{ jekt reci, onda naredba
cout << "Ovo je nas tekst." << endl; koja je do sada imala
} oblik:
Donošenje Grafika
};
t.pisi();
int main()
{ dobiva oblik:
odluke
tekst reci;
reci.pisi(); reci.pisi();
cout << endl;
system("PAUSE"); Dakle, sad se operacija
return 0;
Petlje
pisi vrši nad objektom
} reci.
Polja
Obrada
teksta
#include <cstdlib>
#include <iostream>
Uočimo da postoji sličnost između
using namespace std; formiranja objekta reci klase tekst i
Objekti
#include <cstdlib>
#include <iostream>
class tekst
{
public:
void pisi()
{
cout << "Ovo je nas tekst." << endl;
}
}; Kao što možemo formirati
više varijabli int tipa, tako
int main() možemo formirati više
{ objekata klase tekst.
tekst prvi;
tekst drugi; U ovom primjeru formirali
tekst treci; smo tri objekta, objekt
prvi.pisi(); prvi, objekt drugi i objekt
drugi.pisi(); treći.
treci.pisi();
cout << endl; Za biranje naziva objeka-
system("PAUSE"); ta vrijede slična pravila
return 0; kao i za biranje naziva
} varijabli.
class tekst
{
public: Za razliku od klase string
void pisi() koju je već netko prije na-
{ pisao, a mi je samo koris-
cout << "Ovo je nas tekst." << endl; timo, klasu tekst morali
} smo sami napisati.
};
U ovom dijelu programa
formira se klasa tekst.
Sadržaj
Formiranje klase za- Nakon naredbe class
počinje naredbom
class tekst slijedi naziv klase. U
class. To je naredba našem slučaju klasu
Uvod
C++ jezika i ne može smo nazvali tekst, ali
se mijenjati. mogli smo i drugačije.
program
Naš prvi
U ovoj inačici programa
#include <cstdlib>
klasu smo nazvali BrdaI-
#include <iostream>
Varijable
Doline.
using namespace std;
To je dozvoljeno, samo
što sad naredbu koja je
class BrdaIDoline
prije imala oblik:
Donošenje Grafika
{
public:
tekst t;
void pisi()
{
moramo napisati u obliku:
cout << "Ovo je nas tekst." << endl;
odluke
}
BrdaIDoline t;
};
Dakle, formiramo objekt t
int main()
klase BrdaIDoline.
Petlje
{
BrdaIDoline t;
(Drugo je što je pametno
t.pisi();
da nam naziv klase govo-
cout << endl;
ri čemu klasa služi, pa je
system("PAUSE");
Polja
logičnije da se klasa za
return 0;
ispis teksta zove tekst, a
}
ne BrdaIDoline.)
Obrada
teksta
Objekti
Sažimanje Veliki pro-
grami
void pisi()
{ Ova naša mala klasa ne
cout << "Ovo je nas tekst." << endl; sadrži varijable i sadrži
} samo jednu metodu od-
nosno može napraviti
samo jednu operaciju. Tu
metodu nazvali smo pisi
().
Sadržaj
Uvod
#include <cstdlib>
#include <iostream> Kao što smo klasu mogli
nazvati drugačije, mogli
program
Naš prvi
using namespace std; smo i metodu.
Varijable
public:
void Pero() To je dozvoljeno, samo
{ što ćemo naredbu koju
cout << "Ovo je nas tekst." << endl; smo do sada pisali u obli-
} ku:
Donošenje Grafika
};
t.pisi();
int main()
{ pisati u obliku:
odluke
tekst t;
t.Pero(); t.Pero();
cout << endl;
system("PAUSE"); Kao i kod biranja naziva
return 0; varijabli i klasa, i ovdje je
Petlje
} pametno da nam naziv
metode govori što meto-
da radi. Zato je naziv pisi
za metodu koja ispisuje
Polja
tekst bolji od naziva Pero.
Obrada
određena ograničenja
Void naredba ispred void pisi () možemo birati po volji,
naziva metode ozna-
čuje da metoda ne ove dvije zagrade se
ovdje moraju obavezno
Objekti
U kojem smislu ne
Sažimanje Veliki pro-
jet ćemo kasnije kad ničenja o kojima smo govorili kad smo govorili
ovakvu metodu us- o biranju naziva varijabli.
poredimo s onima
koje vraćaju vrijed- Pametno je da naziv metode tako izaberemo
koda
int main()
{
tekst t; Glavni dio programa. Sada možemo vidjeti zašto
t.pisi(); smo program započinjali s int main() oznakom,
cout << endl; odnosno oznakom da je to glavni dio.
system("PAUSE");
return 0; Kad računalo pokrene program, najprije će se
} pokrenuti ovaj dio, a ostali dijelovi će se koristiti
po potrebi.
Sadržaj
Unutar metode ne mora se
nalaziti program za ispis. Mo-
že se nalaziti bilo što, npr.
Uvod
program za crtanje kruga.
program
Naš prvi
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
Varijable
using namespace std;
Donošenje Grafika
public:
void pisi() Umjesto class tekst stavit
{ ćemo class slika.
int gdriver = 9;
odluke
int gmode = 2;
initgraph(&gdriver, &gmode, "");
setbkcolor(WHITE);
setcolor(BLACK); Umjesto void pisi() stavit će-
mo void krug().
cleardevice();
Petlje
circle(320,240,180);
getch();
closegraph();
} Umjesto tekst t; tj. umjesto
Polja
}; naredbe formiranja objekta t
klase tekst stavimo slika cr-
int main() taj. Time ćemo formirati ob-
{ jekt crtaj klase slika.
Obrada
teksta
tekst t;
t.pisi();
cout << endl;
system("PAUSE");
Umjesto t.pisi(); tj. umjesto
Objekti
return 0;
} pozivanja metode pisi() u klasi
tekst stavit ćemo crtaj.krug();
Sažimanje Veliki pro-
grami
tekstualnom prozoru.
#include <cstdlib>
#include <iostream>
class tekst
{
public:
void prva()
{ Prva metoda koju smo
cout << "Ovo je prva metoda." << endl; nazvali prva().
}
void druga()
{ Druga metoda koju smo
cout << "Ovo je druga metoda." << endl; nazvali druga().
}
void treca()
{ Treća metoda koju smo
cout << "Ovo je treca metoda." << endl; nazvali treca().
}
};
int main()
{ Objekt formiramo jed-
tekst t; nom, a zatim pozivamo
t.prva(); metode po logici da
t.druga(); najprije navedemo na-
t.treca(); ziv objekta, zatim stavi-
cout << endl; mo točku i konačno
system("PAUSE"); naziv metoda. Zagrade
return 0; na kraju te ; oznaka su
} obvezne.
Sadržaj
Program može sadržavati
više klasa, npr. u ovom
slučaju klasu tekst1 i klasu
Uvod
tekst2.
program
Naš prvi
#include <cstdlib>
Varijable
#include <iostream>
class tekst1
Donošenje Grafika
{
public: Prva klasa koju smo
void pisi() nazvali tekst1.
{
odluke
cout << "Ovo je klasa tekst1." << endl;
}
};
class tekst2
Petlje
{ Druga klasa koju
public: smo nazvali tekst2.
void pisi()
{
Polja
cout << "Ovo je klasa tekst2." << endl;
}
};
Obrada
teksta
t1.pisi();
cout << endl; se odnosno opera-
cout << "Zovemo metodu klase tekst2." << endl; ciju koju objekt
tekst2 t2; može izvršiti
Sažimanje Veliki pro-
t2.pisi();
grami
#include <cstdlib>
#include <iostream>
class tekst
{
public:
void pisi()
{
cout << "Upravo koristimo objekt." << endl;
} Jednom formirani
}; objekt možemo proi-
zvoljni broj puta kori-
int main() stiti u programu.
{
tekst t; To je jedna od pred-
cout << "Objekt koristimo 1. put." << endl; nosti korištenja klasa
t.pisi(); i objekata.
cout << endl;
cout << "Objekt koristimo 2. put." << endl; Operaciju koja se u
t.pisi(); programu često po-
cout << endl; navlja stavimo u kla-
cout << "Objekt koristimo 3. put." << endl; su, u programu for-
t.pisi(); miramo objekt i pozi-
cout << endl; vamo određenu ope-
system("PAUSE"); raciju kad god nam
return 0; zatreba, bez potrebe
} da je ponovo piše-
mo.
Sve klase koje smo do sada formirali bile su veoma Uporaba klasa i obje-
jednostavne budući da nisu komunicirale s ostat- kata veoma je slože-
kom programa na način da bi bilo moguće u klasu na ideja, i kao uvijek
unijeti neke podatke ili iz klase iščitati neke podat- do sada, imajmo na
ke, npr. brojeve ili tekst. umu da ćemo te pro-
gramske tehnike us-
U nastavku ovog poglavlja vidjet ćemo na koji na- vojiti tek kad napravi-
čin možemo u klase unositi ili iz klasa iščitavati po- mo velik broj primje-
datke. ra.
Sadržaj
Komunikacija s metodama
Uvod
koji sadrži klasu u koju je mo-
guće unijeti podatke iz drugih
dijelova programa.
program
Naš prvi
Varijable
#include <cstdlib>
#include <iostream>
Donošenje Grafika
class pravokutnik Klasa pravokutnik
{ sadrži jednu varija-
private: blu. To je varijabla
odluke
int c; c int tipa, a nalazi
se u private grupi.
public:
void naslov()
{
Petlje
cout << "Povrsina pravokutnika." << endl;
cout << endl;
Osim varijable u
}
private grupi, kla-
Polja
int povrsina (int a, int b)
sa sadrži i dvije
{
c = a * b; metode u public
return (c);
Obrada
grupi. To su meto-
teksta
}
}; da naslov() i me-
toda povrsina (int
int main()
Objekti
{ a, int b).
pravokutnik p;
p.naslov();
cout << "Povrsina je ";
Sažimanje Veliki pro-
ga.
#include <cstdlib>
#include <iostream>
public:
int pov; U public području dodali smo
void naslov() varijablu koju smo nazvali pov.
{
cout << "Povrsina pravokutnika." << endl;
cout << endl;
} Sadržaj varijable c koja je formirana u
private području i u kojoj se nalazi re-
int povrsina (int a, int b) zultat izračuna površine spremili smo u
{ varijablu pov koja je formirana u public
c = a * b; području.
pov = c;
return (c);
}
}; Ovdje vidimo da sadržaju varija-
ble pov možemo pristupiti u
int main() glavnom programu, iako je for-
{ mirana u objektu. Pristupamo joj
pravokutnik p; tako da prvo napišemo naziv
p.naslov(); objekta zatim točku i na kraju
cout << "Povrsina je "; varijablu, dakle u p.pov obliku.
cout << p.povrsina(2,3);
cout << endl; Pokušamo li na isti način pristu-
piti varijabli c, doći će do greške.
cout << "p.pov je " << p.pov << endl; (Želimo li probati, maknimo //
// cout << "p.c je " << p.c << endl; oznaku na početku reda.)
cout << endl << endl; Već iz ovog primjera bismo mo-
system("PAUSE"); gli zaključiti u kojem smislu je c
return 0; varijabla private, a kojem smislu
} je pov varijabla public.
Sadržaj
Naredba private označava područje u kojem se nalaze varijable i metode
koje se mogu koristiti unutar klase odnosno unutar objekta, ali se njima ne
može pristupiti iz glavnog programa, odnosno izvan objekta. U ovom progra-
Uvod
mu u private području imamo samo varijablu c. Mogli bismo imati i procedure.
program
Naš prvi
Varijable
class pravokutnik Za razliku od private
{ područja, svemu što
private: formiramo u public
int c; području možemo
Donošenje Grafika
pristupiti i izvan kla-
public: se, odnosno izvan
int pov; objekta.
void naslov()
{ To ne možemo učini-
odluke
cout << "Povrsina pravokutnika." << endl; ti tako da samo na-
cout << endl; vedemo naziv varija-
} ble ili procedure ne-
go tako da prvo na-
Petlje
int povrsina (int a, int b) vedemo naziv objek-
{ ta, zatim točku i na
c = a * b; kraju naziv varijable
pov = c; ili procedure. Ako
return (c); pristupamo procedu-
} ri, moramo navesti i Polja
}; zagrade.
Obrada
teksta
Objekti
Dakle izvana možemo pristupiti samo onim varijablama koje su u public po-
dručju formirane samostalno kao pov varijabla, a ne možemo onima koje su
koda
Ovdje formiramo pov varijablu int tipa. Varijable unutar klase formiramo na pot-
puno jednak način kao i unutar glavnog programa.
Što to znači?
Sadržaj
Pogledajmo još jednom naredbu za formiranje metode koja započinje void
naredbom.
Uvod
Void naredba znači da metoda Prazne zagrade znače da u ovu
naslov neće vraćati nikakav re- metodu ništa nije moguće unijeti
program
Naš prvi
zultat rada. na način da se napiše:
Varijable
lon. Moguće je unutar metode staviti
cin naredbu pa nešto unijeti npr.
Ispisuje, ali se ispisivanje zbiva preko tipkovnice, ali nije moguće
unutar metode. ništa unijeti na gore opisan na-
čin.
Donošenje Grafika
U glavnom programu moguće je
napisati:
odluke
void naslov ()
ali nije moguće napisati:
Petlje
Moguće je jedino s:
p.naslov();
Polja
pozvati metodu naslov koja on-
da unutar sebe ispisuje tekst na
zaslon računala.
Obrada
teksta
#include <cstdlib>
#include <iostream>
class racunaj
{
private:
int c;
public:
int metoda1(int a, int b)
{
c = a + b; U ovom programu možemo
return (c); lijepo vidjeti kako o naredbi
}
return ovisi što će se naredbom
int metoda2(int a, int b) r.metoda1(2,4) ispisati na zas-
{
c = a + b; lon računala.
return (a);
}
cout << "return(c) daje " << r.metoda1(2,4) << endl; Naredbom re-
cout << "return(a) daje " << r.metoda2(2,4) << endl; turn(a) ispisat
cout << "return(b) daje " << r.metoda3(2,4) << endl; će se sadržaj
varijable a, a
system("PAUSE"); naredbom re-
return 0; turn(b) ispisat
} će se sadržaj
varijable b.
Sadržaj
#include <cstdlib>
Uvod
#include <iostream>
program
Naš prvi
class racunaj
{
private:
int a;
Varijable
int b;
int c;
public:
void unesi(void)
U ovom programu imamo
Donošenje Grafika
{
cout << "Unesite stranicu a." << endl; dvije void metode. Meto-
cin >> a; dom unesi unose se bro-
cout << "Unesite stranicu b." << endl; jevi u varijablu a i varijab-
cin >> b; lu b. To se vrši unutar
odluke
} metode. Nije moguće
void povrsina(void) napisati naredbu:
{
c = a * b; p.povrsina(2,3);
Petlje
cout << "Povrsina je " << c << endl;
} Moguće je jedino nared-
}; bom:
#include <cstdlib>
#include <iostream>
Sadržaj
Uvod
#include <cstdlib>
#include <iostream>
program
Naš prvi
using namespace std;
class racunaj
{
Varijable
private:
int a;
int b;
int c;
Donošenje Grafika
int p;
int u; Ako za ispis koris-
public: timo void metodu
void unesi(void) pa uporaba nared-
{ be return nije mo-
odluke
cout << "Unesite stranicu a." << endl; guća, ispisom re-
cin >> a; zultata unutar me-
cout << "Unesite stranicu b." << endl; tode možemo ispi-
cin >> b; sati više vrijednos-
Petlje
cout << "Cijena kvadratnog metra." << endl; ti.
cin >> c;
} U ovom slučaju u
void cijena(void) metodi cijena mi
{ ispisujemo površi-
Polja
p = a * b; nu i cijenu.
cout << "Povrsina je " << p << endl;
u = p * c; Da je to int meto-
cout << "Cijena je " << u << endl; da i da rezultat
Obrada
teksta
} vraćamo return
}; naredbom, mogli
bi napisati ili return
int main() (p) ili return(u), ali
Objekti
{ ne bismo mogli
racunaj p; vratiti obje vrijed-
p.unesi(); nosti.
p.cijena();
Sažimanje Veliki pro-
Ukratko, koju od
grami
dovoljiti.
Naredba cout << p.povrsina(2,3); zbunjujuća je između ostalog i zato što istov-
remeno služi za unos broja 2 i broja 3 u metodu i za ispis rezultata množenja,
odnosno rezultata rada metode.
return ( c );
cout << c;
Sadržaj
Uvod
program
Naš prvi
#include <cstdlib>
#include <iostream>
Varijable
using namespace std;
class pravokutnik
{
private:
Donošenje Grafika
float c;
public:
void naslov()
{ Kao što smo već
rekli, metode ne
odluke
cout << "Povrsina pravokutnika." << endl;
cout << endl; moraju biti int tipa.
} Mogu biti i nekog
float povrsina (float a, float b) drugog tipa. U
{ ovom programu
Petlje
c = a * b; imamo metodu
return (c); float tipa.
}
};
float b1;
pravokutnik p;
p.naslov();
cout << "Unesite stranicu a." << endl;
Objekti
stavimo varijable.
#include <cstdlib>
#include <iostream> U deklaraciji klase samo su
nabrojeni elementi klase i po-
using namespace std; dijeljeni u private i public pod-
ručje.
class pravokutnik
{ Ovdje se nalazi samo zaglav-
private: lje metode pravokutnik u ko-
int c; jem su određena ulazna i izla-
public: zna svojstva metode, ali ovdje
int povrsina (int a, int b);
nema sadržaja metode.
};
Sadržaj
Pogledajmo kako su povezane deklaracija metode i definicije metode.
Uvod
Tip vrijednosti koju će metoda Obvezna ; ozna-
vraćati kao rezultat. U ovom ka
slučaju je int, a mogao bi biti i Deklaracija metode u dek-
neki drugi npr. float.
program
Naš prvi
laraciji klase. Ovdje je na-
veden naziv metode i ulaz-
no-izlazna svojstva meto-
de, ali ne i program meto-
de.
Varijable
int povrsina (int a, int b) ;
Definicija me-
Donošenje Grafika
tode. Ovdje
se nalazi pro-
gram koji od-
ređuje što ta
metoda radi,
odluke
odnosno svoj-
int pravokutnik :: povrsina (int a, int b) stva metode.
Petlje
Popis varijabli preko
Naziv klase. Naziv metode. kojih se brojevi mogu
unijeti u metodu.
Polja
Obvezna :: oznaka između naziva klase i
naziva metode. Obrada
teksta
Ovaj način pisanja klasa doista je manje elegantan od načina koji smo kori-
Sažimanje Veliki pro-
mo veći program razdijeliti u više datoteka. Ako klase pišemo na ovaj na-
čin, tada možemo u jednu datoteku staviti sve deklaracije klasa, a u druge
datoteke definicije metoda. Ako se program nalazi u jednoj datoteci, bolje je
definiciju metode napisati unutar deklaracije metode kao što smo to činili u
koda
prethodnim programima.
Uporaba konstruktora
#include <cstdlib>
#include <iostream>
class pravokutnik
{ U ovom programu nalazi se nekoli-
private: ko neobičnosti.
int a;
int b; Prva neobičnost jest ova metoda.
public: Neobično je to što ima isti naziv
pravokutnik(void) kao i klasa. Klasu smo nazvali pra-
{ vokutnik i ova metoda zove se pra-
cout << "Stranica a:" << endl; vokutnik.
cin >> a;
cout << "Stranica b:" << endl; Druga neobičnost jest što ova me-
cin >> b; toda nema nikakvu oznaku povrat-
} ne vrijednosti, nije ni void pravoku-
int povrsina(void) tnik(), ni int pravokutnik().
{
return (a * b);
}
}; Neobično je i to
što je nigdje ne
int main() pozivamo.
{
pravokutnik p; U ovom redu
cout << "Povrsina je " << p.povrsina() << "." << endl; formiramo objekt
cout << endl; p klase pravoku-
system("PAUSE"); tnik, a već u slje-
return 0; dećem redu po-
} zivamo metodu
povrsina.
Iako nigdje u programu nije vidljivo pozivanje metode pravokutnik, njen sadržaj
se očigledno izvršava. Očigledno je da prije izvođenja metode površina računa-
lo unosi stranicu a i stranicu b. Takva metoda naziva se konstruktor, a izvršava
se u trenutku formiranja objekta. Dakle, ova metoda izvršila se u trenutku kad
smo naredbom pravokutnik.p formirali objekt p klase pravokutnik.
Sadržaj
Uvod
#include <cstdlib>
#include <iostream>
program
Naš prvi
using namespace std;
class pravokutnik
Varijable
{ U ovom programu imamo
private: dva konstruktora.
int a;
int b; Jednome je ulazni dio void
Donošenje Grafika
public: tipa, što znači da se u njega
pravokutnik(void) ne može unositi vrijednost
{ tako da napišemo:
cout << "Stranica a:" << endl;
cin >> a; pravokutnik p2(3,4);
odluke
cout << "Stranica b:" << endl;
cin >> b;
}
Drugome je ulazni dio (int a1,
pravokutnik(int a1, int b1)
int b1), što znači da se u nje-
Petlje
{
ga može vrijednost unositi
a = a1;
tako da napišemo:
b = b1;
}
pravokutnik p2(3,4);
int povrsina(void)
Polja
{
return (a * b);
}
}; Ovdje formiramo objekt klase pravokutnik bez
Obrada
teksta
cout << "Povrsina je " << p1.povrsina() << "." << endl;
cout << endl;
pravokutnik p2(3,4);
cout << "Za p2(3,4) povrsina je " << p2.povrsina() << "." << endl;
Sažimanje Veliki pro-
system("PAUSE");
return 0; Objekt p2(3,4); u zagradi ima dva broja, pa će se u
} tom slučaju primijeniti pravokutnik(int a1, int b1) kon-
struktor. U tom slučaju površina će se izračunati
koda
Nasljeđivanje
#include <cstdlib>
#include <iostream>
class kvadrat
Klasa kvadrat napisana je na
{
uobičajeni način.
protected:
int br;
public:
void unos (void)
{ Klasa kub napisana je na način koji
cout << "Unesite broj:" << endl; do sada nismo koristili.
cin >> br;
} Naredbom:
int izracun (void)
{ class kub : public kvadrat
return (br * br);
} formiramo klasu kub koja nasljeđuje
}; varijable i metode klase kvadrat. Dak-
class kub : public kvadrat le klasa kub može koristiti metodu
{ unos, iako je ona definirana u klasi
public: unos.
int izracun(void)
{
return (br * br * br);
Objekt objekt2 klase kub može koristiti meto-
}
du unos koja se nalazi u klasi kvadrat kao da
};
je njezina klasa. To je moguće jer je klasa
kub naslijedila klasu kvadrat.
int main()
{
kvadrat objekt1;
objekt1.unos();
cout << "Kvadrat je " << objekt1.izracun() << endl; Metodu izracun
cout << endl; posjeduju obje
kub objekt2; klase. U tom slu-
objekt2.unos(); čaju klasa kub ko-
cout << "Kub je " << objekt2.izracun() << endl; ristit će svoju inači-
cout << endl; cu objekta izracun.
system("PAUSE"); Inačica u klasi kub
return 0; prekrila je inačicu
} u klasi kvadrat.
Sadržaj
Pogledajmo međusobnu povezanost bitnih dijelova programa u kojem je primi-
jenjena tehnika nasljeđivanja klasa.
Uvod
U klasi kvadrat definirane su
class kvadrat
program
Naš prvi
dvije metode, metoda unos i
metoda izračun.
void unos (void) Klasu kvadrat možemo koristiti
na način koji smo koristili u do-
Varijable
sadašnjim primjerima.
int izracun (void)
Donošenje Grafika
Naziv nove klase. Naredba za nas-
Klasa koju klasa kub nasljeđuje.
ljeđivanje klase.
odluke
class kub : public kvadrat Ovako deklarirana klasa kub
nasljeđuje sve varijable i me-
Petlje
tode klase kvadrat.
int izracun (void) Klasa sadrži metodu izracun,
iako metodu izračun posjeduje
Polja
i klasa kvadrat koju nasljeđuje.
kub objekt2;
teksta
izracun.
Objekti
tode izračun.
Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program
283
C++ programiranje za apsolutne početnike
Veliki programi
Sadržaj
Male programe možemo smjestiti u jednu datoteku. Za veće programe to nije
praktično rješenje. Ako je veliki program u jednoj velikoj datoteci teže je pro-
naći grešku, teže je napraviti izmjenu programa i teže je podijeliti posao iz-
Uvod
među više programera.
U ovom poglavlju vidjet ćemo kako podijeliti jedan nešto veći program u više
datoteka. Najprije ćemo program napisati u jednoj velikoj datoteci, a zatim ga
program
Naš prvi
podijeliti u više manjih datoteka.
Varijable
Ovdje se nalazi deklaracija klase bomba. Sastoji
se od varijabli x i y koje određuju položaj bombe na
zaslonu te metode crtanje koja crta bombu i od
metode brisanje koja briše bombu da bi se dobila
iluzija kretanje bombe.
Donošenje Grafika
class bomba
{
Deklaracija sadrži konstruktor koji određuje počet-
private:
nu poziciju bombe.
int x, y;
public:
odluke
bomba()
{
x = (static_cast <float> (rand()) / RAND_MAX) * 620;
y = -((static_cast <float> (rand()) / RAND_MAX) * 480);
Petlje
}
void crtanje();
void brisanje();
};
Polja
void bomba :: crtanje()
Sadržaj metode crtanje.
{
rectangle (x,y,(x+20),(y+5));
}
Obrada
y = y + 5;
if (y > 490)
{
Sažimanje Veliki pro-
srand(time(NULL));
Formiranje triju objekta klase bom-
ba, bomba1, bomba2 i bomba3.
To su objekti koji se kreću odozgo
bomba bomba1, bomba2, bomba3;
prema dolje.
Sadržaj
Ovdje se u svakom objektu klase
bomba poziva metoda za crtanje bom-
be na novoj poziciji.
Uvod
Neprestanim brisanjem bombe na sta-
roj poziciji i crtanjem na novoj stvara
se iluzija kretanja, odnosno padanja
program
Naš prvi
bomba1.crtanje(); bombi.
bomba2.crtanje();
bomba3.crtanje();
Varijable
Naredba koja zaustavlja program odre-
đeno vrijeme. Služi za regulaciju brzine
igre.
delay(1);
Donošenje Grafika
Ovdje ispitujemo je li pritisnuta neka
if (kbhit()) tipka na tipkovnici.
{
odluke
Ako je pritisnuta neka tipka na tipkovni-
ci, ovdje se kod pritisnute tipke sprema
odgovor = getch(); u varijablu odgovor.
Petlje
Ovdje se poziva metoda pomak koja će
brod.pomak(odgovor);
obrisati objekt na staroj poziciji.
}
nuti program.
Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program
289
C++ programiranje za apsolutne početnike
Veliki programi
2 - Klik na Novo.
Sadržaj
1 - Desni klik na Neimenovano1.
Uvod
program
Naš prvi
Varijable
2 - Klik na Preimenuj datoteku.
Donošenje Grafika
odluke
Datoteku preimenujemo u bom- Petlje
Polja
ba.cpp i kliknemo na OK.
Obrada
teksta
Objekti
Sažimanje Veliki pro-
koda grami
- bomba.h
- objekt.cpp
- objekt.h
Sadržaj
U datoteku bomba.cpp spremimo me-
tode klase bomba; metodu crtanje i
Uvod
metodu brisanje.
program
Naš prvi
Varijable
Donošenje Grafika
Ovaj dio isti je kao u programu koji
odluke
se nalazi u jednoj datoteci.
Petlje
Ovom naredbom uključuje se
datoteka bomba.h u kojoj se
#include <winbgim.h>
nalazi deklaracija klase bom-
Polja
#include "bomba.h"
ba.
void bomba :: crtanje()
Ovdje uključujmo datoteku u
{
kojoj se nalazi deklaracija kla-
Obrada
rectangle (x,y,(x+20),(y+5));
teksta
if (y > 490)
grami
{
y = -((static_cast <float> (rand()) / RAND_MAX) * 480);
x = (static_cast <float> (rand()) / RAND_MAX) * 620;
}
}
koda
#ifndef BOMBA_H
#define BOMBA_H
#ifndef BOMBA_H
#define BOMBA_H Kad bi se datoteka zvala npr. datoteka.h, ovaj
dio imao bi oblik:
class bomba
{ #ifndef DATOTEKA_H
private: #define DATOTEKA_H
int x, y;
public:
bomba()
{
x = (static_cast <float> (rand()) / RAND_MAX) * 620;
y = -((static_cast <float> (rand()) / RAND_MAX) * 480);
}
void crtanje();
void brisanje();
Naredbu #endif pisat ćemo na kraju
};
svake datoteke koja počinje nared-
bom #ifndef.
#endif
Sadržaj
U datoteku objekt.cpp spremimo
metode klase bomba; metodu
Uvod
pomak i metodu crtaj.
program
Naš prvi
Varijable
Donošenje Grafika
Naredbama #include
uključimo grafičku biblio-
teku winbgim.h i dato-
teku objekt.h u kojoj se
odluke
nalazi deklaracija klase
#include <winbgim.h> objekt.
#include "objekt.h"
Kad bi se deklaracija klase
Petlje
void objekt :: pomak(char tipka)
{ nalazila u drugačije nazvanoj
kretanje = tipka; datoteci, npr. datoteci naziv.h,
if (kretanje == 75) morali bismo napisati:
{
Polja
setcolor (WHITE); #include "naziv.h"
rectangle(x, 432, x+60, 438);
setcolor (BLACK); Naziv datoteka možemo birati,
x = x - 5; a nastavak h je obvezan. Naš
Obrada
teksta
} program naredbom:
if (kretanje == 77)
{ #include <winbgim.h>
setcolor (WHITE);
Objekti
} bom:
grami
teku.
Sadržaj
Glavni program se u ovoj #include <cstdlib>
inačici razlikuje od inačice #include <iostream>
koja se cijela nalazi u jednoj #include <winbgim.h>
Uvod
datoteci po tome što u ovoj #include <ctime>
inačici moramo osim:
#include <cstdlib>
program
Naš prvi
using namespace std;
#include <iostream>
#include <winbgim.h> #include "objekt.h"
#include "bomba.h"
dodati i naredbe:
Varijable
int main()
#include "objekt.h" {
#include "bomba.h" int gdriver = 9;
int gmode = 2;
kojima se u program uklju-
Donošenje Grafika
initgraph(&gdriver, &gmode, "");
čuju datoteke koje sadrže setbkcolor(WHITE);
deklaracije klase objekt i setcolor(BLACK);
klase bomba. cleardevice();
char odgovor = 'd';
odluke
srand(time(NULL));
Glavni program nalazi se bomba bomba1, bomba2, bomba3;
u datoteci mani.cpp. objekt brod;
brod.crtaj();
Petlje
do
{
bomba1.brisanje();
bomba2.brisanje();
bomba3.brisanje();
bomba1.crtanje(); Polja
bomba2.crtanje();
bomba3.crtanje();
Obrada
delay(2);
teksta
if (kbhit())
{
odgovor = getch();
brod.pomak(odgovor);
Objekti
}
brod.crtaj();
}
while (odgovor != 'k');
Sažimanje Veliki pro-
grami
return 0;
}
koda
Rezultat izvođenja
našeg programa iz-
gledat će otprilike
ovako.
Sadržaj
main.cpp
U ovom shematskom prika-
using namespace std; zu našeg programa može-
Uvod
mo vidjeti logiku po kojoj se
#include "objekt.h" program podijeljen u više
datoteka povezuje u jednu
program
Naš prvi
#include "bomba.h" cjelinu.
Varijable
} teka.
Donošenje Grafika
objekt.h bomba.h
odluke
#define OBJEKT_H #define BOMBA_H
Petlje
DEKLARACIJA KLASE; DEKLARACIJA KLASE;
}; };
Polja
#endif #endif
Obrada
teksta
objekt.cpp bomba.cpp
} }
grami
} }
Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
koda grami teksta odluke program
301
C++ programiranje za apsolutne početnike
Sažimanje koda
Mnoge naredbe mogu se, osim na način koji smo do sada vidjeli, pisati na na-
čin koji skraćuje pisanje, ponekad čak ubrzava rad programa, ali koji je počet-
nicima možda nešto manje razumljiv.
#include <cstdlib>
#include <iostream>
U slučaju da formi-
#include <cstdlib> ramo više varijabli using namespace std;
#include <iostream> istog tipa, ne mo-
ramo svaku staviti int main()
using namespace std; u zasebni red, ne- {
go ih možemo for- int a, b, c;
int main() mirati u jednom cin >> a;
{ redu. cin >> b;
int a; c = a + b;
int b; Dakle umjesto: cout << c << endl;
int c; system("PAUSE");
cin >> a; int a; return 0;
cin >> b; int b; }
c = a + b; int c;
cout << c << endl;
system("PAUSE"); možemo napisati:
return 0;
} int a, b, c;
Sadržaj
#include <cstdlib> Umjesto:
#include <iostream> #include <cstdlib>
int a; #include <iostream>
Uvod
using namespace std; a = 12;
using namespace std;
int main() možemo napisa-
ti: int main()
program
Naš prvi
{
int a; {
a = 12; int a = 12; int a = 12;
cout << a << endl; cout << a << endl;
system("PAUSE"); system("PAUSE");
Varijable
return 0; return 0;
} }
Donošenje Grafika
U if naredbi mogu se
#include <cstdlib>
izbaciti vitičaste zagra-
#include <iostream>
de, ako se unutar viti-
častih zagrada nalazi
odluke
using namespace std;
jedan red.
int main()
Ako se nalazi više re-
{
dova, uporaba vitičas-
int a;
Petlje
tih zagrada je obvezna.
cin >> a;
if (a > 12)
{
cout << "Broj je veci od 12." << endl;
Polja
}
#include <cstdlib>
else
#include <iostream>
{
cout << "Broj nije veci od 12." << endl;
Obrada
}
cout << a << endl;
int main()
system("PAUSE");
{
return 0;
int a;
Objekti
}
cin >> a;
if (a > 12)
cout << "Broj je veci od 12." << endl;
else
Sažimanje Veliki pro-
grami
zagradama.
#include <cstdlib>
#include <iostream>
#include <cmath>
int main()
{
float a, b;
cin >> a;
if (a < 0)
cout << "Broj je negativan." << endl;
else
Ako bismo ovom djelu vitičaste
b = sqrt(a);
zagrade izbacili, ne bismo dobili
cout << b << endl;
obavijest o greški, ali program
system("PAUSE");
ne bi ispravno radio, ako bismo
return 0;
pokušali izračunati kvadratni
}
korijen iz negativnog broja.
Sadržaj
I u petljama se može izostaviti vitičasta zag-
#include <cstdlib>
rada ako se unutar vitičaste zagrade nalazi
#include <iostream>
samo jedan red.
Uvod
using namespace std;
program
Naš prvi
{ #include <iostream>
int x;
for (x=10; x<17; x=x+1) using namespace std;
{
cout << x << endl;
Varijable
int main()
} {
system("PAUSE"); int x;
return 0; for (x=10; x<17; x=x+1)
} cout << x << endl;
Donošenje Grafika
U ovoj inačici programa system("PAUSE");
unutar for petlje ne koriste return 0;
se vitičaste zagrade. }
odluke
#include <cstdlib> Umjesto x=x+1 možemo
#include <iostream> napisati:
Petlje
using namespace std; x++
int main() Pokrenemo li bilo koju od
{ ove tri inačice programa,
Polja
int x; dobit ćemo jednak rezultat.
for (x=10; x<17; x++)
cout << x << endl;
system("PAUSE");
Obrada
teksta
return 0;
}
Objekti
x = x - 1;
grami
napisati:
maka.)