Programiranje 2 C Tipovi podataka i operatori 11

  • Slides: 50
Download presentation
Programiranje 2 – C++ Tipovi podataka i operatori 11. 6. 2021. 12: 41 OOP

Programiranje 2 – C++ Tipovi podataka i operatori 11. 6. 2021. 12: 41 OOP P 2 1

Teme • • • Identifikatori Specijalni znakovi Ugrađeni tipovi podataka Operatori Konverzija tipova Simboličke

Teme • • • Identifikatori Specijalni znakovi Ugrađeni tipovi podataka Operatori Konverzija tipova Simboličke konstante 11. 6. 2021. 12: 41 OOP P 2 2

Identifikatori • Identifikator je ime (promjenljive, konstante, klase, . . . ) • Identifikator

Identifikatori • Identifikator je ime (promjenljive, konstante, klase, . . . ) • Identifikator može da bude sastavljen od slova engleskog alfabeta (A-Z, a-z), brojeva (0 -9) i donje crte (_) • Prvi znak mora da bude slovo ili donja crta • Identifikator ne smije da bude neka ključna riječ 11. 6. 2021. 12: 41 OOP P 2 3

Ključne riječi jezika C++ 11. 6. 2021. 12: 41 OOP P 2 3 OOP

Ključne riječi jezika C++ 11. 6. 2021. 12: 41 OOP P 2 3 OOP P 2 4

Imena (identifikatori) • Izbjegavati nazive koji počinju znakom (_) jer se tako obično označavaju

Imena (identifikatori) • Izbjegavati nazive koji počinju znakom (_) jer se tako obično označavaju sistemske promjenljive • Nazivi koji počinju velikim slovom po pravilu su rezervisani za klase, a oni koji počinju malim za promjenljive – nije dozvoljena primjena znakova (č, š, ž, ć i sl. ) u identifikatorima – ne postoji ograničenje u broju znakova identifikatora, ali ne treba pretjerivati • Mada main nije ključna reč, ponašati se kao da jeste 11. 6. 2021. 12: 41 OOP P 2 5

Ne postoji ograničenje u dužini identifikatora? ? Identifikatore: • Snjeguljica_i_7_patuljaka • Snjeguljica_i_sedam_patuljaka kompajler će

Ne postoji ograničenje u dužini identifikatora? ? Identifikatore: • Snjeguljica_i_7_patuljaka • Snjeguljica_i_sedam_patuljaka kompajler će (ukoliko prepoznaje samo prvih 14 znakova) interpretirati kao iste. Ako kompajler prepoznaje samo prvih 14 znakova 1 2 3 4 5 6 7 8 9 10 12 13 14 20 21 22 23 S n j e g u l j i c a _ i _ 7 _ p a t u l j a k a S n j e g u l j i c a _ i _ s e d a m _ p a t u 11. 6. 2021. 12: 41 11 15 16 OOP P 2 17 18 19 24 25 l 26 27 28 j a k a 6 29

Identifikatori • Jezik C++ razlikuje mala i velika slova (engl. case sensitive) – mali.

Identifikatori • Jezik C++ razlikuje mala i velika slova (engl. case sensitive) – mali. Narodi. Velike. Ideje – Mali. Narodi. Velike. Ideje – mali. Narodi. VELIKEIDEJE • Primjeri loših imena: – 7 Up, Ana-Marija, Ana Marija – Snezana i 7 Patuljaka – Moja. Privatna. Promenljiva – _system 11. 6. 2021. 12: 41 OOP P 2 7

Specijalni znaci 11. 6. 2021. 12: 41 OOP P 2 8

Specijalni znaci 11. 6. 2021. 12: 41 OOP P 2 8

Tipovi podataka • Tip objekta određuje i raspored bitova prema kojem je objekat sačuvan

Tipovi podataka • Tip objekta određuje i raspored bitova prema kojem je objekat sačuvan u memoriji • C++ nudi ugrađene tipove podataka koji odgovaraju: - cijelim brojevima, - realnim brojevima u pokretnom zarezu (floatingpoint) - logičkim vrijednostima • C++ omogućava konstruisanje mnogo složenijih tipova: nabrajanja, strukture i klase 11. 6. 2021. 12: 42 OOP P 2 9

Osnovni ugrađeni tipovi Tip char w_char int float double bool void 11. 6. 2021.

Osnovni ugrađeni tipovi Tip char w_char int float double bool void 11. 6. 2021. 12: 42 Značenje Karakter ili znak Široki karakter, više od jednog bajta Cijeli broj Broj sa pomičnom tačkom Decimalni broj u dvostrukoj preciznosti Logička vrijednost Bez vrijednosti OOP P 2 1 0

Osnovni tipovi (2) • C++ dozvoljava proširivanje osnovnih tipova navođenjem modifikatora ispred naziva tipa

Osnovni tipovi (2) • C++ dozvoljava proširivanje osnovnih tipova navođenjem modifikatora ispred naziva tipa podataka • Postoje 4 modifikatora tipa: - signed, - unsigned, - long, - short 11. 6. 2021. 12: 42 OOP P 2 11

Osnovni tipovi (3) Osnovni tipovi mogu biti: • char, signed char, unsigned char •

Osnovni tipovi (3) Osnovni tipovi mogu biti: • char, signed char, unsigned char • int: – short, int, long – signed int, unsigned int • int: • float: – double, long double • void • nabrajanje (engl. enumerated) 11. 6. 2021. 12: 42 OOP P 2 12

Osnovni (ugrađeni) tipovi podataka 11. 6. 2021. 12: 42 OOP P 2 13

Osnovni (ugrađeni) tipovi podataka 11. 6. 2021. 12: 42 OOP P 2 13

Opseg osnovnih tipova (ANSI/ISO standard) OOP P 2 11. 6. 2021. 12: 42 OOP

Opseg osnovnih tipova (ANSI/ISO standard) OOP P 2 11. 6. 2021. 12: 42 OOP P 2 14

header <cfloat> (float. h) • Karakteristike tipa broja sa pomičnom tačkom (engl. floating-point) •

header <cfloat> (float. h) • Karakteristike tipa broja sa pomičnom tačkom (engl. floating-point) • Zaglavlje cfloat opisuje karakteristike tipova sa pomičnom tačkom za određeni sistem i implemetaciju prevodioca. 11. 6. 2021. 12: 42 OOP P 2 15

header <climits> (limits. h) • Veličine osnovnih tipova 11. 6. 2021. 12: 42 OOP

header <climits> (limits. h) • Veličine osnovnih tipova 11. 6. 2021. 12: 42 OOP P 2 16

#include <iostream> Opseg vrijednosti #include <climits> osnovnih tipova #include <cfloat> int main() { using

#include <iostream> Opseg vrijednosti #include <climits> osnovnih tipova #include <cfloat> int main() { using namespace std; → aktivira se imenik standardnih funkcija Najmanji int cout<<"Najmanji int-2147483648 "<<INT_MIN<<endl; Najveći int cout<<"Najveci int 2147483647 "<<INT_MAX<<endl; cout<<Najmanji "Najmanjilong-2147483648 "<<LONG_MIN<<endl; cout<<Najveci "Najvecilong 2147483647 "<<LONG_MAX<<endl; float 1. 17549 e-038 cout<<Najmanji "Najmanji float "<<FLT_MIN<<endl; cout<<Najveci "Najveciintint 1. 17549 e-038 "<<FLT_MIN<<endl; 2. 22507 e-308 cout<<Najmanji "Najmanjidouble "<<DBL_MIN<<endl; 1. 79769 e+308 cout<<Najveci "Najvećidouble "<<DBL_MAX<<endl; return 0; } 11. 6. 2021. 12: 42 OOP P 2 17

#include <iostream> Tipovi short, int, long int main() { using namespace std; cout <<

#include <iostream> Tipovi short, int, long int main() { using namespace std; cout << "The size of an int is: " << sizeof(int)<< " bytes. n"; cout << "The size of a short int is: " << sizeof(short)<<" bytes. n"; cout << "The size of a long int is: "<< sizeof(long) <<" bytes. n"; return 0; } The size of an int is: 4 bytes. The size of a short int is: 2 bytes. The size of a long int is: 4 bytes. 11. 6. 2021. 12: 42 OOP P 2 18

Osnovni (ugrađeni) tipovi podataka • Svi podaci i promjenljive u programu moraju biti definisanog

Osnovni (ugrađeni) tipovi podataka • Svi podaci i promjenljive u programu moraju biti definisanog tipa (C++ je “strogo tipiziran” jezik) • Svi osnovni tipovi su standardno označeni (signed) • Veličina nekog osnovnog tipa u bajtovima može se saznati primjenom operatora sizeof • Deklaracije promjenljivih se mogu nalaziti bilo gdje u programu ali prije prvog korištenja promjenljive • Promjenljiva se deklariše navođenjem imena i tipa: int vrijeme; 11. 6. 2021. 12: 42 OOP P 2 19

Primjer tipova podataka int i; → deklaracija promjenljive int j=1, k=2; → deklaracija i

Primjer tipova podataka int i; → deklaracija promjenljive int j=1, k=2; → deklaracija i inicijalizacija promjenljive float f 1=3. 4, f 2=0. 0; double PI=3. 14; char a='a', nul='0'; 11. 6. 2021. 12: 42 OOP P 2 20

Tipovi int, float i double #include <iostream> using namespace std; int main() { cout<<(float)1/3<<endl;

Tipovi int, float i double #include <iostream> using namespace std; int main() { cout<<(float)1/3<<endl; cout<<1/3. f<<endl; cout<<1/3<<endl; return 0; } Bez. f broj se interpretira kao int, 1/3 = (int)1/(int)3 => (int)0 umjesto da bude (float) 0. 333333. Ovdje. f kaže prevodiocu da interpretira literal kao float broj. 0. 333333 0 11. 6. 2021. 12: 42 OOP P 2 21

Tip char • Promjenljive tipa char sadrže 8 -bitne ASCII znakove, koji se navode

Tip char • Promjenljive tipa char sadrže 8 -bitne ASCII znakove, koji se navode pod apostrofima • Tip char se može koristiti i kao “mali” int opsega od -128 do +127 • Postoji i tip w_char (wide character) koji se koristi za Unikod (engl. Unicode) i internacionalizaciju char a = `a`; cout << a; 11. 6. 2021. 12: 42 OOP P 2 22

Tip string #include <iostream> #include <string> using namespace std; int main () { string

Tip string #include <iostream> #include <string> using namespace std; int main () { string mystring; mystring = "Ovo je string"; cout << mystring<<endl; return 0; Ovo je string } 11. 6. 2021. 12: 43 OOP P 2 23

Tip nabrajanja (engl. enumerated type) • Ideja za tip nabrajanja je kreiranje novih tipova

Tip nabrajanja (engl. enumerated type) • Ideja za tip nabrajanja je kreiranje novih tipova podataka koji imaju ograničen broj vrijednosti • Takođe, ove vrijednosti su konstante, a ne brojevi. enum wind_directions_t {NO_WIND, NORTH_WIND, SOUTH_WIND, EAST_WIND, WEST_WIND}; • Imena konstanti trebaju biti dovoljna za poređenje vrijednosti. . . 11. 6. 2021. 12: 43 OOP P 2 24

Tip nabrajanja: Primjer #include <iostream> using namespace std; int main () { enum wind_directions_t

Tip nabrajanja: Primjer #include <iostream> using namespace std; int main () { enum wind_directions_t {NO_WIND, NORTH_WIND, SOUTH_WIND, EAST_WIND, WEST_WIND}; wind_directions_t wind_direction = WEST_WIND; cout << static_cast<int>( wind_direction )<<endl; system ("pause"); Rezultat return 0; 4 } 11. 6. 2021. 12: 43 OOP P 2 25

Tip bool • C++ definiše dvije konstante, true i false • Bilo koja vrijednost

Tip bool • C++ definiše dvije konstante, true i false • Bilo koja vrijednost različita od nule tumači se kao true, a vrijednost 0 tumači se kao false; – ovo svojstvo je naročito korisno u logičkim izrazima • Kada se koristi u izrazima koji nisu logički, važi obrnuto: true se konvertuje u 1, a false u 0 11. 6. 2021. 12: 43 OOP P 2 26

Tip bool (2) #include <iostream> int main() { using namespace std; bool b=false; cout<<"b

Tip bool (2) #include <iostream> int main() { using namespace std; bool b=false; cout<<"b je: " <<b<<endl; b=true; cout<<"b je: "<<b<<endl; return 0; b je: 0 } b je: 1 11. 6. 2021. 12: 43 OOP P 2 27

Komentari • Olakšavaju razumijevanje programa, ali nisu obavezni • Dvije kose crte označavaju jednolinijski

Komentari • Olakšavaju razumijevanje programa, ali nisu obavezni • Dvije kose crte označavaju jednolinijski komentar, koji se proteže od znaka // do kraja reda • Sve što počinje sa /* i završava sa */ je komentar 11. 6. 2021. 12: 43 OOP P 2 28

Promjenljive (varijable) • Osnovna jedinica za čuvanje podataka u programu • Mjesto u memoriji

Promjenljive (varijable) • Osnovna jedinica za čuvanje podataka u programu • Mjesto u memoriji za zapis neke proste vrijednosti ili pokazivača na objekat • Naziva se promjenljiva zato što tokom izvršavanja programa to mjesto može da sadrži različite vrijednosti (istog tipa) 11. 6. 2021. 12: 43 OOP P 2 29

Promjenljive (2) • Svaka promjenljiva se mora deklarisati prije prve upotrebe, bilo gdje u

Promjenljive (2) • Svaka promjenljiva se mora deklarisati prije prve upotrebe, bilo gdje u programu • Deklaracija promjenljive: tip ime; tip ime = početna vrednost; • Promjenljiva sadrži vrijednost ili je pokazivač na objekat. • Ako sadrži vrijednost, ta vrijednost je literal (primitivni tip). • Dodjeljivanje početne vrijednosti zove se inicijalizacija • Definicija promjenljive podrazumjeva rezervisanje prostora za promjenljivu u memoriji 11. 6. 2021. 12: 43 OOP P 2 30

Konstante • Vrijednosti koje predstavljaju same sebe, tj. fiksne vrijednosti bilo kog tipa OOP

Konstante • Vrijednosti koje predstavljaju same sebe, tj. fiksne vrijednosti bilo kog tipa OOP P 2 11. 6. 2021. 12: 43 OOP P 2 31

Konstante (2) Konstante mogu biti literali i simbolične konstante. • Literalne konstante int b

Konstante (2) Konstante mogu biti literali i simbolične konstante. • Literalne konstante int b =25, • Simbolične konstante broj. Studenata = broj. Ucionica * 30; 11. 6. 2021. 12: 43 OOP P 2 32

Definisanje konstanti • Korišćenjem “#define” #define broj. Studenata 30; • Korišćenjem “const” const unsigned

Definisanje konstanti • Korišćenjem “#define” #define broj. Studenata 30; • Korišćenjem “const” const unsigned short broj. Studenata = 30; • Vrijednost konstante mora biti inicijalizovana tokom deklaracije 11. 6. 2021. 12: 43 OOP P 2 33

Konstante (3) • Heksadecimalne konstante počinju sa 0 x • Sve konstante koje počinju

Konstante (3) • Heksadecimalne konstante počinju sa 0 x • Sve konstante koje počinju sa 0 prevodilac tretira kao oktalne brojeve int broj 1 = 0 x 0 C; //12 decimalno int broj 2= 010; //8 decimalno • Ako tip literala nije zadat, C++ kompajler standardno cijeloj vrijednosti dodjeljuje najmanji cjelobrojni tip u koji ona može da stane, dok su realne konstante standardno tipa double 11. 6. 2021. 12: 43 OOP P 2 34

Izrazi • Izraz je iskaz u programu koji sadrži operande (objekte, funkcije ili literale

Izrazi • Izraz je iskaz u programu koji sadrži operande (objekte, funkcije ili literale nekog tipa) i operacije nad tim operandima – generiše rezultat tačno definisanog tipa. – operacije se zadaju pomoću operatora ugrađenih u jezik. 11. 6. 2021. 12: 43 OOP P 2 35

Operatori • • • Operator dodjele Aritmetički operatori Relacioni i logički operatori Operator nabrajanja

Operatori • • • Operator dodjele Aritmetički operatori Relacioni i logički operatori Operator nabrajanja (razdvajanja) Operator sizeof 11. 6. 2021. 12: 43 OOP P 2 36

Operator dodjele vrijednost = izraz; • Moguća je i lančana dodjela int x, y,

Operator dodjele vrijednost = izraz; • Moguća je i lančana dodjela int x, y, z; x=y=z=10, • Izraz tipa vrijednost = vrijednost + izraz može se napisati kao vrijednost += izraz; • Treba zapamtiti suštinsku razliku između jednostrukog znaka jednakosti (=) koji je simbol za dodjelu, i dvostrukog znaka jednakosti (==) koji je simbol za poređenje 11. 6. 2021. 12: 43 OOP P 2 37

Aritmetički operatori • Operator moduo (modulo) (%) može se primjenjivati isključivo na cjelobrojne promjenljive

Aritmetički operatori • Operator moduo (modulo) (%) može se primjenjivati isključivo na cjelobrojne promjenljive 11. 6. 2021. 12: 43 OOP P 2 38

Operacija dijeljenja • Da bi se izbjegle nedoumice oko tipa rezultata, preoručljivo je pisati

Operacija dijeljenja • Da bi se izbjegle nedoumice oko tipa rezultata, preoručljivo je pisati floating point konstante sa tačkama, čak i kada nemaju decimalnih mijesta float rezultat = 3 / 4; //rezultat je nula. rezultat =3. / 4. ; //rezultat je 0. 75 11. 6. 2021. 12: 44 OOP P 2 39

Inkrement i dekrement • Ove operatore treba koristiti kad god je moguće (generišu efikasan

Inkrement i dekrement • Ove operatore treba koristiti kad god je moguće (generišu efikasan kod) Primjer int brojac; brojac = 0; //sledeće tri naredbe su identične brojac = brojac +1; brojac++; ++brojac; 11. 6. 2021. 12: 44 OOP P 2 40

Inkrement i dekrement (2) • Razlikujemo prefiksnu (++i) i postfiksnu (i++) notaciju #include <iostream>

Inkrement i dekrement (2) • Razlikujemo prefiksnu (++i) i postfiksnu (i++) notaciju #include <iostream> int main() { using namespace std; int i=100; int j=++i; cout<<"t=0, j ="<<j<<endl; int k=100; j =k++; cout<<"t=1, j ="<<j<<endl; return 0; t=0, j =101 } t=1, j =100 11. 6. 2021. 12: 44 OOP P 2 41

Relacioni i logički operatori 11. 6. 2021. 12: 44 OOP P 2 42

Relacioni i logički operatori 11. 6. 2021. 12: 44 OOP P 2 42

Operator razdvajanja ili nabrajanja (, ) • Vrijednost niza izraza je ona koja je

Operator razdvajanja ili nabrajanja (, ) • Vrijednost niza izraza je ona koja je posljednja u nizu. #include <iostream> int main() { using namespace std; long l 1=1, l 2=2, l 3=3, l 4=4; l 4= (l 1=10, l 2=20, l 3=30); cout<<"l 4 = "<<l 4<<endl; return 0; } l 4 = 30 11. 6. 2021. 12: 44 OOP P 2 43

Operator sizeof #include <iostream> int main() • Prikazuje dužinu određenog tipa u bajtovima {

Operator sizeof #include <iostream> int main() • Prikazuje dužinu određenog tipa u bajtovima { using namespace std; cout << "The size of an int is: " << sizeof(int)<< " bytes. n"; cout << "The size of a short int is: " << sizeof(short)<<" bytes. n"; cout << "The size of a long int is: "<< sizeof(long) <<" bytes. n"; return 0; } The size of an int is: 4 bytes. The size of a short int is: 2 bytes. The size of a long int is: 4 bytes. 11. 6. 2021. 12: 44 OOP P 2 44

Prioritet operatora • Redosled izvršavanja operatora je definisan, ali se uvijek može izmjeniti pomoću

Prioritet operatora • Redosled izvršavanja operatora je definisan, ali se uvijek može izmjeniti pomoću zagrada • Dobra je navika stavljati zagrade i razmake uvijek kada postoji dilema o hijerarhiji operatora 11. 6. 2021. 12: 44 OOP P 2 45

Konverzija tipova u izrazima i dodjelama • Kada u izrazu dodjele učestvuju operatori različitih

Konverzija tipova u izrazima i dodjelama • Kada u izrazu dodjele učestvuju operatori različitih tipova, vrijednost desne strane (izraza) biće konvertovana u tip lijeve strane (tip promjenljive) • Kada u izrazu učestvuju operandi različitih tipova, svi se konvertuju u tip najvećeg operanda (tzv. unapređivanje tipa) 11. 6. 2021. 12: 44 OOP P 2 46

Konverzija tipova Prioritet operatora (konverzije) Tipovi operatora long double 11. 6. 2021. 12: 44

Konverzija tipova Prioritet operatora (konverzije) Tipovi operatora long double 11. 6. 2021. 12: 44 ↑ double ↑ float ↑ unsigned long ↑ unsigned int ↑ unsigned short ↑ unsigned char ↑ OOP P 2 char 47

Konverzija tipa: cast (static_cast) static_cast <tip> (izraz) ili (tip)izraz #include <iostream> int main() {

Konverzija tipa: cast (static_cast) static_cast <tip> (izraz) ili (tip)izraz #include <iostream> int main() { using namespace std; float pi=3. 1415926; cout<<"Cijeli dio broja pi "<<static_cast<int>(pi) <<endl; cout<<"Cijeli dio broja pi "<<(int)pi<<endl; return 0; Cijeli dio broja pi 3 } Cijeli dio broja pi 3 11. 6. 2021. 12: 44 OOP P 2 48

Zaključak • • • Identifikator je ime (promjenljive, konstante, klase, . . . ):

Zaključak • • • Identifikator je ime (promjenljive, konstante, klase, . . . ): A-Z, az, 0 -9 i donja crta (_) Prvi znak identifikatora mora da bude slovo ili donja crta i ne smije da bude neka ključna riječ Tipovi podataka: char, w_char, int, float, double, bool, void Promjenljive (varijable) čuvaju mjesto u memoriji za zapis neke proste vrijednosti ili pokazivača na objekat Operatori: operator dodjele, aritmetički operatori, relacioni i logički operatori, operator nabrajanja (razdvajanja), operator sizeof Konverzija tipova: ako se u izrazu nađu operatori različitih tipova 11. 6. 2021. 12: 44 OOP P 2 49

Kraj prezentacije br. 2 HVALA NA PAŽNJI! 11. 6. 2021. 12: 44 OOP P

Kraj prezentacije br. 2 HVALA NA PAŽNJI! 11. 6. 2021. 12: 44 OOP P 2 50