Professional Documents
Culture Documents
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:
int main()
{
cout << "Hello, world!\n";
}
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;
}
#include <iostream>
using namespace std;
int main ()
{
cout << "Hello World!";
return 0;
}
char a;
cin >> a;
#include <iostream>
int main ()
return 0;
Komentari
#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
eš
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
eš
ih greški