lettura facile

I cicli while su Matlab

In questa lezione ti spiego come realizzare un ciclo/loop while su Matlab

Cos'è un ciclo while? Si tratta di una struttura ciclica, anche detta "loop", che ti consente di eseguire una sequenza di istruzioni più volte fin quando una condizione è soddisfatta. Ogni esecuzione completa del blocco di istruzioni è detta iterazione.

Il ciclo while verifica una condizione logica prima di eseguire il blocco di istruzioni.

while condizione
blocco di istruzioni
end

A seconda dell'esito del controllo il ciclo ha due comportamenti

  • Se la condizione iniziale non è soddisfatta fin dall'inizio, il ciclo non compie nemmeno un'iterazione.
  • Se la condizione iniziale è soddisfatta, il ciclo esegue il blocco di istruzioni. Al termine dell'esecuzione ricomincia daccapo. Il ciclo termina quando la condizione iniziale non è più soddisfatta.

Nota. Il ciclo while è un ciclo indeterminato perché potresti anche non conoscere il numero di iterazioni che dovrà eseguire. Potrebbe non girare affatto, compiere poche o molte iterazioni e persino non terminare mai (loop infinito).

Ti faccio un esempio pratico.

Questo codice calcola il quadrato dei numeri da 1 a 9 tramite un ciclo while.

x=1;
while x<10
disp(x^2);
x=x+1;
end

Il ciclo compie nove "giri" ossia iterazioni.

In ogni iterazione stampa visualizza il quadrato della variabile x e la incrementa di uno.

Il risultato in output è il seguente

1
4
9
16
25
36
49
64
81

In questo caso il ciclo while esegue un ciclo determinato perché il numero di iterazioni è noto fin dall'inizio.

Tuttavia non è detto che sia sempre così. Un ciclo while può anche eseguire un numero indeterminato di iterazioni.

Può persino capitare il caso di incappare in un loop infinito se la condizione iniziale è sempre soddisfatta.

Come evitare il rischio del loop infinito

Per evitare questo rischio ti consiglio di inserire una condizione forzata di uscita dopo un numero massimo di iterazioni

Ad esempio, questo script genera un numero casuale tra 1 e 100. Poi chiede all'utente di indovinarlo

numero=randi(100);
x=0;
while x~=numero
x = input("quale numero ho estratto? ")
if (x~=numero)
disp("sbagliato")
else
disp("hai indovinato")
break;
end
end

E' un esempio di ciclo indeterminato perché non conosci quante volte l'utente proverà a indovinare il numero.

Il ciclo termina solo quando l'utente indovina il numero.

Nota. Un utente razionale compierebbe al massimo 100 tentativi per indovinare il numero. Tuttavia, se per qualche ragione l'utente continuasse a digitare sempre lo stesso numero... il ciclo non terminerebbe mai!

Per evitare il problema del loop infinito introduci un numero massimo di iterazioni nella struttura while.

Ad esempio, aggiungi una variabile contatore t che si incrementa dopo ogni iterazione t=t+1 ossia dopo ogni tentativo.

Quando la variabile t è uguale a 10 il ciclo termina anche se l'utente non ha ancora indovinato.

numero=randi(100);
x=0;
t=0;
while x~=numero
x = input("quale numero ho estratto? ")
if (x~=numero)
disp("sbagliato")
else
disp("hai indovinato")
break;
end
t=t+1
if (t==10)
disp("hai fatto troppi tentativi");
break;
end

end

In questo modo l'utente può compiere al massimo dieci tentativi.

E' un semplice escamotage per evitare che il ciclo while continui a iterare all'infinito.




Se qualcosa non ti è chiaro, scrivi la tua domanda nei commenti.




FacebookTwitterLinkedinLinkedin