Cicli
Template:EN/Documentation/BASICGuideTOC/v2
Un ciclo è un'operazione ricorsiva, che ripete l'esecuzione di un blocco di codice per il numero di passaggi specificati. Potete impostare cicli con un numero indefinito di passaggi.
For...Next
Il ciclo For...Next ha un numero fisso di passaggi. Il contatore di cicli definisce il numero di esecuzioni del ciclo. Nell'esempio seguente, la variabile I è il contatore di cicli, con un valore iniziale di 1. Il contatore è incrementato di 1 al termine di ogni passaggio. Quando la variabile I è uguale a 10, il ciclo si arresta.
Dim I
For I = 1 To 10
' ... Inner part of loop
Next I
Per incrementare il contatore di cicli di un valore diverso da 1 al termine di ogni passaggio, usate la Step funzione:
Dim I
For I = 1 To 10 Step 0.5
' ... Inner part of loop
Next I
Nell'esempio precedente il contatore viene incrementato di 0,5 al termine di ciascun passaggio e il ciclo viene ripetuto per 19 volte.
È possibile utilizzare anche valori di incremento negativi:
Dim I
For I = 10 To 1 Step -1
' ... Inner part of loop
Next I
In questo esempio, il contatore inizia a 10 ed è ridotto di 1 al termine di ogni passaggio, finché il contatore non è 1.
L'istruzione Exit For consente di uscire da un ciclo For anticipatamente. Nell'esempio seguente, il ciclo viene terminato durante il quinto passaggio:
Dim I
For I = 1 To 10
If I = 5 Then
Exit For
End If
' ... Inner part of loop
Next I
For Each
La variante di ciclo For Each...Next usata in VBA non è supportata in Apache OpenOffice Basic. I cicli For Each non utilizzano un contatore esplicito come i cicli For...Next. Un ciclo For Each specifica "esegui questa operazione in tutti gli elementi del gruppo", anziché "esegui questa operazione n volte". Ad esempio:
Const d1 = 2
Const d2 = 3
Const d3 = 2
Dim a(d1, d2, d3)
For Each i In a()
' ... Inner part of loop
Next i
Do...Loop
Il processo Do...Loop non è collegato a un numero fisso di passaggi. Do...Loop viene eseguito finché non è soddisfatta una determinata condizione. Sono disponibili quattro varianti del processo Do...Loop. Nei primi due esempi il codice incluso nel ciclo potrebbe non essere eseguito affatto (istruzione di tipo "esegui 0 volte"). Negli altri esempi il codice verrà eseguito almeno una volta. (Negli esempi seguenti, A > 10 rappresenta qualsiasi condizione):
- La variante Do While...Loop
controlla se la condizione che segue While è true prima di ciascun passaggio, e solo in tal caso esegue il ciclo.
Do While A > 10 ' ... loop body Loop
- La variante Do Until...Loop
continua a eseguire il ciclo finché la condizione che segue Until è false.
Do Until A > 10 ' ... loop body Loop
- La variante Do...Loop While
controlla la condizione solo dopo il primo passaggio del ciclo e termina se la condizione che segue While è false.
Do ' ... loop body Loop While A > 10
- La variante Do...Loop Until
controlla a sua volta la condizione dopo il primo passaggio, ma termina se la condizione che segue Until è true.
Do ' ... loop body Loop Until A > 10
Come il ciclo For...Next, anche il processo Do...Loop dispone di un comando di arresto. Il comando Exit Do permette di uscire da un ciclo indipendentemente dal punto in cui si trova.
Do
If A = 4 Then
Exit Do
End If
' ... loop body
Loop While A > 10
== Esempio di programmazione: ordinamento con cicli incorporati ==
Esistono molti modi di utilizzare i cicli, ad esempio per eseguire ricerche in elenchi, restituire valori o eseguire operazioni matematiche complesse. L'esempio seguente è un algoritmo che utilizza due cicli per ordinare un elenco per nome.
Sub Sort
Dim Entry(1 To 10) As String
Dim Count As Integer
Dim Count2 As Integer
Dim Temp As String
Entry(1) = "Patty"
Entry(2) = "Kurt"
Entry(3) = "Thomas"
Entry(4) = "Michael"
Entry(5) = "David"
Entry(6) = "Cathy"
Entry(7) = "Susie"
Entry(8) = "Edward"
Entry(9) = "Christine"
Entry(10) = "Jerry"
For Count = 1 To 9
For Count2 = Count + 1 To 10
If Entry(Count) > Entry(Count2) Then
Temp = Entry(Count)
Entry(Count) = Entry(Count2)
Entry(Count2) = Temp
End If
Next Count2
Next Count
For Count = 1 To 10
Print Entry(Count)
Next Count
End Sub
I valori vengono scambiati come coppie finché non sono ordinati in ordine crescente. Le variabili migrano gradualmente verso la posizione corretta. Questo algoritmo è noto anche come Bubble Sort.
Content on this page is licensed under the Public Documentation License (PDL). |