You are on page 1of 74

Postoji mnogo jezika na kojima se mogu pisati programi. Ovde ćemo se baviti JavaScript jezikom.

JavaScript je programski jezik koji je u početku bio namenjen za pisanje programa koji su deo
web strana i koji se izvršavaju kada se strane učitaju u pregledač (engl. web browser). Međutim,
JavaScript se danas koristi i na mnoge druge načine, npr. koristi se za pisanje aplikacija za
mobilne telefone, automatizaciju i slično. Postoji čuvena izreka koja prognozira da će svaka
aplikacija koja može da bude napisana na JavaScriptu jednog dana i biti napisana na JavaScriptu
(Atvudov zakon):

Any application that can be written in JavaScript, will eventually be written in


JavaScript

Zašto učiti programiranje na JavaScript


jeziku?
Postoji mnogo programskih jezika koje možete da koristite da biste počeli da učite programiranje,
pa se možete upitati zašto baš JavaScript. Neki od razloga su:

1. JavaScript je lep i jednostavan jezik. Da biste napisali prvi program nije potrebno da
naučite neke od naprednih programerskih pojmova.
2. Zahteva manje znanja na samom početku: kada pišete JavaScript programe, vodite računa
o manje stvari nego u drugim jezicima, i teže ćete napraviti grešku. Na primer, ne morate
da se bavite deklarisanjem tipova promenljivih ili dužine niza (ako ne razumete ovu
rečenicu, a želite da programirate, to je razlog više da počnete baš sa JavaScript-om).
3. Ne treba da posebno pripremate računar: nije potrebna dodatna instalacija ili poseban
program za prevođenje JavaScript-a. Da biste izvršili JavaScript program, dovoljno je da u
web pregledaču koji inače koristite, otvorite web stranu koja sadrži vaš program.
4. Savremenost: JavaScript je jezik koji veoma liči na najkorišćenije moderne programske
jezike, kao što su Java, S# i S++. Ako prvo naučite JavaScript, možete po potrebi da
pređete na bilo koji od ovih jezika znatno lakše, nego sa na primer Pascala ili Basica.

JavaScript je jednostavan jezik ali vam ipak omogućava da uradite neke veoma složene stvari. Na
primer zamislite da treba da na ekranu nacrtate zavesu u obliku mreže sa kvadratima. Na prvi
pogled ništa komplikovano, ali zamislite da treba da napravite ovu zavesu tako da se pomera kada
je povučete mišem ili da se čak i pocepa ako je jako "povučete".
Uz JavaScript sve ovo postaje prilično jednostavno izvodljivo. Probajte ovo na CodePen sajtu.
Jedan od najbitnijih stvari u JavaScript jeziku je to što vam ne treba neki prevodilac ili instalacija.
Dovoljno je samo da otvorite neki sajt i napišete svoj prvi JavaScript program. U sledećem
primeru ćete videti kako pomoću JavaScripta možete da napravite lavirint i kako se napisani
program izvršava otvaranjem strane u pregledaču.

Probajte i sami - idite na sajt http://js.do i unesite na levoj strani sledeći JavaScript program:

ime = prompt("Kako se zoveš?")


alert("Zdravo " + ime)

Kada izvršite program pomoću dugmeta Run code zatražiće vam da unesete ime a onda će
prikazati ime koje ste uneli - i to je vaš prvi JavaScript program. Međutim, JavaScript se može
koristiti i za rešavanje ozbiljnijih problema. Ako želite da naučite kako da pretvorite svoje zamisli
u JavaScript kod, ovo je pravi kurs za vas.
Kada počnete da programirate na JavaScript jeziku, možete sami da birate kako vam odgovara da
pišete programe.
 JavaScript na internetu - Najlakši način da počnete je da odete na neki veb sajt na kome
možete da pišete programe. Ne treba vam nikakav program ni instalacija, ne morate da
brinete o tome da li vam je računar dovoljno dobar. Samo treba da otvorite neki sajt kao
što je jsbin.com, jsFiddle.com ili js.do i u njemu napišete svoj program.
 JavaScript u pregledačima - Da i programirali na JavaScriptu, ne treba čan ni internet.
Možete da napišete JavaScript program u bilo kom programu za pisanje teksta kao što su
Notepad, Notepad++, Sublime, VSCode, pa čak i Word. Ovaj program snimie kao HTML
fajl i otvorite ga bilo koji pregledačem (npr. Chrome pregledačem) koji će pokrenuti vaš
program.
 Javascript u konzoli - Iako je JavaScript jezik interneta, možete da ga pokrećete kao i
bilo koji klasični program. Instalirajte Node.js, napišite JavaScript program, snimite ga
kao .js fajl, i pokrenite iz klasične konzole pomoću komande node mojprogram.js.
Program će se izvršiti kao bilo koji program napisan u jezicima Pascal, Python, C, itd.
JavaScript je jezik interneta i na njega nailazite svaki put kada otvorite neku stranu na internetu.
Ako ste ikada otišli na Fejsbuk ili tražili nešto na Guglu možete da napišete i pokrenete JavaScript
program. Sve što bi trebalo da uradite je da otvorite neki sajt koji vam omogućava da napišete i
izvršite JavaScript program. Bez nekog preuzimanja programa, instalacija specijalnih editora, vi
možete za par minuta da napišete JavaScript program. Ne morate da brinete da li vam je racunar
dobar ili loš, star ili nov. Sve što vam je potrebno je internet i običan pregledač kojim ćete otići na
neki od ovih sajtova:

 jsFiddle.com
 jsBin.com
 js.do

Sada ćete videti kako možete da za par minuta napišete svoj prvi program a da ništa ne instalirate.

js.do
Sajt http://js.do vam omogućava da samo unesete neki JavaScript program, pokrenete ga i vidite
rezultate.

https://www.youtube.com/watch?v=FmclPu5mq6I&feature=youtu.be
Kada otvorite http://js.do sajt videćete primer koda koji iscrtava lavirint. Rezultat programa, tj.
lavirint je prikazan na desnoj strani. Kada pritisnete Run code sa leve strane, program će se
izvršiti. Sada možete da u polje sa leve strane unesete neki JavaScript kod, da ga izvršite pomoću
dugmeta Run code i vidite rezultate. Za nekoliko minuta ste napisali svoj prvi program bez
ikakve instalacije ili pripreme.

jsFiddle
Sajt jsFiddle vam omogućava da unesete neki JavaScript program, pokrenete ga i vidite rezultate.
Ako otvorite jsFiddle sajt u pregledaču (unesite adresu http://jsfiddle.net), videćete stranu u kojoj
možete da unesete HTML, CSS i JavaScript kod. Nas za sada zanima samo JavaScript program,
tako da su ostali delovi prazni. Možete da unesete neki JavaScript kod i pokrenete ga pritiskom na
dugme Run.
jsFiddle će da izvrši JavaScript program koji ste uneli i prikazaće rezultate.
Dodatne funkcionalnosti koje vam omogućava jsFiddle su da sačuvate svoj primer i da ga kasnije
opet otvorite pomoću URLa pod kojim je snimljen, da sredite i formatirate kod (TidyUp opcija),
kao i da vidite potencijalne probleme i predloge kako da popravite svoj kod (JSHint opcija – u
gornjem primeru je prikazao dve greške gde je predložio da se doda tačka zarez – primetite da za
drugu grešku to nije rešenje ali bar je ukazao na problem i pokušao da predloži neko rešenje).

jsBin
jsBin je još jedan popularan sajt, koji nudi slične mogućnosti kao i jsFiddle. Idite na
http://jsbin.com i otvoriće vam se strana u kojoj možete da unosite HTML, CSS i JavaScript kod.
Uklonite HTML i CSS prozore i uključite JavaScript kao na slici (ovo će vam biti odmah
podešeno ako odete na ovaj link http://jsbin.com/?js,console):

Unesite neki JavaScript program (ali bez script tagova oko koda) i pritisnite dugme "Run" na
desnoj strani. Na Console delu prozora će vam biti prikazana poruka koju ste upisali u
console.log() funkciju.
Online editori su pogodni i za deljenje koda, dovoljno je da snimite svoj program i pošaljete link
kome želite. Na forumima je čest slučaj da kada neko ima problem sa nekim JavaScript kodom,
napravi jsFiddle primer i postavi link. Tako ljudi koji žele da pomognu lako pristupaju kodu i
mogu sami da ga isprobaju i vide šta je problem, a onda (ako znaju rešenje) i da poprave kod.
jsFiddle nije namenjen samo za JavaScript – u njemu možete da napišete vebstranu sa
HTML/CSS kodom i da vidite kako bi izgledala kada bi se učitala u pregledaču. Međutim, pošto
je tema ovog kursa JavaScript, HTML/CSS panelima se nećemo baviti.
JavaScript programe možete i da držite na svom računaru i pokrećete ih pomoću vašeg omiljenog
pregledača (Chrome, Internet Explorer). Iako je lakše da pišete programe na nekom sajtu, možete
i da ih snimite kao fajlove na vašim računarima i da ih pokrenete pregledačem kao da su na
internetu.

Za razliku od većine drugih programskih jezika, koje morate da pišete u nekom


specijalnom programu za pisanje koda, možda da ih kompajlirate kao .exe
fajlove i slično, JavaScript vas ne tera da sve to radite. Za razliku od drugih
jezika, JavaScript program može da se izvrši u bilo kojoj veb strani.
Dovoljan je bilo koji program kojim se piše tekst (npr. Notepad) u kome ćete napisati JavaScript
program, i snimiti ga kao fajl sa ekstenzijom .html kako bi ga prikazao neki pregledač (npr.
Internet Explorer, Chrome ili Firefox). JavaScript kod u .html fajlu treba da okružite
sa <script> i </script>. Na ovaj način pregledač zna da je tekst između JavaScript program
koji treba izvršiti kada se otvori strana u pregledaču. Jednostavan JavaScript program koji
prikazuje poruku je prikazan u sledećem primeru:
Fajl: helloWorld.html

<script>
alert("Hello World!")
</script>

Napravite običan tekstualni fajl, kopirajte ovaj sadržaj u njega, snimite ga


kao helloWorld.html, otvorite ga nekim pregledačem i dobićete sledeći rezultat:

Pregledač je prepoznao da je u script elementu JavaScript kod i izvršio ga je.


Kada otvorite .html fajl, u najvećem broju slučajeva je dovoljno da samo kliknete na njega pošto
je vaš sistem sigurno podešen tako da automatski otvara .html fajlove nekim pregledačem. Primer
malo složenijeg JavaScript programa je prikazan u sledećem listingu:
uvod.html

<script>
zbir = 0
broj = 1
while(broj < 10) {
zbir = zbir + broj
broj = broj + 2
}
alert("Zbir brojeva je " + zbir)
</script>

Ako snimite ovaj fajl pod imenom uvod.html, videćete rezultat na slici:

Pregledač je prikazao .html fajl, naišao na JavaScript program


između <script> i </script> oznaka. Kada je izvršio naredbe koje je našao, sabrao je sve
neparne brojeve manje od 10 i prikazao rezultat.
Kao što vidite ne treba vam neki program, instalacija, kreiranje i pokretanje nekih izvrših fajlova.
Sve što treba da uradite je da napišete tekst sa naredbama i pokrenete pregledač kao kada otvarate
bilo koju stranu na internetu.
ako je JavaScript jezik veba koji se najčešće izvršava u pregledačima, on se može izvršavati i u
konzoli (komandnoj liniji). Sada ćemo videti kako možete da napišete kratke JavaScript programe
koji se izvršavaju pomoću node programa.

Pisanje JavaScript programa


Da biste napisali JavaScript program, dovoljan vam je bilo kakav editor teksta. Na sledećoj slici
možete da vidite jednostavan program napisan u Notepad editoru.
Dovoljno je samo da unesete tekst u skladu sa JavaScript pravilima i imate svoj prvi program.
Umesto Notepad editora možete da koristite bilo koji drugi editor. Još jedan dobar i besplatan
editor je VSCode. Prethodni program prikazan u VS Code editoru je prikazan na slici:

Kada napišete ovaj tekst snimite fajl kao program.js.

Pokretanje JavaScript programa


Da biste pokrenuli JavaScript program kada ga napišete, potrebno vam je nešto što će razumeti
JavaScript naredbe i izvršiti ih.

Instalacija Node programa


Na sledećoj slici je prikazana strana za preuzimanje instalacije node programa gde možete da
odaberete svoj operativni sistem i verziju, npr. Windows Installer 64-bita:
Kada kliknete na odabranu instalaciju i preuzmete node, možete da ga instalirate i pokrenete svoje
programe.

Pokretanje programa u konzoli


Kada instalirate node program možete da pokrenete JavaScript programe pomoću njega tako što u
komandnoj liniji unesete sledeću komandu:

node imefajla.js
Unesete ovu komandu u komandnoj liniji videćete poruku koja je ispisana u console.log()
funkciji, tj. nešto kao:
Kao što vidite ne treba vam neki prevodilac ili komplikovano okruženje. Ako imate node.js
dovoljno je samo da snimite program kao tekstualni fajl i izvršite ga pomoću node naredbe.
Hajde sada da napravimo malo ozbiljniji program koji sabira sve neparne jednocifrene brojeve:

Ako ovaj program pokrenete pomoću node programa, dobićete sledeći rezultat:

Kakav god JavaScript program da napišete, node naredba će ga izvršiti.


Sada ćemo krenuti sa osnovnim konceptima JavaScript-a, tj. jednostavnim programima u kojima
koristite neke promenljive, vršite izračunavanja i prikazujete rezultate. Da se podsetimo,
JavaScript program je običan tekstualni fajl u kome stavljamo niz naredbi:

prva naredba
druga naredba
...
poslednja naredba

Svaka naredba treba da se završi sa tačka-zarezom. Doduše JavaScript vam neće uzeti za zlo čak
ni kada zaboravite da stavite tačku-zarez na kraj. Ako bude uspeo da shvati šta je naredba iako
nema tačku-zarez na kraju on će je izvršiti bez obzira na sitne greške.
U JavaScript-u možete da stavite naredbe u grupe koje zovemo funkcije.

function prvaFunkcija(){
prva naredba
druga naredba
...
poslednja naredba
}
function drugaFunkcija(){
prva naredba
druga naredba
treća naredba
...
poslednja naredba
}

Svaka funkcija ima svoje ime (na primer prvaFunkcija() ) i neke naredbe u njoj. Kada stavite
ovakve naredbe u funkcije, u programima možete da "pozovete" funkciju po imenu kao i bilo koju
naredbu i tada će vidi urađene sve naredbe koje su stavljene u nju.

prva naredba
druga naredba
prvaFunkcija()
treća naredba
drugaFunkcija()
četvrta naredba
prvaFunkcija()

U JavaScript jeziku postoje i posebne naredbe koje mogu da ponavljaju druge naredbe nekoliko
puta ili da izvrše neke naredbe samo ako je neki uslov tačan:

if(prvi uslov) {
prva naredba
druga naredba
}
while(drugi uslov) {
prvaFunkcija()
treća naredba
drugaFunkcija()
četvrta naredba
}

if naredba će izvršiti prvu i drugu naredbu samo ako je prvi uslov tačan. Uslov može biti bilo
kakvo pitanje kao što je da li je broj veći od 0, da li su je jedan broj veći od drugog itd. Ako uslov
nije tačan, ove dve naredbe neće biti izvršene. while naredba će ponavljati treću i četvrtu naredbu
sve dok je drugi uslov tačan. Uslov može biti isti kao i u if naredbi. Dok se naredbe izvršavaju u
jednom trenutku uslove više neće biti tačan i while naredbe ih više neće ponavljati.
Pored naredbi u JavaScript programu imamo i komentare. Komentari nisu naredbe - to je običan
tekst koji pišete u kodu i koji će se ignorisati kada se izvrši program. Komentari služe vama da
stavite neke napomene ili objašnjenja u programu. U JavaScript-u se tekst u komentarima stavlja
ili između /* i */ ili iza dve kose crte pa sve do kraja trenutnog reda:

// Komentar koji se piše u jednom redu


prva naredba
/*
Ovaj komentar
Može da se piše
U više redova
*/
druga naredba // Ignorisaće se sve od dve kose crte do kraja reda.
...
poslednja naredba

Kada jednom napišete JavaScript program, možete ili da ga izvršite na nekom sajtu kao što je
jsFiddle ili jsBin, da ga snimite kao .js fajl i izvršite pomoću node komande, ili da ga okružite
sa script tagovima i snimite kao .html fajl koji ćete otvoriti u vašem pregledaču.
U programima mi radimo sa nekim vrednostima ili podacima. Mi pišemo programe da bismo
uzeli neke podatke, izračunali nešto i pokazali rezultate nekome. Na primer, zamislite da pišete
program koji treba da uzme neke novčanice u dinarima i pretvori ih u novčanice u evrima. Prvo
što treba da naučimo je kako da napišemo da recimo imamo 100 dinara u programu. Podaci se
zapisuju brojevima, slovima ili slikama. Na primer ako vidimo novčanice - na svakoj od njih piše
koliko koja vredi.
Vrednost ne mora da se piše samo brojevima. Ako vidite novčanicu na kojoj je Nikola Tesla,
znaćete da ona vredi 100 dinara. U ovom slučaju čak i slika može da predstavi vrednost. U
programima možete da zapišete različite podatke kao što su:

1. Brojevi koji se pišu kao u matematici ciframa i znacima tačka (.) i minus(-). Pomoću
cifara 0,1,2,3,4,5,6,7,8 i 9 možete da napišete bilo koji pozitivan broj, ako dodate i tačku
možete da napišete i realne brojeve, a ako dodate i znak minus, možete da napišete bilo
koji negativni broj. Primeri brojeva su:

 Obični brojevi: 2, 3, 5, 8, 13, itd.


 Negativni brojevi: -1, -50, itd.
 Realni brojevi: 3.14, 0.5, 37.4, itd.

2. Tekst koji se piše slovima i znacima ako hoćete da napišete neki tekst. Tekst morate da
stavite u navodnike "" ili apostrofe '', kao na primer:

 "Ja sam tekst u navodnicima"


 'Ja sam tekst u apostrofima'
 'Ja učim programiranje!'
 "Programiranje je lako"

3. Vrednosti tačno i netačno su veoma bitne u jezicima kada treba da se odluči da li nešto
treba da se uradi ili ne. Vrednosti tačno i netačno se obeležavaju sa:

 true - Ako je nešto tačno


 false - Ako je nešto netačno

Sada kada znamo kako se obeležavavaju vrednosti, možemo da vidimo šta da uradimo sa njima.
Promenljive su objekti koji sadrže neke vrednosti, u koje se mogu upisivati vrednosti i iz kojih se
mogu čitati vrednosti. Ako vrednosti zamislimo kao novčanice, onda promenljive možemo da
zamislimo kao novčanike:
Novčanik može da ima u sebi različite vrednosti, u njega možemo da ubacujemo nove vrednosti
ili da izvadimo neke vrednosti. Često promenljive predstavljaju neke realne pojave čije vrednosti
želimo da zapamtimo (npr. želimo da zapamtimo da epizoda neke serije na TV programu počinje
u 10:27, završava se u 11:32, traje ukupno 25 minuta uz 41 sekundi reklama). Promenljive je
najlakše zamisliti kao kutije koje sadrže vrednosti nekih podataka. Na primer, potrebno nam je da
negde zapamtimo kada je počela neka epizoda na TV-u, kada se završila, koliko je trajala, i koliko
su trajale reklame tokom epizode serije. Trebaju nam četiri kutije gde bismo smestili ove podatke.

Mi te "kutije" zovemo promenljive zato što se vrednosti koje se nalaze u njima u svakom
trenutku mogu promeniti. Jedina stvar koja se ne može promeniti je ime promenljive.

Dodela vrednosti promenljivama


Jedna od najbitnijih stvari koju moramo da naučimo u programskim jezicima je kako da u
promenljivu upišemo neku vrednost. Na primer, zamislite da u promenljivu x treba da ubacite
vrednost 3. Upisivanje vrednosti u promenljive se radi tako što se napiše ime promenljive onda
znak = iza koga sledi vrednost koja se upisuje u promenljivu:
Umesto broja, u promenljivu možete da upišete i tekst ili vrednost iz neke druge promenljive:

X = 3
Y = X

Prva naredba će upisati vrednost 3 u promenljivu X. Druga naredba će pročitati vrednost koja se
nalazi u promenljivoj X i upisati je u promenljivu Y.
Hajde da ponovo pogledamo problem u kome moramo da upišemo podatke o epizodi serije u
promenljive pocetakEpizode, krajEpizode, trajanjeEpizode i trajanjeReklama. Trebao bi nam
ovakav program:

pocetakEpizode = 1027
krajEpizode = 1132
trajanjeEpizode = 25
trajanjeReklama = 41

U ovom primeru smo naveli da nam trebaju četiri promenljive i napisali smo koje vrednosti treba
da budu u njima.

Zadatak - razmena vrednosti u promenljivama**


Hajde sada da napišemo prvi program. Imamo dve promenljive a1 i b1 u kojima se nalaze neke
vrednosti. Potrebno je napisati program koji razmenjuje vrednosti u njima. Možda bi prva ideja
bila da napišemo nešto kao:

a1 = 5
b1 = 8
a1 = b1
b1 = a1

U programu imamo dve promenljive a1 i b1, u prvu smo upisali vrednost iz druge, a onda u drugu
vrednost iz prve. Deluje dobro - zar ne? Hajde da vidimo kako radi ovakav program korak po
korak:

Nešto nije u redu - na kraju smo dobili u obe promenljive vrednost iz druge! Problem je u tome
što je prvo izvršena naredba a1 = b1, kojom smo u prvu promenljivu upisali vrednost 8 iz druge
ali time smo uništili vrednost koja je bila u toj promenljivoj pošto smo "preko nje" prepisali
vrednost 8. U poslednjoj naredbi smo upisali vrednost prve promenljive u drugu, ali tu više nije
broj 5 koji je ranije bio u prvoj promenljivoj. To je sad vrednost 8 koja je već bila u drugoj
promenljivoj.
Da bismo napisali ispravan program, moramo da koristimo još jednu promenljivu u koju bismo
sačuvali vrednost iz promenljive a1 pre nego što u nju upišemo novu vrednost iz b1. Onda bismo
u promenljivu b1upisali vrednost iz pomoćne promenljive koju smo sačuvali pre nego što smo
upisali vrednost u a1. Program koji ovo radi bi izgledao ovako:

a1 = 5
b1 = 8

pomocna = a1
a1 = b1
b1 = pomocna

Hajde opet da vidimo kako se pune promenljive pri svakoj naredbi:

Kao što možete da vidite, vrednost 5 je sačuvana u pomoćnoj promenljivoj pre nego što ju je
zamenila vrednost 8 iz b1 i program je ispravan.
Programi rade tako što uzimaju neke ulazne podatke, rade nešto sa njima i daju neki rezultat.
Podaci koje programi prihvataju obično unose ljudi koji su pokrenuli programe ili otvorili veb
strane, a rezultati su recimo informacije prikazane na monitoru, odštampane na štampaču, i slično.
Prva stvar koju biste želeli da uradite je da unesete neku vrednost i da je prikažete.
U uvodu smo rekli da se JavaScript ne izvršava nezavisno nego da ga neko mora izvršiti (na
primer. Chrome, FireFox, Internet Explorer ako je JavaScript napisan za veb stranu). JavaScript
ima naredbe kojima se od programa koji ga izvršava traži da prikaže neku poruku korisniku ili da
od korisnika traži da unese neku poruku.
Pošto se JavaScript uglavnom pokreće u pregledačima, krenućemo od naredbi kojima se od
pregledača traži da omogući korisniku da unese neku vrednost, ili da korisniku prikaže neku
vrednost.
U prethodnim lekcijama smo već videli primere kojima se prikazuje neka poruka:
JavaScript ima funkciju alert( poruka ) kojom se neka poruka prikazuje u ovom dijalogu.
Kada pritisnete dugme OK, dijalog će nestati. JavaScript program koji prikazuje ovakvu poruku
je:

alert( "Hello World!" )

Svaki pregledač ima ugrađeni dijalog u kome može uneti neka vrednost. Ovaj dijalog se otvara iz
JavaScript koda pozivom naredbe prompt(poruka). Na primer, ako bi poruka bila „Unesite
vrednost promenljive x:“ korisniku će biti prikazana poruka i malo polje za unos gde može da
unese tekst kao u sledećem primeru:

Jednostavan program u kome se od korisnika traži da unese vrednost promenljive, a onda se ta


vrednost te promenljive prikazuje je prikazan u sledećem primeru:

x = prompt("Unesite vrednost promenljive x:")


alert("Uneta je vrednost " + x)

Drugi način da kojim se od korisnika traži da unese je funkcija confirm(poruka). Kada se


pozove ova funkcija, pregledač će prikazati poruku i ponuditi korisniku da klikne na
dugme OK ili Cancel.
U zavisnosti od dugmeta koje se pritisne, ova funkcija će vratiti vrednost true ili false.
Drugi način da se prikažu podaci u veb strani je da se pozove
funkcija document.write(vrednost) kojom se vrednost ili sadržaj promenljive ispisuje
direktno u veb stranu (tj. direktno se upisuje u sadržaj koji je prikazan u pregledaču). Mali
program u kome se koriste ove funkcije je prikazan u sledećem primeru:

x = prompt("Unesite vrednost promenljive x:")


document.write("Uneta je vrednost " + x)

Program je isti kao i prethodni, samo se umesto u dijalogu, poruka prikazuje na strani.
Pregledači podržavaju takozvanu konzolu gde možete upisati poruke koje se ne prikazuju na
strani, ali ih vi možete otvoriti u pregledaču i videti ih.

console.log("Hello World!")

Konzola je posebno bitna za JavaScript programe koji se pokreću pomoću node naredbe, zato što
node ne može da koristi dijaloge. Ako pokrenete program pomoću node naredbe, jedini način da
prikažete podatke je konzola:

Program koji čita vrednost promenljive i upisuje je u dijalog, stranu i konzolu je prikazan u
sledećem primeru:

x = prompt("Unesite vrednost promenljive x:")


unesi = confirm("Da li da upišemo vrednost u log?")
if(unesi) {
console.log("Uneta je vrednost " + x)
}
document.write("Uneta je vrednost " + x)
alert("Uneta je vrednost " + x)

Ako biste snimili ovakav program i pokrenuli ga u pregledaču, dobili biste rezultat kao na slici:

Tekst je upisan i u telo strane (pomoću document.write() naredbe) i prikazan u dijalogu (pomoću
alert() naredbe). Pod pretpostavkom da se odabrali opciju OK kada se pojavio dijalog za potvrdu,
u konzoli možete da vidite istu poruku.
U programima možete da uradite sve što možete da izračunate u drugim predmetima kao što je
matematika, fizika, hemija. Razlika je u tome što ne morate samo da računate izraze i formule,
nego će programi to uraditi za vas. Sada ćemo videti nekoliko zadataka iz matematike koje
možemo da rešimo programiranjem.

Primer 1
Izračunaj proizvod zbira brojeva 1874 i 2437 i razlike brojeva 2315 i 974, tj. (1874 + 2437) *
(2315 - 974).

zbir = 1874 + 2437


razlika = 2315 - 974

proizvod = zbir * razlika

Primer 2
Dužina stranice kvadrata je 4. Izračunajte njegovu površinu i obim.

a = 4
povrsina = a*a
obim = 4*a

Primer 3
Pera je zasadio 380 stabala jabuke. Đura je zasadio 142 stabla jabuka više od Pere, a Mika je
zasadio dva puta više od Pere. Koliko su stabala zasadili zajedno?

pera = 380
djura = pera + 142
mika = pera * 2

zajedno = pera + djura + mika

Primer 4
Dužina fudbalskog terena je 95 metara, a širina 47 metara. Ana trči po pravougaonoj stazi koja je
sa svake strane terena spolja udaljena po 5 metara. Koliko ona pretrči, ako se zna da je optrčala
teren 3 puta.

duzina_terena = 95
sirina_terena = 47
rastojanje = 5
duzina_staze = duzina_terena + 2 * rastojanje
sirina_staze = sirina_terena + 2 * rastojanje
obim_staze = 2 * (duzina_staze + sirina_staze)

pretrcala = 3 * obim_staze

Primer 5
Skakač u dalj je u kvalifikacijama u prvoj seriji skočio 8,12, u drugoj 8,23, a u trećoj 8,17 metara.
Koliko je iznosio njegov prosečni skok?

prva = 8.12
druga = 8.23
treca = 8.17

prosek = (prva + druga + treca) / 3


Kao što vidite bilo kakav matematički izraz koji možete da napišete na tabli ili u svesci, možete da
napišete i u programu. Samo što će program da izrašuna uzraze za vas kada ih jednom napišete.
Izraz je kombinacija vrednosti ili promenljivih (koje ćemo operandi) 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.
U sledećoj tabeli su predstavljeni aritmetički operatori koje možete da koristite u izrazima:

Operator Naziv Primer Opis

Čita vrednost promenljive y, uvećava je za 2 i upisuje


+ Plus x=y+2
rezultat u promenljivu x.

Čita vrednost promenljive y, umanjuje je za 2 i upisuje


- Minus x=y-2
rezultat u promenljivu x.

Promena Čita vrednost promenljive y, i kao rezultat vraća vrednost


- x= -y
znaka suprotnog znaka koju upisuje u promenljivu x.

Čita vrednost promenljive y, množi je sa 2 i upisuje


* Puta x=y*2
rezultat u promenljivu x.

Čita vrednost promenljive y, deli je sa 2 i upisuje rezultat u


/ Deljenje x=y/2
promenljivu x.

Čita vrednost promenljive y, pronalazi ostatak pri deljenju


% Ostatak x=y%2
sa brojem dva i vrednost ostatka upisuje u promenljivu x.

Operator deljenja će vratiti celobrojni deo količnika ako se dele celi brojevi. Na
primer, 10/3 daje rezultat 3. Ako vam je potreban količnik kao realni broj
pomnožite denjenik ili delilac sa 1.0, npr. 1.0*10/3 što će dati rezultat
3.3333333...
Pored ovih operatora, postoje i inkrement (++) i dekrement (--) koji se
primenjuju na jednoj promenljivoj. Ovi operatori su skraćeni oblici za
uvećavanje ili umanjivanje za 1. Na primer, x++ je isto što i x=x+1, dok je x--
isto što i x=x-1. Iako ih nećemo lesto koristiti u ovom kursu često ćete ih naći u
drugim primerima.
U slučaju da se više operatora koristi u istom izrazu (npr. 3 + 5 * - 9 – 2 * 4) prioriteti
izračunavanja su slični prioritetima u matematici (tj. prvo se radi množenje, deljenje, pa onda
sabiranje i oduzimanje). 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"):

x = 'Zdravo'
y = "Svete"
string1 = x + y // ZdravoSvete
string2 = x + 2 // Zdravo2

Aritmetičke operatore možete da koristite da bi izračunali različite izraze kao u sledećem primeru:

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.0 )
) // Rezultat je 3.2
alert( "Ostatak pri deljenju broja " + x + " sa 4 je " + ( x % 4) ) /
/ Rezultat je 1
alert( "Ceo deo količnika 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:

prvaDuzina = 100*2 + 10*4 + 7 //2m 4dm 7cm


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.

sati1 = 2, min1 = 12, sek1 = 45


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.
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:

Operator Naziv Primer Opis

Čita vrednost promenljive y, uvećava je za 2 i upisuje


+ Plus x=y+2
rezultat u promenljivu x.

Čita vrednost promenljive y, umanjuje je za 2 i upisuje


- Minus x=y-2
rezultat u promenljivu x.

Promena Čita vrednost promenljive y, i kao rezultat vraća vrednost


- x= -y
znaka suprotnog znaka koju upisuje u promenljivu x.

Čita vrednost promenljive y, množi je sa 2 i upisuje


* Puta x=y*2
rezultat u promenljivu x.

Čita vrednost promenljive y, deli je sa 2 i upisuje rezultat


/ Deljenje x=y/2 u promenljivu x. Ako je y ceo broj onda računa količnik
koji upisuje u x.
Operator Naziv Primer Opis

Čita vrednost promenljive y, pronalazi ostatak pri deljenju


% Ostatak x=y%2
sa brojem dva i vrednost ostatka upisuje u promenljivu x.

++ Inkrement x++ Vrednost promenljive x uveća za 1 slično kao (x=x+1)

-- Dekrement x-- 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.
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:

Operator Simbol Primer Opis

Proverava da li je vrednost u promenljivoj X jednaka broju


Jednako == X == 3
3

Proverava da li je vrednost u promenljivoj X različita od


Različito != X != 3
broja 3

Manje < X < 10 Proverava da li je vrednost u promenljivoj X manja od 3

Manje ili X <= Proverava da li je vrednost u promenljivoj X manja od


<=
jednako Y vrednosti u promenljivoj Y

Proverava da li je broj 10 veći od vrednosti u promenljivoj


Veće > 10 > X
X

Veće ili X >= Proverava da li je vrednost u promenljivoj X veća od


>=
jednako Y 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:

Operator Naziv Primer Opis

Proverava da li je broj jednocifren. Ako je broj veći od nule I


0 < x &&
&& I ako je broj manji od 10 onda je jednocifren. U tom slučaju,
x < 10
izraz će imati vrednost true.

Proverava da li je broj jednocifren. Ako je broj veći od nule I


x < 10 || x
|| ILI ako je broj manji od 10 onda je jednocifren. U tom slučaju,
> 99
izraz će imati vrednost true.

Proverava da li je broj veći ili jednak deset. Ovo je isto kao


! NE ! (x<10)
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");
}

U programima možete da uradite različita poređenja i da proverite da li je neki broj veći ili manji
od drugog, da li je broj paran, neparan, ili deljiv nekim drugim brojem. Kada se porede brojevi,
program će vratiti vrednost true ako uslov tačan ili false ako nije tačan. Hajde da vidimo neke
primere u kojima se porede brojevi.

Primer 1
Šta je veće (8+7)*31 ili (93-82)*(7*5-4)?

a = (8+7)*31
b = (93-82) * (7*5-4)
vece = (a > b)

Ako je vrednost izraza (8+7)*31 već od vrednosti izraza (93-82)**(7*5-4) u


promenljivu vece će biti upisana vrednost true, a ako nije biće upisana vrednost false.
Primer 2
Da li je broj 0.478249322 veći ili manji od 4/7?

a = 0.478249322
b = 4/7
veci = (a > b)

Ako je 0.478249322 veće od 4/7 u veci će biti upisana vrednost true, a ako nije biće upisana
vrednost false.

Primer 3
Da li je broj 93849384203 deljiv sa 7?

a = 93849384203
ostatak = a % 7
deljiv = ( ostatak == 0)

Ako je ostatak deljenja broja 93849384203 sa 7 jednak nuli, onda je broj deljiv sa 7 i u deljiv će
biti upisana vrednost true, a ako nije biće upisana vrednost false.

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.

U sledećoj tabeli možete naći najkorišćenije operatore poređenja:


Operator Simbol Primer Opis

Proverava da li je vrednost u promenljivoj X jednaka broju


Jednako == X == 3
3

Proverava da li je vrednost u promenljivoj X različita od


Različito != X != 3
broja 3

Manje < X < 10 Proverava da li je vrednost u promenljivoj X manja od 3

Manje ili X <= Proverava da li je vrednost u promenljivoj X manja od


<=
jednako Y vrednosti u promenljivoj Y

Proverava da li je broj 10 veći od vrednosti u promenljivoj


Veće > 10 > X
X

Veće ili X >= Proverava da li je vrednost u promenljivoj X veća od


>=
jednako Y vrednosti u promenljivoj Z ili su jednake

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

Primer 1
Potrebno je napisati program koji učitava jedan broj i proverava da li je pozitivan ili negativan.

a = prompt("Unesite broj:")
pozitivan = (a >= 0)
alert ("Broj je pozitivan" + pozitivan)

U programu ćemo prvo učitati broj, a onda ga uporediti sa nulom da bi utvrdili da li je pozitivan
ili negativan. Poruka koja se prikazuje će biti Broj je pozitivan: true ako je broj pozitivan,
ili Broj je pozitivan: false ako je uneti broj negativan.

Primer 2
Potrebno je napisati program koji učitava dva broja i proverava da li je prvi veći od drugog.

prvi = prompt("Unesite prvi broj:")


drugi = prompt("Unesite drugi broj:")
veci = ( prvi > drugi)
alert ("Prvi broj je veći: " + veci)

U programu ćemo prvo učitati brojeve i upisati njihove vrednosti u promenljive prvi i drugi.
Onda ćemo proveriti da li je prvi broj veći od drugog i vrednost te odluke upisati u
promenljivu veci. Onda ćemo prikazati poruku koja govori da li je prvi broj veći od drugog.
Poruka koja se prikazuje će biti Prvi broj je veći: true ako je prvi broj veći, ili Prvi broj
je veći: false ako nije veći.
Primer 3
Potrebno je napisati program koji učitava jedan broj i proverava da li je param ili neparan.

a = prompt("Unesite broj:")
paran = (a % 2 == 0)
alert ("Broj je paran: " + param)

U programu ćemo prvo učitati broj, a onda pronaći ostatak pri deljenju sa 2. Ako je ostatak 0 onda
je broj paran, inače je neparan. Poruka koja se prikazuje će biti Broj je paran: true ako je
broj paran, ili Broj je paran: false ako je uneti broj neparan.
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 vrednostfalse.

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:

Operator Naziv Primer Opis

Proverava da li je broj jednocifren. Ako je broj veći od nule I


0 < x &&
&& I ako je broj manji od 10 onda je jednocifren. U tom slučaju,
x < 10
izraz će imati vrednost true.

Proverava da li je broj jednocifren. Ako je broj veći od nule I


x < 10 || x
|| ILI ako je broj manji od 10 onda je jednocifren. U tom slučaju,
> 99
izraz će imati vrednost true.

Proverava da li je broj veći ili jednak deset. Ovo je isto kao


! NE ! (x<10)
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)

U prethodnim primerima ste videli manje programe u kojima smo stavljali naredbe koje se
izvršavaju. Ako biste nastavili da pišete složenije programe i dodajete još naredbi, videli biste da
vaši programi postaju sve veći i da je sve teže shvatiti šta koji deo programa radi. Da bi se izbegao
ovaj problem, u većim i složenijim programima se grupe naredbi se stavljaju u procedure ili
funkcije. Program se sastoji od nekoliko grupa naredbi gde gde svaka grupa ima svoj naziv i radi
nešto posebno, kao u sledećem primeru:

Svaka od ovih naredbi je u stvari skup drugih naredbi koje zajedno rade nešto:
Ovakav način programiranja se zove proceduralno programiranje. Ako ne biste radili ovako i
ako biste napisali jedan veliki program u kome su sve ove naredbe, bilo bi teško da vidite koja
naredba šta se tu radi.
Procedure (ili funkcije) su specijalne naredbe koje nešto urade kada im to zatražite (tj. kada ih
pozovete kako se to kaže u programima). One veoma liče na obične naredbe, ali ona u sebi imaju
jednu ili više naredbi koje se zajedno izvrše kada se pozove funkcija.
Na primer, zamislite robota koji ide po pločicama i može da koristi sledeće funkcije:

1. idi_napred() koja ga pomeri jedan korak napred


2. okreni_se_ulevo() koja ga okrene ulevo
3. okreni_se_udesno() koja ga okrene udesno

Zamislite da treba da dovedemo robota sa Lightbot sajta do kraja puta na slici:


Na desnoj strani vidite uputstva koja treba da prati da bi došao do kraja puta. Ako bismo napisali
ove naredbe u programu, on bi izgledao ovako:

idi_napred()
idi_napred()
idi_napred()
okreni_se_udesno()
idi_napred()
idi_napred()
idi_napred()
okreni_se_udesno()
idi_napred()
idi_napred()
idi_napred()

Funkcije mogu u sebi da sadrže i druge naredbe i funkcije. U sledećem primeru vidimo robota
koji može da pozove funkciju R1 koja u sebi ima
naredbe idi_napred(), idi_napred() i okreni_se_udesno():
Kad god robot pozove funkciju sa imenom R1() pogledaće koje su naredbe ili funkcije u njoj i
izvršiće ih. Ako imamo ovakvu funkciju, možemo da napišemo program malo drugačije:

idi_napred()
R1()
idi_napred()
R1()
idi_napred()
idi_napred()
idi_napred()

Ovaj program je isti kao i prethodni, samo smo umesto naredbi idi_napred() idi_napred()
okreni_se_udesno() stavili funkciju R1(). Kad god robot naiđe na ime funkcije R1() on će u stvari
da uradi funkcije koje su u njoj.

Zašto funkcije imaju zagrade iza sebe?


Funkcije su slične promenljivama zato što kao i promenljive imaju svoja imena, a mogu i da
vraćaju neke vrednosti kao i promenljive i mogu da se koriste kao i promenljive u izrazima.
Glavna razlika je u tome kako će vratiti vrednosti:

 Promenljive su "kutije" u koje možete da stavite neke vrednosti i posle da ih pročitate


kada vam trebaju u programu.
 Funkcije su grupe naredbi koje će nekako izračunati neku vrednost i ta izračunata vrednost
će se koristi isto kao da je bila direktno navedena.

Primer funkcije može da bude časovnik. Kada vas zanima koliko je sati pogledaćete u časovnik da
bi ste videli tačno vreme. To vreme niste "upisali" u časovnik pa ga posle pročitali. Časovnik ima
neki način da odredi koliko je sati i da vam preda tu informaciju. Svaki put kada pogledate u
časovnik videćete drugu vrednost. Drugi primeri bi mogli da budu termometri, vage i slično.
Promenljive razlikuju od funkcija po zagradama iza imena. Ako u programu napišete neko ime i
iza njega stavite zagrade (), program će znati da to nije promenljiva iz koje može da pročita
vrednost, nego da je to neka funkcija koja će da nešto uradi. U sledećem primeru možete videti
kako se u promenljivu X mogu upisati ili vrednosti neke promenljive ili se mogu pozvati funkcije
koje će odrediti koliko je sati ili koliko je toplo i tu vrednost upisati u promenljivu.

X = promenljiva
X = kolikoJeSati()
X = kolikaJeTemperatura()

Parametri
Parametri su vrednosti koje možete da pošaljete funkciji kada je pozovete. Funkcija "prima" neke
vrednosti kada je pozovete, može da uradi nešto sa njima i da vrati neki rezultat:

Na primer rerna je bi mogla da bude primer funkcije. U rernu stavite neku hranu, podesite je i
uključite i posle nekog vremena dobijete ispečeno jelo.
U programu možete da pošaljete parametre funkciji tako što ih stavite između zagrada koje se
nalaze iza imena. Na primer, zamislite da funkcija ABS() treba da izračuna apsolutnu vrednost
nekog broja. Ako između zagrada stavite neki broj ili promenljivu, ova funkcija će uzeti tu
vrednost i kao rezultat vratiti njenu apsolutnu vrednost. U sledećem primeru možete da vidite
program u kome funkcija računa apsolutnu vrednost broja -10, daje rezultat 10 i onda se ova
vrednost upisuje u promenljivu a.
Kada se u programu nađe na ime funkcije, njoj će biti poslate vrednosti parametara i umesto
funkcije će se staviti rezultat koji je vratila.
Sada ćemo da programiramo robota koji treba da izbegne prepreke i dođe do zelenog polja.

Robot razume sledeće tri naredbe:

 desno() - ova naredba govori robotu da treba da se okrene desno


 levo() - ova naredba govori robotu da treba da se okrene levo
 napred( broj ) - ova naredba govori robotu da treba da ode zadat broj polja napred, na
primer:
o napred(1) - govori robotu da treba da ode jedno polje napred
o napred(2) - govori robotu da treba da ode dva polja napred

Potrebno je da mu zadajete ove naredbe kako bi sa početne pozicije na tabli došao do svakog
zelenog polja, tako što ga usmeravate u željenom pravcu i pokrećete određen broj polja unapred.
Projektni zadaci
Zadatak 1
Robot na slici treba da zaobiđe zid i dođe na zeleno polje.

Prikazan je deo programa koji ga vodi od početne pozicije do polja koje je bliže zelenom polju:

napred()
levo()
napred(2)
desno()
napred(2)

Dodajte još dve naredbe u program tako da robot počevši od nove (gornje) pozicije dođe do
zelenog polja.

Zadatak 2
Robot na slici treba da zaobiđe zid i dođe na zeleno polje.
Neko je pokušao da napiše program koji ga vodi do zelenog polja, ali je pogrešio i rekao mu da
ide tri polja napred pa je udario u zid, pre nego što je stigao da se okrene udesno.

napred(3)
desno()

Ispravite ovaj program tako da robot ne udari u zid i dodajte još pet naredbi u program, tako da
robot dođe do zelenog polja. Probajte ovaj primer na: JSDares - Another wall.

Zadatak 3
Robot na slici treba da zaobiđe tri zida i dođe na zeleno polje.
Prikazan je deo programa koji ga vodi do pola puta.

napred(4)
levo()
napred()
levo()
napred(2)
desno()
napred()
desno()
napred(2)

Dodajte još naredbi u program tako da robot dođe do zelenog polja. Probajte ovaj primer
na: JSDares - Moving some more.

Zadatak 4
Robot na slici treba da dođe do sva tri zelena polja.
Neko je počeo da piše program ali je pogrešio, poslao ga tri polja napred pa je robot udario u zid.

// Završi program
napred(3)

Napišite novi program koji će dovesti robota do svih zelenih polja (predlog: pošaljite ga desno).
Probajte ovaj primer na: JSDares - Multiple goals.

Zadatak 5
Robot na slici treba da dođe do svakog zelenog polja.
Neko je počeo da piše program ali je pogrešio i robot je skrenuo na pogrešnom mestu.

napred(3)
desno()
napred(3)
desno()
napred(2)
desno()
napred()
desno()
napred()
levo()
napred()

Napišite novi program koji će dovesti robota do svih zelenih polja. Probajte ovaj primer
na: JSDares - Manipulation.

Zadatak 6
Robot je u lavirintu i treba da izađe iz njega.
Napišite program koji će dovesti robota do zelenog polja. Probajte ovaj primer na: JSDares -
Spiraling out of control.

JavaScript jezik ima mnogo ugrađenih funkcija koje možete da koristite u programima. Ovde su
objašnjene neke od njih.

Math.abs()
Ovo je funkcija koja određuje apsolutnu vrednost nekog broja. Ako između zagrada stavite neki
pozitivan

X = -6
Y = Math.abs(X)

Math.PI
Ovo je broj koji predstavlja skoro tačnu vrednost broja π (pi) čija je vrednost približno 3.14.
Pomoću ovog broja možete da izračunate obim i površinu kruga:

Obim = 2 * R * Math.PI
Povrsina = R*R * Math.PI

Math.PI se koristi bez zagrada, tako da je ovo ipak ugrađena promenljiva a ne


funkcija.
Math.pow()
U matematici često trebate da pronađete kvadrat nekog broja (tj. broj pomnožen sa samim sobom)
ili kub nekog broja (tj. broj*broj*broj). Math.pow() je funkcija koja može ovo da izračuna. Ova
funkcija ima dva parametra u zagradama

 prvi je broj za koji se traži kvadrat, kub ili neki drugi stepen,
 drugi je broj koji kaže koji stepen treba izračunati, na primer:
 2 znači da se traži kvadrat prvog parametra
 3 znači da se traži kub prvog parametra

Pomoću ove funkcije možete da izračunate površinu kvadrata koji ima stranicu dužine 15
centimetara:

PovršinaKvadrata = Math.pow(15,2)

Isto tako, možete da pronađete zapreminu kocke čija je stranica dužine 7 centimetara:

ZapreminaKocke = Math.pow(7,3)

Math.sqrt()
Math.sqrt() je JavaScript funkcija koja računa kvadratni koren od nekog broja. Između zagrada
ove funkcije treba da stavite broj ili promenljivu za koju treba izračunati kvadratni koren. Na
primer, pošto je kvadratni koren broj 9 broj 3, Math.sqrt(9) će izračunati kvadratni koren od broja
koji je stavljen u zagrade. Kada funkcija izračuna kvadratni koren taj broj možete da upišete u
neku promenljivu. Na primer, ako ste znate da je površina kvadrata 9 kvadratnih centimetara,
onda je dužina njegove stranice koren tog broja:

DužinaStranice = Math.sqrt(9)

Kvadratni koren možete da koristite kada računate dužinu hipotenuze pravouglog trougla pomoću
kateta i Pitagorine teoreme:

h = Math.sqrt( a*a + b*b )

U ovom primeru su izračunati kvadrati kateta a i b, a onda je iz njihovog zbira pronađen kvadratni
koren.
Često ćete funkcije koristiti da grupišete naredbe koje rade nešto zajedno. Na primer, pogledajmo
ponovo robota koji ide po pločicama. Robotu možemo da damo specijalne naredbe koje u sebi
imaju druge naredbe. Kada god robot naiđe na neku specijalnu naredbu, on će znati da je ona
samo ime za neku grupu naredbi i znaće da treba da izvrši njih.
Iako imamo funkcije idi_napred() i okreni_se_ulevo(), bilo bi nam korisno da imamo i funkciju
koja će odjednom da pomeri robota dva puta napred i okrene ga ulevo. Mi možemo da napravimo
nove funkcije kombinujući postojeće. Na sledećoj slici je prikazan šablon koji se koristi kada se
prave nove funkcije:

Na ovaj način se pravi nova funkcija sa datim imenom i naredbama u njenom telu koje će se
izvršiti ako se u programu naiđe na ima funccije. Kada neko bude hteo da izvrši naredbe u ovoj
funkciji, staviće u program ime ove funkcije sa zagradama. U zagrade možemo da stavimo imena
parametara koji će biti poslati funkciji kada se funkcija pozove. Na primer, ako napravimo
funkciju koja proverava da li je broj paran ili neparan, ulazni podatak koji se predaje toj funkciji je
upravo broj koji treba proveriti. Ako bi trebalo da napravimo funkciju koja nalazi najmanju od
vrednosti koje su joj poslate, ulazni parametri su brojevi za koje bi trebalo naći minimum.
U telu funkcije se stavljaju naredbe koje nešto rade. Konačno, ako funkcija treba da vrati neki
rezultat može se napisati return neki izraz.
Kada se napravi funkcija, ona može da bude pozvana tako što se navede njeno ime i u zagradi se
navedu vrednosti ili promenljive koje joj se predaju kao parametri. Kada se pozove funkcija,
parametri će biti kopirani kao parametri funkcije i počeće izvršavanje naredbi koje se nalaze u toj
funkciji.
Na primer, možemo da napišemo funkciju koja dobija dužine stranica pravougaonika i računa
njegovu površinu i obim:

function povrsinaPravougaonika(a, b) {
return a*b
}
function obimPravougaonika(a, b) {
return 2*a + 2*b
}

Ove funkcije nam pomažu da lako rešimo matematičke zadatke kao na primer: "Dat je
pravougaonik sa dužinama stranica 2 i 5. Potrebno je izračunati obim i površinu tog
pravougaonika." Kada smo napisali ove funkcije, lako nam je da rešimo ovakav zadatak tako što
samo stavimo date dužine stranica u funkcije za računanje površine i obima:

p = povrsinaPravougaonika(2, 5)
obim = obimPravougaonika(2, 5)
alert("Povrsina pravougnika je: " + p + ", a obim je: " + obim)

Sa ovakvim programom možemo da rešimo bilo koji zadatak ove vrste. Koje god da su dužine
stranica dovoljno je samo upisati ih umesto brojeva 2 i 5.
Ali šta da radimo ako imamo dužine stranica zadate u mernim jedinicama kao što su metri,
decimetri i centimetri, na primer 2m 3dm? Morali bismo prvo da pretvorimo ove dužine u
decimetre ili centimetre a onda ove dobijene brojeve da prosledimo funkcijama za računanje
površine i obima. Umesto da mi preračunavamo dužine, možemo da napišemo novu funkciju koja
dobija dužinu u metrima, decimetrima i centimetrima (na primer 2m 3dm 8cm ) i pretvara je u
dužinu u centimetrima.

function centimetri(metri, decimetri, centimetri) {


return 100*metri + 10*decimetri + centimetri
}

Sad možemo da rešavamo i zadatke kao što su: "Dat je pravougaonik sa dužinama stranica 2m
4dm 7cm i 1m 5dm 1cm. Potrebno je izračunati obim i površinu tog pravougaonika." Dovoljno je
da prvo pretvorimo dužine stranica u centimetre, a onda da te dužine pošaljemo funkcijama koje
računaju površinu i obim pravougaonika:

a = centimetri(2,4,7)
b = centimetri(1,5,2)
p = povrsinaPravougaonika(a,b)
obim = obimPravougaonika(a,b)
alert("Povrsina pravougnika je: " + p + ", a obim je: " + obim)

Da smo imali na primer dužine stranica 3dm 2cm i 4m 7dm, napisali bismo:

a = centimetri(0,3,2)
b = centimetri(4,7,0)

Dakle, ako je neka jedinica mere izostavljena, na mesto odgovarajućeg parametra stavljamo nulu
(3dm 2cm je 0m 3dm 2cm).
Kao što vidite, kad god imate neku korisnu formulu ili način da se nešto izračuna a ponavljaćete
ga često, bilo bi dobro da od toga napravite funkciju i da je onda samo upotrebite gde vam treba
umesto svaki put da tražite kako se nešto izračunava i da ponovo pišete deo programa koji to radi.

Primer
Izračunajte površinu pravouganika koji ima sledeće dužine stranica:

 35dm 5cm i 3dm 5cm


 5dm 5cm i 3.4 dm
 5dm 5cm i 3m 5dm
 5dm i 3m 5cm
 3.5dm i 7.5 dm

Ako napišemo funkciju koja pretvara sve jedinice mere u centimetre, onda bi program izgledao
ovako:

function cm(metri, decimetri, centimetri) {


return 100*metri + 10*decimetri + centimetri
}
alert('Provršina pravougaonika stranica 35dm 5cm i 3dm 5cm je: ' + cm(0
,35,5) * cm(0,3,5) )
alert('Provršina pravougaonika stranica 5dm 5cm i 3.4 dm je: ' + cm(0,5
,5) * cm(0,3.4,0) )
alert('Provršina pravougaonika stranica 5dm 5cm i 3m 5dm je: ' + cm(0,5
,5) * cm(3,5,0) )
alert('Provršina pravougaonika stranica 5dm i 3m 5cm je: ' + cm(0,5,0)
* cm(3,0,5) )
alert('Provršina pravougaonika stranica 3.5dm i 7.5 dm je: ' + cm(0,3.5
,0) * cm(0,7.5,0) )

Kada jednom napravite funkciju koja pretvara metre i decimetre u centimetre, lako možete da ih
pretvorite u centimetre i izračunate rezultat. Bez obzira koliko imate zadataka i parova stranica,
dovoljno je da samo dodate još jedan red koji će pretvoriti veličine u centimetre i prikazati
rezultat.
Da je zadatak bio da se pronađu obimi pravougaonika datih stranica, program bi bio veoma sličan:
function cm(metri, decimetri, centimetri) {
return 100*metri + 10*decimetri + centimetri
}
alert('Obim pravougaonika stranica 35dm 5cm i 3dm 5cm je: ' + 2*(cm(0,3
5,5) + cm(0,3,5)) )
alert('Obim pravougaonika stranica 5dm 5cm i 3.4 dm je: ' + 2*(cm(0,5,5
) + cm(0,3.4,0)) )
alert('Obim pravougaonika stranica 5dm 5cm i 3m 5dm je: ' + 2*(cm(0,5,5
) + cm(3,5,0)) )
alert('Obim pravougaonika stranica 5dm i 3m 5cm je: ' + 2*(cm(0,5,0) +
cm(3,0,5)) )
alert('Obim pravougaonika stranica 3.5dm i 7.5 dm je: ' + 2 *(cm(0,3.5,
0) + cm(0,7.5,0)) )

Primer
Izračunajte hipotenuzu pravouglog trougla ako su katete:

 35 i 32 centimetra
 15 i 9 centimetra
 16 i 3 centimetra
 11 i 26 centimetra
 31 i 5 centimetra

Hipotenuza trougla se računa po Pitagorinoj teoremi: hipotenyza = KOREN( a*a + b*b )

Nije baš jednostavno naći kvadratni koren nekog broja. Srećom, postoji
funkcija Math.sqrt koja će izračunati koren broja i vratiti rezultat.
Pošto moramo da odredimo hipotenuzu za nekoliko parova kateta bolje bi bilo da napravimo
funkciju koja određuje hipotenuzu po ovoj formuli kojoj bismo prosledili katete kao parametre.
Program koji proverava da li je nejednakost trougla zadovoljena za ove duži je prikazan u
sledećem primeru:

function hipotenuza(a, b) {
return Math.sqrt( a*a + b*b )
}
alert('Hipotenuza trougla sa katetama 35 i 32 je: ' + hipotenuza(35,32)
)
alert('Hipotenuza trougla sa katetama 15 i 9 je: ' + hipotenuza(15,9) )
alert('Hipotenuza trougla sa katetama 16 i 3 je: ' + hipotenuza(16,3) )
alert('Hipotenuza trougla sa katetama 11 i 26 je: ' + hipotenuza(11,26)
)
alert('Hipotenuza trougla sa katetama 31 i 5 je: ' + hipotenuza(31,5) )

Primer
Koje od datih duži se mogu iskoristiti da se napravi trougao:

 29, 35 i 32 centimetra
 25, 15 i 9 centimetra
 18, 16 i 3 centimetra
 14, 11 i 26 centimetra
 25, 31 i 5 centimetra

Trougao se može napraviti od duži ako zadovoljavaju nejednakost trougla: a < b + c I b < c + a I
c < b + a. Pošto moramo da odredimo da li je ovaj uslov tačan za veliki broj duži, bolje bi bilo da
napravimo funkciju koja proverava da li se od ovih duži može napraviti trougao. Program koji
proverava da li je nejednakost trougla zadovoljena za ove duži je prikazan u sledećem primeru:

function trougao(a, b, c) {
return ( a < b + c && b < c + a && c < b + a )
}
alert('Od duži dužina 29, 35 i 32 centimetra, se može napraviti trougao
:' + trougao(29,35,32) )
alert('Od duži dužina 25, 15 i 9 centimetra, se može napraviti trougao:
' + trougao(25,15,9) )
alert('Od duži dužina 18, 16 i 3 centimetra, se može napraviti trougao:
' + trougao(18,16,3) )
alert('Od duži dužina 14, 11 i 26 centimetra, se može napraviti trougao
:' + trougao(14,11,26) )
alert('Od duži dužina 25, 31 i 5 centimetra, se može napraviti trougao:
' + trougao(25,31,5) )

Ako dobijete poruku Od duži dužina 29, 35 i 32 centimetra, se može napraviti


trougao:true to znači da se od datih dužina može napraviti trougao, u suprotnom ako je
poruka: Od duži dužina 29, 35 i 32 centimetra, se može napraviti
trougao:false, od njih se ne može napraviti trougao.

U prethodnoj lekciji smo videli kako se pišu takozvani „linijski programi“. Tok izvršavanja
ovakvih programa je pravolinijski od početka do kraja uz eventualna zaustavljanja kako bi se
sačekalo da korisnik unese neki podatak koji će biti obrađen. Međutim u realnim slučajevima nam
trebaju složeniji programi, u kojima treba da donesemo neke odluke, na osnovu kojih ćemo da
preduzmemo jednu ili drugu akciju, da ponovimo neku grupu naredbi i slično.
JavaScript vam omogućava da pored jednostavnih "pravolinijskih programa" napišete i programe
koji se razdvajaju na dve putanje u zavisnosti od nekog uslova ili ponavljaju grupe naredbi
pomoću naredbi za kontrolu toka izvršavanja programa:

 if naredbe koja vam omogućava da izvršite određeni niz naredbi samo ako je neki uslov
ispunjen,
 if/else naredbe koja vam omogućava da u zavisnosti od nekog uslova izvršite jednu od dve
grupe naredbi,
 while naredbe koja ponavlja grupu naredbi dok god je zadovoljen neki uslov

Pomoću ovih naredbi možemo da zadamo da se deo koda izvršava samo ako je neki uslov
ispunjen, ili da se izvršavanje nekog dela koda ponovi više puta. JavaScript obezbeđuje nekoliko
naredbi koje vam omogućavaju da ponavljate druge naredbe, da odlučite da li neka naredba treba
da se izvrši i slično.
Program koji izvršava naredbe sa slike pomoću naredbi while i if bi izgledao ovako:

do {
naredba()

if(odluka) {
naredba()
} else {
naredba()
}

} while(ponovo())

naredba()

Sada ćemo videti kako se koriste ove naredbe.


Zamislite da se vozite automobilom i nailazite na raskrsnicu na kojoj put desno vodi u Suboticu.
Ako treba da razmislimo da li da skrenemo desno, morali bismo da donesemo ovakvu odluku:

Ova naredba je naredba odluke. Naredba odluke u sebi ima neki uslov ili pitanje, na primer "Ako
ideš u Suboticu uradi…" ili "Da li ideš u Suboticu?" ako je odgovor na ovo pitanje DA, onda će se
izvršiti naredba „skreni desno“ i nastavićemo putem za Suboticu. Ako je odgovor NE neće se
izvršiti ova naredba i nastavićemo pravo.
Naredba if može da proveri neki uslov i izvrši neke naredbe samo ako je ispunjen
uslov. if naredba izgleda ovako:
U zagradama if ( ) naredbe se nalazi neki uslov. Ako je taj uslov tačan, biće izvršena jedna ili više
naredbi iza nje. Neki uslov može da bude funkcija koja vraća TAČNO/NETAČNO neki izraz koji
poredi vrednost (na primer broj je veći od drugog broja) ili neki izraz sa logičkim operatorima.
Naredbe u telu funkcije mogu da budu obične naredbe, pozivi funkcija, druge if naredbe, itd.
Hajde da se vratimo na problem u kome treba da odlučimo da li da skrenemo za Suboticu.
Pretpostavimo da imamo dve funkcije:

 ideš_u_Suboticu() koja će proveriti da li treba da idemo u Suboticu. Ova funkcija će


vratiti vrednost TAČNO ili NETAČNO.
 skreni_udesno() kojom ćemo skrenuti udesno.

Program bi izgledao ovako:

if( ideš_u_Suboticu() ) {
skreni_udesno()
}

Naredbe odluke koristimo kada ne znamo unapred koje naredbe će u datom trenutku biti potrebno
da se izvrše i ne možemo da sastavimo jednostavan linijski program. Tada onome ko izvršava
naredbe ostavljamo da sam vidi šta se dešava, odgovori na neko pitanje i na osnovu odgovora sam
donese odluku koja naredba treba da se izvrši.
Svakodnevni primer uslovnog izvršavanja je semafor - ako je svetlo na semaforu zeleno
prelazimo ulicu.
Kada bismo vrednost semafora mogli da stavimo u neku promenljivu i kada bismo mogli da
napišemo naredbu kojom bi se prelazila ulica, ovakav program bi bio:

if ( svetlo_na_semaforu() == "zeleno" ) {
pređi_ulicu()
}

Funkcijom svetlo_na_semaforu() ćemo pogledati na semafor i videti koje je trenutno svetlo. Ako
je vrednost koju vrati ova funkcija "zeleno", onda ćemo izvršiti naredbu pređi_ulicu().
Na primer, pogledajmo pčelu na slici koja sakuplja nektar iz cvetova. Na žalost neki oblak je
prekrio poslednje polje tako da ne vidimo da li je tu cvet ili košnica. Međutim, kada pčela ode tri
koraka napred, ona će videti šta je na tom polju. Ako kao četvrtu naredbu stavimo naredbu odluke
kojom ćemo reći pčeli da ako je na cvetu treba da pokupi nektar, naš program bi izgledao ovako:

U ovom primeru smo rekli pčeli šta da uradi ako je odgovor DA (tj. da uzme nektar), a ako je
odgovor NE onda da ne radi ništa. Pretpostavimo da imamo sledeće funkcije:

 moveForward() koja pomera pčelu jedno polje napred.


 atFlower() koja proverava da li se pčela nalazi na cvetu
 getNectar() koja govori pčeli da uzme nektar.

Ako bismo napisali program koji je prikazan na prethodnoj slici, on bi izgledao ovako:

moveForward()
moveForward()
moveForward()
if (atFlower()) {
getNectar()
}

Zamislite da na polju koje je prekriveno oblakom može da bude ili cvet ili saće. Ako se pčela nađe
na cvetu, onda treba da sakupi nektar sa njega, ali ako nije na cvetu onda treba da napravi med.
Pretpostavimo da imamo dve nove funkcije:

 atHoneycomb() proverava da li je pčela na saću


 makeHoney() govori pčeli da napravi med

Da bismo napisali naredbe za ovaj problem možemo da stavimo dve naredbe odluke jednu iza
druge u primeru:

moveForward()
moveForward()
moveForward()
if (atFlower()) {
getNectar()
}
if (atHoneycomb()) {
makeHoney()
}

Možemo da koristimo i posebnu naredbu odluke kojoj možemo da kažemo šta treba da se uradi
ako je odgovor DA, a šta da se uradi ako je odgovor NE. Ovakva naredba izgleda ovako:

if( neki uslov ) {


naredba
} else {
naredba
}

Kao i u običnoj if naredbi imamo uslov koji se proverava i naredbe u vitičastoj zagradi koje će se
izvršiti ako je uslov tačan. Međutim, ovde imamo i else deo gde se u vitičastim zaradama nalaze
naredbe koje će biti izvršene ako uslov nije tačan.
Program sa pčelom možemo da prepravimo tako da koristimo if/else naredbu:
moveForward()
moveForward()
moveForward()

if (atFlower()) {
getNectar()
} else {
makeHoney()
}

U ovom primeru, prvo proveravamo uslov da li je pčela na cvetu. Ako jeste uzeće nektar sa cveta.
Ako nije na cvetu (to znači da je na saću), onda će napraviti med.

Primer - minimum brojeva


Sada ćemo videti primer u kome ćemo uporediti dve promenljive i naći koja je manja vrednost od
njih dve. Program izgleda ovako:

a = prompt("Unesite prvi broj:")


b = prompt("Unesite drugi broj:")
minimum = a // Pretpostavimo da je prvi broj manji
if (b < a) // proverimo da li je drugi broj manji od njega
{
minimum = b // ako jeste, u minimum upišemo vrednost iz drugog broj
a
}

Prvo smo pretpostavili da je vrednost promenljive a manja od promenljive b i nju smo upisali u
promenljivu minimum. Onda smo proverili da li je b manje od a, i ako jeste, u promenljivu
minimum smo upisali vrednost promenljive b. Kao rezultat, kada izađemo iz if naredbe, u
promenljivoj minimum će biti manja vrednost.

Primer - deljivost brojeva


Aritmetički operator % može da se koristi da bi se proverilo da li je broj paran ili deljiv nekim
brojem. Ako izračunamo ostatak pri deljenju nekog broja drugim brojem i ako je taj ostatak nula,
onda je broj deljiv drugim brojem. Program koji proverava da li je uneti broj deljiv sa 2, 5 ili 17,
izgleda ovako:

a = prompt("Unesite broj:")
if ( a % 2 == 0 )
{
alert( "Broj je paran" )
}
if ( a % 5 == 0 )
{
alert( "Broj je deljiv sa 5" )
}
if ( a % 17 == 0 )
{
alert( "Broj je deljiv sa 17" )
}

Kada se unese vrednost broja, primenjujemo operator % koji računa ostatak pri deljenju unetog
broja sa 2, 5 i 17. Ako je ostatak pri deljenju broja sa 2 jednak nuli onda je broj paran. Ako su
ostaci pri deljenju broja sa 5 i 17 isto nule, onda je uneti broj deljiv sa 5 odnosno 17.
Naredbe ponavljanja su naredbe koje ponavljaju druge naredbe. Naredbe ponavljanja se
nazivaju PETLjE. Naredba ponavljanja ima uslov koji joj govori da li treba još da ponavlja druge
naredbe, a izgleda ovako:

Sve dok je uslov petlje koji se nalazi u zagradama while naredbe tačan, naredbe u telu će se
ponavljati. Novi pojmovi:

 Logički izraz u zagradama iza while naredbe se naziva USLOV PETLjE.


 Naredbe u vitičastim zagradama se nazivaju TELO PETLjE.
 Svako ponavljanje naredbi u telu petlje se naziva ITERACIJA.

Kada nam trebaju naredbe


ponavljanja?
Naredbe ponavljanja su odlične ako ne znamo koliko puta treba da se izvrši neka naredba. Na
primer:
 Koliko puta je potrebno udariti čekićem ekser da bismo ga zakucali u drvo? Dok se ne
zakuca.
 Koliko puta treba da ubacimo zemlju lopatom u rupu? Dok se rupa ne zatrpa.
 Koliko koraka treba da trčimo na trci? Dok ne stignemo do cilja.

U ovim primerima imamo naredbe koje se ponavljaju, ali ne možemo da kažemo koliko puta treba
da se izvrše. U ovim naredbama moramo da imamo neke odluke ili uslove. Ovo su nove vrste
naredbi koje zovemo naredbe ponavljanja sa uslovima. To su kombinacije običnih naredbi za
ponavljanje i naredbi sa odlukama.
Pogledajmo primer sa Redom koji hoće da dođe do praseta na slici. Ako bismo imali samo običnu
naredbu "pomeri se napred" morali bismo da izbrojimo koliko je daleko od praseta da bismo onda
5 puta napisali tu naredbu. Međutim, ako imamo naredbu ponavljanja sa uslovom, možemo da mu
kažemo: dok ne dođeš do praseta, ponavljaj naredbu „pomeri se napred“, kao na slici desno:

Zamislite da Red razume sledeće naredbe:

 nije_stigao_do_praseta() koja proverava da li je Red stigao do praseta i ako još uvek nije
stigao vraća vrednost TAČNO
 pomeri_se_napred() koja pomera Reda jedno polje napred

Program bi izgledao ovako:

while (nije_stigao_do_praseta()) {
pomeri_se_napred()
}

Naredba while će svaki put pitati funkciju nije_stigao_do_praseta() da li je Red stigao do praseta.
Sve dok nije stigao pozivaće pomeri_se_napred().
Zašto su korisne naredbe ponavljanja sa uslovima? Prvo, lakše nam je da programiramo sa njima,
zato što ne moramo da brojimo koliko puta treba da se ponovi neka naredba. Da je Red bio 73
koraka od praseta, ovo bi bilo teško, a mogli bismo lako i da pogrešimo. Ako bismo pogrešili u
brojanju samo za jedan, Red bi ili stao ispred praseta ili bi udario u zid iza praseta. Drugi razlog je
da nekada stvarno ne možemo da znamo koliko puta treba da se nešto ponovi. Na primer, ako ne
vidimo sva polja između Reda i praseta, ne možemo da znamo koliko puta Red treba da ide
napred. Ali, ono što znamo je da Red treba da dođe do praseta. Zašto to ne bismo koristili da
zadamo do kada treba da se ponavlja naredba umesto nekog broja koji smo ranije koristili?
Na slici je farmer sa lopaticom koji hoće da napuni rupu na putu zemljom. Možemo da mu
kažemo „ispuni 1“ što znači da ubaci jednu lopatu zemlje u rupu. Međutim, pošto ne znamo
koliko je rupa duboka, ne možemo da mu kažemo nešto kao pet puta ubaci zemlju. Ali ako imamo
naredbu ponavljanja sa uslovom, možemo da mu kažemo nešto kao: „Dok je tu rupa: ispuni 1“.
Tako će farmer sipati lopatu po lopatu zemlje u rupu dok je ne napuni.

U ovom programu će farmer prvo da se pomeri napred, onda okrene ulevo, pa onda pomeri napred
da bi došao do rupe. Onda će da ponavlja naredbu „ispuni 1“ sve dok je tu rupa. Kada ispuni rupu
do vrha, neće više da izvršava naredbu. Farmer razume sledeće naredbe:

 pomeri_se_napred() koja pomera Reda jedno polje napred


 okreni_se(ulevo) ili okreni_se(udesno) koja mu govori da treba da se okrene ulevo ili
udesno
 je_tu_rupa() koja vraća vrednost TAČNO ako rupa još uvek postoji
 ispuni(1) koja mu kaže da ispuni rupu jednom lopatom zemlje

Program koji objašnjava farmeru šta da uradi, prikazan je u sledećem primeru:

pomeri_se_napred()
okreni_se(ulevo)
pomeri_se_napred()
while (je_tu_rupa()) {
ispuni(1)
}

Hajde sad da objasnimo farmeru kako da ispuni rupu i pokupi zemlju sa gomile na slici dole.
Možemo da mu kažemo ispuni 1 kao u prethodnom primeru, ali i ukloni 1 što znači da uzme
jednu lopaticu zemlje sa gomile. Program koji bi mu objasnio ako da izravna ovaj teren je
prikazan na slici desno.
Prvo ćemo da mu kažemo da se pomeri dva puta napred kako bi došao do rupe. Onda mu kažemo
da ispuni rupu po jednom lopaticom zemlje sve dok je tu rupa. Potom mu govorimo kako da dođe
do gomile zemlje. Onda mu drugom petljom govorimo da treba da ukloni po jednu lopaticu
zemlje sa gomile sve dok ne nestane gomila. Farmer sada razume nove naredbe:

 je_tu_gomila() koja vraća vrednost TAČNO ako je tu još uvek gomila zemlje
 ukloni(1) koja mu kaže da ukloni jednu lopatu zemlje sa gomile

Program koji mu objašnjava šta da uradi je prikazan u sledećem primeru:

pomeri_se_napred()
pomeri_se_napred()
okreni_se(ulevo)
while (je_tu_rupa()) {
ispuni(1)
}
pomeri_se_napred()
okreni_se(udesno)
pomeri_se_napred()
while (je_tu_gomila()) {}
ukloni(1)
}

Naredba while je veoma slična if naredbi. Jedina razlika je u tome što u ovoj naredbi ponavljamo
naredbe dok je uslov tačan, a u if naredbi jednom izvršimo te naredbe.
Primer - zbir svih neparnih dvocifrenih brojeva
Zamislite da treba da prođemo kroz sve neparne brojeve od 11 do 99 i da izračunamo njihov zbir.
Uslov da je broj dvocifren je malo složeniji - on izgleda ovako 10 <= broj I broj <= 99. U
sledećem primeru možete da vidite primer petlje koja koristi ovaj uslov da pronađe zbir svih
neparnih dvocifrenih brojeva:

broj = 11
zbir = 0
while (broj <= 99) {
zbir = zbir + broj
broj = broj + 2
}

Prvo smo postavili početne vrednosti za prvi neparan dvocifreni broj (11) i zbir (na početku je
nula). Dok je broj dvocifren, dodajemo ga u zbir i postavljamo mu vrednost sledećeg dvocifrenog
broja. Uslov u whilepetlji stalno proverava da li je vrednost u promenljivoj broj i dalje dvocifren
broj. Ako jeste, nastavljamo da izvršavamo naredbe između vitičastih zagrada i dodajemo
vrednost koja je u promenljivoj broj na zbir.

Primer - prosti brojevi


Broj je prost ako nije deljiv ni jedim brojem osim samim sobom i brojem 1. Pomoću while petlje i
aritmetičkog operatora % možemo lako da proverimo da li je broj prost ili ne. Dovoljno je da za
sve brojeve manje od unetog broja proverimo da li je uneti broj deljiv nekim od njih. Program koji
proverava da li je uneti broj deljiv brojevima između 2 i njega samog, izgleda ovako:

a = prompt("Unesite broj:")
broj_je_prost = true
delilac = 2;
while ( delilac < a ) {
if ( a % delilac == 0 ) {
broj_je_prost = false
}
delilac = delilac + 1
}

Prvo ćemo zatražiti da se unese vrednost broja za koji proveravamo da li je prost. Pretpostavićemo
da je broj prost i u promenljivu broj_je_prost ćemo upisati vrednost TAČNO. Potom ćemo
proveriti da li je uneta vrednost deljiva deliocima koji će imati vrednosti 2, 3, 4, 5, pa sve do broja
koji je za jedan manji od unetog (tj. delilac < a). Kada primenimo operator % koji računa ostatak
pri deljenju unetog broja deliocem, proveravamo da li je ostatak pri deljenju 0. Ako jeste, onda
uneti broj nije prost i u promenljivu broj_je_prost upisujemo vrednost NETAČNO. Ovu proveru
ponavljamo za svaku vrednost od 2 do unetog broja.

PAZITE DA NE UKLjUČITE I VREDNOST BROJA a U PETLjU! AKO


STAVITE USLOV delilac <= a UMESTO delilac < a, U POSLEDNjOJ
ITERACIJI ĆETE PROVERITI DA LI JE BROJ DELjIV SAMIM SOBOM I
DOBIĆETE UVEK REZULTAT DA BROJ NIJE PROST.

Naredbe ponavljanja se često koriste da izvrše neke naredbe tačno 10, 100, ili neki drugi broj
puta. Takva ponavljanja izgledaju ovako:

broj = pocetak
while ( broj < kraj) {
Naredba
broj = broj + 1
}

U ovakvim petljama sa brojanjem koristimo jednu promenljivu kao brojač. Na početku, toj
promenljivoj upišemo neku početni vrednost (obično nula ili jedan). Onda u uslovu petlje
proveravamo da li je vrednost u toj promenljivoj došla do kraja. Ako nije - izvršavamo naredbe iz
tela petlje, a ako jeste - naredba ponavljanja je završena. Kao poslednju naredbu u telu naredbe,
uzimamo vrednost iz promenljive, uvećavamo je za jedan i ponovo upisujemo u promenljivu da bi
while naredba opet proverila da li je ta nova vrednost manja od kraja.
U sledećem primeru je petlja koja ispisuje sve brojeve od 1 do 100:

broj = 1
while ( broj <= 100) {
console.out(broj)
broj = broj + 1
}

Pošto hoćemo da ponovimo ispis za svaki broj od 1 do 100, upisaćemo prvi broj u promenljivu. U
uslovu while petlje ćemo proveriti da li je broj još uvek manji od 100. Pošto je manji, izvršiće se
telo petlje i vrednost broja će biti prikazana na konzoli. Potom ćemo broj uvećati za jedan i
ponovo proveriti da li da ponovimo telo petlje sa ovim brojem. Kao rezultat, naredbe u telu petlje
će biti urađene za svaku vrednost broja od 1 do 100 i na izlazu će biti prikazane te vrednosti - u
svakom koraku po jedna.
U ovom primeru ćemo da pomognemo Redu da dođe do praseta. Možemo da napravimo program
sa pet naredbi „pomeri se napred“ kao na slici:
U ovom programu smo morali da pet puta kažemo Redu da se pomeri napred kada krene. Naredba
ponavljanja može da nam pomogne tako što ćemo u nju da stavimo jednu naredbu „pomeri se
napred“ a onda ćemo da upišemo da treba da se ta naredba ponovi pet puta. Tako bismo dobili
program na slici:

U JavaScript jeziku bi taj program izgledao ovako:

broj = 0
while ( broj < 5) {
pomeri_se_napred()
broj++
}

Zamislite da je Red 100 polja udaljen od praseta. Zar ne bi bilo teško da 100 puta stavite naredbu
„pomeri se napred“? Zar nije bolje da imamo jednu naredbu „Ponovi ___ puta naredbe“ u koju
ćemo ubaciti „pomeri se napred“ naredbu i gde ćemo smo staviti broj 100 umesto 5 kao u
prethodnom primeru? Naredbe ponavljanja nam pomažu da samo kažemo koliko puta treba da se
ponovi neka naredba umesto da je mi ponavljamo u programu.

Primer - zbir brojeva od 1 do 100


U sledećem programu ćemo proći kroz sve brojeve počevši od 1 i uvećavati vrednost broja za
jedan u svakoj iteraciji. To ćemo da radimo sve dok je broj manji od 100. U svakoj iteraciji ćemo
dodati trenutnu vrednost broja u promenljivu zbir koja ima početnu vrednost 0.

broj = 1
zbir = 0
while ( broj <= 100 ) {
zbir = zbir + broj
broj = broj + 1
}

U prethodnim primerima smo se susretali sa promenljivama koje imaju jednostavne vrednosti.


Svaka promenljiva ima u sebi samo jedan podatak, koji može da bude broj, tekst, itd.
Međutim, nekada je potrebno koristiti složene strukture podataka, koje u sebi sadrže po
nekoliko vrednosti.
Na primer, da bi se sačuvale informacije o osobi zgodno je podatke kao što su ime, prezime,
datum rođenja i slično objediniti u jednu celinu. U te svrhe koriste se objekti.

osoba = {"ime": "Mihajlo", "prezime": "Pupin", "datumRodjenja": "9/10/1


858"}

S druge strane, da bi se sačuvala lista svih kontinenata, ili neki drugi podatak nabrojivog tipa,
treba koristiti nizove.

kontinenti = ["Afrika","Evropa","Azija","Severna Amerika","Južna Amerik


a",
"Australija","Antarktik"]

Dok se kod nizova podatak dohvata preko svoje pozicije u nizu (npr. vrednost promenljive
kontinenti[0] je "Afrika", a promenljive kontinenti[2] je "Azija"), kod objekata se podatak
dohvata po imenu (npr. osoba.prezime ima vrednost "Pupin").
Više o ovome saznaćete u nastavky.
Do sada smo koristili jednostavne promenljive, koje sadrže jedan podatak (npr. vrednost jednog
broja ili stringa). Zamislite sada da imamo grupu sličnih objekata, koje želimo da koristimo
zajedno – u tom slučaju bi nam trebao neki mehanizam da ih grupišemo. Na primer, potrebno je
da imamo skup ocena koje je dobio neki učenik. Mi možemo da napravimo 10 promenljivih kao
što su ocena0, ocena1, ocena2, itd. gde bi svaka promenljiva predstavljala jednu ocenu učenika, a
u svaku od njih bi bila upisana odgovarajuća ocena. Mogli bismo da nađemo najveću ocenu, ili
srednju ocenu tako što bismo ih pojedinačno sabirali ili poredili. Međutim, u slučaju da imamo
veliki broj podataka (ocena), umesto ovakvih promenljivih potrebna nam je neka promenljiva koja
bi sadržala sve ocene, gde bismo mogli da uzmemo svaku od pojedinačnih ocena po rednom
broju. Nizovi su upravo ovakve promenljive. Niz je složena promenljiva koja sadrži više drugih
promenljivih u sebi. Svaka promenljiva u nizu ima svoj redni broj (ili indeks, kako ćemo ga zvati
u nastavku), pomoću kog se može naći vrednost koja nam treba. Kao što promenljive možemo da
zamislimo kao kutije u kojima se nalaze vrednosti, nizove možemo da zamislimo kao grupe kutija
gde svaka kutija ima svoj redni broj (koje ćemo od sada zvati indeksi):
Svakoj pojedinačnoj promenljivoj u nizu (zvaćemo ih elementi niza) možemo pristupiti po
njenom rednom broju tj. indeksu i u nju se može ili ubaciti neka vrednost ili pročitati vrednost iz
nje. Treba imati na umu da PRVI element u nizu ima indeks 0 – ovo pravilo je karakteristično za
većinu programskih jezika. Ako imamo promenljivu koja se zove brojevi i predstavlja niz, onda
možemo da dođemo do elemenata u tom nizu tako što iza imena niza stavimo uglaste zagrade i u
njih redni broj. U sledećem primeru ćemo u elemente niza sa redim brojevima 0, 1 i 2 upisati neke
brojeve, a onda ćemo pročitati vrednosti iz tih elemenata, da bismo ih sabrali i zbir ćemo upisati u
promenljivu zbir:

br[0] = 10
br[1] = 3
br[2] = 200
zbir = br[0] + br[1] + br[2]

Niz se pravi tako što se unutar uglastih zagrada navedu vrednosti koje će biti upisane u elemente
niza:

br = [10, 8, 26, 5, 3, 12]

Još jedna korisna mogućnost: ako iza imena niza stavimo .length dobićemo koliko ima elemenata
u nizu (npr. br.length predstavlja broj elemenata u nizu br). Sledeći program će prikazati u poruci
koliko ima elemenata u nizu:

alert("Niz ima " + br.length + " elemenata")

Jedan potpuni program koji pravi novi niz brojeva, prikazuje koliko ima elemenata, i petljom
ponavlja naredbu koja prikazuje vrednost elementa je prikazan u sledećem programu:

br = [10, 8, 26, 5, 3, 12]


console.log("Broj elemenata u nizu je: " + br.length)
i = 0
while ( i < br.length ) {
console.log("Broj: " + br[i])
i = i + 1
}

Vratimo se na naš primer sa ocenama učenika. Pretpostavimo da je učenik dobio ocene 4, 5, 2 i 5.


Program koji bi prikazao koliko učenik ima ocena, koja je prva ocena i koja je srednja ocena je
prikazan u sledećem primeru:
ocene = [4, 5, 2, 5]
console.log("Broj ocena je: " + ocene.length)
console.log("Prva ocena koju je dobio ucenik je: " + ocene[0])
srednjaOcena = 0
i=0
while(i<ocene.length)
{
srednjaOcena = srednjaOcena + ocene[i]
i = i + 1
}
srednjaOcena = srednjaOcena / ocene.length

Da smo umesto niza ocena napravili posebne promenljive ocena1, ocena2, ocena3 i ocena4
program bi bio mnogo teži, a bilo bi potrebno više prepravljanja ako bismo imali drugačiji
(mnogo veći) broj ocena.
U nekim jezicima je prilikom definisanja niza potrebno navesti njegovu dužinu (tj. koliko će imati
elemenata). U JavaScript-u ovo nije potrebno - svaki put kada pokušate da upišete neku vrednost
u element niza sa nekim indeksom, niz će automatski biti proširen do indeksa koji vam je
potreban.

var ocene = []
ocene[0] = 4
ocene[1] = 5
ocene[2] = 2
ocene[3] = 5

Prvo smo napravili prazan niz. Kada smo upisali prvu ocenu, niz je automatski uvećan za jedan,
kako bi se obezbedilo mesto za novu promenljivu. Svaki naredni upis će na isti način automatski
proširiti niz kako bi se obezbedilo da ima dovoljno mesta.

Primer - Sabiranje brojeva u nizu


Pronalaženje zbira, ili proizvoda brojeva u nizu je verovatno najčešći problem koji ćete rešavati.
Prvo ćemo definisati promenljivu u kojoj će biti zbir elemenata. Početna vrednost ove promenljive
će biti nula. Onda ćemo proći kroz niz, uzeti svaki element i njegovu vrednost dodati u zbir. U
sledećem primeru je prikazana funkcija koja izračunava zbir elemenata niza na ovaj način:

function zbir ( niz ) {


zbir = 0
i = 0
while ( i< niz.length ) {
zbir = zbir + niz[i]
i = i + 1
}
return zbir
}

Primer - provera da li su svi brojevi u nizu veći


od nule
U ovom primeru ćemo napraviti funkciju koja proverava da li su svi brojevi u nizu pozitivni (tj.
veći od nule). Ako jesu, funkcija vraća TAČNO. Prvo ćemo definisati logičku promenljivu, koja
će govoriti da li su svi brojevi u nizu pozitivni. Pretpostavićemo da jesu. Potom ćemo proći kroz
niz i za svaki element proveriti da li je manji od nule - ako jeste, upisaćemo vrednost false u
promenljivu.

function sviSuPozitivni ( niz ) {


pozitivni = true
i = 0
while ( i < niz.length ) {
if( niz[i] < 0 ) {
pozitivni = false
}
i = i + 1
}
return pozitivni
}

Primer - rastući niz


U datom nizu brojeva proveriti da li su elementi poređani u rastućem redosledu.

function nizJeRastuci ( niz ) {


rastuci = true
i = 0
while( i< niz.length - 2 ) {
if(niz[i] > niz[i+1]) {
rastuci = false
}
i = i + 1
}
return rastuci
}
Primer - Najmanji element niza
Za dati niz brojeva potrebno je naći najmanji element. Minimum ćemo naći tako što prvo
pretpostavimo da je najmanji element u nizu prvi element, a onda ćemo proći kroz sve elemente
niza i za svaki od njih proveriti da li je manji od trenutnog minimuma. Ako jeste, onda ćemo u
minimum upisati vrednost tog elementa niza.

function minimum ( niz ) {


min = niz[0]
i=1
while ( i < niz.length ) {
if(niz[i] < min) {
min = niz[i]
}
i = i + 1
}
}

Obratite pažnju da indeksi niza u petlji idu od 1 do poslednjeg. Mogli bismo da koristimo indekse
od nule ali bismo u tom slučaju u prvoj iteraciji poredili vrednost niz[0] sa minimumom koji je
inicijalno već jednak vrednosti u niz[0]. Iako na ovaj način ne bismo napravili grešku, prva
iteracija bi bila uzaludna.

Primer - razvrstavanje brojeva u nizu


Potrebno je napisati program koja od niza brojeva formira dva niza: jedan u kome su svi parni i
drugi u kome su svi neparni brojevi.
Rešenje je prikazano u sledećem primeru. Program prolazi kroz elemente niza koje razvrstava u
nizove parni i neparni.

// niz koji treba razvrstati na parne i neparne:


brojevi = [3,7,6,8,5,2,1,6,4,6,8,1,5,2]

// Nizovi u kojima će biti rezultati (na početku su prazni):


parni = []
neparni = []

//Glavni program:
i=0
while ( i < brojevi.length )
{
if( brojevi[i] % 2 == 0) {
parni.push(brojevi[i]) // Ako je broj paran dodaj ga u parne
} else {
neparni.push(brojevi[i]) // Ako je neparan dodaj ga u neparne
}
i = i + 1 // i uvećaj za jedan da bi prešao na sl
edeći element niza
}

alert("Parni: " + parni)


alert("Neparni: " + neparni)

Prvo napravimo prazne nizove za parne i neparne brojeve. Potom prolazimo kroz sve elemente
niza brojeva i ako je trenutni element paran stavljamo ga u niz parnih, a ako je neparan onda ide u
niz neparnih.

Primer - koliko puta je unet broj


Uradimo još jedan primer da bismo se uhodali u radu sa nizovima. Recimo da se unose
jednocifreni brojevi sve dok se ne unese -1. Ono što hoćemo da uradimo je da ispišemo koliko
puta se svaki od brojeva pojavio. Pogledajmo kako bismo to uradili:

brojPojavljivanja = []

// Unosimo broj i proveravamo da li je različit od -1


// Ako jeste uvećamo broj pojavljivanja za 1 unesemo sledeći
broj = prompt("Unesite novi broj (ili -1 za kraj):")
while (broj != -1) {
// Ako broj nije u nizu broj pojavljivanja mu je 0.
if(!brojPojavljivanja[broj]) {
brojPojavljivanja[broj] = 0
}
brojPojavljivanja[broj] = brojPojavljivanja[broj] + 1
broj = prompt("Unesite novi broj (ili -1 za kraj):")
}

// Na kraju, prođemo kroz sve elemente niza


// i prikažemo koliko puta se svaki broj pojavio.
for( indeks in brojPojavljivanja ) {
alert( "Broj " + indeks + " je unet " + brojPojavljivanja[indeks
] + " puta." )
}

U prethodnoj lekciji smo se upoznali sa nizovima. Videli smo da su to složene promenljive, koje u
sebi sadrže više jednostavnijih promenljivih, kojima se može pristupati po indeksu. Drugi tip
složenih promenljivih su „objekti“, koji se mogu zamisliti kao skupovi promenljivih kojima se
može pristupati po imenu. Kao što smo u prethodnom primeru mogli da zamislimo niz kao grupu
kutija gde je svaka obeležena brojem, objekte možemo zamisliti kao grupe kutija gde je svaka
obeležena nekim nazivom. Zamislite da nam treba promenljiva u koju bismo stavili podatke o
nekom učeniku, kao što su njegovo ime, koliko ima godina, koji mu je broj telefona, imejl,
Fejsbuk nalog, u koji razred i školu ide i u kom gradu. Umesto da stavimo osam posebnih
promenljivih za ove podatke, mogli bismo da ih grupišemo zajedno i stavimo na jedno mesto.
Tako možemo da stavimo iste podatke za više različitih učenika:

Zamislite da je svaka fioka u stvari jedna promenljiva u kojoj imamo podatke o učenicima. Kada
pogledamo u podatke o nekom od učenika u njemu možemo da vidimo dodatne promenljive
(fascikle) koje sadrže vrednosti kao što su u koji razred ide, koje je godište i slično.
Kao i u slučaju nizova, svaka promenljiva u objektu (koju ćemo nazivati polje objekta) sadrži
neki podatak, kome možemo pristupiti nezavisno od ostalih. U JavaScript-u se ovakvi objekti
prave tako što se u vitičaste zagrade stave imena polja i vrednosti koje će biti u njima:

ucenik1 = { ime: "Petar Petrović", godiste: 98, telefon: "012 345 678"
}
ucenik2 = { ime: "Marko Marković", godiste: 97, telefon: "098 765 432"
}

Kao rezultat napravili smo dve promenljive (osoba1 i osoba2) koje predstavljaju objekte sa
dodatnim promenljivama u sebi. Imena polja moraju da budu u skladu sa pravilima imenovanja
promenljivih u JavaScript-u (tj. počinju slovima, dolarom ili donjom crtom, a posle mogu da
sadrže i cifre), a vrednosti mogu da budu brojevi ili stringovi.

Možete da napravite i potpuno prazan objekat ako stavite samo vitičaste zagrade
bez i jednog polja, npr. x = {}. Posle možete takvom objektu da dodajete polja.
Objekti mogu da se koriste kad god imamo više podataka o jednom realnom objektu. Na primer,
zamislite da imate dva ugla α=120⁰40′ i β=60⁰ 31′ 10′′. Njih možemo da predstavimo kao objekte
koji imaju polja za stepene, minute i sekunde:

alfa = { stepeni: 120, minuta: 24 }


beta = { stepeni: 60, minuta: 31, sekundi: 10 }
Objekti mogu da budu i dužine duži, izražene u različitim merama kao što su metri, decimetri,
centimetri i milimetri. Na primer, pomoću objekata možemo da predstavimo dve duži dužina 1m
2dm i 1dm 3cm 5mm:

duz1 = { m: 2, dm: 2 }
duz2 = { dm: 1, cm: 3, mm: 5 }

Kao što se promenljivama u nizu može pristupiti po indeksu korišćenjem uglastih zagrada (npr.
imeniza[indeks]) tako se promenljivama u objektu može pristupiti po imenu polja korišćenjem
tačke (npr. objekat.imePolja). U sledećem primeru možete da vidite kako se pravi objekat, kako se
čita podatak iz njega i kako se upisuje vrednost u neko polje objekta.

ucenik = { ime: "Petar Petrović", tel: "012 345 678", razred: 6 }


razred = ucenik.razred
razred = razred + 1
ucenik.razred = razred

Kao i u slučaju niza, kada jednom pristupimo promenljivoj u objektu, možemo ili da čitamo njenu
vrednost, ili da upišemo novu vrednost u nju. Možete i da kombinujete nizove i objekte i tako da
napravite nizove objekata. Na primer zamislite da treba da u neku promenljivu stavite podatke o
svim učenicima u nekom razredu. Razred će biti niz u kome će svaki element biti objekat koji ima
podatke o učenicima:

razred =
[
{ ime: "Jovan Jovanović", visina: 162 },
{ ime: "Petar Petrović", visina: 167 },
{ ime: "Marko Marković", visina: 159 }
]

U ovom primeru imamo jednu promenljivu, u kojoj se nalazi niz objekata koji sadrže podatke o
učenicima.

Primer - stariji učenik


U dva objekta se nalaze podaci o učenicima (ime, broj telefona, razred). Potrebno je napisati
program koji pronalazi koji je od ova dva učenika stariji. Kada napravimo dva objekta,
uporedićemo polja u kojima su upisani razredi. Ako je razred prvog učenika veći, on je stariji i
prikazaćemo njega. U suprotnom prikazaćemo ime drugog učenika.

ucenik1 = { ime: "Petar Petrović", tel: "012 345 678", razr: 6 }


ucenik2 = { ime: "Marko Marković", tel: "098 765 432", razr: 4 }
if ( ucenik1.god > ucenik1.god ) {
alert("Učenik " + ucenik1.ime + " je stariji")
} else {
alert("Učenik " + ucenik2.ime + " je stariji")
}

Primer - najviši učenik u razredu


Razred je niz učenika u kome svaki učenik ima zapisano ime i visinu kao u primeru:

[
{ ime: "Petar Petrović", visina: 167 },
{ ime: "Marko Marković", visina: 159 }
]

Potrebno je napisati program, koji u nizu učenika pronalazi učenika koji je najviši. Prvo ćemo
napraviti niz učenika u kome će biti objekti sa poljima ime i visina. Onda ćemo napraviti petlju, u
kojoj ćemo jednog po jednog učenika upisati u promenljivu ucenik i u svakoj iteraciji proveriti da
li je visina trenutnog učenika veća od vrednosti u promenljivoj visina. Ako jeste, to je za sada
najviši učenik i njegovo ime ćemo upisati u promenljivu najvisi a njegovu visinu u
promenljivu visina. Nastavićemo da prolazimo petljom kroz sve učenike u nizu i za svakog
proveriti da li je viši od trenutne najveće visine.

ucenici = [
{ ime: "Jovan Jovanović", visina: 162 },
{ ime: "Petar Petrović", visina: 167 },
{ ime: "Marko Marković", visina: 159 }
]
i = 0
visina = 0
while ( i < ucenici.length ) {
ucenik = ucenici[i]
if ( ucenik.visina > visina ) {
najvisi = ucenik.ime
visina = ucenik.visina
}
i = i + 1
}
alert("Učenik " + najvisi + " je najviši")

Primer - sabiranje uglova


Potrebno je napisati funkciju koja dobija dva objekta, koji predstavljaju uglove predstavljene
stepenima, minutima i sekundama (npr. α=20⁰ 10′ 45′′ i β=72⁰ 40′ 40′′) i vraća zbir ta dva ugla.

function saberi( ugao1, ugao2 ) {


zbir = {}

zbir.sek = (ugao1.sek + ugao2.sek) % 60


prenos = (ugao1.sek + ugao2.sek) / 60

zbir.min = (ugao1.min + ugao2.min + prenos) % 60


prenos = (ugao1.min + ugao2.min + prenos) / 60

zbir.stepeni = ugao1.stepeni + ugao2.stepeni + prenos

return zbir
}

Prvo ćemo da napravimo prazan objekat koji predstavlja zbir. Onda ćemo u polje tog objekta koje
predstavlja sekunde da upišemo zbir sekundi iz uglova koji su poslati kao parametri. 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 α=20⁰ 10′ 45′′ i β=72⁰ 40′ 40′′ dobićemo 85′′ sekundi), u polje objekta ć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, izračunavamo i količnik pri deljenju ovog
zbira sa 60. To je vrednost u promenljivoj prenos, koju ćemo dodati minutima. Na isti način ćemo
izračunati i vrednost minuta, kao zbir prenosa i minuta iz objekata sabiraka, gde opet nalazimo
ostatak pri deljenju sa 60 da ne bismo upisali broj veći od 60. Zatim izračunavamo i vrednost koja
će biti preneta u stepene kao količnik ovog zbira i broja 60. Na kraju, da bismo odredili stepene,
potrebno je da saberemo stepene iz ovih objekata i dodamo vrednost koju smo preneli.

You might also like