lettura facile

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.




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




FacebookTwitterLinkedinLinkedin