lettura facile

Loop do until su Octave

In questa lezione ti spiego come fare un ciclo/loop do until su Octave

Cos'è un ciclo do until? E' un'altra struttura ciclica di Octave che ti permette di ripetere un blocco di istruzioni più volte (iterazioni). E' un ciclo indeterminato perché non conosci a priori il numero di iterazioni.

Il loop do until prima esegue il blocco di istruzioni poi verifica la condizione.

  • Se la condizione non è soddisfatta, esegue una nuova iterazione.
  • Se la condizione è soddisfatta, esce dal loop.

do
blocco di istruzioni
until condizione

A differenza del loop while, il loop do until esegue il blocco di istruzioni almeno una volta.

Ecco un esempio pratico di do until

 

  1. x=1;
  2. do
  3. disp(x);
  4. x=x+1;
  5. until x>9

 

Questo programma assegna il valore 1 alla variabile x.

Poi inizia un ciclo do-until ed esegue il blocco di istruzioni.

Il blocco di istruzioni è composto da due istruzioni

  1. La prima istruzione disp(x) stampa il valore della variabile x
  2. La seconda istruzione x=x+1 incrementa di uno il valore della variabile x

Al termine del blocco di istruzioni verifica se la condizione until x>9 è soddisfatta.

Se non è soddisfatta il ciclo avvia una nuova iterazione. Altrimenti, se è soddisfatta il ciclo finisce.

Il risultato in output del programma è il seguente

1
2
3
4
5
6
7
8
9

Il programma stampa a video tutti i valori da 1 a 9.

Una volta raggiunto il valore x=10 esce dal ciclo perché la condizione until(x>9) è soddisfatta.

Il rischio dei loop infiniti e la condizione forzata di uscita dal loop

Nell'esempio precedente il loop do until funziona come un ciclo determinato perché puoi facilmente stabilire il numero massimo di iterazioni. Tuttavia non è sempre così.

Spesso il loop do until è utilizzato per realizzare cicli indeterminati di cui non conosci a priori il numero di iterazioni.

Ad esempio, questo script chiede all'utente di indovinare un numero

 

  1. number=randi(100);
  2. do
  3. x = input("digita un numero")
  4. if (x!=number)
  5. disp("non hai indovinato")
  6. endif
  7. until x==number

Essendo un ciclo indeterminato potrebbe iterare all'infinito ( loop infinito ) consumando inutilmente il tempo e le risorse macchina del computer.

Per evitare il rischio del loop infinito ti consiglio di inserire sempre una condizione di uscita forzata dal ciclo.

 

  1. number=randi(100);
  2. c=0
  3. do
  4. x = input("digita un numero")
  5. if (x!=number)
  6. disp("non hai indovinato")
  7. c=c+1
  8. endif
  9. if (c==10)
  10. disp("hai fatto troppi tentativi")
  11. break;
  12. endif
  13. until x==number

Inserisci una variabile contatore (c) che si incrementa (c=c+1) in ogni iterazione.

Poi forza l'uscita dal ciclo dopo un numero massimo di iterazioni. Ad esempio dopo 10 iterazioni.

In questo modo eviti di incappare in un loop infinito.




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




FacebookTwitterLinkedinLinkedin