You are on page 1of 14

Programiranje I-

Datoteka izvornog koda, nastavka cpp sadrži naredbe koje je napisao programer (izvorni kôd, engl.
source code). Izvorni kôd je, dakle, skup naredbi (program) čijim će se izvršenjem dobiti rješenje
postavljenog zadatka. Izvorni kod je moguće pisati u bilo kojem programu za uređivanje
teksta (engl. text editor).

Na računalu se može izvršiti samo strojni ili izvršni oblik (engl. executable) programa, pa se izvorni
kôd prije izvršavanja mora pretvoriti u izvršni. Pretvara se u dva koraka s pomoću programa
prevoditelja (engl. compiler) i povezivača (engl. linker).

Program prevoditelj
Program prevoditelj prevodi izvorni kôd iz simboličkog jezika visoke razine te provjerava sintaksu
napisanog izvornog kôda. Pod sintakstom se podrazumijevaju pravila pisanja naredbi, neka vrsta
"pravopisa" izvornog kôda. Pogriješke koje prevoditelj pronađe u vrijeme prevođenja (engl. compile-
time error) nazivaju se sintaktičke pogriješke. One nastaju zbog nepoštivanja pravila programskog
jezika, npr. pogrešno napisane naredbe. Ako ih prevoditelj pronađe, ispisat će poruke i upozorenja o
njima. Otkrivene pogrješke treba ispraviti pa ponovno pokrenuti program za prevođenje. Prevođenjem
nastaje datoteka objektnog kôda (engl. object code), nastavka obj. 
(Objektni kôd ne treba brkati s objektno usmjerenim programima iako im je naziv sličan!)

Program povezivač
Datoteka objektnog kôda ne može se izravno izvršiti na računalu. Da bi se stvorila datoteka izvršnog
koda treba datoteku objektnog koda povezati s postojećim datotekama u kojima se nalaze
pripremljene, gotove funkcije ili neki drugi potrebni dijelovi programa. Datoteke koje sadržavaju
pripremljene, prevedene funkcije nezivaju se biblioteke (engl. libraries).

Povezivanje u izvršni kôd zadatak je programa koji se naziva povezivač (engl. linker). Ako izvorni kôd
nije moguće povezati s raspoloživim bibliotekama nastaju pogrješke u vrijeme povezivanja (engl.
link-time errors).

Nakon otklanjanja pogrješki te vrste i uspješnog povezivanja nastaje izvršni oblik programa, izvršna
datoteka nastavka exe. U načelu, izvršnoj datoteci nisu potrebni nikakvi dodaci (izvorni program,
prevoditelj, povezivač, biblioteke, itd.) da bi se mogla izvršavati. Izvršna datoteka je konačni rezultat
izradbe programa.

Logičke pogriješke
Izvršna datoteka još uvijek ne jamči da će program uspješno raditi. Program treba višekratno
provjeriti s podacima za koje je unaprijed poznat krajnji rezultat. Moguće pogrješke otkrivene
provjerom nazivaju se pogreške pri izvođenju ili logičke pogrješke (engl. run-time errors) a uzrokuje ih
pogrješni algoritam na kojem se program temelji. Od svih navedenih pogrješaka najteže je otkriti i
ispraviti upravo logičke pogrješke jer su sadržane u algoritmu pa ih računalo i spomenuti programi ne
mogu otkriti jer računalo "ne zna" što zapravo čovjek želi.
 
Upozorenja
Osim pogrješaka, prevoditelj i povezivač mogu javiti i upozorenja (engl. warnings). Upozorenja ne
sprečavaju prevođenje, povezivanje i izvršavanje programa. Upozorenja ukazuju na dijelove
programa koji u određenim okolnostima mogu prouzročiti pogrješku pa je stoga najbolje ukloniti
njihove uzroke.
 
Projekt
Dakle, da bi se stvorila izvršna datoteka programa C++ potrebno je pokrenuti nekoliko programa
(program za pisanje izvornog kôda, prevoditelj, povezivač). Svaki od tih programa stvara nekoliko
datoteka pa korisniku nije lako pamtiti koje sve radnje treba pokrenuti za stvaranje izvršne datoteke.
Posao je znatno olakšan rabi li se objedinjavanje svih datoteka vezanih za jedan program u projekt
(engl. project). Projekt je, dakle, skup međusobno povezanih datoteka. Sadrži sve potrebne
informacije o prevoditelju, povezivaču, datotekama, bibliotekama i ostalom potrebnom za izradbu
izvršne datoteke. Projekt se, dakle, "brine" za sve što je potrebno učiniti da bi od datoteke izvornog
kôda nastala izvršna datoteka.
Slika prikazuje primjer objedinjenih datoteka projekta prvi:

C++ je programski jezik opće namjene i srednje razine s podrškom za objektno orijentirano


programiranje. Prvotno je razvijan u Bell Labs (laboratoriju telekomunikacijske tvrtke Bell) pod
rukovodstvom Bjarnea Stroustrupa tokom 1980-ih, i to kao proširenje programskom jeziku C pa
mu je originalno ime bilo "C with classes" (eng. C s klasama). Zbog velike potražnje za objektno
orijentiranim jezicima te izrazitim sposobnostima istih, specifikacija programskog jezika C++
ratificirana je 1998. kao standard ISO/IEC 14882.

Godine 1979. Bjarne Stroustrup, danski računalni znanstvenik iz Bell Labsa, započeo je razvoj


C++ jezika kojeg je prvo nazvao "C" s klasama koji je bio preteća za C++. Poticaj za stvaranje
novog programskog jezika proisteklo je iz njegovog rada na dokorskoj disertaciji u kojem se
susreo s dilemom gdje je programski jezik Simula bio dobar za složene programske projekte, dok
je programski jezik BCPL bio brz ali je bio na jako niskoj razini da bude praktičan za primjenu.
Kada je Stroustrup počeo raditi za AT&Tove Bell laboratorije, i kada je počeo analizirati jezgru
operacijskog sustava UNIX za distribuirano računarstvo. Za taj problem primjenio je svoje
iskustvo iz svog doktorskog rada, tako što je počeo dodavati produžetke koje postoje u jeziku
Simula za programski jezik C, kojeg je on rabio jer je bio dostupan, brz, i lako prenosiv na druge
platforme. Ovaj produženi C programski jezik, prvo se zvao "C s klasama" no će formalno dobiti
naziv C++ krajem 1983., uzimajući da je "++" znak za povećavanje u programskom jeziku C. U
listopadu 1985. godine prva komercijalna distribucija jezika predstavljena je javnosti u knjizi The
C++ Programming Language čiji je autor spomenuti Bjarne Stroustrup.

Vrste podataka[uredi VE | uredi]


 Znakovni:  char ,  wchar_t
 Cijeli brojevi:  short ,  int ,  long ,  long long
 Brojevi s decimalnim zarezom:  float ,  double ,  long double
 Logički (Boolean):  bool
 Praznine:  void
Veličine za podatke u bitovima za i386
(GCC) Programski primjer[uredi
Vrsta Broj bita VE | uredi]
char 8 U polju ispod prikazan je tipični C++ Hello
World program.[1]
short 16
int 32
float 32
double 64
#include <iostream>

using namespace std;

int main()
{
cout << "Hello, world!\n";
}

/* 23011000 20 loptica ispaljuje se horizontalno jedna za drugom. Putanja i domet


loptice zavise od početne visine i brzine koje se računaju f-jom za slučajne
brojeve*/
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
#include <cmath>
using namespace std;
int main()
{ int gdriver=6; int gmode=2; char buffer [33];
initgraph(&gdriver,&gmode,"");
setbkcolor(BLUE); setcolor(WHITE);
cleardevice();
srand(time(NULL));rand();
int krug[2][50];
for (int i=0; i < 20;i++) {krug[0][i]=120+i*40; krug[1][i]=24;}
int kr(0);
float x(20), y0(50), v0(5), g(9.81), y, tn, el(.85), xp, kos, sin, px, py;
for (int pon=0; pon < 20;pon++)
{y0 = 50+400*rand()/RAND_MAX; v0 = 2+10*rand()/RAND_MAX;
line(0,620,1024,620);
for (float t=0; t < 200;t=t+.05)
{x=v0*t; y=y0+g*t*t/2;
if (y>600) {tn=t-.05;break;}
setcolor(BLUE);circle((int)px,(int)py,20);
setcolor(WHITE);
outtextxy (10,50,"Loptica:"); outtextxy(krug[0][kr]-
10,50,itoa(kr+1,buffer,10));
outtextxy (10,70,"Visina:"); outtextxy(krug[0][kr]-10,70,itoa((int)(600-
y0),buffer,10));
outtextxy (10,90,"Brzina:"); outtextxy(krug[0][kr]-
10,90,itoa((int)v0,buffer,10));
outtextxy (10,110,"Elastičnost sudara: "); outtextxy(200,110,itoa((int)
(el*100),buffer,10));
circle((int)x,(int)y,20);putpixel(int(x), int(y),RED);
px=x;py=y;for (int i=1;i < 3700000;i++);
}
kos=x/sqrt(x*x+(600-y0)*(600-y0));
sin=(600-y0)/sqrt(x*x+(600-y0)*(600-y0));
v0=sqrt(v0*v0+g*g*tn*tn);
for(int i=1;i < 30;i++)
{
v0=v0*el;
xp=x;line(0,620,1024,620);
for (float t=.01; t < 20;t=t+.05)
{x=xp+v0*t*kos; y=600 - v0*t*sin +g*t*t/2;
setcolor(BLUE);circle((int)px,(int)py,20);
setcolor(WHITE);
if (y > 600) {tn=t-.01;break;}
circle((int)x,(int)y,20); putpixel(int(x), int(y),RED);
px=x;py=y;for (int i=1;i < 3700000;i++);
for (int i=0;i < 20;i++) circle(krug[0][i],krug[1][i],20);
}
}
circle((int)x,(int)y,20);
krug[0][kr] = (int)x; krug[1][kr] = (int)y; kr++;
outtextxy ((int)x-10,635,itoa(kr,buffer,10));
line(0,620,1024,620);
}
getch();
closegraph();
return EXIT_SUCCESS;
}

/* 23010990 kretanje nebeskih tijela: Merkur, Venera, Zemlja, Mjesec */


#include <cstdlib>
#include <iostream>
#include <winbgim.h>
#include <cmath>;
using namespace std;
int main()
{ int gdriver=6;
int gmode=2;
int xc(512),yc(384),r(300),rm(120), rv(210),x,y;
initgraph(&gdriver,&gmode,"");
setbkcolor(BLUE);
setcolor(WHITE);
cleardevice();
float me=-3.14,ve=3.14, mj=-3.14;
for (float j=-3.14; j<=31.4; me=me+.04,ve=ve+.017,j=j+.01,mj=mj+.12)
{cleardevice();
setcolor(YELLOW);circle(xc,yc,15);outtextxy(xc-5,yc-5,"S");
setcolor(WHITE);
x=xc+r*cos(j);
y=yc-r*sin(j);
circle(x,y,26);outtextxy(x-5,y-5,"Z");
x=x+50*cos(mj);
y=y-50*sin(mj);
circle(x,y,9);

x=xc+rm*cos(me);
y=yc-rm*sin(me);
circle(x,y,9);outtextxy(x-5,y-5,"M");
x=xc+rv*cos(ve);
y=yc-rv*sin(ve);
circle(x,y,24);outtextxy(x-5,y-5,"V");
for (int q=0; q<9000000;q++);
}
getch();
closegraph();
return EXIT_SUCCESS;
}
#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;
int main()
{ int gdriver=6, gmode=2, x=100, y=100, xp, yp;
char pokretanje='p';
initgraph(&gdriver,&gmode,"");
setbkcolor(BLUE);
setcolor(WHITE);
cleardevice();
while (pokretanje!='m')
{rectangle(200,200,800,500);
circle (x,y,10);
xp=x; yp=y;
pokretanje =getch();
if (pokretanje==75) x=x-5;
if (pokretanje==77) x=x+5;
if (pokretanje==72) y=y-5;
if (pokretanje==80) y=y+5;
if ((x<10 || x>1014 || y<10 || y>700) || (x>190
&& x<810 && y>190 && y<510))
{x=xp; y=yp;}
cleardevice();
}
closegraph();
return EXIT_SUCCESS;
}

C++ je objektno orjentirani programski jezik kojim su pisani


mnogi današnji programi koje srećete u svakodnevnom radu na
računalu.

Bez puno okolišanja i priče o samom C++ idemo odmah učiti.


Compilers (kompajleri/prevoditelji) 

Kod programiranja u C++ često ćete vidjeti engleske riječi kao


naredbe. U tu svrhu nam koriste compileri da bi te naredbe
razumljive čovjeku pretvorile u izvedbeni kod.

U izboru imate mnogo compilera za izabrati. Neki od njih se


plaćaju (i to dosta novaca) pa vam ja preporučujem besplatno
razvojno okruženje i compiler Dev-C++
Pa napravimo jednostavan ''Hello World'' program za probu.
Upišite ovaj kod:

#include <iostream>
using namespace std;
int main ()
{
cout << "Hello World!";
return 0;

Primjetite da svaka naredba u C++ mora završavati sa sa


znakom ; 

Sada taj kod treba iskompajlirati. To ćete učiniti tako da


pritisnete tipku F9 na tipkovnici. Program će se kompajlirati i
pokrenuti.

Program će se pojaviti i odmah nestati tako da nećete uspjeti


vidjeti ništa. To možete riješiti tako da između cout << ''Hello
World'!'; i return 0; upišete 

char a;
cin >> a;

ili da program pokrenete iz Command Prompta. 

Ovako pomoću cahr a; i cin >> a; deklariramo varijablu a i


program očekuje da utipkamo vrijednost te varijable pa se ne
gasi. 

Pa da objasnimo sada dijelove cijelog koda ovog jednostavnog


programa.

#include <iostream>

Program zahtjeva od prevoditelja da u program uključi


biblioteku iostream koja je standardna ulazno/izlazna
biblioteka koja nam omogućuje ispis na ekranu. 

NAPOMENA: #include nije naredba u C++ nego se radi o


pretprocesorskoj naredbi 

using namespace std;

Svi elementi standardne C++ biblioteke su deklarirani u ovome


što piše namespacesa imenom std.

int main ()

Svaki program mora imati ni manje ni više nego jednu main


funkciju. Sav kod unutar main zagrada se izvršava. Int
pretstavlja Integer (cijeli broj) što govori da će program pri
završetku izvođenja programa vratiti cijeli broj.

cout << "Hello World";

Ovo ispisuje Hello World! na ekran. Cout pretstavlja standardni


ispisni tok. Mogli ste taj kod napisati i ovako cout << ''Hello
World“ <<endl; 
A možete i jednostavno nastaviti rečenicu u novi red tako da
napišete 

cout << "Hello World!" <<endl <<"Ja sam programer";


Endl pretstavlja End Line (kraj linije) odnosno ispis u novi red.
Tako bi svaka rečenica koju napišete bila u redu ispod. 

return 0;

Tom naredbom glavni program javlja operacijskom sustavu da


je program uspješno završen. 

Komentari 

Kod je potrebno ponekad komentirati kako se nebi izgubili u


kodu, ili jednostavno kao potsjetnik na nečega.

Ovako možete komentirati kod bez da taj tekst utječe na


izvršavanje programa.

/* Ovo je moj prvi program, sa ovim načinom


komentiranja 
mogu svoje komentare pisati u više redova, tako da tu
može
biti svega... */

#include <iostream>
using namespace std;
int main ()
{
cout << "Hello World!"; // komentiram samo jednu
liniju

char a;
cin >> a;
return 0;

 
 pravilno kreiranje imena (ili identifikatora). Ime traba da se sastoji od jednog ili
više karaktera, odkojih bilo koji može biti slovo (tj, slova engleske abecede
a-z
i
 A-Z
), broj (
0-9
) i znak "
_
", pri

emu na prvom mjestu ne može da bude broj. Uz to, velika i mala slova se
razlikuju, tako da se, na primjer, varijable
zarada
i
Zarada
razlikuju.C++ ne postavlja nikakvo ograni

enje na broj karaktera u nekom identifikatoru. Me

utim, ve

inaimplementacija ima ovo ograni

enje, ali je ono toliko veliko da ne predstavlja nikakav problem(npr. i do 255
karaktera). Treba imati na umu da postoje odrežene rije

i u C++ koje su rezervisane,tako da identifikatori ne mogu uzimati njihova
imena. Te rije

i se nazivaju rezervisane ili klju

nerije

i i date su u tabeliTabela II.2.1 Klju

ne (rezervisane) rije

i u C++
asm continue float new signed tryauto default for operator sizeof
typedefbreak delete friend private static unioncase do goto
protected struct unsignedcatch double if public switch virtualchar else inline register template voidcla
ss enum int return this volatileconst extern long short throw while
2.8 Cijeli brojevi
Cijeli broj (integer) se može definisati pomo

u tipova
short
,
int
i
long
. Jedina razlika je utome da
int
koristi više ili barem isto bajta kao
short
,a
long
koristi više ili barem isto bajta nego
int
. Ovo zavisi od ra

unara na kojem se radi.Konvencija je da cjelobrojne varijable uzimaju u obzir i
pozitivne i negativne brojeve (kaže se da su
signed
). Me

utim, u slu

aju kada se koriste kao
unsigned
, onda mogu uzeti samo pozitivnevrijednosti (sa
0
).
2.9 Realni brojevi
Realni broj se može definisati sa tipom
float i double
.
double
koristi više bajta i timeomogu

uje ve

u opseg i ve

u ta

nost pri predstavljanju realnih brojeva.
2.10 Karakteri
Varijabla karakter se definiše tipom
char
. Ona obuhvata jedan jedini bajt koji sadrži kod datogkaraktera. Ovaj broj je
numeri

ka vrijednost i zavisi od sistema kodiranja karaktera koji se koristi(to je zavisno
od mašine). Naj



i sistem je ACSII (Amercan Standard Code for InformationInterchange). Na
primjer, karakter A ima ASCII kod 65, a karakter a 97.Kao i interger i karakter
može da bude
signed
i
unsigned
. Tako, signed karakter može da sadržinumeri

ke vrijednosti izme

u -128 i 127, a
unsigned
0 do 255.
Programski jezici, C++
7

 
Karakteri koji imaju posebnu namjenu (ne predstavljaju karaktere koji se
ispisuju) predstavljaju se pomo

u
escape
sekvenci, kao npr:
‘\n’
– novi red
‘\t’
– novi tabulator 
‘\v’
– novi vertikalni tabulator 
‘\b’
– backspace
‘\’’
– znak navoda (apostrof)
‘\”’
– dvostruki znak navoda
‘\\’
– backslash (
/
)
‘\a’
– zvu

ni signal
2.11 Stringovi
String je uzastopni niz karaktera koji se završavaju nultim karakterom. Tako je,
barem, bilo u jezikuC. Ipak, u C++ uveden je novi tip podataka koji se naziva
C++ string klasa, pa je mogu

e na mnogo prirodniji na

in manipulisati varijablama sa više karaktera. Sljede

i primjer pokazuje njenuupotrebu.Ovaj primjer dobro funkcioniše jer završava
program ako se unese "
k
" ili "
K
", odnosno program senastavlja ako se unese bilo koji drugi karakter. Problem
nastaje ako korisnik programa pritisnesamo tipku ENTER. U tom slu

aju objekat "cin" o

ekuje da se unese neka vrijednost, pa tek onda pritisne ENTER.
3. Operatori 
Ovo poglavlje obra

uje ugra

ene C++ operatore koji se koriste za stvaranje izraza, pri

emu izraz predstavlja bilo kakav prora

un koji daje neku vrijednost. C++ nudi operatore za izvršavanjearitmeti

kih, ralacijskih, logi

kih, bitwise i uslovnih izraza. Tako

er nudi veoma korisne “popratneefekte” (
 side-effect 
) kao što su pridruživanje, inkrement i dekrement.
3.1 Aritmeti

ki operatori
C++ nudi pet osnovnih operatora, koji su sumirani u Tabeli II.3.1.
#include <iostream>using namespace std;main(){char ch;do {cout << "Pritisnite K ili
k za kraj, a bilo koju tipku zanastavak \n";cin >> ch;if (ch != 'K' && ch != 'k')cout
<< "Zelite nastaviti?\n";elsecout << "Kraj programa";} while (ch != 'K' && ch !=
'k');}
Programski jezici, C++
8

 
Tabela II.3.1 Aritmeti

ki operatori
Operator Ime Primjer 
+
Sabiranje
12 + 4.9 // daje 16.9-
Oduzimanje
3.98 - 4 // daje -0.02*
Množenje
2 * 3.4 // daje 6.8/
Dijeljenje
9 / 2.0 // daje 4.5%
Ostatak pri dijeljenju
13 % 3 // daje 1
Osim ostatka pri djeljenju (
%
) svi aritmeti

ki operatori prihvataju miješanje cijelih i realnih brojeva.Op

enito, ako su oba operanda cijeli brojevi, i rezultat je cijeli broj. Me

utim, ako je jedan odoperanada realan, onda je i rezulat realan (tipa
double
).Kada su oba operanda pri dijeljenju cijeli brojevi, rezultat je tako

er cijeli broj (tzv. cjelobrojnodijeljenje). U tom slu

aju rezultat se zaokružuje na donju vrijednost, tj.
9 / 2 // daje 4, a ne 4.5!-9 / 2 // daje -5,a ne -4.5!
S obzirom da neželjeno cjelobrojno dijeljenje predstavlja jednu od naj



ih greški

You might also like