
Come fare un ciclo while su Octave
In questa lezione ti spiego come fare un ciclo/loop while su Octave
Cos'è un ciclo while? E' una struttura ciclica che ti permette di ripetere un blocco di istruzioni più volte (iterazioni) finché una condizione logica iniziale è soddisfatta.
Il loop while verifica una condizione logica iniziale prima di eseguire un blocco di istruzioni.
Il ciclo termina quando la condizione iniziale non è soddisfatta.
while condizione
blocco di istruzioni
endwhile
Se la condizione iniziale non è soddisfatta fin dall'inizio, il ciclo non compie nemmeno un'iterazione.
Il loop while è un ciclo indeterminato perché potresti non conoscere a priori il numero di iterazioni.
Nota. A differenza di altri linguaggi di programmazione come Java o C non devi scrivere il codice tra parentesi graffe. Non è necessaria nemmeno l'indentazione come in Python. Tuttava, per rendere più leggibile il codice ti consiglio di scrivere il blocco di istruzioni un po' più a destra le istruzioni rispetto all'istruzione while.
Ti faccio un esempio pratico.
Questo loop calcola il quadrato dei numeri da 1 a 9.
x=1;
while x<10
disp(x**2);
x=x+1;
endwhile
Il risultato in output è
1
4
9
16
25
36
49
64
81
In questo caso il loop while compie un ciclo determinato perché conosci a priori il numero delle iterazioni.
Tuttavia non è detto che sia sempre così. Il ciclo while può compiere anche un numero di iterazioni non predefinito a priori.
Il rischio del loop infinito
Se non conosci il numero di iterazioni di un loop, il programma potrebbe iterare anche all'infinito.
Per questa ragione ti consiglio sempre di aggiungere una condizione forzata di uscita dopo un numero massimo di iterazioni
Ad esempio, questo script genera un numero casuale tra 1 e 100 e 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;
endif
endwhile
E' un ciclo indeterminato perché non conosci a priori il numero di iterazioni.
Il loop termina soltanto quando l'utente indovina il numero. Tuttavia, l'utente potrebbe anche non indovinarlo mai (loop infinito).
Per evitare il problema devi introdurre nel ciclo un numero massimo di iterazioni.
Aggiungi una variabile contatore t che si incrementa dopo ogni iterazione t=t+1.
Quando la variabile t è uguale a 10 il loop 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;
endif
t=t+1
if (t==10)
disp("hai fatto troppi tentativi")
break;
endif
endwhile
In questo modo puoi sempre introdurre un limite massimo alle iterazioni del ciclo while.

