Difference between revisions of "EN/Documentation/BASIC Guide/Loops"
(New page: {{EN/Documentation/BASICGuideTOC/v2 |ShowPrevNext=block |ShowPrevPage=block |PrevPage=Documentation/BASIC Guide/Branching |NextPage=Documentation/BASIC Guide/Procedures and Functions |lang...) |
|||
Line 6: | Line 6: | ||
|lang=block | |lang=block | ||
}} | }} | ||
− | {{DISPLAYTITLE: | + | {{DISPLAYTITLE:Cicli}} |
− | + | 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. | |
== <tt>For...Next</tt> == | == <tt>For...Next</tt> == | ||
− | <tt>For...Next</tt> | + | Il ciclo <tt>For...Next</tt> ha un numero fisso di passaggi. Il contatore di cicli definisce il |
+ | numero di esecuzioni del ciclo. Nell'esempio seguente, la variabile <tt>I</tt> è 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. | ||
<source lang="oobas"> | <source lang="oobas"> | ||
Line 21: | Line 22: | ||
</source> | </source> | ||
− | + | Per incrementare il contatore di cicli di un valore diverso da 1 al termine di ogni passaggio, usate la <tt>Step</tt> funzione: | |
<source lang="oobas"> | <source lang="oobas"> | ||
Line 30: | Line 31: | ||
</source> | </source> | ||
− | + | 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: | |
<source lang="oobas"> | <source lang="oobas"> | ||
Line 41: | Line 42: | ||
</source> | </source> | ||
− | + | In questo esempio, il contatore inizia a 10 ed è ridotto di 1 al termine di ogni passaggio, finché il contatore non è 1. | |
− | <tt>Exit For</tt> | + | L'istruzione <tt>Exit For</tt> consente di uscire da un ciclo <tt>For</tt> anticipatamente. Nell'esempio seguente, il ciclo viene terminato durante il quinto passaggio: |
<source lang="oobas"> | <source lang="oobas"> | ||
Line 56: | Line 57: | ||
== <tt>For Each</tt> == | == <tt>For Each</tt> == | ||
− | + | La variante di ciclo <tt>For Each...Next</tt> usata in VBA non è supportata in {{OOo}} Basic. I cicli <tt>For Each</tt> non utilizzano un contatore esplicito come i cicli <tt>For...Next</tt>. Un ciclo <tt>For Each</tt> specifica "esegui questa operazione in tutti gli elementi del gruppo", anziché "esegui questa operazione n volte". Ad esempio: | |
<source lang="oobas"> | <source lang="oobas"> | ||
Line 70: | Line 71: | ||
== <tt>Do...Loop</tt> == | == <tt>Do...Loop</tt> == | ||
− | <tt>Do...Loop</tt> | + | Il processo <tt>Do...Loop</tt> non è collegato a un numero fisso di passaggi. <tt>Do...Loop</tt> viene eseguito finché non è soddisfatta una determinata condizione. Sono disponibili |
+ | quattro varianti del processo <tt>Do...Loop</tt>. 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, <tt>A > 10</tt> rappresenta qualsiasi condizione): | ||
<ol class="task"> | <ol class="task"> | ||
− | <li><tt>Do While...Loop</tt> | + | <li>La variante <tt>Do While...Loop</tt> |
<source lang="oobas"> | <source lang="oobas"> | ||
Do While A > 10 | Do While A > 10 | ||
Line 79: | Line 81: | ||
Loop | Loop | ||
</source> | </source> | ||
− | + | controlla se la condizione che segue <tt>While</tt> è '''true''' prima di ciascun passaggio, e solo in tal caso esegue il ciclo.</li> | |
− | <li><tt>Do Until...Loop</tt> | + | <li>La variante <tt>Do Until...Loop</tt> |
<source lang="oobas"> | <source lang="oobas"> | ||
Do Until A > 10 | Do Until A > 10 | ||
Line 86: | Line 88: | ||
Loop | Loop | ||
</source> | </source> | ||
− | + | continua a eseguire il ciclo finché la condizione che segue <tt>Until</tt> è '''false'''.</li> | |
− | <li><tt>Do...Loop While</tt> | + | <li>La variante <tt>Do...Loop While</tt> |
<source lang="oobas"> | <source lang="oobas"> | ||
Do | Do | ||
Line 93: | Line 95: | ||
Loop While A > 10 | Loop While A > 10 | ||
</source> | </source> | ||
− | + | controlla la condizione solo dopo il primo passaggio del ciclo e termina se la condizione che segue <tt>While</tt> è '''false'''.</li> | |
− | <li><tt>Do...Loop Until</tt> | + | <li>La variante <tt>Do...Loop Until</tt> |
<source lang="oobas"> | <source lang="oobas"> | ||
Do | Do | ||
Line 100: | Line 102: | ||
Loop Until A > 10 | Loop Until A > 10 | ||
</source> | </source> | ||
− | + | controlla a sua volta la condizione dopo il primo passaggio, ma termina se la condizione che segue <tt>Until</tt> è '''true'''.</li> | |
</ol> | </ol> | ||
− | <tt>For...Next</tt> | + | Come il ciclo <tt>For...Next</tt>, anche il processo <tt>Do...Loop</tt> dispone di un comando di arresto. Il comando <tt>Exit Do</tt> permette di uscire da un ciclo indipendentemente dal punto in cui si trova. |
<source lang="oobas"> | <source lang="oobas"> | ||
Line 114: | Line 116: | ||
</source> | </source> | ||
− | == | + | == 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. | |
<source lang="oobas"> | <source lang="oobas"> | ||
Line 153: | Line 156: | ||
</source> | </source> | ||
− | + | 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 [http://en.wikipedia.org/wiki/Bubble_sort Bubble Sort]. | |
{{PDL1}} | {{PDL1}} | ||
{{InterWiki_Languages_BasicGuide|articletitle=Documentation/BASIC Guide/Loops}} | {{InterWiki_Languages_BasicGuide|articletitle=Documentation/BASIC Guide/Loops}} |
Latest revision as of 18:20, 25 June 2009
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). |