Tipovi podataka i operatori
Brojevi
U programski jezik C++ ugrađena su dva osnovna tipa brojeva: cijeli brojevi (eng. integers ) i realni brojevi (eng. floating-point ). Cjelobrojna varijabla deklarira se sa int . Raspon varijable int je od -32768 do 32767. Ako se ukaže potreba za većim cijelim brojevima varijablu možemo deklarirati sa long int ili samo long .
Cjelobrojne konstante mogu se prikazati u različitim brojevnim sustavima:
1. Dekadski sustav (0, 1, 2, 3,..., 8, 9) 2. Oktalni sustav (0, 1, 2,..., 7) 3. Heksadekadski sustav (0, 1, 2,..., 9, A, B, C, D, E, F)
Dekadski sustav
Dekadski prikaz je razumljiv svima i ovo ne treba dodatno objašnjavati. Znači, brojevi između 0-9.
Evo jednog primjera:
int Broj = 142;
Oktalni sustav
Oktalni sustav je ograničen na 8 znamenki (0-7). Pišu se tako da se ispred prve znamenke napiše broj 0 iza kojeg slijedi oktalni prikaz broja:
int VarijablaA = 010; //Oktalni prikaz broja 8
Heksadekadski sustav
U heksadekadskom sustavu postoji 16 znamenki: 0-9, A-E. Pišu se tako da započinju sa 0x ili 0X
int Broj5 = 0x0C; //Heksadekadski prikaz broja 12
Decimalni brojevi
Ako je potrebno računati sa decimalnim brojevima, najčešče se koriste varijabla float :
float pi = 3.141593; float nabojElektrona = -1.6E-19;
U prvom redu vidimo klasičan decimalni broj i mislim da je ovdje sve jasno. U drugom redu broj su prikazan na znanstveni način (-1.6x10-19 ). Kod znanstvenog prikaza slovo E može biti veliko i malo. Ono razdvaja mantisu od potencije na bazi (u ovom slučaju mantisa je -1.6, baza je 10 a potencija je -19).
Aritmetički Operatori
+x unarni plus -x unarni minus x++ uvećaj nakon ++x uvećaj prije x-- umanji nakon --x umanji prije x + y zbrajanje x - y oduzimanje x * y množenje X / y dijeljenje x % y modulo
Evo primjera za uvećavanje i smanjivanje brojeva:
int Broj = 5; ++Broj; //Uveća Broj za jedan cout << Broj << endl; //Ispisuje 6 --Broj; //Umanji Broj za jedan cout << Broj << endl; //Ispisuje 5
Treba uočiti razliku između operatora kada je on napisan ispred varijable i iza nje. U prvom slučaju vrijednost varijable će se prvo uvećati ili smanjiti a potom će se zapamtiti njena vrijednost. U drugom slučaju prvo će se vrijednost zapamtiti a tek onda će se uvećati ili smanjiti. Idemo u slijedećem primjeru pokazati kako se koriste aritmetički operatori:
float a = 10; float b = 5; cout << (a + b) << endl; //Ispisuje 15 cout << (a - b) << endl; //Ispisuje 5 cout << (a * b) << endl; //Ispisuje 50 cout << (a / b) << endl; //Ispisuje 2
Mislim da ovo ne treba dodatno objašnjavati. Idemo onda vidjeti šta radi operator modulo:
float c = 6; float d = 4; cout << (c % d) << endl; //Ispisuje 2
Modulo se koristi da provjeri da li su cijeli brojevi dijeljivi. Ako jesu onda izbacuje ostatak dijeljenja. Na žalost C++ nema ugrađen operator za potenciranje, već programer mora sam pisati funkciju ili koristiti funkciju pow().
Operator dodjele tipa
Pokazat ću Vam kako se može dodjeliti neki drugi tip broju. Npr. imamo dva cijela broja i želimo ih pretvoriti u decimalne. Šta onda? Evo, pogledajte ovaj primjer:
int Broj1 = 2; int Broj2 = 3; float Kvocijent = (float)Broj1 / (float)Broj2;
Na ovaj smo način varijable Broj1 i Broj2 pretvorili u decimalne brojeve jer bi u suprotnom računalo izbacilo grešku.
Pobrojenja
Ponekad su varijable u programu elementi skupova, tako da je takvim skupovima i njihovim elementima zgodno dati lako pamtljiva imena. Za takve slučajeve obično se koriste pobrojani tipovi (eng. enumerated types):
enum dani {ponedjeljak, utorak, srijeda, cetvrtak, petak, subota, nedjelja};
Ovime se uvodi novi tip podataka dani, te sedam nepromjenjivih identifikatora (ponedjeljak, utorak...) toga tipa. Prvom identifikatoru prevoditelj je dao vrijednost 0, drugom 1... Sada možemo definirati varijablu tipa dani, te joj pridružiti neku vrijednost iz niza:
dani Dan5 = petak; dani Dan1 = ponedjeljak; cout << Dan5 << endl;
Prvo smo varijablama Dan5 i Dan1 pridodali neku vrijednost iz tipa podataka dani. Na zaslonu se cjelobrojni ekvivalent za petak, tj. broj 4. Ako ne želimo da identifikatori započinju sa vrijednosti 0 jednostavno im pridodamo neki drugi broj:
enum dani {ponedjeljak = 5, utorak, srijeda, cetvrtak, petak, subota, nedjelja};
Sada identifikator utorak poprima vrijednost 6, srijeda 7...
Logički tipovi i operatori
Logički podaci su podaci koji mogu poprimiti samo dvije vrijednost, na primjer: da/ne, true/false, istina/laz... Programski jezik C++ za prikaz podataka logičkog tipa ima ugrađen tip bool, koji može poprimiti vrijednost true ili false:
bool JaSamCppProgramer = true; bool JaSamPythonProgramer = false;
Logički tipovi se prema pravilima cjelobrojne promocije pretvaraju u int: true se pretvara u 1, a false u 0. Tako da smo mogli napisati:
bool JaSamCppProgramer = 1; bool JaSamPythonProgramer = 0;
Sada bi vrijednost 1 bila true, a 0 false. Umjesto 1 smo mogli napisati 32 pa bi prevodioc to shvatio kao različito od 0, tj. true tako da Vam neće javiti grešku.
Za logičke podatke definirana su tri operatora:
1. ! (logička negacija) 2. && (logički i) 3. || (logički ili)
Logička negacija je unarni operator koji mjenja logičku vrijednost varijable: istinu pretvara u neistinu i obrnuto. Logički i daje kao rezultat istinu samo ako su oba dva operatora istinita. Logički ili daje istinu ako je bilo koji od operatora istinit.
Poredbeni operatori
x < y manje od x <= y manje ili jednako x > y veće od x >= y veće ili jednako x == y jednako x != y različito
Osim aritmetičkih operacija, programski jezik C++ omogućava i usporedbe dva broja. Kao rezultat usporedbe dobiva se tip bool: ako je uvjet usporedbe zadovoljen, rezultat je true, a ako nije rezultat je false. Evo jedan primjer kako bi ovaj dio lakše razumili:
cout << (10 > 8) << endl; //10 je veće od 8? cout << (10 >= 8) << endl; //10 je veće ili jednako od 8? cout << (10 < 8) << endl; //10 je manje od 8? cout << (10 <= 8) << endl; //10 je manje ili jednako od 8? cout << (10 == 8) << endl; //10 je jednako od 8? cout << (10 != 8) << endl; //10 je različito od 8?
Na zaslonu ekrana ispisat će se brojevi: 1, 1, 0, 0, 0, 1. Poredbeni operatori se koriste u naredbama za grananje toka programa, gdje se, ovisno o tome je li neki uvjet zadovoljen, izvođenje programa nastavlja u različitim smjerovima.
Znakovi
Znakovne konstante tipa char pišu se uglavnom kao jedna znak unutar jednostrukih znakova navodnika:
char SlovoC = 'c'; cout << 'c' << endl;
Za znakove koji se ne mogu prikazati na zaslonu koriste se posebne sekvence koje počinju sa /. Evo jednog primjera:
cout << '/n'; //Znak za novi redak
Operator pridruživanja
Operatori pridruživanja se sastoje od znaka odgovarajućeg aritmetičkog operatora i znaka jednakosti. Evo jednog primjera:
a += 7;
što je jednako kao:
a = a + 7;
Korisnički definirani tipovi i operatori
Ono što programski jezik C++ čini moćnim su korisnički definirani tipovi podataka. Korisnik može neki tip ili operator preimenovati u neki novi naziv i koristiti ga u programu. Ključna riječ typedef omogućava uvođenje novog imena za već postojeći ugrađeni korisnički definiran tip podataka. Pogledajmo ovaj primjer:
typedef int broj; broj Pribrojnik1 = 5;
Identifikator broj postaje sinonim za tip int.
Operator sizeof je unarni operator koji kao rezultat daje broj bajtova što ih operand zauzima u memoriji računala:
cout << "Ovaj redak zauzima " << sizeof(int) << " bajtova u memoriji računala." << endl;
Operator razdvajanja
Operator razdvajanja , (zarez) koristi se za razdvajanje izraza u naredbama. Izrazi razdvojeni zarezom se izvode postepeno, s lijeva na desno. Evo jednog primjera:
a = 4, a + 3;
Varijabli i će biti pridružena vrijednost 7.
Ovo bi bilo sve za sada o brojevima. U slijedećem primjeru pokazat ću Vam kako se i kada koriste blokovi naredbi, grananje toka, petlje...