$$ \newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor} \newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil} \renewcommand{\mod}{\,\mathrm{mod}\,} \renewcommand{\div}{\,\mathrm{div}\,} \newcommand{\metar}{\,\mathrm{m}} \newcommand{\cm}{\,\mathrm{cm}} \newcommand{\dm}{\,\mathrm{dm}} \newcommand{\litar}{\,\mathrm{l}} \newcommand{\km}{\,\mathrm{km}} \newcommand{\s}{\,\mathrm{s}} \newcommand{\h}{\,\mathrm{h}} \newcommand{\minut}{\,\mathrm{min}} \newcommand{\kmh}{\,\mathrm{\frac{km}{h}}} \newcommand{\ms}{\,\mathrm{\frac{m}{s}}} \newcommand{\mss}{\,\mathrm{\frac{m}{s^2}}} \newcommand{\mmin}{\,\mathrm{\frac{m}{min}}} \newcommand{\smin}{\,\mathrm{\frac{s}{min}}} $$

Prijavi problem


Obeleži sve kategorije koje odgovaraju problemu

Još detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link.
Nažalost nismo trenutno u mogućnosti da obradimo vaš zahtev.
Molimo vas da pokušate kasnije.

U ovom delu upoznaćeš se sa još jednim tipom podataka koji često može da bude koristan. Pogledajmo sledeći primer.

Primer: Imamo parče papira dimenzija visinaPapira x sirinaPapira i kovertu dimenzija visinaKoverte x sirinaKoverte. Želimo da proverimo da li bez savijanja papir može da stane u kovertu. Takođe, želimo da ivice papira budu paralelne sa ivicama koverte. Papir nećemo da koso stavimo u kovertu. Učitavaju se 4 broja, dimenzije papira visinaPapira i sirinaPapira, zatim dimenzije koverte visinaKoverte i sirinaKoverte. Potrebno je ispisati da li papir može da stane u kovertu.

Razmislimo malo o problemu. Da bi papir ušao u kovertu, visina papira mora da bude manja od visine koverte i širina papira da bude manja od širine koverte. Takođe, moramo da obratimo pažnju na to da papir možemo okrenuti i drugačije, tako da možemo da ga ubacimo i ako je visina papira manja od širine koverte i širina papira manja od visine koverte.

Dakle, ono što moramo da proverimo je da li je bar jedna od sledeće dve varijante tačna:

  1. visinaPapira < visinaKoverte, sirinaPapira < sirinaKoverte
  2. visinaPapira < sirinaKoverte, sirinaPapira < visinaKoverte

Operacije kao što su manje i veće se u jeziku C++ obeležavaju kao i obično, sa "<" i ">" (bez navodnika naravno). Ono što nam još nedostaje da bismo mogli da napravimo program koji vrši ovu proveru je da znamo kako se obeležavaju "i" i "ili".

  • "i" koristimo da proverimo da li su dve stvari obe tačne. Na primer, "x > 2 i x < 5" je tačno samo ako je x veće od 2 i manje od 5. Primer brojeva za koje je tačno su 3 i 4, a za koje je netačno su 1, 2, 5 i 6.
  • "ili" koristimo da proverimo da li je barem jedna od dve stvari tačna. Na primer, "x < 4 ili x > 7" je tačno samo ako je x manje od 4 ili veće od 7. Takođe bi bilo tačno i u slučaju da su obe stvari tačne, što se ovde nikad ne dešava. Primer brojeva za koje je tačno su 2, 3, 8 i 9, a za koje je netačno su 4, 5, 6 i 7.

Oznaka za "i" je "&&" (Shift + 7 na većini tastatura), a za "ili" je "||" (Shift + taster odmah pored ili iznad [Enter]).

Naša dva uslova možemo sada zapisati kao:

  1. (visinaPapira < visinaKoverte) && (sirinaPapira < sirinaKoverte)
  2. (visinaPapira < sirinaKoverte) && (sirinaPapira < visinaKoverte)

Obratite pažnju na zagrade. Njih stavljamo da bismo označili redosled kojim se stvari računaju isto kao u računskim operacijama sa brojevima. Ovde zagrade označavaju da prvo izračunavamo da li je nešto manje od nečeg drugog, a onda proveravamo da li su oba uslova tačna izvršavanjem operacije && ("i"). Kada nema zagrada, prvo se izvršava operacija višeg prioriteta (kaže se i "starija operacija"), na primer množenje se izvršava pre sabiranja. Ako stavimo zagrade, sami zadajemo redosled računanja i ne oslanjamo se na unapred zadati prioritet operacija (ne moramo čak ni da ga znamo). Takođe, zagrade čine program jasnijim, jer i onaj ko čita odmah može da vidi kojim redosledom se izvršavaju operacije.

Ceo izraz koji proverava da li je bar jedna od ove dve varijante tačna koristiće još i operaciju || ("ili"). Da vidimo kako on izgleda:

  • ((visinaPapira < visinaKoverte) && (sirinaPapira < sirinaKoverte)) || ((visinaPapira < sirinaKoverte) && (sirinaPapira < visinaKoverte))

Uočite da smo dodali zagrade oko obe varijante. Ovime osiguravamo da se prvo izračunaju vrednosti unutar tih zagrada (da li je svaka od varijanti moguća), a tek onda proverava da li je bar jedan od ta dva izraza tačan (da li na bilo koji način možemo staviti papir u kovertu).

Hajde da vidimo kako radi na jednom primeru. Uzmimo sledeće vrednosti:

	visinaPapira = 5
	sirinaPapira = 7
	visinaKoverte = 9
	sirinaKoverte = 6

U jeziku C++ ttačnu vrednost označavamo sa true, a netačnu sa false. Kada znamo to, koraci u računanju našeg izraza da li papir staje u kovertu biće sledeći:

	((5 < 9) && (7 < 6)) || ((5 < 6) && (7 < 9))
	(true && false) || (true && true)
	false || true
	true

Evo kako to vizuelno izgleda u ovom slučaju:

Kod za celo rešenje zadatka će izgledati ovako:

#include <iostream>
using namespace std;

int main()
{
    int visinaPapira, sirinaPapira;
    cout << "Unesite visinu i sirinu papira: ";
    cin >> visinaPapira >> sirinaPapira;

    int visinaKoverte, sirinaKoverte;
    cout << "Unesite visinu i sirinu koverte: ";
    cin >> visinaKoverte >> sirinaKoverte;

    cout << ((visinaPapira < visinaKoverte) && (sirinaPapira < sirinaKoverte))
            || ((visinaPapira < sirinaKoverte) && (sirinaPapira < visinaKoverte));
}

Pored && i ||, još jedna logička operacija koja postoji u jeziku C++ je negacija. Nju obeležavamo sa "!". Negacija nečega je tačna ako je to nešto netačno i obrnuto. Tako je, na primer, !(4 > 5) tačno jer je 4 > 5 netačno, a !(2 < 7) netačno, jer je 2 < 7 tačno.

Osim pomoću znakova < i > , brojeve možemo da poredimo i ovako:

  • a <= b znači: a je manje ili jednako b;

  • a >= b znači: a je veće ili jednako b;

  • a != b znači: a je različito od b;

  • a == b znači: a i b su jednaki;

NAPOMENA: Obrati pažnju na razliku između "=" i "==" o kojoj smo pričali u lekciji "Promenljive".

Već smo naučili da osim što možemo da računamo, u programima možemo i da pamtimo vrednosti. Vrednosti u programu se pamte tako što se upišu u promenljivoj. Da bismo pamtili logičke vrednosti, koristimo tip bool. Rekli smo da tačnu vrednost obeležavamo sa true, a netačnu sa false. Ovo su ujedno i jedine dve vrednosti koje promenljiva tipa bool može da ima.

Promenjivoj tipa bool možemo da dodelimo direktno vrednost true ili false, ili bilo koji izraz čiji je rezultat logička vrednost (tačno ili netačno). Evo nekoliko primera:

izrazvrednost
bool b = true;b je true
bool b = 5 < 4;b je false
bool a = 1 < 2; bool c = 5 >= 6; _bool b = ac;_
int n = 4; bool b = (n >= 2) && (n < 4)b je false