$$ \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}}} $$

Izrazi

  • Dozvoljeno polaganje
  • -
  • Nema
  • Jovan Popović
  • 2/10/2017

Jedna od najbitnijih stvari u programiranju je obrada podataka gde koristite vrednosti koje se nalaze u promenljivama i vršite neka izračunavanja nad njima.

Izraz je kombinacija vrednosti (iz promenljivih i literala) i operatora (na primer plus, minus, puta) pomoću kojih se izračunava neki rezultat. Operatori koriste operande i određuju rezultat izraza. Primeri nekih izraza koji koriste matematičke operatore i brojeve su:

  • 2*5 - operator množenja množi dva operanda (brojeve 2 i 5) i izračunava vrednost rezultata 10.
  • 19+4 - operator sabiranja sabira dva operanda (brojeve 19 i 4) i izračunava vrednost rezultata 23.
  • X-2 - operator oduzimanja oduzima jedan operand (broj 2) od drugog (promenljive X)

Kada izračunate vrednost izraza, rezultat se može upisati u neku promenljivu naredbom dodele.

Kao što se u programskim jezicima brojevi i promenljive predstavljaju simbolima 0-9, a-z,A-Z, tako se i operandi predstavljaju svojim simbolima. U ovoj lekciji ćemo upoznati neke najčešće korišćene operatore.

Aritmetički operatori

Aritmetički operatori su verovatno nešto što ćete najčešće koristiti u izrazima. U sledećoj tabeli su predstavljeni aritmetički operatori koje možete da koristite u JavaScript izrazima:

OperatorNazivPrimerOpis
+Plusx=y+2Čita vrednost promenljive y, uvećava je za 2 i upisuje rezultat u promenljivu x.
-Minusx=y-2Čita vrednost promenljive y, umanjuje je za 2 i upisuje rezultat u promenljivu x.
-Promena znakax= -yČita vrednost promenljive y, i kao rezultat vraća vrednost suprotnog znaka koju upisuje u promenljivu x.
*Putax=y*2Čita vrednost promenljive y, množi je sa 2 i upisuje rezultat u promenljivu x.
/Deljenjex=y/2Čita vrednost promenljive y, deli je sa 2 i upisuje rezultat u promenljivu x. Ako je y ceo broj onda računa količnik koji upisuje u x.
%Ostatakx=y%2Čita vrednost promenljive y, pronalazi ostatak pri deljenju sa brojem dva i vrednost ostatka upisuje u promenljivu x.
++Inkrementx++Vrednost promenljive x uveća za 1 slično kao (x=x+1)
--Dekrementx--Vrednost promenljive x umanji za 1 slično kao (x=x-1)

U slučaju se više operatora koristi u istom izrazu (npr. 3 + 5 * - 9 – 2 * 4) prioriteti izračunavanja su slični prioritetima u matematici (npr. Prvo se radi množenje, deljenje, pa onda sabiranje i oduzimanje). Inkrement i dekrement imaju najviši prioritet. Naravno uvek možete da promenite prioritet operatora tako to koristite zagrade kao u matematici.

Operator + se može koristiti i sa string promenljivama, u tom slučaju se „spaja“ sadržaj dva stringa koji se sabiraju (tzv. konkatenacija). U slučaju da se sabira string i broj (ili neki drugi objekat koji nije string) broj će se pretvoriti u string (npr. 17 u "17") i onda će se spojiti sa drugim stringom.

 var x = 'Java';
 var y = "Script";
 alert( x + y ); // Rezultat je "JavaScript";
 alert( x + 2 ); // Rezultat je "Java2";

Aritmetičke operatore možete da koristite kao mali digitron u programu. Sa ovim operatorima možete lako da nađete količnike i ostatke pri deljenju brojeva kao u sledećem primeru:

 var x = 17;
 alert( "Ostatak pri deljenju broja " + x + " sa 5 je " +  ( x % 5) ); // Rezultat je 2
 alert( "Količnik pri deljenju broja " + x + " sa 5 je " +  (x / 5 ) ); // Rezultat je 3
 alert( "Ostatak pri deljenju broja " + x + " sa 4 je " +  ( x % 4) ); // Rezultat je 1
 alert( "Količnik pri deljenju broja " + x + " sa 4 je " +  (x / 4 ) ); // Rezultat je 4

Primer

Sa aritmetičkim izrazima možemo da pretvorimo dužine izražene u metrima, decimetrima i centimetrma (npr. 2m 4dm 7cm ili 1m 5dm 1cm) u centimetre:

   var prvaDuzina = 100*2 + 10*4 + 7; //2m 4dm 7cm
   var drugaDuzina = 100*1 + 10*5 + 1; //1m 5dm 1cm

Primer

Potrebno je napisati program koji sabira vremenske intervale izražene u satima, minutima i sekundama, npr. 2h 12min 45sec i 7h 40min 40sec.

  var sati1 = 2, min1 = 12, sek1 = 45;
  var sati2 = 7, min2 = 40, sek2 = 40;
  
  sek = (sek1 + sek2) % 60;
  prenos = (sek1 + sek2) / 60;
  
  min = (min1 + min2 + prenos) % 60;
  prenos = (min1 + min2 + prenos) / 60;
  
  sati = sati1 + sati2 + prenos;

Prvo ćemo da nađemo zbir sekundi. Pošto broj sekundi ne može da bude veći od 60, ali može da se desi da zbir sekundi bude veći od 60 (npr. ako sabiramo 2h 12min 45sec i 7h 40min 40sec dobićemo 85 sekundi), u promenljivu ćemo upisati ostatak zbira pri deljenju sa 60 (tj. %60) što je u ovom slučaju 25′′. Zašto ostatak? Zato što sve što bude preko ostatka predstavlja vrednost koja će biti preneta u minute. Pošto možda treba da prenesemo broj sekundi iz zbira koji je prešao preko 60, moramo da izračunamo i količnik pri deljenju ovog zbira sa 60. To je vrednost u promenljivoj prenos koji ćemo dodati minutima. Na isti način ćemo izračunati i vrednost minuta kao zbir minuta sabranim sa prenosom od sekundi, gde opet nalazimo ostatak pri deljenju sa 60 da ne bismo upisali broj veći od 60. Opet moramo da izračunamo vrednost koja će biti preneta u sate kao količnik ovog zbira i broja 60. Na kraju, da bismo odredili sate, potrebno je da saberemo sate i dodamo vrednost koju smo preneli.

Operatori poređenja

Operatori poređenja se koriste da bi se odredilo da li su vrednosti ili promenljive jednake, manje ili veće. Ovi operatori predstavljaju vage kojima se utvrđuje da li su vrednosti jednake i ako nisu koja je veća.

Poređenje

Operatori poređenja se pišu simbolima kao i aritmetički operatori. U sledećoj tabeli možete naći najkorišćenije operatore poređenja:

OperatorSimbolPrimerOpis
Jednako==X == 3Proverava da li je vrednost u promenljivoj X jednaka broju 3
Različito!=X != 3Proverava da li je vrednost u promenljivoj X različita od broja 3
Manje<X < 10Proverava da li je vrednost u promenljivoj X manja od 3
Manje ili jednako<=X <= YProverava da li je vrednost u promenljivoj X manja od vrednosti u promenljivoj Y
Veće>10 > XProverava da li je broj 10 veći od vrednosti u promenljivoj X
Veće ili jednako>=X >= YProverava da li je vrednost u promenljivoj X veća od vrednosti u promenljivoj Z ili su jednake

Operatori poređenja vraćaju vrednosti true ili false u zavisnosti od toga da li je ispitani uslov tačan ili nije.

Primer

Potrebno je napisati program koji učitava jedan broj i proverava da li je pozitivan ili negativan. U programu ćemo prvo učitati broj pomoću funkcije prompt(), a onda ga uporediti sa nulom da bi utvrdili da li je pozitivan ili negativan.

    var a = prompt("Unesite broj:");
	if ( a >= 0 ) {
		alert ("Broj je pozitivan");
	} else {
		alert ("Broj je negativan");
	}

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 rezultat 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 ima 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

Potrebno je napisati program koji učitava jedan broj i proverava da li je on jednocifren. U programu ćemo prvo učitati broj pomoću funkcije prompt(), a onda proveriti da li je veći ili jednak od 0 I da li je manji jednak 9.

    var a = prompt("Unesite broj:");
	if ( a >= 0 && a <= 9) {
		alert ("Broj je jednocifren");
	} else {
		alert ("Broj nije jednocifren");
	}

Primer

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. JavaScript program koji proverava da li je nejednakost trougla zadovoljena za ove tri duži je prikazan u sledećem primeru:

    var a = 29;
    var b = 35;
    var c = 32;
    if ( a < b + c && b < c + a && c < b + a ) {
	    alert ("Od ovih stranica može da se napravi trougao");
    }