Difference between revisions of "EN/Documentation/BASIC Guide/Loops"

From Apache OpenOffice Wiki
Jump to: navigation, search
(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}}
 
   
 
   
ループは、特定のコードブロックを指定した回数繰り返し実行させる場合などに使用します。またループの実行回数は、不特定値とすることも可\'94\'5cです。
+
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> ループは、特定回数の繰り返し実行を行うためのものです。この場合の繰り返し回数は、ループカウンタを使って指定します。このサンプルコードでは、変数 <tt>I</tt> はループカウンタで、初期値は 1 です。このカウンタの値は、ループを 1 回実行するごとに 1 ずつ増加されます。最終的に変数 I の値が 10 に等しくなった段階で、ループは終了します。
+
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>
  
ループカウンタの増分値を 1 以外にする場合は、以下のように <tt>Step</tt> を使用します。
+
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>
  
上記のサンプルコードでは、ループを 1 回実行するごとにカウンタの値は 0.5 ずつ増加されるため、ループは最終的に 19 回実行されることになります。
+
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>
  
上記のサンプルコードではカウンタの初期値を 10 として、ループを 1 回実行するごとにカウンタの値を 1 ずつ減算させ、最終的に 1 となるまでループを実行しています。
+
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> ステートメントを使用すると、<tt>For</tt> ループを強制的に終了させることができます。以下のサンプルコードでは、ループの 5 巡目で強制的に終了します。
+
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> ==
VBA の <tt>For Each...Next</tt> ループバリアントは {{OOo}} Basic でサポートされています。<tt>For Each</tt> ループは <tt>For...Next</tt> ループのように明示的なカウンタは使用しません。<tt>For Each</tt> ループは、「n 回繰り返す」ではなく、「このセット内のすべてに対して実行する」ということです。たとえば、
+
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> は、特定回数のループを行うものではありません。<tt>Do...Loop によるループ処理は、特定の条件が満たされるまで繰り返し実行されます。</tt><tt>Do...Loop</tt> には、4 つのバージョンがあります。最初の 2 つのサンプルコードでは、ループ内のコードがまったく実行されない可能性があります (「0 回実行」というロジック)。その後のサンプルコードでは、ループ内のコードが最低 1 回実行されます。(次のサンプルコードで、<tt>A > 10</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>
ここではすべてのパスの前に、<tt>While</tt> の後の条件が、'''true''' であるかどうかが確認され、その場合のみループが実行されます。</li>
+
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>
ここでは、<tt>Until</tt> の後の条件が '''false''' であると評価されれば、ループが実行されます。</li>
+
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>
ここでは最初のループパスの後の条件のみが確認され、<tt>While</tt> の後の条件が、'''false''' であると評価されると終了します。</li>
+
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>
ここでも最初のパスの後の条件が確認されますが、<tt>Until</tt> の後の条件が '''true''' であると評価されると終了します。</li>
+
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> ループと同様に、<tt>Do...Loop</tt> にも強制終了用のコマンドが用意されています。この場合は <tt>Exit Do</tt> コ\'83\'7dンドにより、ループ内の任意の位置で強制終了が行えます。
+
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 ==
  
ループの用途としては、リストの検索、値の取得、複雑な数値計算など、様々な処理で利用されています。以下のサンプルコードは、2 つのループ処理を用いてリストを名前でソートするアルゴリズムです。
+
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>
  
ここでは 2 つの値を 1 組にして順序の入れ替え作業を行い、最終的に昇順で並ぶまでこの作業を繰り返しています。その際に個々の変数値は 1 つずつ位置をずらしていきますが、この動きはちょうど泡が移動する様子に似ています。このような理由から、このタイプのアルゴリズムは一般に [http://en.wikipedia.org/wiki/Bubble_sort ]バブルソート と呼ばれています。
+
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):

  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