Overbasic – Cicli FOR, DO UNTIL, WHILE

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
...
...