Zbirka programskih rešenja u JavaScript jeziku

Autor: prof. Milan Popovic, milan.popovic@bbs.edu.yu

U ovoj zbirci nalazi se skup zadataka kojim se ilustruju osnovni algoritamski koraci: sekvenca, selekcija i iteracija. Rešenja su data u JavaScript programskom jeziku. To je učinjeno zbog toga što za egzekuciju programa u JavaScript jeziku studentima nije potreban poseba softver (kompajleri, intepreteri, specijalizovani editori i sl.). Dovoljno je da u nekom prostom editoru (Notepad, WordPad i sl.) u HTML dokument umetnu data rešenja i da onda browserom (Internet Explorer, Firefox, Opera, Chrome i sl.) izvršavaju, modifikuju i testiraju programska rešenja. Studentima se predlaže da ista ova rešenja implementiraju u još jednom programskom jeziku (C#, recimo).

1. Napisati program kojim se štampaju brojevi od 1 do 10 i njihovi kvadrati:

        1       1
        2       4
        3       9
        ...
        10      100

Rešenje:

for(i=1; i<=10; i++)

	document.writeln("<pre>"+i.toString()+'   '+(i*i).toString()+"</pre>");
 

2. Napisati program kojim se štampa sledeći trougao:

        *
       
**
       
***
       
****
       
*****
       
******
       
*******
       
********
       
*********
       
**********

 Rešenje:

for(i=1; i<=10; i++){

	for(j=1; j <=i; j++)

		document.write("*")

	document.write("<br>");
}

3. Npisati program kojim se izračunava i štampa srednja vrednost sledećeg niza od deset brojeva:1, 4, 9, ..., 81, 100 .

Rešenje:

var suma = 0;

for(i=1; i<=10; i++)

   suma = suma + i*i;

srednja_vrednost = suma/10;

document.write(srednja_vrednost);

4. Napisati program kojim se štampaju brojevi od 1 do 10, i pored svakog označava da li je paran ili neparan:

        1 je neparan

        2 je paran

        3 je neparan

        ...

(Uputstvo: koristite % operator.)

Rešenje:

for(i=1; i<=10; i++){
	document.write(i);
	if(i % 2 == 0) document.write(" je paran<br>")// Kada je ostatak pri deljenju 0, broj je paran
	else document.write(" je neparn<br>")
}

5. Napisati program kojim se štampaju prvih 20 pozitivnih celih brojeva i njihovi faktorijeli. (Faktorijel broja 1 je 1, faktorijel broja 2 je 1 * 2 = 2, faktorijel broja 3 je 1 * 2 * 3 = 6, faktorijel broja 4 je 1 * 2 * 3 * 4 = 24, itd.) 

Rešenje:


for(i=1; i<=20; i++){
    fakt = 1;
    for(j=1; j <=i; j++)
        fakt = fakt*j;
    document.write(fakt+"<br>");
}

6. Napisati program kojim se štampa prvih 20 Fibonačijevih (Fibonacci, italijanski matemetičar) brojeva. Svaki Fibonačijev  broj je jednak sumi prethodna dva Fibonačijeva broja, a dva početna Fibonačijeva broja su 0 i 1. Fibonačijev niz počinje ovako: 0, 1, 1, 2, 3, 5, 8, ...

Rešenje:

f1 = 0;// prvi Fibonacijev broj
f2 = 0;// drugi Fibonacijev broj
document.write(f1+"<br>"); // stampamo prvi Fibonacije broj
document.write(f1+"<br>"); // stampamo drugi Fibonacije broj
for(i=1; i<=18; i++){ // 18 narednih Fibonacijevih brojeva
	f = f1+f2; // sledeci Fibonacijev broj
	document.write(f+"<br>");
	f1 = f2; // sada f2 i f postaju prethodnici za naredni Fibonacijev broj
	f2 = f;
}

7. Napisati funkciju celzijus() kojom se konvertuju stepeni dati u Farenhajtima u stepene Celzujusa. Formula za konverziju glasi  °C = 5/9 * (°F - 32). Iskoristite ovu funkciju za štampanje tabele Farenhajt-Celzijus od -40 to 220 stepeni Farenhajta u inkrementima od 10 stepeni.

Rešenje:

Funkcija  ( setite se da treba da bude u <head> </head> delu HTML dokumenta)

function FC(f){ // prenosimo parametar f - stepene Farenhajta koje treba konvertovati

return (f-32)*5.0/9.0;

}

Pozivanje funcije za pravljenje tabele (u <body> </body> delu HTML dokumenta)

document.write("Farenhajt----->Celzijus")

for(i=-40; i<=220; i=i+10) //pocinjemo od -40, zavrsavamo sa 220 uz inkrement od 10

    document.write("<pre>"+i+"       "+FC(i)+<br></pre>);
 


8. Napisati funkciju koja ima ceo broj kao parametar i koja kao rezultat vraća zbir cifara tog celog broja. Na primer ako parametar ima vrednost 367, funkcija vraća broj 16 (3+6+7). Uputstvo: za pronalazenje najmanje cifre u nekom celom broju koristiti operator (%).

Rešenje:

Funkcija:

function zbirCifara(broj){
var zbir = 0;
while(broj > 0){
	zbir += broj % 10;
	broj = Math.floor(broj/10);
}
return zbir;
}

Poziv funkcije:

document.write(zbir)

9. Napisati funkciju koja ima tri celobrojna paramerta i koja vraća logičku vrednost true samo ako je zapremina kvadra koji je definisan sa ova tri parametra jednaka zapremini kocke čija je stranica jednaka srednjem po veličini parametru. Ako je bilo koji od parametara 0 ili negativan, funkcija vraća vrednost false.

Primer: Ako su parametri 4, 16, 8, funkcija vraća true.  Ako su parametri 6, 6, 12, funkcija vraća false.

Rešenje:

function kocka(a,b,c){
if( a <= 0 || b <=0 || c <= 0)return false;
if( a >= b && b >= c && a*b*c == b*b*b) return true;
if( b >= a && a >= c && a*b*c == a*a*a) return true;
if( a*b*c == c*c*c) return true;
return false;
}

Poziv funkcije:

document.write(kocka(8,16,4));
document.write(kocka(6,3,12));

10. Napisite funkciju koja ima jedan string parametar i koja vraća string koji se dobija sledećom promenom parametra:
        - svi samoglasnici (a, e, i, o ,u) se pretvaraju u velika slova.
        - svi suglasnici moraju biti mala slova
        - svi ostali znaci u stringu ostaju nepromenjeni.

Na primer, ako je parametar "Danas je ponedeljak, a sutra utorak", funkcija ovaj string treba da pretvori u string "dAnAs jE pOnEdEljAk".

Rešenje:

function slova(tekst){
tekst = tekst.toLowerCase();
tekst = tekst.replace(/a/g,"A");
tekst = tekst.replace(/e/g,"E");
tekst = tekst.replace(/i/g,"I");
tekst = tekst.replace(/o/g,"O");
tekst = tekst.replace(/u/g,"U");
return tekst;
}

Poziv funkcije:

document.write(slova("Danas je ponedeljak, a sutra utorak"));

11. Skalarni proizvod dva niza, a i b, je suma proizvoda njihovih članova  a[i] i b[i]. 

Na primer ako su nizovi:

    niz a = {1.0, 3.5, 2.0};
    niz b = {2.5, 2.0, 3.0};

onda je njihov skalarni proizvod 15.5   (= 2.5 + 7.0 + 6.0).

Napisati funkciju skalarniProizvod(a,b)koja ima dva parametra koji su nizovi realnih brojeva. Funkcija vraća jedan realan broj jednak skalarnom proizvodu nizova. Ako su nizovi različite dužine funkcija vraća vrednost 0.

Rešenje:

Funkcija:

function skalarniProizvod(a,b){
if(a.length != b.length) return 0;
suma = 0;
for(i=0; i < a.length ; i++)
	suma = suma + a[i]*b[i]
return suma;
}

Poziv funkcije:

var a = new Array (1.0, 3.5, 2.0);
var b = new Array (2.5, 2.0, 3.0);
document.write(skalarniProizvod(a, b));

 

12. Napisti funkciju koja kao parametre ima jedan niz celih brojeva a, i jedan ceo broj b.  Funkcija vraća niz koji se sastoji od onih elemenata niza a koji su veći od broja b, a oni elementi niza a koji nisu veći od b dobijaju vrednost 0.  

Na primer, ako je niz a = {4,10,6,8,3} a broj b = 6, onda se vraća niz {0,10,0,8,0}. Ako je dužina niza 0, funkcija treba da da poruku "Niz je prazan" i da vrati vrednost 0.

Rešenje:

Funkcija:

function nizBrojeva(a,b){
if(a.length == 0){
	alert("Niz a je prazan")
	return 0;
}
for(i=0; i < a.length ; i++)
	if( a[i] <= b ) a[i] = 0;
return a;
}

Poziv funkcije:

var a = new Array (4,10,6,8,3);
var b = 6;
document.write(nizBrojeva(a, b));

13. Napisati funkciju koja za parametar ima niz celih brojeva i kojom se proverava da li su brojevi u nizu sortirani u uzlaznom (rastućem) redosledu. Funkcija vraća jednu celobrojnu vrednost prema sledećem pravilu:
      a) funkcija vraća broj 2 ako je niz sortiran u rastućem redosledu i ako nema duplih brojeva– na primer  ako je niz {1, 4, 8, 17}
     b) funkcija vraća 1 ako je niz sortiran u rastućem redosledu ali ima duplih brojeva – na primer ako je niz {1, 4, 4, 17}
     c) funkcija vraća vrednost 0 ako niz nije sortiran u rastućem redosledu– na primer ako je niz {4, 1, 8, 17}

Rešenje:

Funkcija:

function sortiran(a){
rezultat = 2;
for(i=0; i < a.length-1 ; i++){
	if( a[i] > a[i+1] ) return 0; // nije sortiran
	if( a[i] == a[i+1]) rezultat = 1; // mozda je sortiran sa duplim brojevima
}
return rezultat;
}

Poziv funkcije:

var a = new Array (1, 4, 8, 17);
var b = new Array (1, 4, 4, 17);
var c = new Array (4, 1, 8, 17);
document.write(sortiran(a)+"<br>");
document.write(sortiran(b)+"<br>");
document.write(sortiran(c));

14. Napisati funkciju koja ima kao parametre ima dva slovna niza i koja vraća vrednost true ako su nzovi potpuno isti, a false ako nisu. Na primer niz {‘a’, ‘c’, ‘b’} je isti kao niz {‘a’,’c’,’b’}, ali nije isti kao nizovi {‘b’,’c’,’a’}, {‘A’,’c’,’b’}, ili {‘a’,’c’,’b’,’d’}.

Rešenje:

function isti(a,b){
if(a.length != b.length) return false;
for(i=0; i < a.length ; i++){
	if( a[i] != b[i] ) return false; // nisu isti
}
return true;// isti su
}

Poziv funkcije:

var a = new Array ('a','c','b');
var b = new Array ('a','c','b');
var c = new Array ('b','c','a');
var d = new Array ('A','c','b');
var e = new Array ('a','c','b','d');
document.write(isti(a,b)+"<br>");
document.write(isti(a,c)+"<br>");
document.write(isti(a,d)+"<br>");
document.write(isti(a,e));

15. Napisati program (HTML+javascript) u kojem se pojavljuju dva tekstualna polja i jedno akciono dugme. U jedno od polja se unosi tekst. Kada se klikne na dugme u drugom polju se prikazuje tekst iz prvog polja u obrnutom redosledu slova (takozvani palindrom).

Na primer, ako je u prvom polju upisana reč "Prestolonaslednikovica" (najduža srpska reč), onda u drugom polju treba da se pojavi reč "acivokindelsanolotserP".

Rešenje:

<html>
<head>
<script>
function palindrom(recenica){
var obrnuto = "";
for (i = recenica.length - 1; i>=0; i--)
	obrnuto+=recenica.substring(i,i+1);
return obrnuto;
}
</script>
<title>Palindrom</title>
</head>
<body>
<form name="forma">
<pre>
Recenica: <input type="text" name="ulaz" size = "40"><br>
Plaindrom: <input type="text" name="izlaz" size = "40"><br>
<input type = "button" value="Invertuj" onClick="document.forma.izlaz.value = palindrom(document.forma.ulaz.value)"
</form>
</body>
</html>