Uvjetni operatori
Nakon malo duže stanke nastavljamo sa tutorialom.
U c++ kad želimo postaviti uvjet koristimo se uvjetnim operatorima. Oni kao vrijednost vraćaju logičku neistinu u obliku 0 ili logiku istinu obično putem broja 1. Npr. ako stavimo 3<4 program će vratiti 1, ako stavimo npr. 4<3 program će vratiti 0. U uvjetu 3<4 ćemo primijetiti znak za manje(<). Prema tome program provjerava je li broj 3<4 dok u uvjetu 4<3 program provjerava je li broj 4 manji od 3. Pogledajmo to na primjeru.
Primjer 1.
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
int a;
cout<<"Unesite broj a"<<endl;
cin>>a;
cout<<(a<100)<<endl;
system("PAUSE");
return 0;
}
Ovdje prvo unosimo neki broj u varijablu a. Zatim ćete primjetiti slijedeći ovu naredbu.
cout<<(a<100)<<endl;
Tu ispisujemo vrijednost uvjeta a< 100. On provjerava je li vrijednost varijable a manja od 100. Taj uvjet mora biti u zagradi jer ga kompajler inače neće prepoznati pa će javiti grešku. Ako je broj veći manji od 100 program će ispisati jedan, ako je broj veći od 100 ispisati će se 0. Npr. ako smo u varijablu a unijeli broj 54 na ekranu će se pojaviti 1 jer je uvjet zadovoljen.
Slika a1
Dosada smo koristili samo uvjetni operator za manje(<). Osim njega imamo još operatora kojima možemo provjeriti istinitost izraza. Možemo koristiti znak za veće(>). Npr. da smo u primjeru 1 umjeto a<100 stavili a>100 program bi provjeravao je li broj a veći od 100. Pa bi u slučaju da unesemo u varijablu a broj 54 proram ispisao 0.
Sada vjerovatno logički razmišljate: imali smo manje, veće a sada vjerovatno slijedi jednako. Točno no kad želimo provjeriti jednkost nećemo koristiti znak = jer njime nekoj varijabli pridružujemo vrijednost. Korisiti ćemo dvostruki znak ==.
Važno!
(a=5) – netočno
(a==5)- točno
Primjer 2.
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
int a;
cout<<"Unesite broj a"<<endl;
cin>>a;
cout<<"Slucaj broj 1 (a==5)"<<endl;
cout<<(a==5)<<endl;
cout<<endl;
cout<<"Slucaj broj 2 (a=5)"<<endl;
cout<<(a=5)<<endl;
cout<<endl;
system("PAUSE");
return 0;
}
Ovdje imamo jedan program u kojem možemo vidjeti razliku između = i ==. Prvo unosimo broj u varijablu a. Zatim u prvom slučaju provjeravamo uvjet putem ==. Time mi provjeravamo je li broj pohranjen u varijabli a jednak broju 5. Program ispisati 1 ili 0 ovisno o istinitosti. Dok će u slučaju broj 2 program uvijek ispisati 5 zato što smo napisali a=5. Time smo pohranili u varijablu a broj 5.
Vjerovatno ste u matematici vidjeli da postoje još dva znaka jednakosti. To su „veće ili jednako“ i „manje ili jednako“.
U c++ programskom jeziku veće ili jednako se piše ovim znacima „>=“. Da bi uvjet bio zadovoljen broj treba biti ili jednak ili veći od zadanog broja. Npr. imamo a>=4. Ako je a jednako 4 onda je uvjet zadovoljen. Ako je a veće od 4 uvjet je isto zadovoljen. No ako je a manje od 4 uvjet jedino tada nije zadovoljen.
Kod manje ili jednako situacija je obrnuta. Da bi uvjet bio zadovoljen broj treba biti ili manji ili jednak zadanome broju. U c++ programskom jeziku on se piše „<=“. Npr. ako imamo a<=4. Ako je a manje od 4 uvjet je zadovoljen. Ako je a jednako 4 uvjet je zadovoljen. Ako je a veće od 4 uvjet nije zadovoljen.
Dalje slijedi uvjet kojim mi provjeravamo različitost. Ponekad ćemo trebati provjeriti različitost broja od nule. Ovdje koristimo operator !=. Njime provjeravamo različitost dvaju brojeva. Pogledajmo to na primjeru:
Primjer 3
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
int a;
cout<<"Unesite broj a"<<endl;
cin>>a;
cout<<(a!=0)<<endl;
system("PAUSE");
return 0;
}
Ovdje provjeravamo je li broj unesen u varijablu a različit od nule. Ako jest ispisati će 1, a ako ne ispisati će 0.
Dalje imamo operatore za „i“. On nam je koristan ako želimo postaviti više uvjeta. Npr. ako imamo dva broja i želimo provjeriti jesu li obadva veća od 0. Znak za „i“ je &&.
Primjer 4
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
int a;
int b;
cout<<"Unesite broj a"<<endl;
cin>>a;
cout<<"Unesite broj b"<<endl;
cin>>b;
cout<<((a>0)&&(b>0))<<endl;
system("PAUSE");
return 0;
}
Ovdje prvo unosimo brojeve u varijable a i b. Zatim provjeravamo jesu li brojevi a i b veći od nule. Dakle postavljamo uvjet (a>0)&&(b>0). Uvjet će biti zadovoljen samo ako su oba broja veća od nule.
Nekad nam se može dogoditi da trebamo provjeriti nalazi li se broj u određenom brojevnom rasponu npr. između -30 i 100. Netko bi logički zaključio da ćemo taj uvijet postaviti ovako (-30<a<100) no to nije ni približno točno. Pravi uvjet ćemo postaviti putem operatora &&. Pa ćemo tako postaviti uvjet koji će provjeriti je li broj veći od -30, manji od 100, i provjeriti jesu li ta obadva uvjeta zadovoljena. To ćemo napisati ovako: ((a>-30)&&(a<100)).
Primjer 5
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
int a;
int b;
cout<<"Unesite broj a"<<endl;
cin>>a;
cout<<((a>-30)&&(a<100))<<endl;
system("PAUSE");
return 0;
}
U ovome programu provjeravamo je li broj a u rasponu između -30 i 100. Ako jest na ekranu će se ispisati 1, a ako ne ispisati će se 0.
Postoji još jedan uvjetni operator, a zove se ili i označava se sa ||(ovaj znak dobije se pritiskom altGr+w). U njemu za razliku od i jedan od postavljenih uvjeta mora biti zadovoljen. Npr. imamo dva broja a i b i jedan od njih mora biti veći od 0. Tu ćemo koristiti ili. Uvjet ćemo postaviti ovako: (a>0)||(b>0). Tu program provjerava je li a veći od 0, zatim je li b veći od 0 i zatim provjerava je li ijedan od uvjeta zadovoljen.
Primjer 6
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
int a;
int b;
cout<<"Unesite broj a"<<endl;
cin>>a;
cout<<"Unesite broj b"<<endl;
cin>>b;
cout<<((a>0)||(b>0))<<endl;
system("PAUSE");
return 0;
}
Ovdje provjeravamo jeli ijedan od brojeva koji se nalaze u varijablama a i b veći od 0.
Sada kad znamo uvjetne operatore uz pomoć && i || možemo postavljati još složenije uvjete.
Evo primjera: Imamo tri broja a,b,c. Uvjet je postavljen tako da broj a mora biti veći od nule, a od brojeva b i c barem jedan mora biti veći od nule. Dakle ako pogledamo malo problem uvjet je da a i još jedan bilo koji broj mora biti veći od 0. Prema tome imati ćemo &&. Pa bi gruba podjela uvjeta bila (a>0)&&(ili b ili c veći od nule). Imamo a>0. Sad još samo trebamo riješiti uvjet kojim ćemo provjeriti je li ijedan od brojeva a i b veći od 0. To ćemo riješiti putem || pa je rješenje ((b>0)||(c>0)). Kad to postavimo u konačni uvjet to će biti: ((a>0)&&( (b>0)||(c>0)). Naravno pazite na zagrade. Jer one određuju cjeline uvjeta
Gotov je post o uvjetnim operatorima. Premda se oni početniku ne čine važni, oni će nam itekako biti korisni u slijedećem postu kada ću govoriti od grananju putem if.
ZADACI
1. Imamo četiri broja a,b,c,d. Svi od brojeva moraju biti veći od 0. Broj a mora biti jednak broju 100. A barem jedan od brojeva b,c,d mora biti jednak broju 32.
2. Imamo 5 brojeva a,b,c,d,e. Svi moraju biti različiti od 0. Ili brojevi b,c,d moraju biti neparni, ili brojevi a,b,e moraju biti parni. Brojevi a i e moraju biti veći od 100.
RJEŠENJA
1. Podijelimo uvjet na cjeline. Prvo je da svi brojevi moraju biti veći od 0, a tek poslije toga slijede ostali uvjeti. Prema tome uvjet možemo podijeliti na(svi brojevi moraju biti veći od 0)&&(ostali uvjeti). Da svi uvjeti moraju biti veći od 0 napisati ćemo kao ((a>0)&&(b>0)&&(c>0)&&(d>0)). Sada ćemo se pozabaviti ostalim uvjetima. Kažu da a mora biti jednak 100, a da barem jedan od ostalih uvjeta mora biti jednak 32. To ćemo podijeliti na (a jednako sto)&&(jedan od ostalih brojeva jednak 32). A jednako sto ćemo napisati kao (a==100). Jedan od ostalih brojeva mora biti jednak 32 ćemo napisati kao((b==32)||(c==32)||(d==32)).Kad sve to uvrstimo dobijemo: ((a>0)&&(b>0)&&(c>0)&&(d>0) )&&((a==100)&&((b==32)||(c==32)||(d==32)))
2. Podijelimo program na cjeline. Prvo ide da svi brojevi moraju biti različiti od 0. To je prva cjelina. Onda imamo ili uvjet kao drugu cjelinu. I na kraju imamo da brojevi a i e moraju biti veći od 100. Prema tome uvjet ćemo prikazati ovako (svi brojevi različiti od 0)&&(ili b,c,d parni brojevi, ili a,b,e neparni)&&(a i e veći od 100) Idemo otpočetka. Da bi provjerili da su svi brojevi različiti od 0 koristiti ćemo != i &&. Pa će prva cjelina biti ((a!=0)&&(b!=0)&&(c!=0)&&(d!=0)&&(e!=0)). Dalje imamo uvjet da ili brojevi b,c,d moraju biti parni ili brojevi a,b,e moraju biti neparni. Parnost ćemo provjeriti modulom(%). On daje ostatak dijeljenja brojeva. Tako ćemo brojeve kojima provjeravamo parnost dijeliti sa 2. Ako imamo ostatka onda je broj neparan, a ako nemamo onda je paran. Pa ćemo postaviti uvjet za provjeru je li broj neparan: ((broj%2)!=0). Dakle modulom provjeravamo ostatak dijeljenja sa brojem 2 i provjeravamo je li ostatak različit od nule. Primjenjeno to na naš primjer izgleda ovako((b%2)!=0)&&((c%2)!=0)&&((d%2)!=0). To je prvi dio druge cjeline uvjeta. U drugom dijelu ove cjeline moramo provjeriti je li broj paran. Sada ćemo umjesto != staviti ==. Pa će drugi dio biti((a%2)==0)&&((b%2)==0)&&((e%2)==0)). I kad to uvrstimo druga cjelina će biti (((b%2)!=0)&&((c%2)!=0)&&(d%2)!=0))||(((a%2)==0)&&((b%2)==0)&&((e%2)==0)). I sada idemo na posljednu cjelinu a to je da brojevi a i e moraju biti veći od 100. To se lagano riješi: ((a>100)&&(e>100)). Sve to uvršteno dobijemo: ((a!=0)&&(b!=0)&&(c!=0)&&(d!=0)&&(e!=0))&&(((b%2)!=0)&&((c%2)!=0)&&(d%2)!=0))||(((a%2)==0)&&((b%2)==0)&&((e%2)==0))&&((a>100)&&(e>100))
No nemoramo pisati pisati u prvoj cjelini a!=0 i e!=0 pa opet poslije poslije u trećoj a>100 i e>100. Mogli smo odmah u prvoj cijelini staviti a>100 i e>100 i izostaviti treću budući da se podrazumjeva da su brojevi ako su veći od 100 da su različiti od 0.
Pa bi takvo riješenje zadatka iznosilo: ((a>100)&&(b!=0)&&(c!=0)&&(d!=0)&&(e>100)) && (((b%2!=0)&&(c%2!=0)&&(d%2!=0)) || ((a%2==0)&&(b%2==0)&&(e%2==0)))
Sve što je ovdje napisano nije copy/paste sa neta, sve je napisano i izmišljeno od strane autora teme i post. Kako su svi primjeri i zadaci izmišljeni molio bih da me upozorite ako je neki primjer pogrešan ili netočan.
Zahvale: @Floki- za ispravku na drugom zadatku.