際際滷

際際滷Share a Scribd company logo
C++ RADNA SKRIPTA
STR.1 AUTOR: ILIJA MRENICA, ING.EL.
INSTALACIJA RAZVOJNOG OKRU貼ENJA DEV-C++
Duplim klikom mi邸a na program dev cpp dem c++ pokrenuti instalaciju. Odabrati engleski
jezik i pritisnuti I Agree. Odabrati punu instalaciju sa Full. Ostalo sve ii sa OK i Next.
POKRETANJE PRVOG PROGRAMA HELLO WORLD
Nakon instalacije razvojnog okru転enja Dev-C++ potrebno je napisati svoj prvi program
邸to je za veinu programera na svijetu bio Hello World:
#include <iostream>
using namespace std;
main() {
cout<<"Hello World!!!"<<endl;
}
Idemo sa File->New->Source File unijeti gornji tekst, koristiti Copy-Paste alat. Radi
preglednosti i kasnije lak邸e upotrebe programe snimiti u poseban direktorij nazvan C++ na
podatkovnoj particiji hard diska (npr. D). Potrebno je namjestiti izlazni direktorij na D/C++ u
varijablama okoline: Tools/Environment Options/Files&Dir/User's Default Directory mora
biti D:C++.
Zatim je program potrebno kompajlirati 邸to e odraditi Dev-C++ pritiskom na Ctrl+F9.
Kompajler je generirao helloworld.exe tj. izvr邸ni programski fajl kojeg moramo
pokrenuti, a da bi to uradili moramo se nalaziti u na邸em direktoriju D:C++ unutar Windows
konzole.
Pokrenuti Command Prompt sa /Start->All Programs->Accesories->Command Prompt/
Windows konzolu s kojom emo testirati napisane programe. Jo邸 samo treba nauiti kako doi
do programa koristei DOS komande. Sa CD.. se izlazi iz nekog direktorija, a sa D: npr. ulazi
na D particiju hard diska. DIR komanda e izlistati sve 邸to se nalazi u nekom direktoriju, a sa
CD ime direktorija emo ui u isti. Nakon 邸to smo do邸li do na邸eg direktorija D:C++
potrebno je pokrenuti program tako 邸to emo upisati ime programa npr. helloworld i pritisnuti
ENTER. Dolazak na D:C++helloworld ide na sljedei nain u Command Promptu (nakon
svake komande pritisnuti ENTER):
d:
cd c++
helloworld
Ako je program ispisao redak sa Hello World!!! znai da je sve postavljeno kako treba i da
mo転emo poeti sa programiranjem. Prozor Command Prompt ostaviti ukljuen dok god se
programira i testiraju programi.
Programski kod mora biti pregledan i po転eljno je dodati 邸to tanije komentare nakon linija
koda tako da program mogu razumjeti i drugi, a i sam autor nakon nekog vremena. Komentari
se dodaju sa dvije kose linije //. Sve nakon toga u istom redu kompajler ignori邸e. Du転i
komentari koji zauzimaju vi邸e redaka poinju se sa /*, a zavr邸avaju sa */. Sad emo
iskomentarisati programski kod helloworld u cilju njegovog obja邸njenja:
#include <iostream>
using namespace std; /* ukljuivanje koda biblioteke
standardnih ulazno-izlaznih funkcija u na邸 program */
main() { // uvijek pozivamo glavnu funkciju main
cout<<"Hello World!!!"<<endl; // endl za novi red
/* ispis poruke na ekran kori邸tenjem funkcije cout koja se
nalazi u biblioteci iostream.h, endl oznaava kraj linije */
} // uvijek zatvaramo glavnu funkciju main
C++ RADNA SKRIPTA
STR.2 AUTOR: ILIJA MRENICA, ING.EL.
PROGRAM ZA SABIRANJE DVA BROJA
Uradiemo jednostavan program za sabiranje dva cijela broja x+y=z. Od korisnika emo
tra転iti da unese x pa zatim y i ispisaemo na ekranu rezultat kao z. Kod je sljedei:
#include <iostream>
using namespace std;
main() {
int x, y, z;
cout << "Unesite x!" << endl;
cin >> x;
cout << endl;
cout << "Unesite y!" << endl;
cin >> y;
cout << endl;
z = x + y;
cout << "Zbir z=" << z << "." << endl << endl;
}
Prvo smo ukljuili iostream koja sadr転ava gotove funkcije za unos podataka sa tastature i
ispis podataka na ekran. Zatim smo deklarirali tri varijable x,y i z kao integer (cijeli
broj). Potom od korisnika tra転imo da unese x koju sa cin funkcijom dodjeljujemo varijabli
x. Sa funkcijom endl pravimo jedan red razmaka i tra転imo od korisnika da unese y, te se
stvar ponavlja. U retku z=x+y pridru転ili smo varijabli z zbir varijabli x i y te emo je zatim
ispisati na ekran. Zapamtite: = je operator pridru転ivanja, a ne jednakosti !!!
Obratiti pa転nju na sintaksu za ispis: cout<<"Zbir z="<<z<<"."<<endl; kako se
kombinira poruka u slovima pod navodnicima "poruka"sa varijablom iz programa unutar
znakova za manje i vee << varijabla >>. Vrlo jednostavno mo転emo kombinirati
jedne sa drugim unosei razmake i znakove interpunkcije.
DOMAA ZADAA
Za domau zadau instalirati Dev-C++ razvojno okru転enje. Program je besplatan i mo転e se
skinuti na www.bloodshed.net. Zatim podesiti kompajler te napisati i pokrenuti program
helloworld u obliku hellotvojeime. Nakon toga uraditi par programa koji obavljaju osnovne
raunske operacije nad cjelim brojevima koje su prethodno zatra転ili od korisnika da ih unesu i
ispisuju rezultat na ekranu. Ispis mora sadr転avati kombinaciju poruke i varijabli te mora biti
uredan.
UKLJUIVANJE MAKRODEFINICIJA
Makro je rije ije sve pojave u izvornom tekstu programa pretprocesor zamjenjuje
specificiranim nizom rijei, npr:
#define Pi 3.14 // nema ; na kraju !!!
e svaki Pi u programu zamjeniti sa vrijedno邸u 3.14. Ovo je vrlo znaajna mogunost
pretprocesora koja nam omoguuje da neke definirane ili konstantne vrijednosti u programu
mo転emo zamjeniti na jednom mjestu, u samom zaglavlju programa, tako da ih ne moramo
mjenjati na svakom mjestu u kodu gdje se pojavljuju. Definisani makro se mo転e ukinuti tako
da nakon naredbe #undef Pi kompajler ne pridodaje vi邸e Pi vrijednost 3.14.
C++ RADNA SKRIPTA
STR.3 AUTOR: ILIJA MRENICA, ING.EL.
NAREDBE U C++ ZA RAUNANJE MATEMATIKIH OPERACIJA
Ako se koriste druge osim osnovne 4 matematike operacije (+ - / *) i operator
modulus (%) u program potrebno je ukljuiti biblioteku matematikih funkcija cmath.
Uradiemo jednostavan program za stepenovanje broja tj. baze x sa eksponentom y,
programski kod je sljedei: pow(x,y) gdje je x baza, a y eksponent.
#include <iostream>
#include <cmath>
using namespace std;
main() {
float x, y;
cout << "Unesite bazu:" << endl;
cin >> x;
cout << "Unesite exponent:" << endl;
cin >> y;
x = pow(x, y);
cout << "Rezultat je: " << x << . << endl;
}
Napomena: Koristite take umjesto zareza kad unosite vrijednosti u program.
DOMAA ZADAA:
1. Matematike izraze napisati u obliku prihvatljivom za C++:
a) 1
)( 
= n
b
a
y
b) 1
23
2

+

+
=
c
ab
b
dax
y
c) b
x
x
x
ax
y +
+
++

=
)sin(2
)84exp(
3
5
2. Ispitati rad modulus (%) operatora uvr邸tavanjem sljedeih izraza u program:
a) 9%2
b) 1%2
c) 4%2
C++ RADNA SKRIPTA
STR.4 AUTOR: ILIJA MRENICA, ING.EL.
OPERATORI
U C++ izrazi igraju va転nu ulogu pa C++defini邸e vei broj operatora od veine drugih jezika.
Operatori obavljaju operacije nad operandima, i mogu biti sljedeeg tipa:
Aritmetiki
+ (sabiranje) - (oduzimanje) * (mno転enje) /(djeljenje)
% (operator modulus daje ostatak pri djeljenju, npr. 9%2 e dati 1)
Relacioni
> >= < <=
= = (jednako) != (nije jednako)
Logiki
p q AND
p&&q
OR
p||q
NOT
!p
0 0 0 0 1
0 1 0 1 1
1 0 0 1 0
1 1 1 1 0
Bitski (operatori nad bitovima)
& AND
| OR
^ XOR
~ komplement
>> pomjeranje udesno
<< pomjeranje ulijevo
Inkrement i dekrement
++a ili a++ za inkrement (uveanje za 1 ili a+1)
--a ili a-- za dekrement (umanjenje za 1 ili a-1)
C++ RADNA SKRIPTA
STR.5 AUTOR: ILIJA MRENICA, ING.EL.
NAREDBE U C++ ZA GRANANJE TOKA PROGRAMA
if
Naredba if omoguava uvjetno grananje toka programa ovisno o tome da li je ili nije
zadovoljen uvjet naveden iza kljune rijei if. Najjednostavniji oblik naredbe za uvjetno
grananje je:
if (logiki izraz)
{
blok naredbi;
}
Ako je vrijednost izraza iza rijei if logika istina (true), izvodi se blok naredbi koje
slijede iza izraza. U protivnom se taj blok preskae i izvo単enje nastavlja od prve naredbe iza
bloka. Na primjer:
if (a<0)
{
cout << Broj a je negativan! << endl;
}
Ako 転elimo da se neovisno o rezultatu izraza u if uvjetu izvode dva nezavisna programska
dijela, primjeniemo if  else oblik uvjetnog grananja:
if (logiki izraz)
{
blok naredbi;
}
else
{
blok naredbi;
}
Kod ovog bloka, ako izraz u if uvjetu daje kao rezultat logiku istinu izve邸e se prvi blok
naredbi. Po zavr邸etku bloka, izvo単enje programa se nastavlja iza else bloka. Ako izraz daje
logiku neistinu (false) preskae se prvi blok iza if i izvr邸ava se onaj pod else nakon
ega program nastavlja izvo単enje naredbi koje slijede.
Zadatak: Napisati program koji e ispitati da li je une邸eni broj cijeli broj manji od nule,
jednak nuli ili vei od nule, te rezultat kao poruku ispisati na ekran.
if  else if - else
Blokovi if mogu se nadovezivati na sljedei nain:
if (prvi logiki izraz)
{prvi blok naredbi}
else if (drugi logiki izraz)
{drugi blok naredbi}
C++ RADNA SKRIPTA
STR.6 AUTOR: ILIJA MRENICA, ING.EL.
else if (trei logiki izraz)
{trei blok naredbi}
...
else {zadnji blok naredbi}
Ilustriraemo upotrebu ove strukture primjerom u kojem tra転imo kakvi su korijeni kvadratne
jednaine ispitivanjem diskriminante:
#include <iostream>
using namespace std;
int main()
{
float a,b,c;
cout << Unesite koeficijente kvadratne jednaine:
<< endl;
cout << a=;
cin >> a;
cout << b=;
cin >> b;
cout << c=;
cin >> c;
float D=b*b-4*a*c; // odre単ivanje diskriminante
cout << Jednaina ima ; // ispis prvog dijela poruke
/* ispis drugog dijela poruke ovisno o uvjetu koji
diskriminanta ispunjava */
if (D==0)
{cout << dvostruki realni korijen. << endl;}
else if (D>0)
{cout << dva realna korijena. << endl;}
else
{cout << dva kompleksna korijena. << endl;}
}
for petlja
Tamo gdje se ponavljaju djelovi koda koristimo for petlju u sljedeem obliku:
for (poetni izraz; uvjet izvo単enja; izraz prirasta)
{blok naredbi}
Poetni izraz je naje邸e poetna vrijednost brojaa, uvjet izvo単enja mora biti istinit da bi se
izveo blok naredbi, a na kraju se rauna izraz prirasta tj. poveanje ili smanjenje brojaa.
Ilustriraemo upotrebu for petlje kroz sljedei primjer, program koji rauna sumu svih
C++ RADNA SKRIPTA
STR.7 AUTOR: ILIJA MRENICA, ING.EL.
parnih brojeva od 1 do nekog broja N ukljuujui i taj broj. Da li je broj paran ili ne
odre単ujemo tako 邸to cijeli broj i ispitujemo sa aritmetikim operatorom modulus % za ostatak
pri djeljenju sa 2 koji mora biti 0 za svaki paran broj.
PROGRAM KOJI UITAVA PRIRODNI BROJ N I RAUNA SUMU
SVIH PARNIH BROJEVA OD 1 DO N UKLJUUJUI I N
#include <iostream>
using namespace std;
main()
{
int N, i;
int k=0; /* varijabla k se mora inicijalizirati, u
protivnom mo転emo imati gre邸ku u programu */
cout << "Unesite N!" << endl;
cin >> N;
cout << endl;
for(i=0; i<=N; i++)
{
if(i%2==0) {k=k+i;}
/* ako je ostatak pri djeljenju sa 2 jednak 0 broj je paran pa
uveavamo rezultat k za i - broj koji se obra単uje u tom
momentu u petlji; rezultat k ispisijemo na izlasku iz petlje
*/
}
cout << "Rezultat je: " << k << "." << endl;
}
do-while petlja
- se koristi za izvr邸avanje odre単enog bloka naredbi sve dok se odre単eni uslov ne izvr邸i,
sintaksa je:
do
{
blok naredbi;
}
while (logiki izraz);
DOMAA ZADAA: Napisati program koji e tra転iti od korisnika da pogodi neko slovo i
ispisivati tu poruku na ekran sve dok korisnik ne pogodi to slovo. Ulazni podatak deklarirati
kao char x = 'b'; gdje je b slovo koje se poga単a. Kad korisnik pogodi slovo ispisati
prikladnu poruku.
switch  case struktura za kontrolu toka programa
- koristi se umjesto ifelse if-else strukture u situacijama gdje postoji vi邸e od tri
razliita rezultata ispitivanog logikog iskaza. Openita sintaksa izgleda ovako:
switch (cjelobrojni_izraz) {
case: konstantan_izraz1: // prvi blok naredbi
case: konstantan_izraz2: // drugi blok naredbi
C++ RADNA SKRIPTA
STR.8 AUTOR: ILIJA MRENICA, ING.EL.
break;
case: konstantan_izraz3:
case: konstantan_izraz4: // trei blok naredbi
break;
default: // etvrti blok naredbi
}
Upotrebu switch-case strukture vidjeemo u sljedeem programu:
// mjesec.cpp
#include <iostream>
using namespace std;
main () {
int mjesec;
cout << "Unesite broj 1 do 12 za mjesec: ";
cin >> mjesec;
switch (mjesec) {
case 1:{cout<<"januar";
break;}
case 2:{cout<<"februar";
break;}
case 3:{cout<<"mart";
break;}
case 4:{cout<<"april";
break;}
case 5:{cout<<"maj";
break;}
case 6:{cout<<"juni";
break;}
case 7:{cout<<"juli";
break;}
case 8:{cout<<"avgust";
break;}
case 9:{cout<<"septembar";
break;}
case 10:{cout<<"oktobar";
break;}
case 11:{cout<<"novembar";
break;}
case 12:{cout<<"decembar";
break;}
default:{cout<<"pogresan unos";
break;}
}
}
C++ RADNA SKRIPTA
STR.9 AUTOR: ILIJA MRENICA, ING.EL.
UGRA丹ENI ILI OSNOVNI TIPOVI PODATAKA U C++
Tip Znaenje irina u bajtima Opseg
char Karakter (slovo) 1 -128 do 127
int Cijeli broj 2 -32768 do 32767
long int Cijeli broj 4 -2147483648 do
2147483648
float Broj u pokretnom
zarezu (7 decimala)
4 3.4e-38 do 3.4e+38
double Brojevi u pokretnom
zarezu dvostruke
preciznosti (15 dec.)
8 -1.7e-308 do
1.7e+308
long double Brojevi u pokretnom
zarezu dvostruke
preciznosti (18 dec.)
10 3.4e-4932 do
3.4e+4932
Ako je prije tipa navedemo unsigned npr. unsigned char to znai da radimo samo sa
pozitivnim brojevima pa se opseg poveava za 2 puta jer bit za predznak koristimo za prikaz
podatka, pa bi npr. unsigned char imao opseg 0-255 umjesto -128 do 127.
Da ispitamo koliko memorije zauzimaju pojedini tipovi na raunaru, 邸to zavisi od arhitekture
raunara koji koristimo, primjeniemo unarni operator sizeof(). Na primjer:
float f;
cout << sizeof(f) << endl; // du転ina tipa float
ZADATAK: Ispitati sve osnovne tipove podatka koristei sizeof().
C++ RADNA SKRIPTA
STR.10 AUTOR: ILIJA MRENICA, ING.EL.
OPERATOR DODJELE TIPA static_cast
Probajmo sljedei jednostavni primjer djeljenja dva broja izvesti na raunaru:
#include <iostream>
using namespace std;
main() {
int x = 1;
int y = 2;
float z = x / y;
cout << z << endl;
}
Oekujemo da e program ispisati taan rezultat 0.5 jer smo isti deklarirali kao float,
me単utim program je podjelio dva cijela broja prije ispisa rezultata i pridru転io cjelobrojni
rezultat tipu float pa je isti 0 邸to je netano, tako da smo ustvari zakasnili sa deklaracijom.
U ovom sluaju bilo je potrebno promijeniti tip podatka varijabli koje e se dijeliti iz int u
float 邸to inimo sa operatorom dodjele tipa static_cast na sljedei nain:
#include <iostream>
using namespace std;
main() {
int x = 1;
int y = 2;
float z = static_cast<float>(x) /
static_cast<float>(y);
cout << z << endl;
}
Opi oblik primjene operatora static_cast je: static_cast<tip>(izraz).
Bitno je napomenuti da varijable nakon upotrebe ovog operatora u programu i dalje ostaju
tipa int. Ako ovaj operator vi邸e puta koristimo u programu nad istim podacima znai da
tipovi podataka za te varijable nisu dobro projektovane u tom programu.
C++ RADNA SKRIPTA
STR.11 AUTOR: ILIJA MRENICA, ING.EL.
UGNJE貼丹AVANJE FOR PETLJI
Ugnje転単ene for petlje se vrlo esto koriste pa emo pokazati kako na sljedeem primjeru
programa koji rauna i ispisuje tablicu mno転enja:
#include <iostream>
#include <iomanip>
using namespace std;
main() {
for (int red=1; red<=10; red++) {
for (int kolona=1; kolona<=10; kolona++)
cout << setw(5) << red*kolona;
cout << endl;
}
}
Za svaku vrijednost vanjskog brojaa red izvodi se cjelokupna unutra邸nja petlja kolona :
red=1;
kolona=1, 2, 3, 4, 5, 6, 7, 8, 9, 10.
red=2;
kolona=1, 2, 3, 4, 5, 6, 7, 8, 9, 10.
itd...
U program je ukljuena biblioteka iomanip koja posjeduje kori邸tenu funkciju setw() za
razmak izme単u brojeva pri ispisu, parametar unutar zagrada odre単uje 邸irinu razmaka.
C++ RADNA SKRIPTA
STR.12 AUTOR: ILIJA MRENICA, ING.EL.
FUNKCIJE U C++
Funkcije se prave da se izbjegne ponavljanje koda i smanji mogunost gre邸ke. Funkcije
omoguavaju da se program razbije na vi邸e manjih djelova. Programski kod postaje
razumljiviji i pregledniji. Opi oblik deklaracije ili zaglavlja funkcije (prototip) je sljedei:
izlazni_tip ime_funkcije(parametar1, parametar2, ...)
Funkcija se deklari邸e poslije zaglavlja #include i definicija #define, a prije poziva
funkcije main(). Tijelo funkcije se stavlja ispod zavr邸etka funkcije main }. Uvo単enjem
funkcija programi dobijaju sljedei oblik:
#include ...
#define ...
deklaracija funkcija koje e se pozivati u main
main{
... programski kod
poziv funkcije ...
... programski kod
... programski kod
poziv funkcije, itd...
}
definicije (tijela) funkcija koje su se pozivale u main
U definiciji funkcije je sadr転an programski kod (tijelo) funkcije, ono izgleda ovako:
izlazni_tip ime_funkcije(parametar1, parametar2, ...)
{
deklaracije lokalnih varijabli;
linije koda koji se izvr邸ava unutar funkcije;
return izlazna_varijabla;
}
Ako nema izlazne varijable izlazni tip je definiran kao void, a return poziv na kraju se ne
navodi. Funkcije se mogu pozivati po vrijednosti i po referenci. Varijable unutar funkcije su
lokalne za funkciju 邸to znai da nisu vidljive van funkcije, nastaju pozivom funkcije, a nestaju
kad se izvr邸i return.
// Primjer poziva funkcije po vrijednosti  faktorijel
#include <iostream>
using namespace std;
double fakt(int n); // deklaracija funkcije
// mo転e samo int bez n ali je razumljivije ovako
main() {
int n;
cout << "Unesite broj manji od 171:" << endl;
cin >> n; // 171 ve unosi preljev za tip double
cout << "Faktorijel od " << n << " je: " << fakt(n) << endl;
} // fakt(n) je poziv funkcije, predan joj je une邸eni n
C++ RADNA SKRIPTA
STR.13 AUTOR: ILIJA MRENICA, ING.EL.
double fakt(int n) { // tijelo funkcije
double rezultat=1; // obavezna inicijalizacija
for (int i=1; i<=n; i++)
{rezultat*=i;}
return rezultat; // rezultat izlazi iz funkcije
}
S obzirom da su varijable unutar svake funkcije lokalne nemogue je npr. napraviti funkciju
za zamjenu dva broja pozivom po vrijednosti. Varijable e se zamjeniti unutar funkcije, a u
programu e ostati iste. U ovom sluaju moramo koristiti poziv funkcije po referenci. Ova se
funkcija esto koristi kao pomona funkcija u algoritmima sortiranja kad je potrebno
zamijeniti pozicije dva elementa u nizu koji se sortira:
void zamjeni(int& x, int& y) // x i y su ulazni parametri
{
int z=x; // x stavljam u privremeni spremnik z
x=y; // y stavljam u x
y=z; // z stavljam u y i zamjena je izvr邸ena
}
& (ampersand) iza tipa varijable znai da se funkciji proslje単uje adresa varijable. Ovdje je
izlazni tip void jer funkcija ne vraa ni邸ta, ona samo vr邸i zamjenu ve postojeeg.
ZADATAK: Za sljedei program napisati funkciju koja e odrediti srednju vrijednost za
une邸ena tri decimalna broja:
#include <iostream>
using namespace std;
float srednja3(float a, float b, float c);
main () {
float a, b, c;
cout << "Koristite tacke umjesto zareza!" << endl;
cout << "Unesite a: " << endl;
cin >> a;
cout << "Unesite b: " << endl;
cin >> b;
cout << "Unesite c: " << endl;
cin >> c;
cout << "Srednja vrijednost je: " << srednja3(a, b, c);
}
DOMAA ZADAA: Koristei funkciju za faktorijel napisati program za raunanje
binominalnog koeficijenta prema sljedeoj formuli:
C++ RADNA SKRIPTA
STR.14 AUTOR: ILIJA MRENICA, ING.EL.
IZRADA MENIJA PROGRAMA
Za邸to se koristi atoi() funkcija pri pravljenju menija programa? Probaemo
funkcionalnost ovog menija bez upotrebe atoi funkcije u situaciji kad korisnik umjesto
broja unese slovo.
#include <iostream>
using namespace std;
main() {
int meni; // bri邸e se poslije
//char opcija[40];
cout<<"MENI PROGRAMA"<<endl;
cout<<"1.Kocka"<<endl;
cout<<"2.Valjak"<<endl;
cout<<"3.Kugla"<<endl;
cout<<"4.Izlaz iz programa"<<endl;
cout<<"Izaberite opciju: ";
cin>>meni; // bri邸e se poslije
//cin>>opcija;
//int meni=atoi(opcija);
switch(meni) {
case 1: cout<<"Kocka";
break;
case 2: cout<<"Valjak";
break;
case 3: cout<<"Kugla";
break;
case 0: exit(0);
default: exit(0); // ni邸ta nas ne ko邸ta ostaviti default...
}
}
Kako radi atoi() funkcija? Pretvara string (niz karaktera) u cijeli broj ako je na poetku
stringa cijeli broj, a ako nije izlaz je 0. Testirajte je na sljedee stringove: kd, 1gfd, 125ftz...
#include <iostream>
using namespace std;
main()
{
char s[20];
cout << "Unesite string za atoi(): ";
cin >> s;
cout << endl;
cout << "Pretvorena vrijednost stringa a je " << atoi(s);
}
Upotrebom atoi() funkcije ne mo転e se desiti da umjesto potrebne cjelobrojne vrijednosti u
switch-case izrazu dobijemo karakter. U kombinaciji sa case 0: exit(0); svaki
pogre邸an unos ili izabrana 0 osigurava izlaz iz programa.
C++ RADNA SKRIPTA
STR.15 AUTOR: ILIJA MRENICA, ING.EL.
ZAJEDNIKI PROJEKT GEOMETRIJSKA TIJELA
Znaaj funkcija mo転emo vidjeti u ovom jednostavnom projektu koji e napraviti grupa
uenika. Potrebno je napraviti zaglavlje geot.h u kojem se nalazi zbirka funkcija za izraun
povr邸ine i zapremine raznih geometrijskih tijela npr. kocka, prizma, kugla, itd (vidi
logaritamske tablice). U glavnom programu napraviti meni (izbornik) koji e na poetku
izvo単enja programa ponuditi korisniku spisak geometrijskih tijela pod rednim brojevima, npr:
1. Kocka
2. Prizma
3. Kugla, itd...
0. Izlaz
Meni rje邸iti strukturom switch-case. Odabir se vr邸i upisivanjem broja tijela (1, 2, 3, itd),
za default sluaj i case 0 koristiti funkciju exit(0). Koristiti funkciju atoi() pri
izradi menija za osiguranje od pogre邸nog unosa. Meni staviti u beskonanu petlju. Unutar
pojedinih sluaja u meniju pozivaju se odgovarajue funkcije za to tijelo, npr. case 1:
Kocka();. Svaka funkcija tra転i od korisnika potrebne varijable i vr邸i izraun, te ispisuje
rezultate.
2 uenika:
U Dev-C++ napraviti novi projekt, izabrati Console Application, ime projekta staviti
gtijela, projekt sadr転i gtijela.cpp i geot.h. Sve funkcije prikupiti i staviti u
zaglavlje geot.h, uraditi meni unutar gtijela.cpp. Na kraju projekta kompajlirati i
testirati program za svako pojedino tijelo.
Ostali uenici:
Izabrati jedno geometrijsko tijelo (osim kocke) iz logaritamskih tablica i uraditi za njega
odgovarajue funkcije za izraun povr邸ine i zapremine. Funkcije imenovati na sljedei nain,
npr. za kocku: Kocka. Ulazni tip podataka za sve funkcije je void jer funkcije ne vraaju
ni邸ta u glavni program, pozivaju se bez argumenata, znai i argumenti su tipa void.
// gtijela.cpp
#include <iostream>
#include "geot.h"
/* navodnici govore kompajleru da trazi tu datoteku u istom
direktoriju gdje je gtijela.cpp - na邸 radni direktorij C++ */
using namespace std;
extern void Kocka(void);
extern void Valjak(void);
extern void Kugla(void);
/* ovdje se dalje dodaju prototipovi funkcija, extern govori
kompajleru da je funkcija definirana u nekoj vanjskoj
datoteci,
kod nas je to geot.h */
main () {
char s[20];
cout << "PROGRAM ZA IZRACUN POVRSINE I ZAPREMINE
GEOMETRIJSKIH TIJELA" << endl;
cout << "1. Kocka" << endl;
cout << "2. Valjak" << endl;
cout << "3. Kugla" << endl;
cout << "0. Izlaz" << endl;
C++ RADNA SKRIPTA
STR.16 AUTOR: ILIJA MRENICA, ING.EL.
// ovdje se dalje dodaje listing geometrijskih tijela
for(;;){ // meni je unutar beskonane petlje
cout << "Izaberite opciju: ";
cin >> s;
int meni=atoi(s);
switch (meni) {
case 1: Kocka();
break;
case 2: Valjak();
break;
case 3: Kugla();
break;
case 0: exit(0);
break;
// ovdje se dalje samo dodaju opcije menija...
default: exit(0);
}
}
}
// geot.h
#include <cmath>
using namespace std;
void Kocka(void){
float a;
cout<<"Unesite duzinu stranice a: ";
cin>>a;
float P = 6 * a *a;
float Z = pow(a, 3);
cout<<"Povrsina kocke je: "<<P<<endl;
cout<<"Zapremina kocke je: "<<Z<<endl;
}
void Valjak(void){cout<<"Funkcija-za-valjak"<<endl;}
void Kugla(void) {cout<<"Funkcija-za-kuglu"<<endl;}
// ovdje se dalje samo dodaju funkcije za druga tijela...
C++ RADNA SKRIPTA
STR.17 AUTOR: ILIJA MRENICA, ING.EL.
JEDNODIMENZIONALNI NIZOVI U C++
Niz (engl. array) je lista promjenljivih istog tipa na koje se mo転e ukazivati preko istog imena.
Pojedinana promjenjljiva u nizu naziva se elemenat niza. Op邸ta forma deklaracije
jednodimenzionalnog niza u C++ je:
tip_promjenljive ime_niza[veliina_niza];
Jednodimenzionalni niz od 5 cijelih brojeva deklarisaemo na sljedei nain:
int niz[5]; // niz sadr転i 5 cijelih brojeva
U C/C++ je definisano da prvi elemenat u nizu ima indeks 0, 邸to znai da zadnji elemenat
prethodno definiranog niza mora imati indeks 4. Indeksi su bitni zbog toga 邸to pristupamo
pojedinanim elementima niza pomou njih. Npr, ako 転elimo da dodjelimo vrijednost 56
treem elementu na邸eg niza uradiemo to pomou njegovog indeksa:
niz[2] = 56;
Niz se mo転e i inicijalizirati pri pisanju programa koristei sljedeu sintaksu:
int niz[] = {15, 6, 12, 3, -1};
gdje su unutar vitiastih zagrada inicijalizirane poetne vrijednosti niza.
Ako nisu inicijalizirani u toku pisanja programa, prethodno deklarisani nizovi se upisuju u
toku izvo単enja programa pomou tastature kori邸tenjem cin funkcije i for petlje. Analogno
tome, cout  for bi se koristio za ispis niza.
Sljedei programski kod omoguava upis i ispis niza od 8 cijelih brojeva kori邸tenjem gore
navedenog:
// Ime programa: nizunos.cpp
#include <iostream>
#include <iomanip>
using namespace std;
#define N 8 // maksimalni broj elemenata niza
int main()
{
int i, A[N];
cout << "Unesite " << N << "-clani niz: " << endl;
cout<<"(nakon svakog broja pritisnite ENTER)" << endl;
for (i=0; i<N; i++) {cin >> A[i];} // upis niza
cout << "Uneseni niz je: ";
for (i=0; i<N; i++) {cout << A[i] << setw(5);} // ispis
cout<<endl;
}
C++ RADNA SKRIPTA
STR.18 AUTOR: ILIJA MRENICA, ING.EL.
PROGRAM KOJI UTVR丹UJE DA LI JE NIZ OPADAJUI ILI RASTUI
// Ime programa: kakavjeniz.cpp
#include <iostream>
using namespace std;
main()
{
int niz[]={1,2,5,11}; // niz je inicijaliziran
if(niz[1]>niz[0]) // ako je drugi lan vei od prvog
{cout<<"Niz je rastuci."<<endl;}
else
cout<<"Niz je opadajuci.";
}
Promijenite vrijednosti elemenata niza da niz bude opadajui i ispitajte ispravnost programa.
DOMAA ZADAA
a) Napraviti program koji e tra転iti od korisnika da unese 5-lani niz cijelih brojeva.
b) Ispisati taj niz s lijeva na desno i obrnuto.
c) Zamjeniti prvi i zadnji lan niza kori邸tenjem gotove funkcije zamjeni.
DODJELJIVANJE DINAMIKE MEMORIJE
Do sada su nizovi kojima smo radili bili inicijalizirani ili je njihova veliina morala biti
odre単ena u toku pisanja programa. C++ naravno ima mogunost dodjeljivanja dinamike
memorije u toku samog izvo単enja programa 邸to emo vidjeti u sljedeem primjeru gdje se
koristi kljuna rije new za alokaciju dinamike memorije i koristi se pokaziva (engl.
pointer) *:
// Ime programa: alokacija.cpp
#include <iostream>
#include <iomanip>
using namespace std;
main()
{
int n;
cout << Unesite duzinu niza: << endl;
cin >> n;
int *niz = new int[n]; // kreiranje niza
for (int i=0; i<n; i++) // upis
{
cout << Unesi broj:;
cin >> niz[i];
}
cout << Uneseni niz je:  << endl << endl; // ispis
for (int i=0; i<n; i++) {cout << niz[i] << setw(5);}
cout<<endl;
}
C++ RADNA SKRIPTA
STR.19 AUTOR: ILIJA MRENICA, ING.EL.
SORTIRANJE ELEMENATA NIZA
Za sortiranje elemenata nekog niza koristiemo najjednostavniji algoritam selection-sort koji
se jo邸 naziva i izbor uzastopnih minimuma, a sastoji se iz sljedeih koraka:
1. Prona単i najmanji elemenat u nizu i zamjeni ga sa prvim
2. Prona単i drugi najmanji element u nizu i zamjeni ga sa drugim
3. To ponavljaj dok se niz ne sortira
// Ime programa: ssort.cpp
#include <iostream>
#include <iomanip>
using namespace std;
void zamjeni(int& x, int& y); // funkcija za zamjenu
void ssort(int niz[], int n); // funkcija selection-sort
main()
{
int n;
cout << "Unesite duzinu niza:" << endl;
cin >> n;
int *niz = new int[n];
for (int i=0; i<n; i++){
cout << "Unesite element niza: ";
cin >> niz[i];
}
cout << "Uneseni niz je: ";
for (int i=0; i<n; i++) {
cout << niz[i] << setw(5);
}
cout<<endl;
ssort(niz, n);
cout << "Sortirani niz je: ";
for (int x=0; x<n; x++){
cout<<niz[x]<<setw(5);
}
}
void zamjeni(int& x, int& y) // funkcija uzima dvije adrese
{
int z=x; x=y; y=z;
}
void ssort(int niz[], int n)
// funkcija uzima niz i duzinu tog niza
{
int x, y;
for (x=0; x<n; x++)
for (y=x+1; y<n; y++)
if (niz[x]>niz[y]) zamjeni(niz[x], niz[y]);
/* unutar funkcije ssort poziva se funkcija zamjeni, a u
argumentu poziva ne koristimo & nego dajemo dva elementa niza
*/
}

More Related Content

What's hot (20)

丐 - 于仗仂亳 亰舒 仆舒舒仍亠仆 仗亠亞仂于仂 于 8 从仍舒
丐 - 于仗仂亳 亰舒 仆舒舒仍亠仆 仗亠亞仂于仂 于 8 从仍舒丐 - 于仗仂亳 亰舒 仆舒舒仍亠仆 仗亠亞仂于仂 于 8 从仍舒
丐 - 于仗仂亳 亰舒 仆舒舒仍亠仆 仗亠亞仂于仂 于 8 从仍舒
nad_and
Chapitre iv entr辿es sorties et busChapitre iv entr辿es sorties et bus
Chapitre iv entr辿es sorties et bus
Sana Aroussi
Resume theorique-m106-partie1-1401-620cd8a160396 (1)Resume theorique-m106-partie1-1401-620cd8a160396 (1)
Resume theorique-m106-partie1-1401-620cd8a160396 (1)
MounirAlaoui4
Compiler Design Introduction
Compiler Design IntroductionCompiler Design Introduction
Compiler Design Introduction
Kuppusamy P
ROCm and Distributed Deep Learning on Spark and TensorFlow
ROCm and Distributed Deep Learning on Spark and TensorFlowROCm and Distributed Deep Learning on Spark and TensorFlow
ROCm and Distributed Deep Learning on Spark and TensorFlow
Databricks
Embedded C - Day 1
Embedded C - Day 1Embedded C - Day 1
Embedded C - Day 1
Emertxe Information Technologies Pvt Ltd
Kvadratna jednacina i kvadratna funkcija - Despotovi Katarina
Kvadratna jednacina i kvadratna funkcija - Despotovi KatarinaKvadratna jednacina i kvadratna funkcija - Despotovi Katarina
Kvadratna jednacina i kvadratna funkcija - Despotovi Katarina
milenajeretin
TP 1 ACCESSTP 1 ACCESS
TP 1 ACCESS
Chingongou 足
Introduction syst竪me d'exploitation-chapitre 1-cours 1Introduction syst竪me d'exploitation-chapitre 1-cours 1
Introduction syst竪me d'exploitation-chapitre 1-cours 1
AitAddiHajar
Osnove programiranja nc cnc glodalica
Osnove programiranja nc cnc glodalicaOsnove programiranja nc cnc glodalica
Osnove programiranja nc cnc glodalica
Jasna Kepi-Hrvi
Why no auto negotiation for fiber optic media?
Why no auto negotiation for fiber optic media?Why no auto negotiation for fiber optic media?
Why no auto negotiation for fiber optic media?
MapYourTech
Hardverske komponente PC racunara
Hardverske komponente PC racunaraHardverske komponente PC racunara
Hardverske komponente PC racunara
zornik
Zdravlje i tehnologija
Zdravlje i tehnologijaZdravlje i tehnologija
Zdravlje i tehnologija
Jelena Arsenovic
Th辿orie de normalisation-base de donn辿esTh辿orie de normalisation-base de donn辿es
Th辿orie de normalisation-base de donn辿es
Yassine Badri
TD sur  les fonctions en PythonTD sur  les fonctions en Python
TD sur les fonctions en Python
ABDESSELAM ARROU
Uvod u programiranje i programski jezik Python
Uvod u programiranje i programski jezik PythonUvod u programiranje i programski jezik Python
Uvod u programiranje i programski jezik Python
Amar Kalabi
GDB Rocks!
GDB Rocks!GDB Rocks!
GDB Rocks!
Kent Chen
Python - osnove
Python - osnovePython - osnove
Python - osnove
Zoran Vuliki
algorithme tronc commun lyc辿ealgorithme tronc commun lyc辿e
algorithme tronc commun lyc辿e
Kayl Mido
Informatica di base
Informatica di baseInformatica di base
Informatica di base
Francesco Zoino
丐 - 于仗仂亳 亰舒 仆舒舒仍亠仆 仗亠亞仂于仂 于 8 从仍舒
丐 - 于仗仂亳 亰舒 仆舒舒仍亠仆 仗亠亞仂于仂 于 8 从仍舒丐 - 于仗仂亳 亰舒 仆舒舒仍亠仆 仗亠亞仂于仂 于 8 从仍舒
丐 - 于仗仂亳 亰舒 仆舒舒仍亠仆 仗亠亞仂于仂 于 8 从仍舒
nad_and
Chapitre iv entr辿es sorties et busChapitre iv entr辿es sorties et bus
Chapitre iv entr辿es sorties et bus
Sana Aroussi
Resume theorique-m106-partie1-1401-620cd8a160396 (1)Resume theorique-m106-partie1-1401-620cd8a160396 (1)
Resume theorique-m106-partie1-1401-620cd8a160396 (1)
MounirAlaoui4
Compiler Design Introduction
Compiler Design IntroductionCompiler Design Introduction
Compiler Design Introduction
Kuppusamy P
ROCm and Distributed Deep Learning on Spark and TensorFlow
ROCm and Distributed Deep Learning on Spark and TensorFlowROCm and Distributed Deep Learning on Spark and TensorFlow
ROCm and Distributed Deep Learning on Spark and TensorFlow
Databricks
Kvadratna jednacina i kvadratna funkcija - Despotovi Katarina
Kvadratna jednacina i kvadratna funkcija - Despotovi KatarinaKvadratna jednacina i kvadratna funkcija - Despotovi Katarina
Kvadratna jednacina i kvadratna funkcija - Despotovi Katarina
milenajeretin
TP 1 ACCESSTP 1 ACCESS
TP 1 ACCESS
Chingongou 足
Introduction syst竪me d'exploitation-chapitre 1-cours 1Introduction syst竪me d'exploitation-chapitre 1-cours 1
Introduction syst竪me d'exploitation-chapitre 1-cours 1
AitAddiHajar
Osnove programiranja nc cnc glodalica
Osnove programiranja nc cnc glodalicaOsnove programiranja nc cnc glodalica
Osnove programiranja nc cnc glodalica
Jasna Kepi-Hrvi
Why no auto negotiation for fiber optic media?
Why no auto negotiation for fiber optic media?Why no auto negotiation for fiber optic media?
Why no auto negotiation for fiber optic media?
MapYourTech
Hardverske komponente PC racunara
Hardverske komponente PC racunaraHardverske komponente PC racunara
Hardverske komponente PC racunara
zornik
Th辿orie de normalisation-base de donn辿esTh辿orie de normalisation-base de donn辿es
Th辿orie de normalisation-base de donn辿es
Yassine Badri
TD sur  les fonctions en PythonTD sur  les fonctions en Python
TD sur les fonctions en Python
ABDESSELAM ARROU
Uvod u programiranje i programski jezik Python
Uvod u programiranje i programski jezik PythonUvod u programiranje i programski jezik Python
Uvod u programiranje i programski jezik Python
Amar Kalabi
GDB Rocks!
GDB Rocks!GDB Rocks!
GDB Rocks!
Kent Chen
Python - osnove
Python - osnovePython - osnove
Python - osnove
Zoran Vuliki
algorithme tronc commun lyc辿ealgorithme tronc commun lyc辿e
algorithme tronc commun lyc辿e
Kayl Mido

Similar to C++ radna skripta (20)

C++ funkcije
C++ funkcijeC++ funkcije
C++ funkcije
Stefan Djukic
3.
3.3.
3.
Brankica Joki
2. razgranate ii dio
2. razgranate ii dio2. razgranate ii dio
2. razgranate ii dio
Brankica Joki
Pascal abc
Pascal abcPascal abc
Pascal abc
nihadc
4. while do while
4. while do while4. while do while
4. while do while
Brankica Joki
Globalne i lokalne varijable
Globalne i lokalne varijableGlobalne i lokalne varijable
Globalne i lokalne varijable
Adriana Padovan
Osnove programiranja u Pythonu
Osnove programiranja u PythonuOsnove programiranja u Pythonu
Osnove programiranja u Pythonu
Vlatka Pavi
11_itanje, ispisivanje i ispitivanje znakova.ppsx
11_itanje, ispisivanje i ispitivanje znakova.ppsx11_itanje, ispisivanje i ispitivanje znakova.ppsx
11_itanje, ispisivanje i ispitivanje znakova.ppsx
Dzoja
Primjer 3.1. do primjera 3.8
Primjer 3.1. do primjera 3.8Primjer 3.1. do primjera 3.8
Primjer 3.1. do primjera 3.8
Pogled kroz prozor
Rp1 predavanja 02 - Koncepti objektno orijentiranog programiranja
Rp1 predavanja 02 - Koncepti objektno orijentiranog programiranjaRp1 predavanja 02 - Koncepti objektno orijentiranog programiranja
Rp1 predavanja 02 - Koncepti objektno orijentiranog programiranja
Goran Igaly
Csharp08
Csharp08Csharp08
Csharp08
admira_versace
Uvod u racunalne mreze
Uvod u racunalne mrezeUvod u racunalne mreze
Uvod u racunalne mreze
Nikola Damjanovi
RP1 - Funkcije za rad s dinamikim poljem. Funkcije lanice
RP1 - Funkcije za rad s dinamikim poljem. Funkcije laniceRP1 - Funkcije za rad s dinamikim poljem. Funkcije lanice
RP1 - Funkcije za rad s dinamikim poljem. Funkcije lanice
Goran Igaly
2. razgranate ii dio
2. razgranate ii dio2. razgranate ii dio
2. razgranate ii dio
Brankica Joki
Pascal abc
Pascal abcPascal abc
Pascal abc
nihadc
4. while do while
4. while do while4. while do while
4. while do while
Brankica Joki
Globalne i lokalne varijable
Globalne i lokalne varijableGlobalne i lokalne varijable
Globalne i lokalne varijable
Adriana Padovan
Osnove programiranja u Pythonu
Osnove programiranja u PythonuOsnove programiranja u Pythonu
Osnove programiranja u Pythonu
Vlatka Pavi
11_itanje, ispisivanje i ispitivanje znakova.ppsx
11_itanje, ispisivanje i ispitivanje znakova.ppsx11_itanje, ispisivanje i ispitivanje znakova.ppsx
11_itanje, ispisivanje i ispitivanje znakova.ppsx
Dzoja
Primjer 3.1. do primjera 3.8
Primjer 3.1. do primjera 3.8Primjer 3.1. do primjera 3.8
Primjer 3.1. do primjera 3.8
Pogled kroz prozor
Rp1 predavanja 02 - Koncepti objektno orijentiranog programiranja
Rp1 predavanja 02 - Koncepti objektno orijentiranog programiranjaRp1 predavanja 02 - Koncepti objektno orijentiranog programiranja
Rp1 predavanja 02 - Koncepti objektno orijentiranog programiranja
Goran Igaly
RP1 - Funkcije za rad s dinamikim poljem. Funkcije lanice
RP1 - Funkcije za rad s dinamikim poljem. Funkcije laniceRP1 - Funkcije za rad s dinamikim poljem. Funkcije lanice
RP1 - Funkcije za rad s dinamikim poljem. Funkcije lanice
Goran Igaly

C++ radna skripta

  • 1. C++ RADNA SKRIPTA STR.1 AUTOR: ILIJA MRENICA, ING.EL. INSTALACIJA RAZVOJNOG OKRU貼ENJA DEV-C++ Duplim klikom mi邸a na program dev cpp dem c++ pokrenuti instalaciju. Odabrati engleski jezik i pritisnuti I Agree. Odabrati punu instalaciju sa Full. Ostalo sve ii sa OK i Next. POKRETANJE PRVOG PROGRAMA HELLO WORLD Nakon instalacije razvojnog okru転enja Dev-C++ potrebno je napisati svoj prvi program 邸to je za veinu programera na svijetu bio Hello World: #include <iostream> using namespace std; main() { cout<<"Hello World!!!"<<endl; } Idemo sa File->New->Source File unijeti gornji tekst, koristiti Copy-Paste alat. Radi preglednosti i kasnije lak邸e upotrebe programe snimiti u poseban direktorij nazvan C++ na podatkovnoj particiji hard diska (npr. D). Potrebno je namjestiti izlazni direktorij na D/C++ u varijablama okoline: Tools/Environment Options/Files&Dir/User's Default Directory mora biti D:C++. Zatim je program potrebno kompajlirati 邸to e odraditi Dev-C++ pritiskom na Ctrl+F9. Kompajler je generirao helloworld.exe tj. izvr邸ni programski fajl kojeg moramo pokrenuti, a da bi to uradili moramo se nalaziti u na邸em direktoriju D:C++ unutar Windows konzole. Pokrenuti Command Prompt sa /Start->All Programs->Accesories->Command Prompt/ Windows konzolu s kojom emo testirati napisane programe. Jo邸 samo treba nauiti kako doi do programa koristei DOS komande. Sa CD.. se izlazi iz nekog direktorija, a sa D: npr. ulazi na D particiju hard diska. DIR komanda e izlistati sve 邸to se nalazi u nekom direktoriju, a sa CD ime direktorija emo ui u isti. Nakon 邸to smo do邸li do na邸eg direktorija D:C++ potrebno je pokrenuti program tako 邸to emo upisati ime programa npr. helloworld i pritisnuti ENTER. Dolazak na D:C++helloworld ide na sljedei nain u Command Promptu (nakon svake komande pritisnuti ENTER): d: cd c++ helloworld Ako je program ispisao redak sa Hello World!!! znai da je sve postavljeno kako treba i da mo転emo poeti sa programiranjem. Prozor Command Prompt ostaviti ukljuen dok god se programira i testiraju programi. Programski kod mora biti pregledan i po転eljno je dodati 邸to tanije komentare nakon linija koda tako da program mogu razumjeti i drugi, a i sam autor nakon nekog vremena. Komentari se dodaju sa dvije kose linije //. Sve nakon toga u istom redu kompajler ignori邸e. Du転i komentari koji zauzimaju vi邸e redaka poinju se sa /*, a zavr邸avaju sa */. Sad emo iskomentarisati programski kod helloworld u cilju njegovog obja邸njenja: #include <iostream> using namespace std; /* ukljuivanje koda biblioteke standardnih ulazno-izlaznih funkcija u na邸 program */ main() { // uvijek pozivamo glavnu funkciju main cout<<"Hello World!!!"<<endl; // endl za novi red /* ispis poruke na ekran kori邸tenjem funkcije cout koja se nalazi u biblioteci iostream.h, endl oznaava kraj linije */ } // uvijek zatvaramo glavnu funkciju main
  • 2. C++ RADNA SKRIPTA STR.2 AUTOR: ILIJA MRENICA, ING.EL. PROGRAM ZA SABIRANJE DVA BROJA Uradiemo jednostavan program za sabiranje dva cijela broja x+y=z. Od korisnika emo tra転iti da unese x pa zatim y i ispisaemo na ekranu rezultat kao z. Kod je sljedei: #include <iostream> using namespace std; main() { int x, y, z; cout << "Unesite x!" << endl; cin >> x; cout << endl; cout << "Unesite y!" << endl; cin >> y; cout << endl; z = x + y; cout << "Zbir z=" << z << "." << endl << endl; } Prvo smo ukljuili iostream koja sadr転ava gotove funkcije za unos podataka sa tastature i ispis podataka na ekran. Zatim smo deklarirali tri varijable x,y i z kao integer (cijeli broj). Potom od korisnika tra転imo da unese x koju sa cin funkcijom dodjeljujemo varijabli x. Sa funkcijom endl pravimo jedan red razmaka i tra転imo od korisnika da unese y, te se stvar ponavlja. U retku z=x+y pridru転ili smo varijabli z zbir varijabli x i y te emo je zatim ispisati na ekran. Zapamtite: = je operator pridru転ivanja, a ne jednakosti !!! Obratiti pa転nju na sintaksu za ispis: cout<<"Zbir z="<<z<<"."<<endl; kako se kombinira poruka u slovima pod navodnicima "poruka"sa varijablom iz programa unutar znakova za manje i vee << varijabla >>. Vrlo jednostavno mo転emo kombinirati jedne sa drugim unosei razmake i znakove interpunkcije. DOMAA ZADAA Za domau zadau instalirati Dev-C++ razvojno okru転enje. Program je besplatan i mo転e se skinuti na www.bloodshed.net. Zatim podesiti kompajler te napisati i pokrenuti program helloworld u obliku hellotvojeime. Nakon toga uraditi par programa koji obavljaju osnovne raunske operacije nad cjelim brojevima koje su prethodno zatra転ili od korisnika da ih unesu i ispisuju rezultat na ekranu. Ispis mora sadr転avati kombinaciju poruke i varijabli te mora biti uredan. UKLJUIVANJE MAKRODEFINICIJA Makro je rije ije sve pojave u izvornom tekstu programa pretprocesor zamjenjuje specificiranim nizom rijei, npr: #define Pi 3.14 // nema ; na kraju !!! e svaki Pi u programu zamjeniti sa vrijedno邸u 3.14. Ovo je vrlo znaajna mogunost pretprocesora koja nam omoguuje da neke definirane ili konstantne vrijednosti u programu mo転emo zamjeniti na jednom mjestu, u samom zaglavlju programa, tako da ih ne moramo mjenjati na svakom mjestu u kodu gdje se pojavljuju. Definisani makro se mo転e ukinuti tako da nakon naredbe #undef Pi kompajler ne pridodaje vi邸e Pi vrijednost 3.14.
  • 3. C++ RADNA SKRIPTA STR.3 AUTOR: ILIJA MRENICA, ING.EL. NAREDBE U C++ ZA RAUNANJE MATEMATIKIH OPERACIJA Ako se koriste druge osim osnovne 4 matematike operacije (+ - / *) i operator modulus (%) u program potrebno je ukljuiti biblioteku matematikih funkcija cmath. Uradiemo jednostavan program za stepenovanje broja tj. baze x sa eksponentom y, programski kod je sljedei: pow(x,y) gdje je x baza, a y eksponent. #include <iostream> #include <cmath> using namespace std; main() { float x, y; cout << "Unesite bazu:" << endl; cin >> x; cout << "Unesite exponent:" << endl; cin >> y; x = pow(x, y); cout << "Rezultat je: " << x << . << endl; } Napomena: Koristite take umjesto zareza kad unosite vrijednosti u program. DOMAA ZADAA: 1. Matematike izraze napisati u obliku prihvatljivom za C++: a) 1 )( = n b a y b) 1 23 2 + + = c ab b dax y c) b x x x ax y + + ++ = )sin(2 )84exp( 3 5 2. Ispitati rad modulus (%) operatora uvr邸tavanjem sljedeih izraza u program: a) 9%2 b) 1%2 c) 4%2
  • 4. C++ RADNA SKRIPTA STR.4 AUTOR: ILIJA MRENICA, ING.EL. OPERATORI U C++ izrazi igraju va転nu ulogu pa C++defini邸e vei broj operatora od veine drugih jezika. Operatori obavljaju operacije nad operandima, i mogu biti sljedeeg tipa: Aritmetiki + (sabiranje) - (oduzimanje) * (mno転enje) /(djeljenje) % (operator modulus daje ostatak pri djeljenju, npr. 9%2 e dati 1) Relacioni > >= < <= = = (jednako) != (nije jednako) Logiki p q AND p&&q OR p||q NOT !p 0 0 0 0 1 0 1 0 1 1 1 0 0 1 0 1 1 1 1 0 Bitski (operatori nad bitovima) & AND | OR ^ XOR ~ komplement >> pomjeranje udesno << pomjeranje ulijevo Inkrement i dekrement ++a ili a++ za inkrement (uveanje za 1 ili a+1) --a ili a-- za dekrement (umanjenje za 1 ili a-1)
  • 5. C++ RADNA SKRIPTA STR.5 AUTOR: ILIJA MRENICA, ING.EL. NAREDBE U C++ ZA GRANANJE TOKA PROGRAMA if Naredba if omoguava uvjetno grananje toka programa ovisno o tome da li je ili nije zadovoljen uvjet naveden iza kljune rijei if. Najjednostavniji oblik naredbe za uvjetno grananje je: if (logiki izraz) { blok naredbi; } Ako je vrijednost izraza iza rijei if logika istina (true), izvodi se blok naredbi koje slijede iza izraza. U protivnom se taj blok preskae i izvo単enje nastavlja od prve naredbe iza bloka. Na primjer: if (a<0) { cout << Broj a je negativan! << endl; } Ako 転elimo da se neovisno o rezultatu izraza u if uvjetu izvode dva nezavisna programska dijela, primjeniemo if else oblik uvjetnog grananja: if (logiki izraz) { blok naredbi; } else { blok naredbi; } Kod ovog bloka, ako izraz u if uvjetu daje kao rezultat logiku istinu izve邸e se prvi blok naredbi. Po zavr邸etku bloka, izvo単enje programa se nastavlja iza else bloka. Ako izraz daje logiku neistinu (false) preskae se prvi blok iza if i izvr邸ava se onaj pod else nakon ega program nastavlja izvo単enje naredbi koje slijede. Zadatak: Napisati program koji e ispitati da li je une邸eni broj cijeli broj manji od nule, jednak nuli ili vei od nule, te rezultat kao poruku ispisati na ekran. if else if - else Blokovi if mogu se nadovezivati na sljedei nain: if (prvi logiki izraz) {prvi blok naredbi} else if (drugi logiki izraz) {drugi blok naredbi}
  • 6. C++ RADNA SKRIPTA STR.6 AUTOR: ILIJA MRENICA, ING.EL. else if (trei logiki izraz) {trei blok naredbi} ... else {zadnji blok naredbi} Ilustriraemo upotrebu ove strukture primjerom u kojem tra転imo kakvi su korijeni kvadratne jednaine ispitivanjem diskriminante: #include <iostream> using namespace std; int main() { float a,b,c; cout << Unesite koeficijente kvadratne jednaine: << endl; cout << a=; cin >> a; cout << b=; cin >> b; cout << c=; cin >> c; float D=b*b-4*a*c; // odre単ivanje diskriminante cout << Jednaina ima ; // ispis prvog dijela poruke /* ispis drugog dijela poruke ovisno o uvjetu koji diskriminanta ispunjava */ if (D==0) {cout << dvostruki realni korijen. << endl;} else if (D>0) {cout << dva realna korijena. << endl;} else {cout << dva kompleksna korijena. << endl;} } for petlja Tamo gdje se ponavljaju djelovi koda koristimo for petlju u sljedeem obliku: for (poetni izraz; uvjet izvo単enja; izraz prirasta) {blok naredbi} Poetni izraz je naje邸e poetna vrijednost brojaa, uvjet izvo単enja mora biti istinit da bi se izveo blok naredbi, a na kraju se rauna izraz prirasta tj. poveanje ili smanjenje brojaa. Ilustriraemo upotrebu for petlje kroz sljedei primjer, program koji rauna sumu svih
  • 7. C++ RADNA SKRIPTA STR.7 AUTOR: ILIJA MRENICA, ING.EL. parnih brojeva od 1 do nekog broja N ukljuujui i taj broj. Da li je broj paran ili ne odre単ujemo tako 邸to cijeli broj i ispitujemo sa aritmetikim operatorom modulus % za ostatak pri djeljenju sa 2 koji mora biti 0 za svaki paran broj. PROGRAM KOJI UITAVA PRIRODNI BROJ N I RAUNA SUMU SVIH PARNIH BROJEVA OD 1 DO N UKLJUUJUI I N #include <iostream> using namespace std; main() { int N, i; int k=0; /* varijabla k se mora inicijalizirati, u protivnom mo転emo imati gre邸ku u programu */ cout << "Unesite N!" << endl; cin >> N; cout << endl; for(i=0; i<=N; i++) { if(i%2==0) {k=k+i;} /* ako je ostatak pri djeljenju sa 2 jednak 0 broj je paran pa uveavamo rezultat k za i - broj koji se obra単uje u tom momentu u petlji; rezultat k ispisijemo na izlasku iz petlje */ } cout << "Rezultat je: " << k << "." << endl; } do-while petlja - se koristi za izvr邸avanje odre単enog bloka naredbi sve dok se odre単eni uslov ne izvr邸i, sintaksa je: do { blok naredbi; } while (logiki izraz); DOMAA ZADAA: Napisati program koji e tra転iti od korisnika da pogodi neko slovo i ispisivati tu poruku na ekran sve dok korisnik ne pogodi to slovo. Ulazni podatak deklarirati kao char x = 'b'; gdje je b slovo koje se poga単a. Kad korisnik pogodi slovo ispisati prikladnu poruku. switch case struktura za kontrolu toka programa - koristi se umjesto ifelse if-else strukture u situacijama gdje postoji vi邸e od tri razliita rezultata ispitivanog logikog iskaza. Openita sintaksa izgleda ovako: switch (cjelobrojni_izraz) { case: konstantan_izraz1: // prvi blok naredbi case: konstantan_izraz2: // drugi blok naredbi
  • 8. C++ RADNA SKRIPTA STR.8 AUTOR: ILIJA MRENICA, ING.EL. break; case: konstantan_izraz3: case: konstantan_izraz4: // trei blok naredbi break; default: // etvrti blok naredbi } Upotrebu switch-case strukture vidjeemo u sljedeem programu: // mjesec.cpp #include <iostream> using namespace std; main () { int mjesec; cout << "Unesite broj 1 do 12 za mjesec: "; cin >> mjesec; switch (mjesec) { case 1:{cout<<"januar"; break;} case 2:{cout<<"februar"; break;} case 3:{cout<<"mart"; break;} case 4:{cout<<"april"; break;} case 5:{cout<<"maj"; break;} case 6:{cout<<"juni"; break;} case 7:{cout<<"juli"; break;} case 8:{cout<<"avgust"; break;} case 9:{cout<<"septembar"; break;} case 10:{cout<<"oktobar"; break;} case 11:{cout<<"novembar"; break;} case 12:{cout<<"decembar"; break;} default:{cout<<"pogresan unos"; break;} } }
  • 9. C++ RADNA SKRIPTA STR.9 AUTOR: ILIJA MRENICA, ING.EL. UGRA丹ENI ILI OSNOVNI TIPOVI PODATAKA U C++ Tip Znaenje irina u bajtima Opseg char Karakter (slovo) 1 -128 do 127 int Cijeli broj 2 -32768 do 32767 long int Cijeli broj 4 -2147483648 do 2147483648 float Broj u pokretnom zarezu (7 decimala) 4 3.4e-38 do 3.4e+38 double Brojevi u pokretnom zarezu dvostruke preciznosti (15 dec.) 8 -1.7e-308 do 1.7e+308 long double Brojevi u pokretnom zarezu dvostruke preciznosti (18 dec.) 10 3.4e-4932 do 3.4e+4932 Ako je prije tipa navedemo unsigned npr. unsigned char to znai da radimo samo sa pozitivnim brojevima pa se opseg poveava za 2 puta jer bit za predznak koristimo za prikaz podatka, pa bi npr. unsigned char imao opseg 0-255 umjesto -128 do 127. Da ispitamo koliko memorije zauzimaju pojedini tipovi na raunaru, 邸to zavisi od arhitekture raunara koji koristimo, primjeniemo unarni operator sizeof(). Na primjer: float f; cout << sizeof(f) << endl; // du転ina tipa float ZADATAK: Ispitati sve osnovne tipove podatka koristei sizeof().
  • 10. C++ RADNA SKRIPTA STR.10 AUTOR: ILIJA MRENICA, ING.EL. OPERATOR DODJELE TIPA static_cast Probajmo sljedei jednostavni primjer djeljenja dva broja izvesti na raunaru: #include <iostream> using namespace std; main() { int x = 1; int y = 2; float z = x / y; cout << z << endl; } Oekujemo da e program ispisati taan rezultat 0.5 jer smo isti deklarirali kao float, me単utim program je podjelio dva cijela broja prije ispisa rezultata i pridru転io cjelobrojni rezultat tipu float pa je isti 0 邸to je netano, tako da smo ustvari zakasnili sa deklaracijom. U ovom sluaju bilo je potrebno promijeniti tip podatka varijabli koje e se dijeliti iz int u float 邸to inimo sa operatorom dodjele tipa static_cast na sljedei nain: #include <iostream> using namespace std; main() { int x = 1; int y = 2; float z = static_cast<float>(x) / static_cast<float>(y); cout << z << endl; } Opi oblik primjene operatora static_cast je: static_cast<tip>(izraz). Bitno je napomenuti da varijable nakon upotrebe ovog operatora u programu i dalje ostaju tipa int. Ako ovaj operator vi邸e puta koristimo u programu nad istim podacima znai da tipovi podataka za te varijable nisu dobro projektovane u tom programu.
  • 11. C++ RADNA SKRIPTA STR.11 AUTOR: ILIJA MRENICA, ING.EL. UGNJE貼丹AVANJE FOR PETLJI Ugnje転単ene for petlje se vrlo esto koriste pa emo pokazati kako na sljedeem primjeru programa koji rauna i ispisuje tablicu mno転enja: #include <iostream> #include <iomanip> using namespace std; main() { for (int red=1; red<=10; red++) { for (int kolona=1; kolona<=10; kolona++) cout << setw(5) << red*kolona; cout << endl; } } Za svaku vrijednost vanjskog brojaa red izvodi se cjelokupna unutra邸nja petlja kolona : red=1; kolona=1, 2, 3, 4, 5, 6, 7, 8, 9, 10. red=2; kolona=1, 2, 3, 4, 5, 6, 7, 8, 9, 10. itd... U program je ukljuena biblioteka iomanip koja posjeduje kori邸tenu funkciju setw() za razmak izme単u brojeva pri ispisu, parametar unutar zagrada odre単uje 邸irinu razmaka.
  • 12. C++ RADNA SKRIPTA STR.12 AUTOR: ILIJA MRENICA, ING.EL. FUNKCIJE U C++ Funkcije se prave da se izbjegne ponavljanje koda i smanji mogunost gre邸ke. Funkcije omoguavaju da se program razbije na vi邸e manjih djelova. Programski kod postaje razumljiviji i pregledniji. Opi oblik deklaracije ili zaglavlja funkcije (prototip) je sljedei: izlazni_tip ime_funkcije(parametar1, parametar2, ...) Funkcija se deklari邸e poslije zaglavlja #include i definicija #define, a prije poziva funkcije main(). Tijelo funkcije se stavlja ispod zavr邸etka funkcije main }. Uvo単enjem funkcija programi dobijaju sljedei oblik: #include ... #define ... deklaracija funkcija koje e se pozivati u main main{ ... programski kod poziv funkcije ... ... programski kod ... programski kod poziv funkcije, itd... } definicije (tijela) funkcija koje su se pozivale u main U definiciji funkcije je sadr転an programski kod (tijelo) funkcije, ono izgleda ovako: izlazni_tip ime_funkcije(parametar1, parametar2, ...) { deklaracije lokalnih varijabli; linije koda koji se izvr邸ava unutar funkcije; return izlazna_varijabla; } Ako nema izlazne varijable izlazni tip je definiran kao void, a return poziv na kraju se ne navodi. Funkcije se mogu pozivati po vrijednosti i po referenci. Varijable unutar funkcije su lokalne za funkciju 邸to znai da nisu vidljive van funkcije, nastaju pozivom funkcije, a nestaju kad se izvr邸i return. // Primjer poziva funkcije po vrijednosti faktorijel #include <iostream> using namespace std; double fakt(int n); // deklaracija funkcije // mo転e samo int bez n ali je razumljivije ovako main() { int n; cout << "Unesite broj manji od 171:" << endl; cin >> n; // 171 ve unosi preljev za tip double cout << "Faktorijel od " << n << " je: " << fakt(n) << endl; } // fakt(n) je poziv funkcije, predan joj je une邸eni n
  • 13. C++ RADNA SKRIPTA STR.13 AUTOR: ILIJA MRENICA, ING.EL. double fakt(int n) { // tijelo funkcije double rezultat=1; // obavezna inicijalizacija for (int i=1; i<=n; i++) {rezultat*=i;} return rezultat; // rezultat izlazi iz funkcije } S obzirom da su varijable unutar svake funkcije lokalne nemogue je npr. napraviti funkciju za zamjenu dva broja pozivom po vrijednosti. Varijable e se zamjeniti unutar funkcije, a u programu e ostati iste. U ovom sluaju moramo koristiti poziv funkcije po referenci. Ova se funkcija esto koristi kao pomona funkcija u algoritmima sortiranja kad je potrebno zamijeniti pozicije dva elementa u nizu koji se sortira: void zamjeni(int& x, int& y) // x i y su ulazni parametri { int z=x; // x stavljam u privremeni spremnik z x=y; // y stavljam u x y=z; // z stavljam u y i zamjena je izvr邸ena } & (ampersand) iza tipa varijable znai da se funkciji proslje単uje adresa varijable. Ovdje je izlazni tip void jer funkcija ne vraa ni邸ta, ona samo vr邸i zamjenu ve postojeeg. ZADATAK: Za sljedei program napisati funkciju koja e odrediti srednju vrijednost za une邸ena tri decimalna broja: #include <iostream> using namespace std; float srednja3(float a, float b, float c); main () { float a, b, c; cout << "Koristite tacke umjesto zareza!" << endl; cout << "Unesite a: " << endl; cin >> a; cout << "Unesite b: " << endl; cin >> b; cout << "Unesite c: " << endl; cin >> c; cout << "Srednja vrijednost je: " << srednja3(a, b, c); } DOMAA ZADAA: Koristei funkciju za faktorijel napisati program za raunanje binominalnog koeficijenta prema sljedeoj formuli:
  • 14. C++ RADNA SKRIPTA STR.14 AUTOR: ILIJA MRENICA, ING.EL. IZRADA MENIJA PROGRAMA Za邸to se koristi atoi() funkcija pri pravljenju menija programa? Probaemo funkcionalnost ovog menija bez upotrebe atoi funkcije u situaciji kad korisnik umjesto broja unese slovo. #include <iostream> using namespace std; main() { int meni; // bri邸e se poslije //char opcija[40]; cout<<"MENI PROGRAMA"<<endl; cout<<"1.Kocka"<<endl; cout<<"2.Valjak"<<endl; cout<<"3.Kugla"<<endl; cout<<"4.Izlaz iz programa"<<endl; cout<<"Izaberite opciju: "; cin>>meni; // bri邸e se poslije //cin>>opcija; //int meni=atoi(opcija); switch(meni) { case 1: cout<<"Kocka"; break; case 2: cout<<"Valjak"; break; case 3: cout<<"Kugla"; break; case 0: exit(0); default: exit(0); // ni邸ta nas ne ko邸ta ostaviti default... } } Kako radi atoi() funkcija? Pretvara string (niz karaktera) u cijeli broj ako je na poetku stringa cijeli broj, a ako nije izlaz je 0. Testirajte je na sljedee stringove: kd, 1gfd, 125ftz... #include <iostream> using namespace std; main() { char s[20]; cout << "Unesite string za atoi(): "; cin >> s; cout << endl; cout << "Pretvorena vrijednost stringa a je " << atoi(s); } Upotrebom atoi() funkcije ne mo転e se desiti da umjesto potrebne cjelobrojne vrijednosti u switch-case izrazu dobijemo karakter. U kombinaciji sa case 0: exit(0); svaki pogre邸an unos ili izabrana 0 osigurava izlaz iz programa.
  • 15. C++ RADNA SKRIPTA STR.15 AUTOR: ILIJA MRENICA, ING.EL. ZAJEDNIKI PROJEKT GEOMETRIJSKA TIJELA Znaaj funkcija mo転emo vidjeti u ovom jednostavnom projektu koji e napraviti grupa uenika. Potrebno je napraviti zaglavlje geot.h u kojem se nalazi zbirka funkcija za izraun povr邸ine i zapremine raznih geometrijskih tijela npr. kocka, prizma, kugla, itd (vidi logaritamske tablice). U glavnom programu napraviti meni (izbornik) koji e na poetku izvo単enja programa ponuditi korisniku spisak geometrijskih tijela pod rednim brojevima, npr: 1. Kocka 2. Prizma 3. Kugla, itd... 0. Izlaz Meni rje邸iti strukturom switch-case. Odabir se vr邸i upisivanjem broja tijela (1, 2, 3, itd), za default sluaj i case 0 koristiti funkciju exit(0). Koristiti funkciju atoi() pri izradi menija za osiguranje od pogre邸nog unosa. Meni staviti u beskonanu petlju. Unutar pojedinih sluaja u meniju pozivaju se odgovarajue funkcije za to tijelo, npr. case 1: Kocka();. Svaka funkcija tra転i od korisnika potrebne varijable i vr邸i izraun, te ispisuje rezultate. 2 uenika: U Dev-C++ napraviti novi projekt, izabrati Console Application, ime projekta staviti gtijela, projekt sadr転i gtijela.cpp i geot.h. Sve funkcije prikupiti i staviti u zaglavlje geot.h, uraditi meni unutar gtijela.cpp. Na kraju projekta kompajlirati i testirati program za svako pojedino tijelo. Ostali uenici: Izabrati jedno geometrijsko tijelo (osim kocke) iz logaritamskih tablica i uraditi za njega odgovarajue funkcije za izraun povr邸ine i zapremine. Funkcije imenovati na sljedei nain, npr. za kocku: Kocka. Ulazni tip podataka za sve funkcije je void jer funkcije ne vraaju ni邸ta u glavni program, pozivaju se bez argumenata, znai i argumenti su tipa void. // gtijela.cpp #include <iostream> #include "geot.h" /* navodnici govore kompajleru da trazi tu datoteku u istom direktoriju gdje je gtijela.cpp - na邸 radni direktorij C++ */ using namespace std; extern void Kocka(void); extern void Valjak(void); extern void Kugla(void); /* ovdje se dalje dodaju prototipovi funkcija, extern govori kompajleru da je funkcija definirana u nekoj vanjskoj datoteci, kod nas je to geot.h */ main () { char s[20]; cout << "PROGRAM ZA IZRACUN POVRSINE I ZAPREMINE GEOMETRIJSKIH TIJELA" << endl; cout << "1. Kocka" << endl; cout << "2. Valjak" << endl; cout << "3. Kugla" << endl; cout << "0. Izlaz" << endl;
  • 16. C++ RADNA SKRIPTA STR.16 AUTOR: ILIJA MRENICA, ING.EL. // ovdje se dalje dodaje listing geometrijskih tijela for(;;){ // meni je unutar beskonane petlje cout << "Izaberite opciju: "; cin >> s; int meni=atoi(s); switch (meni) { case 1: Kocka(); break; case 2: Valjak(); break; case 3: Kugla(); break; case 0: exit(0); break; // ovdje se dalje samo dodaju opcije menija... default: exit(0); } } } // geot.h #include <cmath> using namespace std; void Kocka(void){ float a; cout<<"Unesite duzinu stranice a: "; cin>>a; float P = 6 * a *a; float Z = pow(a, 3); cout<<"Povrsina kocke je: "<<P<<endl; cout<<"Zapremina kocke je: "<<Z<<endl; } void Valjak(void){cout<<"Funkcija-za-valjak"<<endl;} void Kugla(void) {cout<<"Funkcija-za-kuglu"<<endl;} // ovdje se dalje samo dodaju funkcije za druga tijela...
  • 17. C++ RADNA SKRIPTA STR.17 AUTOR: ILIJA MRENICA, ING.EL. JEDNODIMENZIONALNI NIZOVI U C++ Niz (engl. array) je lista promjenljivih istog tipa na koje se mo転e ukazivati preko istog imena. Pojedinana promjenjljiva u nizu naziva se elemenat niza. Op邸ta forma deklaracije jednodimenzionalnog niza u C++ je: tip_promjenljive ime_niza[veliina_niza]; Jednodimenzionalni niz od 5 cijelih brojeva deklarisaemo na sljedei nain: int niz[5]; // niz sadr転i 5 cijelih brojeva U C/C++ je definisano da prvi elemenat u nizu ima indeks 0, 邸to znai da zadnji elemenat prethodno definiranog niza mora imati indeks 4. Indeksi su bitni zbog toga 邸to pristupamo pojedinanim elementima niza pomou njih. Npr, ako 転elimo da dodjelimo vrijednost 56 treem elementu na邸eg niza uradiemo to pomou njegovog indeksa: niz[2] = 56; Niz se mo転e i inicijalizirati pri pisanju programa koristei sljedeu sintaksu: int niz[] = {15, 6, 12, 3, -1}; gdje su unutar vitiastih zagrada inicijalizirane poetne vrijednosti niza. Ako nisu inicijalizirani u toku pisanja programa, prethodno deklarisani nizovi se upisuju u toku izvo単enja programa pomou tastature kori邸tenjem cin funkcije i for petlje. Analogno tome, cout for bi se koristio za ispis niza. Sljedei programski kod omoguava upis i ispis niza od 8 cijelih brojeva kori邸tenjem gore navedenog: // Ime programa: nizunos.cpp #include <iostream> #include <iomanip> using namespace std; #define N 8 // maksimalni broj elemenata niza int main() { int i, A[N]; cout << "Unesite " << N << "-clani niz: " << endl; cout<<"(nakon svakog broja pritisnite ENTER)" << endl; for (i=0; i<N; i++) {cin >> A[i];} // upis niza cout << "Uneseni niz je: "; for (i=0; i<N; i++) {cout << A[i] << setw(5);} // ispis cout<<endl; }
  • 18. C++ RADNA SKRIPTA STR.18 AUTOR: ILIJA MRENICA, ING.EL. PROGRAM KOJI UTVR丹UJE DA LI JE NIZ OPADAJUI ILI RASTUI // Ime programa: kakavjeniz.cpp #include <iostream> using namespace std; main() { int niz[]={1,2,5,11}; // niz je inicijaliziran if(niz[1]>niz[0]) // ako je drugi lan vei od prvog {cout<<"Niz je rastuci."<<endl;} else cout<<"Niz je opadajuci."; } Promijenite vrijednosti elemenata niza da niz bude opadajui i ispitajte ispravnost programa. DOMAA ZADAA a) Napraviti program koji e tra転iti od korisnika da unese 5-lani niz cijelih brojeva. b) Ispisati taj niz s lijeva na desno i obrnuto. c) Zamjeniti prvi i zadnji lan niza kori邸tenjem gotove funkcije zamjeni. DODJELJIVANJE DINAMIKE MEMORIJE Do sada su nizovi kojima smo radili bili inicijalizirani ili je njihova veliina morala biti odre単ena u toku pisanja programa. C++ naravno ima mogunost dodjeljivanja dinamike memorije u toku samog izvo単enja programa 邸to emo vidjeti u sljedeem primjeru gdje se koristi kljuna rije new za alokaciju dinamike memorije i koristi se pokaziva (engl. pointer) *: // Ime programa: alokacija.cpp #include <iostream> #include <iomanip> using namespace std; main() { int n; cout << Unesite duzinu niza: << endl; cin >> n; int *niz = new int[n]; // kreiranje niza for (int i=0; i<n; i++) // upis { cout << Unesi broj:; cin >> niz[i]; } cout << Uneseni niz je: << endl << endl; // ispis for (int i=0; i<n; i++) {cout << niz[i] << setw(5);} cout<<endl; }
  • 19. C++ RADNA SKRIPTA STR.19 AUTOR: ILIJA MRENICA, ING.EL. SORTIRANJE ELEMENATA NIZA Za sortiranje elemenata nekog niza koristiemo najjednostavniji algoritam selection-sort koji se jo邸 naziva i izbor uzastopnih minimuma, a sastoji se iz sljedeih koraka: 1. Prona単i najmanji elemenat u nizu i zamjeni ga sa prvim 2. Prona単i drugi najmanji element u nizu i zamjeni ga sa drugim 3. To ponavljaj dok se niz ne sortira // Ime programa: ssort.cpp #include <iostream> #include <iomanip> using namespace std; void zamjeni(int& x, int& y); // funkcija za zamjenu void ssort(int niz[], int n); // funkcija selection-sort main() { int n; cout << "Unesite duzinu niza:" << endl; cin >> n; int *niz = new int[n]; for (int i=0; i<n; i++){ cout << "Unesite element niza: "; cin >> niz[i]; } cout << "Uneseni niz je: "; for (int i=0; i<n; i++) { cout << niz[i] << setw(5); } cout<<endl; ssort(niz, n); cout << "Sortirani niz je: "; for (int x=0; x<n; x++){ cout<<niz[x]<<setw(5); } } void zamjeni(int& x, int& y) // funkcija uzima dvije adrese { int z=x; x=y; y=z; } void ssort(int niz[], int n) // funkcija uzima niz i duzinu tog niza { int x, y; for (x=0; x<n; x++) for (y=x+1; y<n; y++) if (niz[x]>niz[y]) zamjeni(niz[x], niz[y]); /* unutar funkcije ssort poziva se funkcija zamjeni, a u argumentu poziva ne koristimo & nego dajemo dva elementa niza */ }