In un linguaggio di programmazione, i cicli permettono di eseguire un gruppo di istruzioni per un certo numero di volte dipendentemente dalla condizione di uscita dal ciclo. In Overbasic sono disponibili 3 tipi di cicli: FOR, DO UNTIL, WHILE. La particolarità che li distingue è la condizione di uscita dal ciclo, cioè la condizione che termina l’esecuzione del ciclo.
Ciclo FOR #
Il ciclo FOR permette di eseguire le istruzioni in esso contenute per un certo numero fisso di volte.
Sintassi:
For <contatore> = <inizio> To <fine> [Step <incremento>]
<istruzioni>
Next [<contatore>]
<contatore> è una variabile di tipo Numeric dichiarata precedentemente al ciclo.
<inizio> rappresenta il valore di inizializzazione di <contatore>.
<fine> rappresenta il valore finale di <contatore>, valore che determina l’uscita dal ciclo.
<incremento> (obbligatorio solo se <inizio> è maggiore di <fine>) rappresenta l’incremento di <contatore> ad ogni ciclo eseguito. Se non specificato il suo valore di default è 1.
Funzionamento:
<contatore> assume inizialmente il valore <inizio>. Ad ogni iterazione viene incrementato del valore di <incremento> fino a raggiungere il valore <fine>. Il raggiungimento del valore <fine> da parte di <contatore> determina l’uscita dal ciclo.
Note:
- Se <incremento> NON è specificato, il suo valore di default è 1.
- Se <inizio> è maggiore di <fine>, è obbligatorio definire <incremento> utilizzando la parola chiave STEP. In questo caso, <incremento> dovrà essere negativo altrimenti il ciclo non verrà eseguito nemmeno una volta.
- <contatore> può essere omesso dopo la parola chiave NEXT.
- Se <contatore> viene modificato all’interno del ciclo FOR, tale modifica NON ha effetto sul numero di iterazioni del ciclo.
Esempi:
'Calcolo del fattoriale di 5 -> (5!)
Dim factorial as Numeric = 1
Dim i as Numeric
For i = 1 To 5
factorial = factorial * i
Next i
'Risultato:
'factorial = 1*1*2*3*4*5 = 120
'Esempio con STEP negativo
Dim result as Numeric = 1
Dim i as Numeric
For i = 5 To 1 Step -1
result = result * i
Next i
'Risultato:
'i = 5; result = 1 * 5 = 5
'i = 4; result = 5 * 4 = 20
'i = 3; result = 20 * 3 = 60
'i = 2; result = 60 * 2 = 120
'i = 1; result = 120 * 1 = 120 (uscita dal ciclo)
Ciclo DO UNTIL #
Il ciclo DO UNTIL permette di eseguire le istruzioni in esso contenute fino a che la condizione di uscita dal ciclo è falsa (FALSE). Quando la condizione di uscita diventa vera (TRUE) il ciclo finisce.
Sintassi:
Do Until <condizione>
<istruzioni>
Loop
Esempio:
'Calcolo del fattoriale di 5 -> (5!)
Dim factorial as Numeric = 1
Dim i as Numeric = 1
Do Until i > 5
factorial = factorial * i
i = i + 1
Loop
'Risultato:
'i = 1; factorial = 1 * 1 = 1
'i = 2; factorial = 1 * 2 = 2
'i = 3; factorial = 2 * 3 = 6
'i = 4; factorial = 6 * 4 = 24
'i = 5; factorial = 24 * 5 = 120
'i = 6; uscita dal ciclo
Ciclo WHILE #
Il ciclo WHILE permette di eseguire le istruzioni in esso contenute fino a che la condizione di uscita dal ciclo è vera (TRUE). Quando la condizione di uscita diventa falsa (FALSE) il ciclo finisce.
Sintassi:
While <condizione>
<istruzioni>
EndWhile
Esempio:
'Calcolo del fattoriale di 5 -> (5!)
Dim factorial as Numeric = 1
Dim i as Numeric = 1
While i <= 5
factorial = factorial * i
i = i + 1
Loop
'Risultato:
'i = 1; factorial = 1 * 1 = 1
'i = 2; factorial = 1 * 2 = 2
'i = 3; factorial = 2 * 3 = 6
'i = 4; factorial = 6 * 4 = 24
'i = 5; factorial = 24 * 5 = 120
'i = 6; uscita dal ciclo
Cicli Annidati #
Il blocco di istruzioni di un ciclo può contenere altri cicli (di qualsiasi tipo). Ad ogni iterazione del ciclo principale (esterno), i cicli interni saranno eseguiti per intero.
Esempio:
Dim a as Numeric = 0
Do Until a > 10
Dim i as Numeric
For i = 1 To 5
a = a + 1
Next i
Loop
'Risultato: a = 15
EXIT e EXIT ALL #
Le parole chiave EXIT e EXIT ALL sono utilizzate all’interno di un ciclo per uscire prematuramente dal ciclo stesso senza rispettare la condizione di uscita. La differenza tra EXIT e EXIT ALL è che EXIT esce solo dal ciclo in cui si trova, mentre EXIT ALL esce da tutti i cicli annidati continuando con l’esecuzione del programma a partire dall’istruzione successiva alla fine del ciclo più esterno.
Esempi:
For i = 1 To 10
Do Until x > 5
If (i = 9) Then
Exit All
EndIf
If (Open(x) > Close(x)) Then
Exit
EndIf
x = x + 1
Loop
'EXIT continuerà da qui
...
...
Next i
'EXIT ALL continuerà da qui
...
...