Professional Documents
Culture Documents
Programiranje C++
Tipovi podataka
Raunaru je vano s kakvim podacima radi. Ovisno o vrsti razlikujemo:
Svaki tip podatak zauzima odreenu veliinu (memoriju) u raunaru i ima odreeni veliinu ili obim. U
sljedeoj tablici dan je prikaz vrsta podataka, veliine u bitovima koju taj podatak zauzima u memoriji
raunara i obim u kojem se moe nalaziti u programskom jeziku C.
Tip podatka
Veliina u bitovima
Opseg
char
-128 do 127
signed char
-128 do127
unsigned char
0 do 255
short int
16
-32768 do 32767
unsigned int
16
0 do 65535
int
16
-32768 do 32767
long
32
-2147483648 do 2147483647
unsigned long
32
0 do 4294967295
float
32
3,4x10-38 do 3,4x1038
double
64
1,7x10-308 do 1,7x10308
long double
80
Osnovni tip cijelog broja je int. On moe imati negativnu ili pozitivnu vrijednost unutar prikazanih granica.
Tip podatka long koristi se kada nam je za varijablu potrebno vee podruje. Tipovi podataka mogu biti
predznani signed i to znai da je u jednom bitu smjetena informacija o tome da li je broj pozitivan ili
negativan. Neke varijable ne mogu nikada poprimiti negativnu vrijednost pa ih deklariramo kao
nepredznane ili unsigned.
Realni brojevi imaju decimalni dio. Zovemo ih jo i floating-point (plivajui zarez) brojevima. Ime su
dobili po nainu predstavljanja takvih brojeva u memoriji raunala. Taj tip podatka naziva se float. Tipovi
Programiranje C++
podataka doble i lon double su poput tipa float, jedino omoguavaju da se smjeti vei broj znamenaka sa
veom preciznou..
Za znakovni tip podataka koristimo se sa char (to je isto kao i signed char). Ukoliko elimo koristiti
kompletan set znakova treba upotrijebiti unsigned char. Kada baratamo s rijeima i reenicama
moemo koristiti i tip - string (niz znakova).
esto se javlja potreba da kod izvoenja programa elimo zadrati sadraj ekrana da proitamo
rezultate izvoenje programa. Za to e nam posluiti naredba getch() koja uita jedan znak i nastavlja
program, bez pritiska na tipku Enter. esto se koristi kao posljednja naredba u programu,a nalazi se u
datoteci funkcija conio.h
Aritmetiki operatori
Operacija
Operator
Zbrajanje
Oduzimanje
Mnoenje
Dijeljenje
Matematike funkcije
Osnovne koje na poetku treba znati:
Opis funkcije
Zapisivanje
sqrt(x)
Potenciranje (xy)
pow(x,y)
Funkcije se nalaze u biblioteci funkcija math.h pa je na poetku programa potrebno napisati naredbu
#include <math.h>
Varijable
Varijable u programu su promjenjive veliine. Mogu biti:
- brojane (cijeli ili decimalni broj)
- znakovne
Najbolje je da se svaka varijabla koja se koristi u programu deklaira na poetku programa, ali u C++ se
moe deklarirati bilo gdje u programu. . Deklaracija se sastoji od tipa podatka i jednog ili vie imena
varijabli.Osim deklaracije ponekad je varijable potrebno i inicijalizirani tj. postaviti na poetnu vrijednost,
najee je to 0, ali moe biti i 1 (na primjer kod mnoenja brojeva). Ako se varijabla u ne postavi na
Programiranje C++
poetnu vrijednost ona e biti nepredvidiva tj. poetna vrijednost moe biti bilo koji broj pa e program
krivo raditi (raunati).
Imena varijabli
Sva imena varijabli trebaju zapoinjati slovom engleskog alfabeta ili podvlakom _. za ostatak imena
koriste se slova ili brojevi. Znakovi interpunkcije, odnosno kontrolni znakovi se ne smiju koristiti. Za
prepoznavanje imena varijabli bitna su prva 32 znaka. Broj znakova iznad 32 se zanemaruje. Postoje
razlike izmeu malih i velikih slova tj. program ih prepoznaje kao razliite znakove u imenima varijabli.
Primjeri deklaracija varijabli:
int
broj;
/*cjelobrojna varijabla*/
char znak;
/*znakovna varijabla*/
float temp;
/*decimalna varijabla*/
Varijabla broj deklarirana je kao cijeli broj. Varijabla znak deklarirana je kao znak tj. ona moe biti bilo
koje slovo ili broj, ali brojevi koji su deklarirani kao znak ne mogu se oduzimati, zbrajati, mnoiti i dijeliti
niti nad njima mogu vriti bilo koje matematike operacije.
Varijabla temp deklarirana je kao decimalni broj.
Konstante
Konstante imaju tokom programa odreenu vrijednost koja se ne moe promijeniti. Kljuna rije u
deklariranje i inicijalizaciju konstante je const iza koje slijedi tip konstante i njezina vrijednost.
Primjeri konstanti:
Naredba cin
Programiranje C++
Naredbom cin unosimo podatke s tastature i pridruujemo ih varijablama u programu. Varijable kojima
elimo pridruiti vrijednosti zapisujemo iza naredbe cin.
Na primjer, naredbom cin>>a uz pomo tastature, pridruujemo varijabli a broj ili slovo, a naredbomcin
>>a>>bpridruujemo vrijednosti varijablama a i b.
Vana napomena: Varijable prethodno trebamo deklarirati.
Naredba cout
Naredbom cout ispisujemo tekst, vrijednosti matematikih izraza i vrijednosti varijabli u
programu. Tekst koji elimo ispisati navodimo unutar navodnika,a varijable ije vrijednosti
elimo ispisati piemo iza naredbe. Na primjer, naredbom
cout<<"Pozdrav";
ispisuje se pozdravna poruka Pozdrav na zaslonu raunala, a naredbom
cout <<2+2;
ispisuje se broj 4 jer je to vrijednost matematikog izraza 2+2.
Vrijednosti varijabli ispisujemo tako da ih navodimo iza naredbe cout. Na primjer
cout<< a;
ispisuje na ekranu raunara vrijednost varijable a.
Programiranje C++
opisa formata je smjeteno izmeu dvostrukih navodnika, a najee koriteni opisi formata nalaze se u
priloenoj tablici.
Funkcija
scanf
printf
char
%c
%c
int
%d
%d
float (decimalni)
%f
%f
float (eksponencijalni)
%e
%e
%s
%s
unsigned
%u
%u
long int
%ld
%ld
double
%lf
%lf
long double
%Lf
%Lf
Slijedei neophodni dio funkcije scanf je adresa na koju e podaci biti spremljeni. Potrebno je
napomenuti da je potrebno navesti adresu varijable pomou znaka &. Svaka varijabla u C++u ima
specifinu adresu u memoriji.Potrebno je voditi rauna da se ova funkcija koristi za definirani oblik i tip
podatka koji je potrebno unijeti. Meutim, ako ulazni podatak ne odgovara ulaznom formatu, ponaanje
funkcije je nepredvidivo to rezultira pogrenim izvoenjem programa.
Stoga je vano da vodite rauna o pravilnom zapisivanju opisa formata kojeg koristite.
Sekvenca
Ime
Znaenje
\a
Alert
Aktiviranje zujala
Programiranje C++
\b
Backspace
\f
Formated
\n
Newline
\r
Carriage ret
\t
Horizontal tab
\v
Vertical tab
\\
Backslash
\'
Single quote
\''
Double quote
\?
Question mark
\OOO
\xHHH
Programiranje C++
c=a-b;
printf ("\n Zbroj brojeva %d %d Razlika je %d ",a,b,c);
system ("PAUSE");
return 0;
}
Izlaz:
Unesi dva broja= 10 5
Zbroj brojeva 10 5 Razlika je 5
Press any key to continue . . .
Objanjenje:
Broj mjesta rezerviran za ispis detaljnije se regulira brojem ispred formata.
Na primjer za ispis cijelih brojeva moemo napisati:
printf ("\n Zbroj brojeva %3d %2d je %4d ",a,b,c); gdje stoji da e za prvi broj u ispisu biti rezervirana 3
mjesta za drugi 2 za rezultat zbrajanja 4 mjesta.
Za ispis decimalnih brojeva moemo napisati:
printf ("\n Zbroj brojeva %.4f %.2f je %.3f ",a,b,c);
gdje %f znai da se radi o decimalnim brojevima, .4 oznaava da e za ispis decimalnog dijela prvog
broja biti rezervirana 4 mjesta, za decimalni dio drugog 2, a za decimalni dio treeg broja 3 mjesta.
Relacijski operatori
Raunala u svom radu upotrebljavaju jednostavnu logiku sa dvije vrijednosti; ukoliko je uvjet istinit (true),
vrijednost je 1; ukoliko je laan (false), vrijednost je 0. Relacijski operatori prikazani su u slijedeoj tablici:
Operator
Znaenje
Primjer
>
vei od
5>4
>=
5>=x
Programiranje C++
<
manji od
4<5
<=
x<=5
==
jednak
5==5
!=
nije jednak
5!=4
Logiki operatori
Mogue je u testu kombinirati vie od jednog uvjeta. To postiemo upotrebom jednog od tri logika
operatora prikazana u slijedeoj tablici:
Operator
Znaenje
&&
||
Primjer 1:
(a==c)&&(a>d)
rezultat je istinit samo ukoliko je a jednak c i a vei od d. Programski jezik C radi tako da ukoliko je prvi
uvjet (sa lijeve strane) laan, drugi uvjet se nee testirati, jer je I izraz laan, ukoliko je jedan od uvjeta
laan.
Primjer 2:
(a==c)||(a>d)
rezultat je istinit ukoliko je bilo koji od uvjeta istinit. Ukoliko je prvi uvjet istinit, nije potrebno daljnje
testiranje, rezultat je svakako istini
If i if..else naredbe
Jednostavna if naredba ima oblik:
if (uslov){
naredba ili blok naredbi;
}
Uslov moe biti jednostavan relacijski izraz ili kombinacija izraza spojenih s logikim operatorima. Izraz
mora biti unutar okruglih zagrada. Naredba if radi tako da se ispita uvjet i u skladu sa istinitom ili lanom
vrijednou uvjetnog izraza izvravaju naredbe. Ukoliko je izraz istinit, naredba ili blok naredbi , koje
slijede, se izvravaju. Ukoliko elimo koristiti blok naredbi, one moraju biti zatvorene unutar vitiastih
zagrada.
Programiranje C++
10
Programiranje C++
11
Programiranje C++
12
Petlja -For
Programsku petlju for u C++-u zapisujemo na sljedei nain:
for (inicijalizacija kontrolne varijable; USLOV; promjena vrijednosti kontrolne varijable)
{
blok naredbi;
}
Objanjenje:
Inicijalizacija kontrolne varijable podrazumijeva postavljanje poetne vrijednosti.
Poetna vrijednost je UVIJEK broj koji se pridruuje varijabli petlje. Najee poetna vrijednost iznosi 1,
ali moe imati i drugu vrijednost 100, 200, ili bilo koji drugi broj.
Programiranje C++
13
Uvjet podrazumijeva postavljanje uvjeta izvravanja petlje. Ako je uvjet zadovoljen, naredbe unutar petlje
e se izvriti. Ako uvjet nije zadovoljen (ispunjen) petlja e se zavriti i program e nastaviti sa svojim
izvoenjem s prvom prvom naredbom izvan petlje.
Kontrolna varijabla , kontrolira izvoenje petlje i svaki put kad se naredbe unutar petlje izvedu, ona
promijeni svoju vrijednost. Njezina uloga, najee je da "broji" koliko se puta petlja izvela pa korak
promjene kontrolne varijable najee iznosi 1. Meutim, postoje programske situacije u kojima korak,
odnosno promjena kontrolne varijable moe iznositi 2 ili 3. Openito promjena kontrolne varijable moe
biti bilo koji cijeli broj.
Petlja While
Petlja while izvrava jednu ili vie naredbi, sve dok je zadani uvjet istinit.
While naredbu piemo:
while (uslov)
{
blok naredbi;
}
Kod petlje while se moe dogoditi da se naredbe unutar petlje ne izvre niti jednom; ako uvjet nije
zadovoljen.
Kod petlje do-while, ne postoji takav sluaj, odnosno naredbe se uvijek bar jednom izvedu.
Petlja Do-While
Za razliku od while petlje ova petlja se izvede bar jednom jer se uslov ispituje na njezinom kraju.
Naredbe unutar petlje se izvravaju dok je uvjet istinit (dok ne postane laan). Kada uvjet postane laan
zavrava se petlja i program se nastavlja izvoenjem prve naredbe iza zagrade petlje.
Naredba se zapisuje na sljedei nain:
do{
blok naredbi;
} while (uvjet);
Programiranje C++
14
Obratite panju da se toka-zarez koja oznaava kraj naredbe zapisuje iza while uvjeta.
Funkcije
Funkcije su cjelovite skupine naredbi koje izvravanjem ispunjavaju odreene zahtjeve.
Omoguavaju ralanjivanje problema na jednostavnije - manje cjeline, ime doprinose boljoj
preglednost izvornog koda i jednostavnijem rjeenjem.
Funkcija se definie na slijedei nain:
tip_funkcije ime_funkcije(najava liste_argumenata)
{
najava lokalnih varijabli;
naredbe;
return izlazna_vrijednost;
}
gdje je:
- tip_funkcije odreuje tip vrijednosti koju pozvana funkcija vraa u nadreenu funkciju,
a moe biti bilo koji od osnovnih tipova podataka (int, char, float, double, void),
- ime_funkcije je identifikator preko kojeg se funkcija poziva, dok je
- lista_argumenata lista formalnih parametara sa pripadajuim tipovima preko kojih se niz podataka iz
nadreene funkcije prenose u pozvanu funkciju.
Funkcija u glavni program vraa jednu ili niti jednu vrijednost ovisno o tipu funkcije.
Za prijenos vrijednosti u nadreeni program koristi se naredba return;.
Funkcija se poziva na slijedei nain: ime_funkcije(stvarna lista_argumenata);
Funkcije se mogu pozivati u izrazima, petljama, ili kao argumenti u pozivima drugih funkcija. Svaka
koritena funkcija se mora najaviti prije poziva.
-Prototipovi funkcije
Prototip funkcije je iskaz, to znai da zavrava znakom taka-zarez. On se sastoji od povratnog tipa
funkcije, imena i liste parametara.
Primjer:
usigned short int FindArea (int length , int width) ;
povratni tip
ime
Prototip funkcije i definicija funkcije se moraju potpuno slagati po povratnom tipu , imenu i listi
parametara.
#include<iostream.h>
using namespace std;
int Povrsina(int duzina,int sirina);
int main()
{
int duzina;
int sirina;
int p;
cout<<"duzina=";
cin>>duzina;
cout<<"sirina=";
cin>>sirina;
p=Povrsina(duzina,sirina);
Programiranje C++
15
cout<<"Povrsina p=";
cout<<p;
cout<<" kvadratnih metara\n\n";
system("pause");
return 0;
}
int Povrsina(int d,int s)
{
return d*s;
cout<<endl;
}
Izlaz:
duzina=10
sirina=5
Povrsina p=50 kvadratnih metara
Press any key to continue . . .
-Lokalne promjenjive
Moete ne samo predati promjenjive funkciji , nego i deklarisati promjenjive unutar funkcije .Za to se
koriste lokalne promjenjive, koje su tako nazvane jer postoje samo lokalno unutar same funkcije.Po
pvratku iz funkcije one nisu vie raspoloive. U C++promjenjive moete definisati bilo gde unutar funkcije
, ne samo na njenom vrhu.Opseg promjenjive je blok u kojem je ona definisana.
Promenljive sa lokalnim opsegom vaznosti( krace receno lokalne promenljive) su vidljive samo unutar
jednog bloka naredbi( telo funkcije, telo petlje) u kojem su definisane.
-Globalne promjenjive
Promjenjive koje su definisane izvan svake funkcije imaju globalni opseg , pa su zbog toga raspoloive u
svakoj funkciji u programu, ukljuujui main().
-Argumenti funkcije
Za svaki argument treba posebno navesti njegov tip, a broj argumenata nije ogranicen i ne moraju svi
argumeti funkcije biti istog tipa. Argumenti koji se predaju funkciji su za nju lokalni .Promjene izvrene na
argumentima ne utiu na vrednosti u pozivajuoj funkciji . Ovo je poznato kao predavanje po vrednosti ,
to znai da se u funkciji pravi lokalna kopija svakog argumenta.
Vidimo da vrijednost originalne varijable ostaje nepromjenjena iako ju funkcija mjenja u 0. To je zato to
funkcija zapravo mjenja vrijednost njene kopije, a ne i same varijable.
Programiranje C++
16
-Povratne vrednosti
Funkcije vraaju vrednost , ili void. Void je signal kompajleru da nikakva vrednost nee biti vraena. Da
biste vratili vrednost iz funkcije , napiete kljunu re return- za njom sledi vrednost koju elite da vratite.
Sama vrednost e ,moda , biti izraz koji vraa vrednost.
-Podrazumevani parametri
Za svaki parametar koji deklariete u prototipu i definiciji funkcije pozivajua funkcija mora predati
vrednost.Predata vrednost mora biti deklarisanog tipa . Ako imate funkciju deklarisanu kao funkciju
Preklapajue funkcije
C++ omoguava da kreirate vie od jedne funkcije sa istim imenom.Ovo se naziva preklapanje funkcije.
Funkcije se moraju razlikovati po svojim listama parametara , razliitim tipom parametara , razliitim
brojem parametara, ili jednim i drugim.
Primjer:
int myFunction (int,int);
int myFunction (long,long);
int myFunction (long);
Preklapanje funkcije se naziva i funkcijski polimorfizam. Poly znai vie , a morph znai
forma.Funkcijski polimorfizam se odnosi na sposobnost da se funkcija optereti vie od jednog znaenja.
-Inline funkcija
Kada definiete funkciju , kompajler, normalno, kreira samo jedan skup instrukcija u memoriji.Kada
pozovete funkciju, izvrenje programa skae na te instrukcije , a po povratku iz funkcije, ono se vraa
na sledeu liniju u pozivajuu funkciju .Ako pozovete 10 puta, program skae na isti skup instrukcija
svaki put. Ovo znai da postoji samo jedna kopija funkcije, a ne 10.
Ako je funkcija deklarisana kljunom reju inline , kompajler ne kreira pravu funkciju: on kopira kod iz
inline funkcije , direktno u pozivajuu funkciju . Ne obavlja se nikakav skok, a to je kao da ste napisali
iskaze u pozivajuoj funkciji.
-Rekurzija
Funkcija moe pozvati samu sebe i to se naziva rekurzija. Rekurzija moe biti direktna ili indirektna.
Direktna je kada funkcija poziva samu sebe . Indirektna je kada funkcija poziva drugu funkciju, koja ,
onda, poziva prvu funkciju. Vano je uoiti da se, kada funkcija poziva samu sebe , izvrava njena nova
kopija. Da bismo ilustrovali reavanje problema korienjem rekurzije razmotrite Fibonaccievu seriju:
1,1,2,3,5,8,13,21,34....
Prva dva broja su 1.Svaki broj ,posle drugog, predstavlja zbir dva broja pre njega. Uopteno govorei , nti broj je zbir n-2 i n-1, sve dok je n:2.Rekurzivne funkcije treba da zaustave uslov. U Fibonaccievvoj seriji
n<3 je uslov za zaustavljanje.
Programiranje C++
17
stupce, istog su tima i imena. Meusobno se razlikuju po svom mjestu i svojoj vrijednosti. Stoga ih je
lake premjetati, sortirati i s njima vriti razliite raunske operacije.
Nizovi mogu sadravati:
- brojeve (cijele ili decimalne)
- znakove (slova i posebne znakove)
Ovisno o tome razlikujemo numerike i znakovne nizove. U definiranom nizu, svi podaci moraju biti istog
tipa. Nije mogue u istom nizu mijeati brojeve i znakove. Svaki lan u nizu ima svoje mjesto. To mjesto
zovemo INDEKS. Osim mjesta, lan niza ima i svoju vrijednost.
Na primjer: Ako kaemo da elimo definirati niz imena A koji e imati 7 lanova i iji e lanovi biti cijeli
brojevi, onda emo u programskom to napisati ovako: int A[7].
Grafiki prikazano to izgleda ovako :
A[0]
A[1]
A[2]
A[3]
A[4]
A[5]
A[6]
34
56
Vidimo da svaki lan niza ima svoje mjesto (indeks) i vrijednost. Indeksi idu od 0-6 i zapisani su unutar
uglatih zagrada.
Tako na primjer vrijednost prvog lana niza A[0] iznosi 2, drugog ,A[1], iznosi 3 itd. Uoimo da lanovi
niza idu od 0-N-1 gdje je N broj koji govori koliko ima lanova niza.
Postoje jednodimenzionalni, dvodimenzionalni i viedimenzionalni nizovi.
Jednodimenzionalni nizovi
Niz je kolekcija lokacija za smjetanje podataka , od kojih svaka sadri isti tip podataka.Sve te lokacije
nazivaju se elementi niza.
Jednodimenzionalni nizovi imaju samo jedan niz podataka. Na primjer niz A prikazan u tablici ima 7
lanova. Svi lanovi su cijeli brojevi i nalaze se poredani su jedan iza drugoga (u nizu).
A[0]
A[1]
A[2]
A[3]
A[4]
A[5]
A[6]
34
21
76
Kako bi program mogao raditi s nizom, na poetku programa potrebno je rezervirati memoriju u
raunalu. To se radi naredbom za deklaraciju koja se openito zapisuje:
tip_niza naziv_niza [dimenzije] ;
Na primjer sljedee deklaracije oznaavaju:
int a[10] da je deklariran niz cijelih brojeva koji se zove a i ima ukupno 10 lanova, a indeksi idu od 0
do 9
float X[8] da je deklariran niz decimalnih brojeva koji se zove X i ima ukupno 8 lanova , a indeksi idu
od 0 do 7
char b[30] - da je deklariran niz od 30 znakova
Programiranje C++
18
Vano je uvijek rezervirati vie prostora nego to e se u programu koristiti jer e inae program nee
raditi ispravno. Na primjer ako deklariramo da emo koristiti niz od 10 lanova, a unesemo 20 program
nee moi prihvatiti preostalih 10 lanova niza te nee moi ispravno raditi.
Niz se moe zadati unutar programa ili unosom s tipkovnice (naredbom cin ili scanf). Ako se vrijednosti
lanova niza zadaju unutar programa navode se unutar vitiastih zagrada npr: naredbom
A[6]={2,34,1,67,99,7}; je zadan niz A kojeg ini 6 cijelih brojeva.
Kada se vrijednosti lanova niza unose preko tipkovnice (naredbom cin) koristi se petlja for. Petljom for
unose se jedna po jedan lan niza, poveavanjem kontrolne varijable za jedan. U nastavku je dio
programskog koda koji pokazuje unos lanova niza pomou petlje for.
for (i=0;i<N;i++) {
cin>>X[i];
}
Za ispis lanova niza takoer se koristi petlja for:
for (i=0;i<N;i++) {
cout>>X[i];
}
Dvodimenzionalni nizovi
Karakteristika dvodimenzionalnih nizova je da imaju vie redaka i stupaca.Tablicom u nastavku
predstavljen je cjelobrojni niz naziva A.
1. stupac
2. stupac
3. stupac
4.stupac
1. redak
2. redak
Programiranje C++
19
gdje prvi broj oznaava broj redaka, a drugi broj stupaca.Kao i kod jednodimenzionalnih nizova prvi
redak i stupac imaju redni broj (index) 0.
Dvodimenzionalni niz, se primjerice u praksi koristi za rjeavanje problema sortiranja niza (od najveeg
do najmanjeg ili od najmanjeg do najveeg). U nastavku je primjer sortiranja niza koritenjem
jednodimenzionalnog niza.
Pokuajte rijeiti isti zadatak koritenjem dvodimenzionalnog niza.
OBJANJENJE:
47
78
17
53
61
A[0]
A[1]
A[2]
A[3]
A[4]
Za i=0, j e poprimiti vrijednosti 1,2,3 i 4, to znai da e se element niza A[0] usporeivati s ostalim
elementima. Svaki put kad neki drugi element bude manji id elementa A[0], doi e do zamjene
vrijednosti.
A[0]>A[1]
47>78
A[0]>A[2]
47>17
Nejednakost ne
vrijedi pa ne treba
nita raditi
Nejednakost vrijedi
pa se zamijene
vrijednosti sada je
Programiranje C++
20
A[0]=17, A[2]=47
A[0]>A[3]
Nejednakost ne
vrijedi pa ne treba
nita raditi
17>53
A[0]>A[4]
Nejednakost ne
vrijedi pa ne treba
nita raditi
17>61
Nakon prvog prolaza na prvom mjestu u nizu nalazi se najmanji element. Niz sada izgleda:
17
78
47
53
61
A[0]
A[1]
A[2]
A[3]
A[4]
A[1]>A[2]
78>47
A[1]>A[3]
47>53
A[1]>A[4]
47>61
Nejednakost vrijedi
pa se zamijene
vrijednosti sada je
A[1]=47, A[2]=78
Nejednakost ne
vrijedi pa ne treba
nita raditi
Nejednakost ne
vrijedi pa ne treba
nita raditi
Programiranje C++
21
17
47
78
53
61
A[0]
A[1]
A[2]
A[3]
A[4]
A[2]>A[3]
Nejednakost vrijedi
pa se zamijene
vrijednosti sada je
A[2]=53, A[3]=78
78>53
A[2]>A[4]
Nejednakost ne
vrijedi pa ne treba
nita raditi
53>61
17
47
53
78
61
A[0]
A[1]
A[2]
A[3]
A[4]
A[3]>A[4]
78>61
Nejednakost vrijedi
pa se zamijene
vrijednosti sada je
A[3]=61, A[4]=78
Petlje su zavrene, a samim tim i postupak sortiranja, niz koji e biti ispisan izgleda:
Programiranje C++
17
47
53
61
78
A[0]
A[1]
A[2]
A[3]
A[4]
22
Sortiranje je zavreno!
Nizovi znakova
Za rad s nizom znakova moemo koristiti tip string ili char. Tip string se koristi u sluaju ako radimo s
rijeima ili reenicama, dok tip char radi samo s jednim znakom. DEfiniramo li polje ili niz znakova tipa
char, takoer emo moi raditi s rijeima ili reenicama.
Pri rad s tipom string na poetku programa potrebno je izvriti deklaraciju varijabli naredbom;
string ime_varijable;
Budui da varijabla string prilikom unosa unese znakove jedne rijei, postoji posebna naredba za unos
cijele reenice:
getline(cin, ime_varijable);
Programiranje C++
23
string ime;
/*deklaracija stringa (niza znakova)*/
cout <<"Unesi svoje ime =";
cin >> ime;
cout <<"Tvoje ime je "<<ime;
cout<<"\n";
/*prelazak u novi red*/
system ("PAUSE");
return 0;
}
Izlaz:
Unesi svoje ime =MARKO
Tvoje ime je MARKO
Press any key to continue . . .
Primjer 2: Unesi reenicu " Danas uim programiranje u C++." te ju nakon unosa ispii na monitoru
raunala.
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
int main()
{
string recenica;
/*deklaracija stringa (niza znakova) za varijablu recenica*/
cout <<"Unesi recenicu = ";
getline(cin,recenica);
/*unos reenice pomou naredbe getline*/
cout <<recenica;
cout<<"\n";
system ("PAUSE");
return 0;
}
Izlaz:
Unesi recenicu = Danas ucim programiranje u C++
Danas ucim programiranje u C++
Press any key to continue . . .
Programiranje C++
24
Niz znakova moemo i definiramo kao jednodimenzionalni nizi iji su elementi znakovi (char).
Znakovni niz se deklarira kao i svaki jednodimenzionalni niz, navoenjem tipa char, imena niza i njegove
duljine.
Kod odreivanja duljine niza znakova treba voditi rauna o tome da niz znakova zavrava nul znakom
(\0) koji zauzima jedno mjesto niza.
Niz se inicijalizira tako da se njegov sadraj navodi unutar dvostrukih navodnika ( " " ).
Za uitavanje i ispis znakovnih nizova mogu se koristiti standardni naini uitavanja i ispisivanja
elemenata jednodimenzionalnog niza
(cout , cin , printf(), scanf() u kombinaciji s petljom for).
Osim ovog naina mogu se koristiti i funkcije:
- gets() - koja omoguuje unoenje niza znakova sa standardnog ulaza.
- puts() - koja omoguava ispis niza znakova na standardni izlaz.
(Obje funkcije nalaze u biblioteci stdio.h)
Primjer 1: Napii program kojim se unosi niz znakova i ispisuje duljina uitanog niza.
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
int main()
{
char a[80];
int i=0;
printf("upisite niz znakova: ");
gets(a);
while (a[i+1]!='\0')
i++;
printf("upisali ste niz: ");
puts(a);
printf("Duljina mu je %d znakova",i+1);
system ("PAUSE");
return 0;
}
Izlaz:
upisite niz znakova: Maja je student
Programiranje C++
25
Strukture
Struktura je kombinacija skupa istih ili razliitih tipova podataka koje formira sam korisnik, prema
vlastitim potrebama.
U C++u se struktura openito zapisuje:
struct ime_strukture
{
najava lanova strukture;
};
gdje je struct kljuna rije koja oznaava poetak najave strukture, ime_strukture koju najavljujemo, a
unutar vitiastih zagrada navodimo sve alnove(varijable) koje elimo kreirati strukturom.
Varijable strukture mogu se navesti :
a) odmah iza strukture
struct ime_strukture
{
Programiranje C++
26
Na primjer poziv za ispis varijable razred[0].rodjendan.godina e dati za ispis godine roenja za 1. uenika, a
razred[1].prosjek e dati ispis prosjeka za 2. uenika.
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
struct datum
{
int dan;
int mjesec;
int godina;
};
struct ucenik
{
char ime[15];
char prezime[15];
int maticni;
float prosjek;
struct datum rodjendan;
}razred[40];
/*polje razred iji su lanovi strukture tipa ucenik*/
int main()
{
int n,i,k;
float max;
cout<<"\nKoliko ima ucenika? ";
cin>>n;
if (n>40)
cout<<"Broj ucenika ne moze biti >40";
else
{
for(i=0;i<n;i++)
/*unos podataka za pojedinog uenika u polje razred*/
{
cout<<"\nIme: ";
Programiranje C++
27
cin>>razred[i].ime;
cout<<"\nPrezime: ";
cin>>razred[i].prezime;
cout<<"\nMaticni u imeniku: ";
cin>>razred[i].maticni;
cout<<"\nProsjek: ";
cin>>razred[i].prosjek;
cout<<"\nRodjen dan: ";
cin>>razred[i].rodjendan.dan;
cout<<"\nRodjen mjesec: ";
cin>>razred[i].rodjendan.mjesec;
cout<<"\nRodjen godina: ";
cin>>razred[i].rodjendan.godina;
}
max=razred[0].prosjek; /*odreivanje najboljeg prosjeka*/
k=0;
for(i=0;i<n;i++)
if (max<razred[i].prosjek)
{
max=razred[i].prosjek;
k=i;
}
/*ispis najboljeg*/
cout<<"\nNajbolji je "<<razred[k].ime<<" " <<razred[k].prezime;
cout<<"\nMaticni broj "<<razred[k].maticni;
cout<<"\nRodjen "<<razred[k].rodjendan.dan<<razred[k].rodjendan.mjesec<< razred[k].rodjendan.godina;
cout<<"\nS prosjekom "<<razred[k].prosjek;
}
system ("PAUSE");
return 0;
}
Izlaz:
Koliko ima ucenika? 2
Ime: mladen
Prezime: milkovi
Maticni u imeniku: 1011
Prosjek: 6
Rodjen dan: 10
Rodjen mjesec: 12
Rodjen godina: 1989
Ime: maja
Prezime: milkovi
Maticni u imeniku: 1010
Prosjek: 8.5
Programiranje C++
28
Rodjen dan: 10
Rodjen mjesec: 12
Rodjen godina: 1989
Najbolji je maja milkovi
Maticni broj 1010
Rodjen 10121989
S prosjekom 8.5
Press any key to continue . . .
U nastavku je isti primjer, ali uz koritenje naredbi za formatirani ulaz i izlaz (printf i scanf).
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
struct datum
{
int dan;
int mjesec;
int godina;
};
struct ucenik
{
char ime[15];
char prezime[15];
int maticni;
float prosjek;
struct datum rodjendan;
}razred[40]; /*polje razred koje se sastoji od struktura ucenik*/
int main()
{
int n,i,k;
float max;
Programiranje C++
29
Programiranje C++
30
Rodjen mjesec: 12
Rodjen godina: 1989
Ime: milan
Prezime: milkovic
Maticni u imeniku:1011
Prosjek: 9
Rodjen dan: 27
Rodjen mjesec: 5
Rodjen godina: 1987
Najbolji je milan milkovic
Maticni broj 1011
Rodjen 27.5.1987
S prosjekom 9.00
Press any key to continue . . .
Datoteke
Datoteke omoguuju pohranjivanje velike koliine podataka koji se mogu koristiti neovisno o programu.
Datoteke mogu biti tekstualne ili binarne. U nastavku e biti opisane tekstualne datoteke.
2 su osnovna naina upisa/ispisa podataka u datoteku:
- formatirani
- neformatirani
Neformatirani nain upisa i ispisa podataka iz datoteke koristi naredbe:
ofstream: za upisivanje podataka u datoteku
ifstream: za itanje podataka iz datoteke
fstream: za itanje i pisanje podataka u datoteku
a obavlja se kombinacijama kljunih rijei open i close.
Primjer1: Otvaranje datoteke primjer.txt i upis teksta "Ovo je primjer pisanja teksta u datoteku".
Datoteka e se nalaziti u radnoj mapi tvrdog diska te se moe proitati izlaskom iz C++ a i pokretanjem
programa Blok za pisanje (NotePad).
Programiranje C++
31
#include <iostream>
#include <fstream>
using namespace std;
int main () {
ofstream test;
/*deklaracija datoteke test - opcija:upisivanje podataka*/
test.open ("primjer.txt");
/*otvaranje datoteke primjer.txt u radnoj mapi na tvrdom disku*/
test << "Ovo je primjer pisanja teksta u datoteku \n";
/*upis teksta u datoteku*/
test.close();
/*zatvaranje datoteke*/
system ("PAUSE");
return 0;
}
Izlaz:
Programiranje C++
32
return 0;
}
Izlaz:
Ovo je primjer pisanja teksta u datoteku
Press any key to continue . . .
elimo li koristiti formatirani upis/spis podataka u datoteku koristiti emo naredbe fscanf() i fprintf().
Prije otvaranja datoteke programu emo naredbom FILE *identifikator; najaviti da emo raditi s
datotekom. Identifikator je naziv datoteke koji emo koristiti u programu, a zvjezdica govori da se radi o
pokazivau.
Datoteku emo otvoriti funkcijom fopen(), a nakon uporabe zatvoriti funkcijom fclose();.
Openito se te funkcije zapisuju:
fopen("ime_datoteke","nain_otvaranja");
fclose(identifikator);
Ime datoteke zadaje se po istom pravilu kao i naziv varijable, a nain otvaranja datoteke (tekstualne)
odreuje njezine mogunosti. Tako na primjer moe postojati datoteka koja se moe samo itati ili u koju
se mogu samo zapisivati podaci samo. Naini otvaranja se biljee slovom (r, w, r+) i detaljnije su opisani
u tablici.
Nain
otvaranja
Objanjenje
"r"
"w"
"a"
"r+"
"w+"
Otvara tekstualnu datoteku za itanje i pisanje. Ako datoteka ne postoji kreirat e ju. Ako
Programiranje C++
33
datoteka postoji, svi podaci iz nje bit e izbrisani prije upisivanja novih.
"a+"
Otvara tekstualnu datoteku za dodavanje novih podataka na njen kraj. Ako datoteka ne
postoji bit e kreirana
Za pisanje u datoteku koristi se nekoliko funkcija. Najee koritene funkcije su fprintf() i funkcija
fwrite() koja je pogodna za upisivanje blokova podataka.
Za itanje podataka iz datoteke najee se koriste funkcije fscanf() i fread() - koja se esto koristi u
kombinaciji sa strukturama.
U programima za rad s datotekama esto emo naii na dio programskog koda kojim se ispituje da li je
datoteka ispravno otvorena. Ako je datoteka deklarirana sa FILE *f; onda taj dio koda izgleda ovako:
if(f==NULL)
{
printf("Greska pri otvaranju");
exit(1);
}
Ako je uvjet (f==NULL) ispunjen na zaslonu raunala e se ispisat poruka "Greka pri otvaranju".
Primjer 1: Napiite program koji u radnoj mapi kreira datoteku test1.txt i u nju smjeta prvih 100 cijelih
brojeva. (Napomena: nakon izvoenja programa izaite i u radnoj mapi provjerite da li imate datoteku
test1.txt. Njezin sadraj moete proitati s programom Blok za pisanje (NotePad))
#include <cstdlib>
#include <iostream>
using namespace std;
Programiranje C++
34
int main()
{
FILE *f;
int i;
f=fopen("test1.txt","w");
/*otvaranje datoteke za itanje i pisanje*/
if(f==NULL)
/*ispitivanje valjanosti otvaranja datoteke*/
{
printf("Greska pri otvaranju");
exit(1);
}
for(i=1;i<=100;i++)
/*upis podataka u datoteku; for petljom; brojeva od 1-100*/
fprintf(f,"%d\n",i);
fclose(f);
/*zatvaranje datoteke*/
system ("PAUSE");
return 0;
}
Izlaz:
Primjer 2: Napiite program koji e proitati sadraj iz datoteke iz prolog zadatka i ispisati njezin
sadraj na zaslonu raunala.
Programiranje C++
35
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
FILE *f;
int a;
f=fopen("test1.txt","r");
/*ponovno otvaranje datoteke*/
if(f==NULL)
{
printf("Greska pri otvaranju");
exit(1);
}
while (!feof(f))
{
fscanf(f,"%d\n",&a);
printf("\n%d",a);
}
fclose(f);
/*zatvaranje datoteke*/
system ("PAUSE");
return 0;
}
Izlaz:
Objekti i klase
Klase u jeziku C++ su sloeni tipovi podataka koji se satoje od ureenih nizova elemenata koji mogu da
budu meusobno razliitih tipova. Ti elementi nazivaju se lanovi klase. Podaci klasnih tipova
predstavljaju primjerke date klase i nazivaju se objekti . Pojam podatak obuhvata kako vrednost
Programiranje C++
36
standardnih tipova , tako i objekte klasnih tipova. Kvalitativno se razlikuju pojedinani podaci i nizovi.
Prosti(skalarni) podaci , pokazivai strukture i objekti smatraju se pojedinanim podacima.
lanovi klasa mogu da budu podaci ili funkcije.Vrednosti podataka lanova ine stanje (vrednost) objekta
i nazivaju se polja ili atributi klase , odnosno objekta.
Funkcije lanovi slue za izvoenje raznih operacija nad podacima lanovima (poljima) ime mjenjaju
stanje objekta na koji se primjenjuju. Nazivaju se metode klase.
Osnovni pojmovi objektnog programiranja su:
- klase
- objekti
- svojstva
- metode i
- dogaaji
U C++u definiranje klasa slino je definiranju struktura u programskom jeziku C, s tim da je kljuna rije
class, a ne struct. U klasama je takoer potrebno zadati varijable koje e biti dostupne cijelom
programu. Takve varijable zovemo javne i privatne u C++ se zapisuju s public i private.
-Privatnim(private) lanovima se moe pristupiti samo unutar metode same klase.
-Javnim (public) lanovima se moe pristupiti kroz svaki objekt klase
-protected privilegovani pristup
Klasa se definie naredbom class i deklarie se:
class Ime_klase {
<podaci_clanovi>
<objekti_clanovi>
<funkcije_clanice>
};
Programiranje C++
37
public:
int itsAge;
};
int main()
{
Cat Milan;
Milan.itsAge=5;
cout<<"Milan ima";
cout<<Milan.itsAge<< "godina"<<endl;
system("PAUSE");
return 0;
}
Izlaz:
Milan ima 5godina
Press any key to continue . . .
2.Pristup javnim lanovima
#include<iostream.h>
using namespace std;
class Cat
{
public:
int itsAge;
int itsWeight;
};
int main()
{
Cat Milan;
Milan.itsAge=5;
cout<<"Milan ima";
cout<<Milan.itsAge<< "godina"<<endl;
Cat Marko;
Marko.itsWeight=10;
cout<<"Marko ima";
cout<<Marko.itsWeight<< "godina"<<endl;
system("PAUSE");
return 0;
}
Izlaz:
Milan ima 5godina
Marko ima 10godina
Press any key to continue . . .
Primjer 3: U ovom primjeru kreirana je klasa koja se zove Primjer i koja sadri funkciju Ispis().
Funkcija Ispis() ispsuje tekst "Ispis teksta na ekranu racunala koristenjem klase Ispis" na ekranu
raunala.
Programiranje C++
38
#include <iostream>
using namespace std;
class Primjer
/*deklaracija klase koja se zove Primjer i koja u sebi sadri funkciju Ispis()*/
{
public:
void Ispis()
{
cout << "Ispis teksta na ekranu racunala koristenjem klase Ispis\n" << endl;
}
};
int main()
{
Primjer tekst;
/*deklaracija objekta imena test prema "nacrtu"u klasi Primjer*/
tekst.Ispis();
/*poziv funkcije Ispis() nad objektom test*/
system ("PAUSE");
return 0;
}
Izlaz.
Ispis teksta na ekranu racunala koristenjem klase Ispis
Press any key to continue . . .
4.U ovom primjeru kreirana je klasa tekst i koja sadri funkciju pisi() koja ispisuje tekst Ovo je
nas tekst
#include<cstdlib>
#include<iostream.h>
using namespace std;
class tekst
{
public:
void pisi()
{
cout<<"Ovo je nas tekst"<<endl;
}
};
int main()
{
tekst t;
t.pisi();
cout<<endl;
system("PAUSE");
return 0;
}
Izlaz:
Ovo je nas tekst
Press any key to continue . . .
5.U ovom programu kreirana je klasa tekst koja sadri funkciju pisi()
#include<cstdlib>
#include<iostream.h>
using namespace std;
Programiranje C++
class tekst
{
public:
void pisi()
{
cout<<"Ovo je nas tekst"<<endl;
}
};
int main()
{
tekst prvi;
tekst drugi;
tekst treci;
prvi.pisi();
drugi.pisi();
treci.pisi();
cout<<endl;
system("PAUSE");
return 0;
}
Izlaz:
Ovo je nas tekst
Ovo je nas tekst
Ovo je nas tekst
Press any key to continue . . .
#include<cstdlib>
#include<iostream>
i funkciju pisi()
39
Programiranje C++
40
7.Napisati program koji rauna povrinu pravougaonika a pristup lanovima private (varijabla c
int tipa) i public (( metoda naslov() i metoda povrsina (int a i int b))
#include<cstdlib>
Programiranje C++
#include<iostream>
using namespace std;
class pravougaonik
{
private:
int c;
public:
void naslov()
{
cout<<"Povrsina pravougaonika"<<endl;
cout<<endl;
}
int povrsina(int a,int b)
{
c=a*b;
return (c);
}
};
int main()
{
pravougaonik p;
p.naslov();
cout<<"Povrsina je ";
cout<<p.povrsina(2,3);
cout<<endl<<endl;
system("PAUSE");
return 0;
}
Izlaz:
Povrsina pravougaonika
Povrsina je 6
Press any key to continue . . .
41
Programiranje C++
#include<cstdlib>
#include<iostream>
using namespace std;
class pravougaonik
{
private:
int a;
int b;
int c;
public:
void unesi(void)
{
cout<<"Unesi stranicu a="<<endl;
cin >>a;
cout<<"Unesi stranicu b="<<endl;
cin >>b;
}
void povrsina(void)
{
c=a*b;
cout<<"Povrsina je "<<c<<endl;
}
};
int main()
{
pravougaonik p;
p.unesi();
p.povrsina();
cout<<endl;
system("PAUSE");
return 0;
}
Izlaz:
Unesi stranicu a=
10
Unesi stranicu b=
5
Povrsina je 50
Press any key to continue . . .
42
Programiranje C++
43
#include<cstdlib>
#include<iostream>
using namespace std;
class pravougaonik
{
private:
int a;
int b;
int p;
int o;
public:
void unesi(void)
{
cout<<"Unesi stranicu a="<<endl;
cin >>a;
cout<<"Unesi stranicu b="<<endl;
cin >>b;
}
void povrsina(void)
{
p=a*b;
cout<<"Povrsina je "<<p<<endl;
o=2*a+2*b;
cout<<"Obim je "<<o<<endl;
}
};
int main()
{
pravougaonik p;
p.unesi();
p.povrsina();
cout<<endl;
system("PAUSE");
return 0;
}
Izlaz:
Unesi stranicu a=
8
Unesi stranicu b=
4
Povrsina je 32
Obim je 24
Press any key to continue . . .
10. U primjeru 2 zadana je klasa pravokutnik koja ima dvije varijable: stranicu a i stranicu b. To su
"stanja" pravokutnika, odnosno pravokutnik je odreen veliinama tih stranica.U klasi se nalaze i
dvije funkcije: povrsina() i opseg() koje mu odreuju "ponaanje", odnosno odreeno je
Programiranje C++
44
float povrsina()
{
float pov;
pov=str1*str2;
return pov;
}
float opseg ()
{
float opseg;
opseg=2*(str1+str2);
return opseg;
}
};
int main()
{
pravokutnik prvi;
prvi.str1=5;
prvi.str2=6;
cout<<"Za a= "<<prvi.str1<<" i b= "<<prvi.str2<<"\nPovrsina je: "<<prvi.povrsina()<<"\n";
cout<< "a opseg je: "<<prvi.opseg()<<"\n";
system ("PAUSE");
return 0;
}
Izlaz:
Za a= 5 i b= 6
Povrsina je: 30
a opseg je: 22
Press any key to continue . . .
Programiranje C++
45
#include <iostream>
#include <math.h>
using namespace std;
class Pravougaonik
{
public:
float str1,str2;
float povrsina()
{
float pov;
pov=str1*str2;
return pov;
}
float opseg ()
{
float opseg;
opseg=2*(str1+str2);
return opseg;
}
};
int main()
{
Pravougaonik prvi;
cout<<"Unesite prvu stranicu"<<endl;
cin>> prvi.str1;
cout<<"Unesite drugu stranicu"<<endl;
cin>>prvi.str2;
cout<<"Za a= "<<prvi.str1<<" i b= "<<prvi.str2<<"\nPovrsina je: "<<prvi.povrsina()<<"\n";
cout<< "Opseg je: "<<prvi.opseg()<<"\n";
system ("PAUSE");
return 0;
}
Izlaz:
Unesite prvu stranicu
10
unesite drugu stranicu
5
Za a= 10 i b= 5
Povrsina je: 50
Opseg je: 30
Press any key to continue . . .
-Konstruktor i destruktor
Uloga konstuktora je da direktno dodeljuje vrednost nekih promenljivih u klasi prije izvravanja main()
funkcije Konstruktor bi trebalo da inicijalizuje lanove objekta na neke poetne vrednosti za koje
Programiranje C++
46
smatramo da bi trebalo da ih imaju pre nego to se krene sa upotrebom objekta. To moe da bude
rezervisanje memorije, postavljanje pokazivaa na NULL, otvaranje fajla, uitavanje podataka iz
konfiguracionog fajla i tome slino.
Destruktor oslobaa zauzetu memoriju. . Destruktor treba da "poisti" za sobom koliko je to mogue, jer
se poziva kada se objekat unitava: znai da oslobodi memoriju, zatvori otvorene fajlove, upie podatke
u konfiguracioni fajl itd.
Definisanje konstruktora
class PovrsinaValjka
{
public:
PovrsinaValjka(); //To jest definicja konstruktora
};
PovrsinaValjka::PovrsinaValjka()
{
//Tu inicijalizujemo
}
Konstruktor specijalna funkcija lanica koja omoguava inicijalizaciju objekta prilikom njegovog
kreiranja.
Konstruktor ima isto ime kao i klasa kojoj pripada.
Konstruktor nema tip ak ni void!
Konstruktor se automatski poziva svaki put kad se kreira neki objekat.
Primjer:
class Time
{
private:
int hh, mm, ss;
public:
...
Time() { hh = mm = ss = 0; }
...
};
...
Time t;
Programiranje C++
1.Program rauna povrinu pravougaonika uz primjenu konstruktora
#include<cstdlib>
#include<iostream>
using namespace std;
class pravougaonik
{
private:
int a;
int b;
public:
pravougaonik(void) // konstruktor//
{
cout<<"Unesi stranicu a="<<endl;
cin >>a;
cout<<"Unesi stranicu b="<<endl;
cin >>b;
}
int povrsina(void)
{
return(a*b);
}
};
int main()
{
pravougaonik p;
cout<<"Povrsina je "<<p.povrsina()<<"."<<endl;
cout<<endl;
system("PAUSE");
return 0;
}
Izlaz:
Unesi stranicu a=
5
Unesi stranicu b=
4
Povrsina je 20.
Press any key to continue . . .
47
Programiranje C++
48
Programiranje C++
49
Programiranje C++
50
Programiranje C++
#include <iostream.h>
class Inkrement
{
public:
Inkrement( int b=0, int i=1 );
void dodaj() { stanje += korak; }
void print();
private:
int stanje;
const int korak;
};
Inkrement::Inkrement(int b,int i) : korak (i) { stanje = b; }
void Inkrement::print()
{
cout << "stanje=" << stanje << ", korak=" << korak << endl;
}
main()
{
Inkrement data(10,5);
cout << "Prije petlje : ";
data.print();
for ( int j=1; j<4; j++ ) { data.dodaj(); data.print(); }
system("PAUSE");
return 0;
}
Izlaz:
Prije petlje : stanje=10, korak=5
stanje=15, korak=5
stanje=20, korak=5
stanje=25, korak=5
Press any key to continue . . .
51
Programiranje C++
5.Program rauna udaljenost izmeu taaka
#include <iostream.h>
#include <math.h>
#define K(a,b) pow(((a)-(b)),2)
class Tacka
{
public:
Tacka (double=0, double=0);
double getX() const;
double getY() const;
double daljina(Tacka) const;
void pisiTacka() const;
private:
double x, y;
};
Tacka::Tacka(double xx, double yy)
{ x = xx; y = yy; }
double Tacka::getX() const
{ return x; }
double Tacka::getY() const
{ return y; }
double Tacka::daljina(Tacka t) const
{ return sqrt(K(x,t.x)+K(y,t.y)); }
void Tacka::pisiTacka() const
{ cout << "("<<x<<","<<y<<")"; }
main()
{
Tacka tA(3,4);
const Tacka tO; // konstantan objekat
cout<<"A: "<<tA.getX()<<","<<tA.getY()<<endl;
cout<<"O: "<<tO.getX()<<","<<tO.getY()<<endl;
cout<<"A: "; tA.pisiTacka(); cout<<endl;
cout<<"O: "; tO.pisiTacka(); cout<<endl;
cout << "Udaljenost od A"; tA.pisiTacka();
cout << " do O"; tO.pisiTacka();
cout << " iznosi: " << tA.daljina(tO) << endl;
cout << "Udaljenost od O"; tO.pisiTacka();
cout << " do A"; tA.pisiTacka();
cout << " iznosi: " << tO.daljina(tA) << endl;
system("PAUSE");
return 0;
}
Izlaz:
A: 3,4
O: 0,0
A: (3,4)
O: (0,0)
Udaljenost od A(3,4) do O(0,0) iznosi: 5
Udaljenost od O(0,0) do A(3,4) iznosi: 5
Press any key to continue . . .
-Nasljeivanje
52
Programiranje C++
53
Programiranje C++
54
#include<cstdlib>
#include<iostream>
using namespace std;
class kvadrat
{
protected:
int br;
public:
void unos(void)
{
cout<<"Unesite broj: "<<endl;
cin>>br;
}
int izracun(void)
{
return(br*br);
}
};
class kub:public kvadrat // formirana klasa kub koja naslje]uje varijable i metode klase kvadrat//
{
public:
int izracun(void)
{
return(br*br*br);
}
};
int main()
{
kvadrat objekt1;
objekt1.unos();
cout<<"Kvadrat je"<<objekt1.izracun()<<endl;
cout<<endl;
kub objekt2;
objekt2.unos();
cout<<"Kub je "<<objekt2.izracun()<<endl;
cout<<endl,
system("PAUSE");
return 0;
}
Izlaz:
Unesite broj:
3
Kvadrat je9
Unesite broj:
3
Kub je 27
Press any key to continue . . .
Programiranje C++
55
Programiranje C++
56
Pokazivai i reference
Kao to im ime kae, pokazivai (eng. pointers) su objekti koji pokazuju na neki drugi objekt.
Jednostavnije reeno, jedina funkcija im je pokazivati na neki drugi objekt ili varijablu da bismo preko njih
mogli pristupiti onome na to pokazuju. Oni, sami od sebe nemaju nikakvu vrijednost, odnosno vrijednost
im je NULL (mora se to eksplicitno navesti). Poetnici obino ne vide smisla postojanju pokazivaa pa je
za sada najbolje da ih promatrate, u terminologiji operativnih sistema, kao izvjesne preace (shortcuts)
do nekog objekta ili varijable.
Na koji nain pokaziva pokazuje na neto? Naime, da bi pokaziva mogao obavljati svoju funkciju mi
mu moramo proslijediti adresu onoga na to e on pokazivati. Ne vrijednost tog objekta, ne neku
proizvoljnu vrijednost, nego samo adresu. Na taj nain emo preko njega moi pristupiti tom objektu radi
itanja njegove vrijednosti ili pak promijeniti vrijednost objekta preko pokazivaa. Sintaksa deklaracije
pokazivaa je
tip_na_koji_pokazuje * ime_pokazivaa
Napomena: sasvim je nebitno da li piete pokaziva kao tip* pok, tip *pok ili tip * pok jer C++
kompajler ionako ne vidi ove razmake. Do vas i vaeg stila je da izaberete jedan od naina.
Kada pokaziva deklariramo, onda ga inicijaliziramo adresom nekog drugog objekta koristei znak
ampersand (&) ili adresni operator. Sada pokaziva sadri adresu tog objekta odnosno pokazuje na
njega. Sintaksa inicijalizacije je
pokaziva = &neki_objekt;
Pretpostavimo da imamo varijablu imena broj
float broj = 3.14;
Idemo napraviti pokaziva koji e pokazivati na tu varijablu:
float broj = 3.14;
float *pok_broj; // ovo je
pok_broj = &broj; // pokaziva
Ali jednostavnije ga je napisati u jednom redu:
float *pok_broj = &broj;
to smo time uinili? Kako biste lake razumjelo, proitajte taj nepoznati dio s desna na lijevo:
nai varijablu broj, uzmi njenu adresu (adresu dohvaamo pomou znaka &) i smjesti ju u varijablu
pok_broj koja je pokaziva (pokazivai se od obinih varijabli razlikuju po znaku * ispred imena) na
varijablu tipa float.
Programiranje C++
57
#include <iostream>
using namespace std;
int main()
{
float broj = 3.14;
float *pok_broj = &broj;
cout << broj;
system("PAUSE");
return 0;
}
Izlaz:
3.14
Press any key to continue . . .
Pokaziva smo mogli napisati i ovako:
float* pok_broj = &broj; // premjestili smo zvjezdicu
No takav pristup ima jednu manu. Ako elimo stvoriti vie pokazivaa moramo napisati ovako:
float* pok1;
float* pok2;
A prvim pristupom je to mogue i ovako:
float *pok1, *pok2;
U ovom primjeru emo promjeniti vrijednost varijable broj, ali pomou pokazivaa (pok_broj):
float broj = 3.14;
float *pok_broj = &broj;
*pok_broj = 1337;
Kada bismo ispisali vrijednost varijable broj vidjeli bismo da sadri brojanu vrijednost 1337:
2.Program za promjenu vrijednosti varijable pomou pokazivaa
#include <iostream>
using namespace std;
int main(){
float broj = 3.14;
float *pok_broj = &broj;
*pok_broj = 1337;
cout << broj;
char cekaj;
cin >> cekaj;
system(PAUSE);
return 0;
}
Izlaz:
1337
Time smo zakljuili da se izmeu pokazivaa i varijable na koju pokazuje stvara nekakva veza.
Recimo da smo se predomislili i elimo da pokaziva pokazuje na drugu adresu. Tu nipoto ne bismo
Programiranje C++
58
smjeli obrisati varijablu broj jer bi se stvorio pokaziva koji ne pokazuje na nita. Takve pokazivae
nazivamo nul-pokazivaima. Njima su se u C-u uglavnom ispitivale greke prilikom izvoenja.
3.Pokaziva pokazuje na drugu varijablu:
#include <iostream>
using namespace std;
int main()
{
float broj = 3.14;
float drugiBroj = 192.12;
float *pok_broj = &broj;
*pok_broj = 13.37;
pok_broj = &drugiBroj;
*pok_broj = 73.31;
cout << "Prvi broj = " << broj << endl << "Drugi broj = " << drugiBroj << endl;
char cekaj;
cin >> cekaj;
system(PAUSE);
return 0;
}
Izlaz:
Prvi broj = 13.37
Drugi broj = 73.31
Ovim smo se izvukli od nepotrebnog kreiranja novog pokazivaa ve smo mu samo promjenili sadraj tj.
adresu na koju pokazuje. Kao to moete vidjeti prilikom mjenjanja adrese nismo stavljali znak * jer
nismo mijenjali varijablu na koju pokaziva pokazuje, ve smo mijenjali sadraj pokazivaa.
/* <KORISNO> */
Znak * predstavlja vrijednost varijable na koju pokaziva pokazuje, a bez znaka * pristupamo adresi na
koju pokaziva pokazuje.
4. Pokaziva moemo interpretirati kao varijablu koja sadri heksadecimalnu adresu neke druge
varijable.
#include <iostream>
using namespace std;
int main()
{
float broj = 3.14;
float *pok_broj = &broj;
*pok_broj = 13.37;
cout << "Vrijednost varijable na koju pokazujem = " << *pok_broj << endl << "Adresa varijable na
koju pokazujem = " << pok_broj << endl;
char cekaj;
cin >> cekaj;
return 0;
system(PAUSE);
}
Izlaz:
Vrijednost varijable na koju pokazujem = 13.37
Adresa varijable na koju pokazujem = 0x22ff44
Programiranje C++
59
Reference su u biti varijable vrlo sline pokazivaima, ali daleko jednostavnije. U C-u nisu postojale pa
su nove i za C programere.
Programiranje C++
60
Sada neemo koristiti brojanu varijablu (isto da vidite da se pokazivai i reference mogu primjeniti na
sve tipove podataka).
Evo primjera:
string ime = "Pero";
string &ref_ime = ime;
Stvorili smo referencu na varijablu ime. Reference su vrlo jednostavne za shvatiti, a pedstavljaju drugo
ime varijable. Sada moemo jednostavno mjenjati vrijednost varijable ime ovako:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
string ime = "Pero";
string &ref_ime = ime;
ref_ime = "Marko";
cout << ime;
char cekaj;
cin >> cekaj;
return 0;
system (PAUSE);
}
Izlaz:
Marko
Kao to vidite program e ispisati "Marko". Ve moete primjetiti da ne morate misliti na nikakve
zvjezdice, ve samo prilikom deklariranja varijable stavite znak & uz ime reference.