1.19k likes | 1.58k Vues
Tipovi podataka. *. Elementarni tipovi podataka. *. char (1). byte. Obuhvaća brojeve od - 12 8 do 12 7. *. short int (2). byte. byte. Obuhvaća brojeve od -32768 do 32767. *. int/long int (4). byte. byte. byte. byte. Obuhvaća brojeve od -2147483648 do 2147483647. *.
E N D
char (1) byte Obuhvaća brojeve od-128 do127 *
short int (2) byte byte Obuhvaća brojeve od-32768 do 32767 *
int/long int (4) byte byte byte byte Obuhvaća brojeve od-2147483648 do 2147483647 *
float (4) byte byte byte byte Obuhvaća brojeve od-3.4*1038 do -3.4*10-38i3.4*10-38do 3.4*1038.Zajamčena točnost: 7 decimala *
double (8) byte byte byte byte byte byte byte byte Obuhvaća brojeve od-1.7 *10308do -1.7 *10-308i1.7 *10-308 do 1.7 *10308Zajamčena točnost: 15 decimala *
long double (12) byte byte byte byte byte byte byte byte byte byte byte byte Obuhvaća brojeve od-1.1*104932 do -3.4*10-4932i3.4*10-4932 do 1.1*104932Zajamčena točnost: 18 decimala *
cout << “Veličina cijelih brojeva: “ << sizeof (int); cout <<“Veličina realnih brojeva: “<< sizeof (float); float a = 2.51;cout << Veličina a: ”<< sizeof(a); Napomena:Duljina i opseg memorijskog prostora koje zauzimaju pojedini tipovi podataka u C++ nisu standardizirani! Podaci za cjelobrojne tipove mogu se naći u datoteci limits, a za realne u cfloat. Veličina pojedinih tipova(sizeof) *
unsigned short int i = 50000; Kako je to moguće, ako se zna da jeSHRT_MAX = 215 - 1 = 32767? Jednostavno! Krajnji lijevi bitu kojem se inače nalazi predznak, koristi se za broj: USHRT_MAX = 216 - 1 = 65535 Ali, broj ne smije biti negativan!!! *
#include <iostream> #include <limits> using namespace std; int main() { cout << "Granicne vrijednosti cjelobrojnih tipova" << "podataka" << endl << endl; cout << "short: " << SHRT_MIN << "-" << SHRT_MAX << endl; cout << "unsigned short: " << 0 << "-" << USHRT_MAX << endl; cout << "long: " << LONG_MIN << "-" << LONG_MAX << endl; Doseg cjelobrojnih tipova *
cout << "unsigned long: " << 0 << "-" << ULONG_MAX << endl; cout << "int: " << INT_MIN << "-" << INT_MAX << endl; cout << "unsigned int: " << 0 << "-" << UINT_MAX << endl; cout << "char: " << SCHAR_MIN << "-" << SCHAR_MAX << endl; cout << "unsigned char: " << 0 << "-" << UCHAR_MAX << endl; return 0; } Doseg cjelobrojnih tipova *
#include <iostream> #include <cfloat> #include <iomanip> using namespace std; int main() { cout << "Granicne vrijednosti decimalnih tipova" << "podataka" << endl << endl; long double a=LDBL_MAX; cout << "float: " << setprecision(FLT_DIG) << -FLT_MAX << "-" << FLT_MAX << " , " << endl << " " << -FLT_MIN << "-" << FLT_MIN << endl << " mantisa: " << FLT_MANT_DIG << " bita" << endl << endl; Doseg decimalnih tipova *
cout << "double: " << setprecision(DBL_DIG) << -DBL_MAX << "-" << DBL_MAX << " , " << endl << " " << -DBL_MIN << "-" << DBL_MIN << endl << " mantisa: " << DBL_MANT_DIG << " bita" << endl; return 0; } Doseg decimalnih tipova *
Pobrojenja(enumerated types) enum dani {ponedjeljak, utorak, srijeda, cetvrtak, petak, subota, nedjelja}; Ovom deklaracijom uvodi se novi tip podataka (dani), te sedam nepromjenjivih identifikatora (ponedjeljak, utorak,...) toga tipa. Vrijednost prvog identifikatora biti će 0, drugog 1, itd.: dani HvalaBoguDanasJe = petak;dani ZakajJaNeVolim = ponedjeljak;cout<<HvalaBoguDanasJe<<endl; // ispisuje 4 *
operand operand operacija c=(a + b) izraz c=(a + b) operator *
Operator je znak ili riječ koja određuje vrstu operacije. Operacija je postupak koji želimo izvršiti. Operand je podatak koji sudjeluje u operaciji. Izraz je sažeta uputa računalu, odnosno prikaz operacije koju želimo izvršiti s pomoću operanada (faktora). Definicije *
unarni operatori • predznaci +X unarni plus -X unarni minus • inkremencija X++ uvećaj nakon ++X uvećaj prije • dekremencija X-- umanji nakon --X umanji prije Unarni su oni operatori koji se upotrebljavaju u kombinaciji sa samo jednim operandom. *
prefiks operatori ++X uvećaj prije --X umanji prije primjer: int i=1; cout<<(++i)<<endl; // ispisuje 2 int i=1; i=i+1; out<<i<<endl; // ispisuje 2 Daje isti rezultat *
postfiks operatori X ++ uvećaj nakon X -- umanji nakon primjer:int i=1;cout<<(i++)<<endl;// ispisuje 1, pa tek// onda povećava ’i’ int i=1;cout<<i<<endl;// ispisuje 1 i=i+1; Daje isti rezultat *
binarni operatori • zbrajanje X + Y • oduzimanje X - Y • množenje X * Y • dijeljenje X / Y • modulo*X % Y • * Ostatak od cjelobrojnog dijeljenja Binarni su oni operatori koji se upoterbljavaju u kombinaciji s dva operanda. *
operator dodjele tipa Želimo podijeliti dvije cjelobrojne varijable, a da rezultat bude realni broj: Deklaracija i definicija varijabli:int Brojnik = 1; int Nazivnik = 3; Ovo nije u redu:float Krivo = Brojnik / Nazivnik; // ispisuje nulu!!! Ovo je OK:float TocniKvocijent = (float)Brojnik / (float)Nazivnik; I ovo:float TocniKvocijent = float(Brojnik) / float(Nazivnik); *
Kada se u kôdu pojavljuju brojčane konstante, prevoditelj ih pohranjuje u formatu nekog od osnovnih tipova. • S brojevima koji sadrže dec. točku ili slovo e, odnosno E, prevoditelj barata kao s podacima tipa double, dok sve ostale brojeve tretira kao int. Npr:cout<<(short) 10<<endl // short int cout<<(unsigned) 60000<<endl // unsigned int • Češće se za specificiranje konstanti koriste sufiksi - posebni znakovi za eksplicitno određivanje tipa brojčane konstante. *
Djelovanje sufiksa na cjelobrojne konstante Broj ispred Sufiks Rezultirajući Primjersufiksa tip cijeli int 2468 L, llong int 645672L U, u unsigned int 65000U decimalni double 3.14 F, f float 1.234F L, l long double 1.602e-4583L *
Simboličke konstante • umjestofloat Opseg = 2. * r * 3.14159265359; float Povrsina = r * r * 3.14159265359; double Oplosje = 4. * r * r * 3.14159265359; • može se pisaticonst double Pi = 3.14159265359; ili #define Pi = 3.14159265359; i onda float Opseg = 2. * r * Pi; float Povrsina = r * r * Pi; double Oplosje = 4. * r * r * Pi;ž *
int NadmorskaVisinaVarazdina = 0255// odgovara dekadskom 173 Konstante koje započinju s0 (nula) interpretiraju se kaooktalne. Oktalne konstante *
int ProsjGodisnjaTempZaVzd = 0xA// odgovara dekadskom broju 10 Konstante koje započinju s0x interpretiraju se kaoheksadecimalne Heksadecimalne konstante *
Logički tipovi podataka • bool ImamLiMnogoNovaca =false;bool JeLiVamDosadno = true; Tip podataka bool je zapravo pobrojenje: enum bool {false,true}; true = 1; false = 0; George Bool (1815-1864), engleski matematičar, utemeljitelj logičke algebre *
Logički operatori ! x negacija (not) x && y konjunkcija (and - logičko ’i’) x || y disjunkcija (or - logičko ‘ili’) *
Operatori uspoređivanja • 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 (nejednako) *
Jednostavni logički izrazi a = = b operand 1(subjekt) relacija(odnos) operand 2(objekt) sud(tvrdnja) *
Složeni logički izrazi logički operator 1 logičkioperator 2 (a < b) && (c = = d) || (e > f) jednostavnilog. izraz 2 jednostavnilog. izraz 3 jednostavnilog. izraz 1 sud(tvrdnja) * *
Primjer 1. (a < b) && (c = = d) || (e > f) && 0 1 1 || 0 1 a = b = 1c = d = 2e = 4f = 3 1 *
Primjer 2. (a < b) && ((c = = d) || (e > f)) || 0 1 1 && 0 1 a = b = 1c = d = 2e = 4f = 3 0 *
Prioriteti ispitivanja (1) zagrade (2) jednostavni logički izrazi (3) negacije (4) konjunkcija (5) disjunkcija *
Fakultet nagrađuje najboljeg studenta studijskim putovanjem u SAD. Kandidiraju studenti A i B. Nagrada je samo jedna, a dobiti će je bolji. Kriteriji: bolji je onaj koji ima veću prosječnu ocjenu (Po), ako su im prosječne ocjene jednake, bolji je onaj koji je položio više ispita (Bi), ako imaju iste prosječne ocjene i jednaki broj položenih ispita, bolji je onaj koji je ispite položio u manje pokušaja (Bp). Zadatak: postavite složeni logički izraz čijim će se ispitivanjem doznati tko će dobiti nagradu. Pretpostavka: ne može se dogoditi da svi kriteriji budu jednaki. Zadatak *
if (PoA>PoB) || (PoA = = PoB) && (BiA > BiB) || (PoA = = PoB) && (BiA > BiB) && (BpA<BpB) cout << “A je bolji” << endl; else cout << “B je bolji” << endl; Rješenje Podaci za test (1) PoA=4.82 PoB=4.83 BiA=BiB=28 BpA=30 BpB=29 Podaci za test (2) PoA=PoB=4.83 BiA=28 BiB=27 BpA=30 BpB=29 Podaci za test (3) PoA=PoB=4.83 BiA=BiB=28 BpA=30 BpB=29 B B A *
Bitovni operatori • i komplement • i & n bitovni ‘i’ • i | n bitovni ‘ili’ • i ^ n isključivi ‘ili’ • i << n pomak u lijevo • i >> n pomak u desno *
Komplement Postavlja 0 (nule) u 1 (jedan), a 1 (jedan) u 0 (nule): Primjer:00100101 = 11011010 00100101
Komplement Postavlja 0 (nule) u 1 (jedan), a 1 (jedan) u 0 (nule): Primjer:00100101 = 11011010 10100101