You are on page 1of 47

Programski jezici

Programski jezik C++: Struktura


programa i tipovi podataka

prof dr Gordana orevi


Programski jezik C++

Oko 1972. pojavljuje se C jezik, koji je direktna pretaa dananjeg


C++ jezika.
To je bio prvi jezik opte namene i kao takav je postigao ogroman
uspeh.
jezik je bio jednostavan za uenje
omoguavao je modularno pisanje programa
sadravao je samo naredbe koje se mogu jednostavno prevesti u
mainski jezik
davao je bri kd.
C je udan jezik koji ima osobine i viih i niih programskih jezika,
pa kao takav ima i prednosti i nedostatke
C++ je programski za koji se moe rei da je C programski jezik sa
dodatim klasama (C with classes) i svim ostalim osobinama
modernih jezika
Struktura programa u C++
Osnovni elementi programa u C++ programskom jeziku su:

komentari
deklaracija promjenljivih (varijabli)
funkcija main

/*******************************************************
* komentari zaglavlja programa *
*******************************************************/
... deklaracija promjenljivih
int main()
{
.. izvrsne naredbe..
return 0;
}
Komentari u C++
jednolinijski komentari
kratki komentari koji objanjavaju ili pomau razumevanju programskog koda;
oznaavaju se duplom kosom crtom //

//definicije atributa

vielinijski komentari
dui komentari od nekoliko redova; zapoinju kosom crtom i zvezdom /*, a zavravaju
zvezdom i kosom crtom */

/*ovo je komentar
ispisan u vie redova*/

Kada kompajler naleti na dvostruku kosu crtu, on e zanemariti sav tekst koji sledi do
kraja tekueg reda i prevoenje e nastaviti u sedeem redu. Komentari dakle ne
ulaze u izvrni kd programa i slue programerima za opis znaenja pojedinih naredbi
ili delova kda.

Iako komentari iziskuju dodatno vreme i napor, u kompleksnijim programima oni se


redovno isplate.
Varijable (promenljive)

Varijable postoje u svakom programskom jeziku. U varijablama se


pohranjuju nekakve vredosti, brojevi, slova ili neki drugi znakovi.
Ako bismo izostavili deklaraciju, promjenljivim ne bismo mogli
dodeliti vrednost.

Svaka promjenljiva mora biti deklarisana pre korienja

Deklaraciju promjenljve moemo izvriti na dva mesta u programu:

pre koda koji koristi tu promjenljivu


pre funkcije main() u glavnom programu
Varijable (promenljive)

Sintaksa deklaracije varijable u C++:


tip_varijable ime_varijable;

Pri deklarisanju promjenljive treba imati na umu slede


karakteristike:

Svaka promjenljiva ima svoje ime


Svaka promjenljiva ima tip
Svaka promjenljiva sadri vrednost koju joj dodjeljujemo
najee operatorom dodele vrednosti.
Imena promenljivih
Ime promenljive moe biti jedan karakter ili maksimalno 32
karaktera
Ime promenljive mora zapoeti znakom (a-z ili A-Z ili znakom _)
(preporuka: BrojIndeksa)
Ime ne moe da sadri blanko znak; umesto ovog znaka moe se
koristiti znak _.
Iako je dozvoljeno koristiti bilo kakvo ime (u skladu sa gore
navedenim pravilima) preporuuje se izbor imena promenljive koje
asocira na vrednost koja e se u njoj uvati.
Ime mora biti jedinstveno u svojoj oblasti vaenja
C++ je programski jezik koji pravi razliku izmeu malih i velikih
slova. To znai da e se nazivi razlikovati u zavisnosti od veliine
slova kojima su ispisani. Tako se promenavlasnika, promenaVlasnika
i PROMENAVLSANIKA tretiraju kao potpuno razliiti nazivi.
ime varijable se ne sme poklopiti sa nekom od kljunih rijeiu C++,
jer bi u tom sluaju kompailer pomeao sa standardnim kljunim
reima
Predstavljanje podataka u raunaru

Korisnik ima potrebu da u raunaru uva


podatke razliitih formi:
Numeriki podaci (brojevi)
Tekstualni podaci
Zvuni podaci
Grafika ( slika, video )
Numeriki podaci (brojevi)

Brojevima se izraavaju kvantifikatorska svojsta


objekata i procesa.
Brojevima prikazujemo cene, koliine, fizike
veliine ( visine, teine, temperature, itd.) kao i
razne druge merljive podatke.
Brojevima se mogu modelirati i veoma sloene
prirodne i drutvene pojave i procesi. Statistiki
pokazatelji su dobar primer za upotrebu brojeva
pri analizi prirodnih i drutvenih fenomena.
Operacije sa brojevima

Aritmetike operacije
Nad brojevima moemo realizovati osnovne aritmetike operacije
(brojeve moemo da sabiramo, oduzimamo, delimo i moimo)
Najsloeniji matematiki prorauni, najsloenije jednaine se na
kraju svode na ove etiri operacije.

Logike operacije
Nad brojevima moemo realizovati operacije tipa manje, vee,
jednako, razliito
Tekstualni podaci

U raunarstvu znaajan udeo imaju


tekstualni podaci
Tekstualni podaci sadre razliite znake
(slova mala i velika, specijalne znake,
brojeve)
Operacije sa tekstualnim podacima

Slino kao to kod brojeva postoje


osnovne operacije, tako i obrada
tesktualnih podataka ima jedan skup
jednostavnih operacija pomou kojih se
mogu obavljati i najsloenije operacije nad
tesktovima.
Osnovni tipovi podataka u
programskim jezicima
U programskim jezicima tipovi podataka (data
types) definiu skupove vrednosti i dozvoljene
operacije sa tim vrednostima.
Osnovni tipovi podataka su:
Celi brojevi
Realni brojevi
Znakovni podaci
Tekstualni podaci
Logiki podaci
Celi brojevi
Celi brojevi (integers) su brojevi koji se definiu
(deklariu) pomou skraenice int kao u
sledeem primeru:

int kolicina;

re kolicina oznaava promenljivu vrednost


(varijablu) koja moe da dobije bilo koju
vrednost iz skupa celih brojeva
Definisanje celih brojeva u C++

vrsta oznaka obuhvata

SHORT INTEGER short int 16-bit


(short)
INTEGER int 16-bit

LONG INTEGER long int 32-bit


(long)

Sintaksa deklaracije varijable u C++:


tip_varijable ime_varijable;
int ocena;
int godinaStudija; ili int ocena, godinaStudija;
Realni brojevi
Realni brojevi su brojevi koje u svakodnevnoj upotrebi
nazivamo decimalnim brojevima ( sa decimalnim
zarezom ili takom).
Na engleskom se decimalna taka naziva floating point
pa otuda skraenica float za takve brojeve.
Realni brojevi deklariu pomou rezervisane rei float
kao u sldeemo primeru:

float cena;
Definisanje realnih brojeva u C++

vrsta obuhvata veliina

FLOAT 4 bajta fiksni zarez

DOUBLE 8 bajta jednostruka preciznost pokretnog


zareza
LONG 10 bajta dvostrukastruka preciznost pokretnog
DOUBLE zareza

Definisanje brojanih varijabli:


float prosecnaOcena;
float kolicina;
Aritmetiki operatori
Da bismo promenljive u programu mogli menjati, na njih treba primeniti
odgovarajue operacije.
Za ugraene tipove podataka definisani su osnovni operatori, poput sabiranja,
oduzimanja, mnoenja i deljenja
Ti operatori se mogu podeliti na;
unarne (deluju samo na jednu promenljivu)
binarne (neophodne su dve promjenljive)

simbol znaenje
/ Deljenje
* Mnoenje
+ Sabiranje
- Oduzimanje
\ Deljenje (vraa Integer)
% Vraa ostatak prilikom deljenja
Npr. 10 % 3 = 1
Binarni operatori

Unarni operatori

a = -25 (dodeljuje promenljivoj a broj -25) unarni minus


b = +25 (dodeljuje promenljivoj a broj 25) unarni plus
c = -a (dodeljuje promenljivoj c negativnu vrednost promenljive a)
d = +b (dodeljuje promenljivoj d pozitivnu vrednost promenljive b)

x=x+1 x++ - uveavanje vrednosti (inkrement)


Z=Z1 z-- - umnanjivanje vrednosti (dekrement)
Upotreba operatora
Meanje tipova promenljivih u
brojnim izrazima

U brojnim izrazima moemo navoditi promenljive


razliitih tipova
C++ vri konverziju manjeg tipa u vei
Npr. ako dodate double na integer promenljivu, C++
najprije pretvori integer u double, a zatim vri sabiranje.
Rezultat je, naravno, tipa float.
Automatska konverzija je samo privremena, te se nakon
izvrene operacije tip podataka zapravo ne menja
(integer promenljiva ostaje integer).
Meanje tipova promenljivih u
brojnim izrazima

int brojilac = 1;
int imenilac = 4;
float koeficijent = brojilac / imenilac;

Na ekranu e se kao rezultat ispisati 0.


Iako smo rezultat deljenja pridruili float varijabli, to pridruivanje
sledi tek nakon to je operacija deljenja dva cela broja bila
zavrena.
Kako su obe promenljive celobrojne, izvrava se celobrojno deljenje
bez decimalnih mesta, pa je rezultat 0, a ne 0.25.
Meanje tipova promenljivih u
brojnim izrazima

float koeficijent = 3 / 2;

Brojeve 3 i 2 kompajler e shvatiti kao cele, jer ne


sadre decimalnu taku. Zato e biti primenjeno
celobrojno deljenje, pa e rezultat toga deljenja biti celi
broj 1.
Ako ipak elimo pravilan rezultat, zadajemo:

float koeficijent = 3. / 2.;


Operator dodele tipa
int brojilac = 1;
int imenilac = 4;
float koeficijent = brojilac / imenilac;

ta uiniti kada elimo da podelimo dve celobrojne promjenljive, a da


pritom ne izgubimo decimalna mesta?
Dodavanje decimalne take iza imena varijable nema smisla, jer e
kompajler javiti greku.
Za eksplicitnu promenu tipa varijable primenjujemo operator dodele tipa

int brojilac = 1;
int imenilac = 4;
float koeficijent = (float)brojilac / (float)imenilac;

Navoenjem kljunih rei float u zagradama ispred operanada njihove


vrednosti se pretvaraju u decimalne brojeve pre operacije deljenja, tako da
je rezultat korektan. Da ne bi bilo zabune, same varijable brojilac i imenilac
i nadalje ostaju tipa int
Dodela vrednosti promenljivim
Zadatak raunarskog programa je da izvri transformaciju ulaznih podataka
u izlazne podatke, prema definisanom zadatku. Zato je dodela vrednosti
promenljivim najea operacija koju koristimo u programu.

a = 4 je naredba kojom se promenljivoj a dodjeljuje vrednost 4.

Operator = je operator dodele; operatorom dodele menja se vrednost


neke promenljive; znakom jednakosti (=) se promenljivoj na levoj strani
pridruuje neka vrednost sa desne strane.

2 = 4 / 2; // greka
3.14159 = p; // greka

Naredba kojom se promenljivoj c dodeljuje zbir vrednosti promenljivih a i b.

c = a + b;
Problem prekoraenja
problem vezan za aritmetike operatore
vezan je za pojavu numerikog prelivanja,
kada usled neke operacije rezultat nadmai
opseg koji naznaeni tip podatka pokriva.

int i = 32766;
cout << (++i) << endl;
endl;
cout << (++i) << endl;
endl;

Programski kod e prvo na ekranu ispisati


broj 32767, to je najvei mogui broj tipa
int. Izvoenjem sledee naredbe, na ekranu
e umesto oekivanih 32768 biti ispisano
-32768 kao najvei negativni int
Uzrok je preliev podataka do kojeg dolo
zbog toga to oekivani rezultat ne moe
stati u 15 bita predvienih za int varijablu.
Podaci koji su se "prelili uli su u bit za
predznak (zato je rezultat negativan), a
raspored preostalih 15 bita daje broj koji
odgovara upravo onom ta nam je raunar
ispisao.
Slino e se dogoditi prilikom oduzimanja
nekog broja od najveeg negativnog broja.
sizeof operator

Ako elite da proverite veliinu pojedinog


tipa podatka, to je mogue uiniti i
pomou sizeof operatora.

cout <<Velicina celih brojeva: << sizeof(int);


cout <<Velicina realnih brojeva: << sizeof(float);
Deklaracija numerikih podataka
bez predznaka
Svi navedeni numeriki tipovi podataka mogu biti deklarisani i bez predznaka,
dodavanjem rei unsigned ispred njihove deklaracije.

unsigned int i = 10000;


unsigned long int si;

U tom sluaju kompajler e bit za predznak upotrebiti kao dodatnu binarnu cifru, pa
se najvea mogua vrednost udvostruuje u odnosu na promenljive s predznakom, ali
se naravno ograniava samo na pozitivne vrednosti.
Napomena: Ako unsigned promenljivoj pridruimo negativan broj, ona e poprimiti
vrednost nekog pozitivnog broja.

Npr. unsigned int i = -1 e omoguiti da promenljiva dobije vrednost 65535 (za 1


manji od najveeg dozvoljenog unsigned int broja 65536).

Zanimljivo da kompajler za gornji kd nee javiti greku. Kompajler ne prijavljuje


greku ako se unsigned promenljivoj pridrui negativna konstanta - korisnik mora
sam paziti da se to ne dogodi!
Znakovni podatak
Znak ( character) je takav tip podatka koji moe
da sadri jedno slovo, broj ili neki drugi znak

Tako moemo definisati varijablu koja moe da


sadri bilo koji znak

char slovo;

char znak;

znak = a
Tekstualni podatak (alfanumeriki)

Povezivanje vie znakova u tzv. string, postie se


mogunost deklarisanja teksta kao podatka.
Tekstualni podatak moe sadrati i slova i
brojeve.

Definisanje tekstualnih podataka


string a;
a = neki tekst;
Logiki podaci
Logiki podatak (boolean) je veoma poseban tip podatka koji ima samo dve
vrednosti: tano (true) i netano (false).
Jezik C++ za prikaz podataka logikog tipa ima ugraen tip bool, koji moe
poprimiti vrednosti true (engl. true - tano) ili false (engl. false -
pogreno):

bool iskaz;

*iskaz oznaava varijablu koja moe da sadri jednu od dve vrednosti (true ili
false).

Definisanje logikih podataka u C++:

bool Je liDanasCetvrtak = true;


bool PadaSneg = false;

Pri ispisu logikih tipova podataka, kao i pri njihovom korienju u


aritmetikim izrazima, logiki tipovi se pretvaraju u int: true se pretvara u 1,
a false u 0.
Operacije nad logikim podacima
Operacije sa logikim podacima su:
logiko I (AND) koristi se znak &&
logiko ILI (OR) koristi se znak ||
logiko NE (NOT) koristi se znak !
Relacioni operatori
Relacioni operatori (od engl. relational operators) se koriste preteno u
naredbama za grananje toka programa, gde se, u zavisnosti od toga da li je
neki uslov zadovoljen, izvoenje programa nastavlja u razliitim smerovima.
Kao rezultat poreenja dobja se tip bool: ako je uslov poreenja zadovoljen
- rezultat je true, a ako nije -rezultat je false.

Napomena: Postoji sutinska razliku izmeu jednostrukog znaka jednakosti (=) - koji
je simbol za pridruivanje i dvostrukog znaka jednakosti (==) - koji je relacioni
operator
Pobrojani tip podataka
Ponekad su promjenljive u programu elementi pojmovnih skupova,
tako da je takvim skupovima i njihovim elementima zgodno dodeliti
imena. Za takve sluajeve obino se koriste pobrojani tipovi (engl.
enumerated types).

enum dani (ponedeljak, utorak, sreda, etvrtak,


petak, subota, nedelja)

Ovom deklaracijom uvodi se novi tip podataka dani i sedam


nepromenjivih identifikatora (ponedjeljak, utorak,...) toga tipa.
Prvom identifikatoru kompajler dodeljuje vrednost 0, drugom 1, itd.
Na ovaj nain moemo definisati varijablu tipa dani i dodeljivati joj
neku od vrednosti iz skupa moguih vrednosti.

dani NajviseVolim = petak;


Konstante

U programima se esto koriste veliine ija se vrednost tokom


izvoenja programa ne menja. To mogu biti fizike ili matematike
konstante ili neki drugi parametri.
Ovakvi parametri se deklariu na poseban nain i ulaze u izvrni kd
kao konstante.
Konstante definiemo navoenjem kljune rei const, tipa podataka
i naziva konstante, a zatim joj odmah dodeljujemo vrednost.

const double pi = 3.14159265359;

U main funkciji, konstanta vie ne moe promeniti vrednost. Na


svaki pokuaj promene vrednosti takve promenljive, kompajler e
javiti greku:

const double pi = 3.14159265359;


pi = 2 * pi; // greka
Konstante

Drugi esto korieni pristup deklarisanja konstante zasniva se na


pretprocesorskoj naredbi #define

#define PI = 3.14159265359

Konstanta PI nema konkretni tip (int, char itd.). Svaki puta kad
preprocesor vidi re PI upisae broj 3.14159265359.

Zbog toga to se preprocesor pokree pre kompajlera, kompjuter


nikad ne vidi konstantu, ve broj 3.14159265359.
Hijerarhija i redosled izvoenja operatora
U matematici postoji utvrena hijerarhija operacija prema kojoj
neke operacije imaju prednost pred drugima.
Podrazumevani sled operacija je sleva nadesno, ali ako se dve
operacije razliitog prioriteta nau jedna do druge, prvo se izvrava
operacija s viim prioritetom.

Npr. y = a + b * c / d; mnoenje broja b sa brojem c ima prednost


pred sabiranjem s brojem a, tako da e se ono izvriti prvo. Proizvod
e se zatim deliti sa d i tek se tada dodaje broj a.

I u programskom jeziku C++ definisana je hijerarhija operatora.


Prvenstveni razlog tome je kompatibilnost sa matematikom
hijerarhijom operacija, to omoguava pisanje raunskih izraza na
identian nain kao u matematici.
Redosled izvoenja operacija e odgovarati matematiki
oekivanom. Operacije se izvode prema hijerarhiji operacija, poevi
sa operatorima najvieg prioriteta. Ako dva susedna operatora imaju
isti prioritet, tada se operacije izvode prema redosledu izvoenja
operatora.
Kao i u matematici, u izrazima moemo koristiti zagrade
Prioriteti raunanja

Primer 1: Primer 2:

int a int a
int b int b
int c int c
a = 12 a = 12
b = 6 b = 6
c = a + b / 2 c = (a + b) / 2
cout <<Rezultat je: << c); cout <<Rezultat je: << c);

Rezultat: 15
(prvo radi deljenje) Rezultat: 9
(prvo radi zagradu)
Hijerarhija i redosled izvoenja operatora
Funkcija main

Funkcija main je osnovna funkcija svakog C++


programa koja oznaava deo programa koji
treba izvriti.
U svakom C++ programu mora postojati tano
jedna funkcija koja se zove main. Ova funkcija
se naziva glavna funkcija, i to je ona funkcija
koja e se prva poeti izvravati kada program
zapone sa radom.
Funkcije u programskom jeziku C++

Funkcije u programskom jeziku C++ uvek zapoinju zaglavljem koje pored


imena funkcije sadri spisak parametara funkcije i tip povratne vrednosti.

tip_povratne_vrednosti nazivFunkcije (...parametri...) {


// telo funkcije
}

Tip povratne vrednosti, njen naziv i parametri ine zaglavlje funkcije, a kod
izmeu vitiastih zagrada telo funkcije
Parametri su podaci koje pozivaoc funkcije treba da prosledi pozvanoj
funkciji, sa ciljem preciziranja zadatka koji funkcija treba da obavi. Popis
parametara se navodi u zagradama neposredno iza imena funkcije.
Ako funkcija nema parametre prostor izmeu zagrada se ostavlja prazan
Ispred imena funkcije navodi se tip povratne vrednosti funkcije. Povratna
vrednost je vrednost koju funkcija vraa pozivaocu funkcije. Vraanje
vrednosti obavlja se pomou naredbe return, koja tipino predstavlja
poslednju naredbu unutar funkcije, iza koje se navodi povratna vrednost.
Funkcija main
int main()
{
.. izvrsne naredbe..
return 0;
}

Poto se main funkcija poziva neposredno iz operativnog sistema, eventualne


parametre ovoj funkciji moe proslediti jedino operativni sistem. Stoga je najei
sluaj da funkcija main nema nikakvih parametara, to se oznaava praznim
zagradama.
Povratna vrednost se u sluaju funkcije main vraa operativnom sistemu. Vrednost
0 vraena operativnom sistemu oznaava uspean zavretak programa, dok se
vrednosti razliite od nule vraaju operativnom sistemu iskljuivo kao signalizacija da
iz nekog razloga program nije uspeno obavio planirani zadatak (znaenje ovih
vrednosti zavisi od konkretnog operativnog sistema). Stoga je poslednja naredba
funkcije main u gotovo svim sluajevima naredba

return 0

funkcija main sadri blok naredbi - jednu ili vie naredbi koje su omeene parom
otvorena-zatvorena vitiasta zagrada {}. Izvana se taj blok ponaa kao jedinstvena
celina, kao da se radi samo o jednoj naredbi.
Naredbe u telu funkcije

Blokovi naredbi se redovno piu uvueno. To uvlaenje


radi se iskljuivo radi preglednosti, to je naroito vano
ako imamo blokove ugnjedene jedan unutar drugog.
Naredbe odreuju radnje koje je potrebno izvriti da bi
se ulazni podaci transformisali u izlazne i na taj nain
reio problem za koji je program napisan.
Svaka naredba bloka mora se zavriti znakom ; - koji
oznaava kraj naredbe (jedna od najeih sintaksnih
greaka u C++ programima je upravo zaboravljanje
zavrnog taka-zareza na kraju naredbe).
Primer 1
Napisati program koji e izraunati ukupan otpor dva serijski
spojena otpora. Prvi je 220, a drugi je 560.
Dati kometar o tome ta program radi.

/*program izracunava ukupan otpor dva


serijski spojena otpornika*/
int a = 202;
int b = 560;
int ukupno;
int main()
{
ukupno = a + b;
return 0;
}
Primer 2
Napisati program koji e na osnovu dve date ocene, izraunati prosenu
ocenu. Prva ocena je 10, a druga je 7.
Dati kometar o tome ta program radi.

/program izracunava prosecnu ocenu/


int a = 10;
int b = 7;
int zbir;
float prosek;
int main()
{
zbir = a + b;
prosek = (float)zbir / 2;
return 0;
}
Primer 3
Napisati program koji e izraunati zbir, razliku, proizvod i kolinik dva cela
broja.

/*program izracunava zbir, razliku, proizvod i kolinik dva cela


broja */
int a;
int b;
int zbir;
int razlika;
int proizvod;
float kolicnik;
int main()
{
zbir = a + b;
razlika = a - b;
proizvod = a * b;
kolicnik = (float)a / b;
return 0;
}
Primer 4
Napisati program koji e izraunati povrinu
kruga ako je poluprenik 12 cm.

/program izracunava povrsinu kruga/


int r;
float povrsina;
const double pi=3.14;
int main()
{
povrsina = r * r * pi;
return 0;
}

You might also like