Cicli

From Apache OpenOffice Wiki
Jump to: navigation, search


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 OpenOffice.org 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):

  1. La variante Do While...Loop
    Do While A > 10
       ' ... loop body
    Loop
    controlla se la condizione che segue While è true prima di ciascun passaggio, e solo in tal caso esegue il ciclo.
  2. La variante Do Until...Loop
    Do Until A > 10
      ' ... loop body
    Loop
    continua a eseguire il ciclo finché la condizione che segue Until è false.
  3. La variante Do...Loop While
    Do
      ' ... loop body
    Loop While A > 10
    controlla la condizione solo dopo il primo passaggio del ciclo e termina se la condizione che segue While è false.
  4. La variante Do...Loop Until
    Do
      ' ... loop body
    Loop Until A > 10
    controlla a sua volta la condizione dopo il primo passaggio, ma termina se la condizione che segue Until è true.

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).
Personal tools