$$ \newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor} \newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil} \newcommand{\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{\mmin}{\,\mathrm{\frac{m}{min}}} \newcommand{\smin}{\,\mathrm{\frac{s}{min}}} $$

Logički izrazi

  • Dozvoljeno polaganje
  • -
  • Nema
  • Jovan Popović
  • 5/12/2017

U prethodnim primerima smo donosili jednostavne odluke - da li je broj manji od drugog broja, da li je ostatak jednak nuli, i slično. Nekada moramo da proverimo više uslova da bismo videli da li je nešto tačno. Programi nam omogućavaju da napravimo i ovakve složenije izraze.

Primer 1

Potrebno je uneti neki broj i proveriti da li je jednocifren. Broj je jednocifren ako je veći ili jednak nuli I ako je manji od 10.

broj = prompt("Unesite broj:")
jednocifren = (0 <= broj) && (broj<10)

Kada imamo dva uslova i moramo da proverimo da li su oba tačna, onda između njih stavljamo simbol &&. Ako su ispunjena oba uslova (tj. da je broj veći ili jednak nuli I da je manji od 10) onda je broj jednocifren i u promenljivu jednocifen će biti upisana vrednost true, a ako nije biće upisana vrednost false.

Primer 2

Potrebno je uneti neki broj i proveriti da li je dvocifren. Broj je dvocifren ako je veći od 9 I ako je manji od 100.

broj = prompt("Unesite broj:")
dvocifren = (9 < broj) && (broj<100)

Ako su ispunjena oba uslova (tj. da je broj veći od devet I da je manji od 100) onda je broj dvocifren i u promenljivu dvocifen će biti upisana vrednost true, a ako nije biće upisana vrednost false.

Primer 3

Na papiru je prorez dužine 10 centimetara. Pravougaonik može da prođe kroz taj prorez ako je jedna stranica kraća od proreza. Da li kroz taj prorez može da se provuče pravougaonik stranica 15 centimetara i 8 centimetara?

a = 15
b = 8
moze = (a < 10) || (b<10)

Kada imamo dva uslova i moramo da proverimo da li je jedan ILI drugi tačan, onda između njih stavljamo simbol ||.

Ako je bar jedna stranica manja od 10 (a u ovom primeru je to tačno zato što je stranica b manja od 10) u moze će biti upisana vrednost true. Ako ni jedan od ova dva uslova ne bi bio ispunjen bila bi upisana vrednost false.

Logički operatori

Operatori za poređenje nam omogućavaju da napišemo jednostavna poređenja kao što su da li je vrednost u ovoj promenljivoj manja od 10 ili da li je veća od nule. Međutim zamislimo da imamo neki komplikovaniji uslov kao da li je vrednost u nekoj promenljivoj jednocifreni broj. U ovom slučaju ispitujemo da li je broj između 0 i 10, ali nije jedan od operatora poređenja ne može da nam pomogne. Sada nam treba neki novi operator koji će da poveže dva uslova (da li je veći od nule) i (da li je manji od deset) i da rezultat TAČNO (true) ako su oba uslova(poređenja) tačna. Više poređenja se može kombinovati logičkim operatorima:

  • I koji proverava dva uslova i daje rezultat TAČNO (true) samo ako su OBA izraza tačna
  • ILI koji proverava dva uslova i daje rezultat TAČNO (true) ako je bar jedan od izraza tačan
  • NE koji daje rezultat TAČNO (true) ako mu je dat uslov koji nije tačan, ili NETAČNO (false) ako mu je dat uslov koji je tačan, to jest obrće tačnost izraza.

U sledećoj tabeli se prikazani logički operatori kao i primeri složenih izraza:

OperatorNazivPrimerOpis
&&I0 < x && x < 10Proverava da li je broj jednocifren. Ako je broj veći od nule I ako je broj manji od 10 onda je jednocifren. U tom slučaju, izraz će imati vrednost true.
||ILIx < 10 || x > 99Proverava da li je broj jednocifren. Ako je broj veći od nule I ako je broj manji od 10 onda je jednocifren. U tom slučaju, izraz će imati vrednost true.
!NE! (x<10)Proverava da li je broj veći ili jednak deset. Ovo je isto kao x>=10.

Kada se određuje da li je izraz tačan ili netačan, prvo se ispituje da li su tačni izrazi na levoj i desnoj strani. Onda logički operatori na osnovu rezultata izraza levo i desno zaključuju da li da vrate rezultat tačno ili netačno za ceo izraz.

Možete da napišete i složene izraze sa više operatora poređenja i uslova kao na primer:

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

Prvo će se ispitati da li su tačna poređenja brojeva i za njih će se odrediti da li im je vrednost TAČNO ili NETAČNO. Onda će se za svaki par primeniti logički operatori dok se ne donese konačna odluka da li je uslov tačan ili ne.

Primer 1

Date su tri duži dužina 29, 35 i 32 centimetra. Potrebno je proveriti da li se od ovih duži može napraviti trougao. Trougao se može napraviti od duži ako zadovoljavaju nejednakost trougla a < b + c I b < c + a I c < b + a. Program koji proverava da li je nejednakost trougla zadovoljena za ove tri duži je prikazan u sledećem primeru:

a = 29
b = 35
c = 32
moze =  a < b + c && b < c + a && c < b + a )

alert ("Od ovih stranica može da se napravi trougao: " + moze)

Primer 2

Indeks telesne mase čoveka (engl. body mass index, bmi) se definiše kao količnik njegove mase u kilogramima i kvadrata njegove visine u metrima. Normalnim se smatra indeks telesne mase iz intervala od 18.5 do 25 kg/m2. Da li čovek koji je visok 180cm i težak 79 kilograma normalne težine?

masa = 79
visina = 1.8                        // 180 cm je 1.8 metara
bmi = masa / (visina * visina)
preporucena = 18.5 <= bmi && bmi <= 25
alert (preporucena)