A vezérlési szerkezetek segítségével az egyes utasítások végrehajtási sorrendjét határozhatjuk meg.
Elől tesztelő ciklus
A while ciklus utasításblokk végrehajtására használható, amíg a feltétel igaz. A while ciklus szintaxisa:
1 2 3 |
while (feltétel) { utasítások } |
Kérjünk be a felhasználótól egy számot. Sikertelen adatbevitel esetén (nem számot adott meg) ismételjük meg újra és újra az adatbekérést.Az látszik, hogy a feladat ciklussal oldható meg. Azonban a számláló ciklus erre alkalmatlan, mivel nem egyértelmű, hogy hányszor fogja elrontani a felhasználó az adatbevitel
1 2 3 4 5 |
var n; // a változónak még nincs értéke (így típusa sincs) while(!isFinite(n)) {// addig ismétlődjön a ciklus, amíg "n"nem szám típusú n = prompt('Kérek egy számot','0'); } document.write('A megadott szám=',n); |
A while ugyanúgy működik,mint az if utasítás, azzal a különbséggel, hogy a ciklusmagban(a kapcsos zárójelek közti részben) írt utasításokat újra és újra ismétli, addig, amíg a logikai állítás igaz.
Ebben a példában ameddig 2-vel és 3-mal osztható számot írunk be, futni fog a while ciklus, mivel igaz a feltétel.
1 2 3 4 5 6 |
var n=6; while ((n % 2 ==0) && (n % 3 ==0)) { n = prompt('Kérek egy kettővel és hárommal is osztható számot:'); } document.write('A megadott szám nem osztható kettővel és hárommal! ', n); |
A Javascript nyelv egy a while ciklushoz hasonló utasítást is biztosít — a do-while ciklust. A do-while szintaxisa:
do { utasítás(ok) } while (feltétel);Ahelyett, hogy a feltételt a ciklus végrehajtása előtt értékelné ki, a do-while ezt a ciklusmag lefutása után teszi meg. Így a do-while magjában szereplő utasítások minimum egyszer végrehajtódnak.
1 2 3 4 5 6 7 |
var n=42;// a változónak VAN értéke és az szám típusú do {// ciklus kezdete. Nincs feltétel. n = prompt('Kérek egy számot','0'); } while(!isFinite(n)); //a végén értékel, hogy kell-e ismételnie document.write('A megadott szám=',n); |
Feladat: egy pozitív egész szám bekérése a felhasználótól.
1 2 3 4 5 6 7 8 |
var n=0; var ok = false;// logikai változó do {n = prompt('Kérek egy pozitív egész számot','0'); if (isFinite(n) && Math.floor(n)==n && n > 0) {ok = true;} }while(!ok); // addig ismétel, amíg nem ok! document.write('A megadott szám=',n); |
1 |
Most oldjuk meg ugyanezt if nélkül!
1 2 3 4 5 6 7 |
var n=0; var ok = false;// logikai változó do{n = prompt('Kérek egy pozitív egész számot','0'); ok =(isFinite(n) && Math.floor(n)==n && n > 0); // logikai kifejezés } while(!ok);// addig ismétel, amíg nem ok! document.write('A megadott szám=',n); |
Következzen megint egy kis barkóba játék:
1 2 3 4 5 6 7 8 9 10 |
var n=Math.floor(Math.random()*100)+1; var tipp = 0; var szoveg = 'Gondoltam egy számot. Tipp?'; do { tipp=prompt(szoveg,tipp); if(tipp < n) {szoveg='A gondolt szám kisebb!';} if(tipp > n) {szoveg='A gondolt szám nagyobb';}} while(n!=tipp); document.write('Gratulálok!') |
Feladat: Döntsük el a bekért számról, hogy prímszám-e!
1 2 3 4 5 6 7 8 9 10 11 12 |
<script type="text/javascript"> var n = prompt('Kérek egy számot!',0); var veg = Math.floor(Math.sqrt(n)); var prim_e = true; var i = 2; while (i <= veg && prim_e ) { // futás "vég"-ig, vagy amíg nincs osztó if (n % i== 0) { prim_e = false;} // talált osztót… ++i; // következő osztó } if (prim_e) { document.write(n, ' prímszám ', i, ' osztás');} else { document.write(n, ' NEM prímszám ', i, ' osztás');} </script> |
Feladat: váltsunk át tizes számrendszerből kettes számrendszerbe while ciklus segÍtségével! (természetesen van erre egyszerűbb módszer is, a toString(2))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<!DOCTYPE html> <html lang="hu"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <script> var binaris = ''; var szam = 42; var decimalis = szam; //a végén kiirjuk a kiindulási értéket, ez az while (szam != 0) { binaris = (szam % 2)+binaris; szam = parseInt(szam / 2); } document.write(decimalis, " szám binárisan: ",binaris); document.write(typeof szam); //változó típusa: number document.write(typeof binaris); //változó típusa: string // 10->2 számrendszerbe beépített függvénnyel document.write(decimalis.toString(2)); </script> </body> </html> |