
Il ciclo do until su Matlab
In questa lezione ti spiego come utilizzare il ciclo do until su Octave
Cos'è il ciclo do until? E' una struttura ciclica che ti permette di eseguire un blocco di istruzioni più volte in base al verificarsi o meno di una condizione. E' un ciclo simile alla struttura while ma in questo caso la verifica della condizione avviene alla fine dell'iterazione.
Come funziona il ciclo do until
La struttura do until esegue almeno una volta il blocco di codice.
In Matlab non esiste un'istruzione specifica per realizzare il ciclo do until ma puoi facilmente costruirlo usando l'istruzione while.
Ecco un esempio pratico
cond=true;
x=1;
while cond
disp(x);
x=x+1;
if (x>9)
cond=false;
end
end
Lo script assegna il valore true (vero) alla variabile cond e il valore numerico 1 alla variabile x.
Poi esegue il blocco di istruzioni del ciclo while che stampa il valore della variabile x e la incrementa di uno
Alla fine del blocco di codice verifica se la condizione x>9 è soddisfatta.
- Se la condizione (x>9) non è soddisfatta esegue una nuova iterazione.
- Se la condizione (x>9) è soddisfatta assegna il valore false (falso) alla variabile cond che determina la fine del ciclo.
Ecco il risultato in output
1
2
3
4
5
6
7
8
9
Lo script stampa i valori da 1 a 9.
Il ciclo si conclude quando la variabile x assume il valore x=10 perché la condizione (x>9) è soddisfatta.
Nota. In questo esempio hai usato la struttura do until per realizzare un ciclo determinato. Fin dall'inizio conosci il numero complessivo delle iterazioni. Puoi usare la struttura do until anche per realizzare dei cicli indeterminati. In questi casi, però, devi considerare il rischio dei loop infiniti.
Il rischio del loop infinito
Se utilizzi la struttura ciclica do until per realizzare un ciclo indeterminato, c'è il rischio che il ciclo non finisca mai.
Ad esempio, questo script chiede all'utente di indovinare un numero casuale
cond=true
while (cond)
numero=randi(100);
x = input("digita un numero da 1 a 100")
if not( x==numero)
disp("non hai indovinato")
end
if (x==numero)
disp("hai indovinato")
cond=false;
end
end
Questo ciclo potrebbe iterare all'infinito ( loop infinito ) se l'utente non indovina mai il numero casuale.
Per evitare il rischio del loop infinito aggiungi una condizione di uscita forzata dal ciclo.
c=0;
cond=true;
while (cond)
numero=randi(100);
x = input("digita un numero da 1 a 100")
if not( x==numero)
disp("non hai indovinato")
end
if (x==numero)
disp("hai indovinato")
cond=false;
end
c=c+1
if (c==10)
disp("hai fatto troppi tentativi");
break;
end
end
In questo modo, ogni volta che il ciclo compie un'iterazione si incrementa una variabile contatore (c)
Dopo 10 iterazioni (tentativi dell'utente) lo script esce dal ciclo anche se l'utente non ha ancora indovinato il numero.
In questo modo eviti il rischio di un loop infinito.

