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);
}