Professional Documents
Culture Documents
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):
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:
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.
<script>
alert("Hello World!")
</script>
<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:
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:
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:
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:
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:
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:
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.
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.
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
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:
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:
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:
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).
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
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
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 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:
Primer
Potrebno je napisati program koji sabira vremenske intervale izražene u satima, minutima i
sekundama, npr. 2h 12min 45sec i 7h 40min 40sec.
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:
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:
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:
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.
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.
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)
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.
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.
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.
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.
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.
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 )
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:
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.
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.
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
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:
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.
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:
Ako napišemo funkciju koja pretvara sve jedinice mere u centimetre, onda bi program izgledao
ovako:
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
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) )
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()
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:
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:
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:
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:
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.
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.
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:
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:
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
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()
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
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.
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.
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:
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.
broj = 1
zbir = 0
while ( broj <= 100 ) {
zbir = zbir + broj
broj = broj + 1
}
S druge strane, da bi se sačuvala lista svih kontinenata, ili neki drugi podatak nabrojivog tipa,
treba koristiti nizove.
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:
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:
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:
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.
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.
//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
}
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.
brojPojavljivanja = []
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:
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.
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.
[
{ 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")
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.