22 Esercizi con i while e do while
- esercizio 1 :
Stampa i numeri da 1 a 170 (colonna A) con a fianco la somma dei numeri che li hanno preceduti nella fila A (colonna B). Nel caso la somma arriva a 5000 deve interrompersi il ciclo.
let a=1, b=170, somma=0;
cont=a;
while (cont<=b && somma<5000)
{
document.write(cont + " " + somma +"<br>");
somma+=cont;
cont++;
}
Creiamo una funzione che era una linea separatrice che separa a livello grafico gli esercizi .
function separatore() {
document.write(' _ '.repeat(60) + '<br />');
}
Così basta richiamarla tra un esercizio e l’altro per creare un separatore. Interessante il metodo per le stringhe repeat che ripete la stringa di quante volte lo specifico nel metodo.
- esercizio 2 :
stampiamo i numeri da 1 a 10, quindi lo zero no, ma il 10 si , vediamo cosa cambia a spostare il contatore all’inizio o infondo alle istruzioni 012345678910
Mentalmente è buona norma portarsi sempre col contatore all’inizio dell’istruzione e vedere cosa accade
let conta = 0;
while (conta<10)
{
conta++;
document.write(conta + "<br />");
}
e, sempre mentalmente, portarsi alla penultima iterazione e vedere cosa accade. Con conta++ in fondo, ma conta = 1 si parte da 1
let conta = 1;
while (conta<10)
{
document.write(conta + "<br />");
conta++;
}
Ma si arriva fino a 9, perché quando viene stampato il valore 9 il conta++ lo incrementa a 10 e il ciclo si blocca. Risolviamo cambiando la condizione <=10
let conta = 1;
while (conta<=10)
{
document.write(conta + "<br />");
conta++;
}
- esecizio 3 :
stampare i numeri di prima (da 1 a 10) ma solo quelli pari
Viene logico inizializzare il contatore a 2, stamparlo e fare l’incremento di unità
let contat = 2;
while (contat<=10)
{
document.write(contat + '<br />');
contat+=2;
}
Immaginiamo che però volessimo far passare tutti i numeri, magari i dispari ci potrebbero servire per qualcos’altro , l’esercizio ci serve per comprendere le strutture annidate, quindi nel corpo di un ciclo possiamo mettere qualunque altra iterazione o condizione
let contat = 1;
while (contat<=10)
{
if (contat%2 == 0)
{
document.write(contat + '<br />');
}
contat++;
}
contatore%2 calcola il resto (%) diviso 2. Occhio perché a differenza di altri linguaggi, in js dividendo e divisore sono sempre considerati floating point e non interi, quindi attenzione alle approssimazioni.
- esercizio 4 :
Stampa della tabellina pitagorica
let riga=1, colonna=1;
while (riga<=10)
{
colonna = 1;
while (colonna<=10)
{
document.write(riga*colonna + " ");
colonna++
}
document.write("<br />");
riga++;
}
Un classico esempio di cicli annidati
Tutti i cicli visto fino ad oggi sono detti enumerativi , in quanto sono basati sul fatto che sappiamo a priori quante volte il ciclo si ripete o comunque è facilmente individuabile.
Con l’ultimo esempio, oltre ad usare un do while per variare un po’ vedremo i cicli detti indefiniti, perché non sappiamo a priori quante volte sarà eseguito
- esercizio 5 :
un elenco di numeri generati casualmente da 0 a 100 fino a quando non sarà estratto il numero 7
iniziamo col creare una funzione che genera il numero casuale
function interoCasuale(max)
{
return Math.floor( Math.random() * max);
}
Il metodo random della classe Math restituisce un numero casuale tra 0 e 1 (in realtà 1 non può mai uscire potrebbe uscire 0,99999999…..999 ma 1 mai). noi vogliamo tra 1 e 100, basta moltiplicare per il max . La funzione floor toglie i decimali arrotondando in basso (fosse 60,88 restituisce 60).
Ecco il codice completo:
do
{
let estratto = interoCasuale(100);
document.write(estratto + "<br />")
}
while (estratto!=7);
function interoCasuale(max)
{
return Math.floor( Math.random() * max);
}