1.07k likes | 1.4k Views
C++. Operatori 6. dio. Operatori. Operatori su simboli koji predstavljaju (zamjenjuju) određene funkcije . U C++ je definirano nekoliko skupina operatora . Npr.: aritmetički operatori, logički operatori, operatori uspoređivanja , ostali operatori. Aritmetički operatori.
E N D
C++ Operatori 6. dio (c) S.Šutalo i D.Grundler, 2007.
Operatori • Operatori su simboli koji predstavljaju (zamjenjuju) određene funkcije. • U C++ je definirano nekoliko skupina operatora. Npr.: • aritmetički operatori, • logički operatori, • operatori uspoređivanja, • ostali operatori. (c) S.Šutalo i D.Grundler, 2007.
Aritmetički operatori • Aritmetički operatori mogu biti: • binarni (djeluju na dvije varijable), • unarni (djeluju na samo jednu varijablu). (c) S.Šutalo i D.Grundler, 2007.
Binarni aritmetički operatori • U tablici su prikazani binarni operatori za izvođenje osnovnih aritmetičkih funkcija. (c) S.Šutalo i D.Grundler, 2007.
Unarni aritmetički operatori • Unarni operatori djelujusamo na jednu varijablu. • Postoje ovi unarni operatori: • za promjenu predznaka, • za uvećavanje (inkrementiranje), • za umanjivanje (dekrementiranje). (c) S.Šutalo i D.Grundler, 2007.
Unarni aritmetički operatori (c) S.Šutalo i D.Grundler, 2007.
Unarni aritmetički operatori • Pri uporabi unarnih operatora važno je paziti na položaj operatora (da li se nalazi prije ili poslije varijable) jer se njegovo djelovanje u jednom i drugom slučaju razlikuje. (c) S.Šutalo i D.Grundler, 2007.
Unarni operatori prije varijable • Ako je operator ispred varijable (npr. ++a) tada se u izrazu računa s uvećanom/umanjenom vrijednošću varijable. U primjeru a=1; b=++a +5; po izvršenju naredbi, sadržaj varijable b=7. (Prvo se povećavrijednost varijable aza 1 a zatim se računa vrijednost izraza.) (c) S.Šutalo i D.Grundler, 2007.
Unarni operatori nakon varijable • Ako je operator iza varijable (npr. a++) tada se vrijednost varijable uveća/umanji tek nakon izračunavanja izraza. U primjeru a=1; b=a++ +5; po izvršenju naredbi, sadržaj varijable b=6. (Prvo se računa vrijednost izraza, a nakon toga se povećavavrijednost varijable a za 1.) (c) S.Šutalo i D.Grundler, 2007.
Slijedi nekoliko primjera uporabe aritmetičkih operatora (binarnih i unarnih). (c) S.Šutalo i D.Grundler, 2007.
Primjer 11 • Zadatak (binarni aritmetički operatori): • Treba izračunati zbroj, razliku, umnožak i kvocijent dvaju realnih brojeva. • Ispis neka bude oblika: • Unesi prvi broj: • unesi drugi broj: • .... + .... = .... • .... - .... = .... • .... * .... = .... • .... / .... = .... (c) S.Šutalo i D.Grundler, 2007.
Primjer 11 • Napomene: • Na početku deklarirati dvije realne varijable. • Aritmetički operatori i znak = mogu se unijeti kao znakovni nizovi. (c) S.Šutalo i D.Grundler, 2007.
Primjer 11 (c) S.Šutalo i D.Grundler, 2007.
Primjer 11 #include<iostream> using namespace std; int main() { float a,b; cout<<"Unesi prvi broj:"<<endl; cin>>a; cout<<"unesi drugi broj:"<<endl; cin>>b; cout<<a<<"+"<<b<<"="<<a+b<<endl; cout<<a<<"-"<<b<<"="<<a-b<<endl; cout<<a<<"*"<<b<<"="<<a*b<<endl; cout<<a<<"/"<<b<<"="<<a/b<<endl; return 0; } (c) S.Šutalo i D.Grundler, 2007.
Primjer 11 • Upozorenje: • Ako se aritmetički izraz zapiše unutar navodnika, postaje znakovni niz! • Rezultat tada neće biti vrijednost aritmetičkog izraza! ! (c) S.Šutalo i D.Grundler, 2007.
Primjer 11 • Provjera programa s podacima za koje je unaprijed poznat krajnji rezultat. (c) S.Šutalo i D.Grundler, 2007.
Primjer 12 • Zadatak (aritmetički operator modulo): • Potrebno je izračunati cjelobrojni kvocijent i ostatak dijeljenja dvaju cijelih brojeva. • Ispis neka bude oblika: Upisi djeljenik: Upisi djelitelj: ... : ... = ...cijelih, a ostatak je ... (c) S.Šutalo i D.Grundler, 2007.
Primjer 12 • Napomene: • Deklarirati četiri cjelobrojne varijable (dvije za ulazne veličine, a dvije za pohranu rezultata). (c) S.Šutalo i D.Grundler, 2007.
Primjer 12 (c) S.Šutalo i D.Grundler, 2007.
Primjer 12 #include<iostream> using namespace std; int main() { int a,b,ostatak,kvoc; cout<<"Upisi djeljenik:"; cin>>a; cout<<"Upisi djelitelj:"; cin>>b; kvoc=a/b; ostatak=a%b; cout<<a<<":"<<b<<"="<<kvoc <<" cijelih, a ostatak je "<<ostatak<<endl; return 0; } (c) S.Šutalo i D.Grundler, 2007.
Primjer 12 • Upozorenje: • Ako se varijable zapohranuulaznih podataka deklariraju kao realne, javit će se pogreška! • Ako se varijable za izlazne podatke deklariraju kao realne, javit će se upozorenje. (c) S.Šutalo i D.Grundler, 2007.
Primjer 12 • Provjera programa s podacima za koje je unaprijed poznat krajnji rezultat. (c) S.Šutalo i D.Grundler, 2007.
Primjer 13 • Zadatak (redoslijed izvršavanja operatora): • Potrebno je izračunati srednju vrijednost po volji izabrana četiri realna broja. • Ispis neka bude oblika: Unesi cetiri realna broja, odvoji ih prazninama: Srednja vrijednost brojeva ...., ...., .... i .... je ..... (c) S.Šutalo i D.Grundler, 2007.
Primjer 13 • Napomene: • Na početku deklarirati pet realnih varijabli (četiri za pohranu podataka koje odabire korisnik i jednu za pohranu rezultata). • Obratiti pozornost na redoslijed izvršavanja operatora (osnovnih matematičkih operacija). (c) S.Šutalo i D.Grundler, 2007.
Primjer 13 (c) S.Šutalo i D.Grundler, 2007.
Primjer 13 #include<iostream> using namespace std; int main() { float a,b,c,d,srvr; cout<<"Unesi cetiri realna broja,"<<endl; cout<<"odvoji ih prazninama."<<endl; cin>>a>>b>>c>>d; srvr=(a+b+c+d)/4; cout<<endl<<"Srednja vrijednost brojeva: "<<endl; cout<<a<<", "<<b<<", "<<c<<" i "<<d<<" je "<<srvr<<endl; return 0; } (c) S.Šutalo i D.Grundler, 2007.
Primjer 13 • Upozorenje: • Ako se srednja vrijednost računa prema ovoj formuli, rezultat nije dobar: srvr=a+b+c+d/4; Rezultat je neispravan zbog redoslijeda izvršavanja operatora. Računa se: a+b+c+(d/4) (c) S.Šutalo i D.Grundler, 2007.
Primjer 13 • Upozorenje: • Akoispis nije pregledan, između riječi i brojevatreba staviti razmake(potrebno ih je predvidjeti unutar znakova navodnika). (c) S.Šutalo i D.Grundler, 2007.
Primjer 13 • Provjera programa. • Ispravno je rješenje dobiveno uporabom zagrada. srvr=(a+b+c+d)/4 (c) S.Šutalo i D.Grundler, 2007.
Unarni operatori • U primjerima se unosi cijeli broj, a zatim se prikazuje djelovanje unarnih operatora na njega. • Treba uočiti razlikuizmeđuoperatora zapisanog ispred varijable i operatora zapisanog iza varijable (zadaci 15 i 16). (c) S.Šutalo i D.Grundler, 2007.
Primjer 14 • Zadatak (unarni operator za promjenu predznaka): • Potrebno je unijeti cijeli broj, a zatim mu unarnim operatorom promijeniti predznak. • Ispis neka bude oblika: Unesi broj: Kada se broju .... promijeni predznak, on postaje .... (c) S.Šutalo i D.Grundler, 2007.
Primjer 14 (c) S.Šutalo i D.Grundler, 2007.
Primjer 14 #include<iostream> using namespace std; int main() { int a; cout<<"Unesi broj:"; cin>>a; cout<<endl<<"Kada se broju "<<a <<" promijeni predznak, on postaje "<<-a<<endl; return 0; } (c) S.Šutalo i D.Grundler, 2007.
Primjer 14 • Provjera programa s podacima za koje je unaprijed poznat krajnji rezultat. (c) S.Šutalo i D.Grundler, 2007.
Primjer 15a • Zadatak (unarni operator za uvećavanje nakon dobave iz memorije): • Potrebno je unijeti cijeli broj i pohraniti ga u varijablu A, a zatim na taj broj primijeniti unarni operator za uvećavanje nakon dobave iz memorije (A++). • Ispis neka bude oblika: Unesi broj za operaciju A++: Kad operacija zavrsi X= ... Kad operacija zavrsi A= ... (c) S.Šutalo i D.Grundler, 2007.
Primjer 15a Podatak se dobavi iz memorije, pa se pridruži varijabli X, a nakon toga se uveća za 1 u memoriji. (c) S.Šutalo i D.Grundler, 2007.
Primjer 15a #include <iostream> using namespace std; int main() { int X,A; cout<<"Unesi broj za operaciju A++: "; cin>>A; X=A++; cout<<"Kad operacija zavrsi X= "<<X<<endl; cout<<"Kad operacija zavrsi A= "<<A<<endl; return 0; } (c) S.Šutalo i D.Grundler, 2007.
Primjer 15a • Provjera programa: • Unesen je broj i pohranjen u varijablu A. Zbogunarnog operatora za uvećavanje nakon dobave iz memorije, podatak je prvo dobavljen iz memorije, pa je pridružen varijabli X, a nakon toga je uvećan za 1. (c) S.Šutalo i D.Grundler, 2007.
Primjer 15b • Zadatak (unarni operator za uvećavanje prije dobave iz memorije): • Potrebno je unijeti cijeli broj i pohraniti ga u varijablu A, a zatim na taj broj primijeniti unarni operator za uvećavanje prije dobave iz memorije (++A). • Ispis neka bude oblika: Unesi broj za operaciju ++A: Kad operacija zavrsi X= ... Kad operacija zavrsi A= ... (c) S.Šutalo i D.Grundler, 2007.
Primjer 15b Najprije se podatak uveća za 1 u memoriji pa se dobavi iz memorije i pridruži varijabli X. (c) S.Šutalo i D.Grundler, 2007.
Primjer 15b #include <iostream> using namespace std; int main() { int X,A; cout<<"Unesi broj za operaciju ++A: "; cin>>A; X=++A; cout<<"Kad operacija zavrsi X= "<<X<<endl; cout<<"Kad operacija zavrsi A= "<<A<<endl; return 0; } (c) S.Šutalo i D.Grundler, 2007.
Primjer 15b • Provjera programa: • Unesen je broj i pohranjen u varijablu A. Zbogunarnog operatora za uvećavanje prije dobave iz memorije, podatak je prvo uvećan za 1 u memoriji pa je dobavljen iz memorije i pridružen varijabli X. (c) S.Šutalo i D.Grundler, 2007.
Tip podatka operanada i rezultata • Tip rezultata aritmetičkog izraza ovisi o tipovima operanada iz izraza. (Ako su operandi u izrazu tipa float i rezultat aritmetičkog izraza je također tog tipa.) (c) S.Šutalo i D.Grundler, 2007.
Tip podatka operanada i rezultata • Kada se u izrazu nađe više različitih tipova operanada, tip rezultata aritmetičkog izraza ovisi o definiranim pravilima pretvorbe. • Podaci se prvo svode na zajednički tip,prije zadane operacije. • Pravila pretvorbe različitih tipova podataka usmjerena su prema višem tipu podataka. (c) S.Šutalo i D.Grundler, 2007.
Tip podatka operanada i rezultata int a; float b = 3.5; float c = 5.0; int d = 2; a = b * c / d; • Primjer pokazuje moguću grešku: • Podaci se prvo svode nazajednički tip i to viši, float.Rezultat izraza je 8.75 • Pošto se rezultat pohranjuje u varijablu a koja je određena kao cjelobrojna (int) bit će pohranjena samo vrijednost 8. (c) S.Šutalo i D.Grundler, 2007.
Tip podatka operanada i rezultata • Da bi se izbjegla moguća greška i neočekivani rezultati treba nastojati ne miješati varijable različitih tipova. (c) S.Šutalo i D.Grundler, 2007.
Primjer 16a • Zadatak (svođenje rezultata na zajednički tip s operandima): • Treba izračunati kvocijent dvaju cijelih brojeva i spremiti ga u realnu varijablu. • Ispis neka bude oblika: • Unesi prvi broj: • unesi drugi broj: • kvocijent iznosi: .... (c) S.Šutalo i D.Grundler, 2007.
Primjer 16a • Napomene: • Varijable a i b deklarirati kao cjelobrojne (int). • Deklarirati varijablu kvocijent (tip float) za pohranu rezultatadijeljenja. (c) S.Šutalo i D.Grundler, 2007.
Primjer 16a varijable a i b su cjelobrojne varijabla kvocijent je realna ispis vrijednosti varijable kvocijent Varijabli kvocijent se pridružuje vrijednost kvocijenta. (c) S.Šutalo i D.Grundler, 2007.
Primjer 16a #include<iostream> using namespace std; int main() { int a,b; float kvocijent; cout<<"Unesi prvi broj:"; cin>>a; cout<<"unesi drugi broj:"; cin>>b; kvocijent=a/b; cout<<"kvocijent iznosi:"<<kvocijent<<endl; return 0; } (c) S.Šutalo i D.Grundler, 2007.