第6講 For文以外の繰り返し処理

第6話 For文・While文・Do...While文の関係

もう一度1+2+3+45+6+7+8+9+10のプログラミングを
For文とWhile文とDo...While文によって、それぞれ考えてみましょう。
Public Class Form1

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     '変数の宣言
     Dim i As Integer, w As Integer

     'For文による和の計算と表示
     w = 0
     For i = 1 To 10
       w = w + i
     Next
     Label1.Text = w.ToString

     'While文による和の計算と表示
     w = 0
     i = 1
     While i < 11
       w = w + i
       i = i + 1
     End While
     Label2.Text = w.ToString

     'Do...Loop While文による和の計算と表示
     w = 0
     i = 1
     Do
       w = w + i
       i = i + 1
     Loop While i < 11
     Label3.Text = w.ToString

   End Sub
End Class

実行結果例
入門
どのプログラミングでも、合計値の算出に成功しています。
特に、While文とDo...While文に関しては、
w = 0
i = 1
While i < 11
  w = w + i
  i = i + 1
End While

w = 0
i = 1
Do
  w = w + i
  i = i + 1
Loop While i < 11
でまったく同じです。
そして、For文に関しては
w = 0
For i = 1 To 10
 w = w + i
Next
と記述が少し簡単です。
これだけを見ると、残念ながらFor文に軍配があがってしまいそうです。

しかし、1+2+3+・・・の計算を合計値が100を超えない範囲で計算しなさいという命令の場合は、
Public Class Form1

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     '変数の宣言
     Dim i As Integer, w As Integer

     'For文による和の計算と表示
     w = 0
     For i = 1 To 100
       If w + i <= 100 Then w = w + i Else Exit For
     Next
     Label1.Text = w.ToString

     'While文による和の計算と表示
     w = 0
     i = 1
     While i < 101
       If w + i <= 100 Then
         w = w + i
         i = i + 1
       Else
         Exit While
       End If
     End While
     Label2.Text = w.ToString

     'Do...Loop While文による和の計算と表示
     w = 0
     i = 1
     Do
       w = w + i
       i = i + 1
     Loop While w + i <= 100
     Label3.Text = w.ToString

   End Sub
End Class
となります。計算部分だけを取り出すと、
w = 0
For i = 1 To 100
  If w + i <= 100 Then
    w = w + i
  Else
    Exit For
  End If
Next

w = 0
i = 1
While i < 101
  If w + i <= 100 Then
    w = w + i
    i = i + 1
  Else
    Exit While
  End If
End While


w = 0
i = 1
Do
  w = w + i
  i = i + 1
Loop While w + i <= 100
で明らかに、Do...While文に軍配があがります。
理由は、2点です。
For文とWhile文では、終わりの値がわからないので勘で100としています。
プログラミングを
Public Class Form1

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     '変数の宣言
     Dim i As Integer, w As Integer

     'For文による和の計算と表示
     w = 0
     For i = 1 To 100
       If w + i <= 100 Then w = w + i Else Exit For
     Next
     Label1.Text = i.ToString

     'While文による和の計算と表示
     w = 0
     i = 1
     While i < 101
       If w + i <= 100 Then
         w = w + i
         i = i + 1
       Else
         Exit While
       End If
     End While
     Label2.Text = i.ToString

     'Do...Loop While文による和の計算と表示
     w = 0
     i = 1
     Do
       w = w + i
       i = i + 1
     Loop While w + i <= 100
     Label3.Text = i.ToString

   End Sub
End Class
と変更すると、
入門
ですから、最後の値は14ということになります。
今回の問題は簡単ですから、最後の勘で100未満と判断できますが、
複雑な問題なら検討もつかない場合もあります。
この点Do...While文の場合は、プログラマが終わりの値を算出したり、勘に頼ったり、しなくて済みます。

もう一つの問題は、For文とWhile文の方はif文を組み合わせないと、プログラムが組めない点です。

以上の2点から、合計値が100を超えない範囲で加算しなさいという命令に関しては、
Do...Loop While文に軍配があがります。
つまり、終わりの値がわからない場合は、Do...Loop While文を使った方がよいということになります。

さらに、Do...While文の方が優れいる場合は
条件を満たしていなくても、1回は処理させたい場合です。
While文の場合は、条件を満たさないと1回も実行されません。
While 条件式
    ・
    ・
    ・
End While
と前にループ継続判定を行うので最初から条件を満たしていない場合は、処理は1回も行われません。
For文でも、条件がIf文になりますが、このIf文を考えるのが結構やっかいです。


まとめると、最後の値がはっきりしないときと条件を満たさなくても1回は処理させいたい場合は、
For文やWhile文よりDo...Loop While文の方が向いているということです。


以上から、Do...Loop While文については存在の意義が認めていただけると思います。

では、For文とWhile文についてはどうでしょうか。
私が今回実験した範囲では、有意な差はありませんでしたが、
サイトによっては、While文の方が実行速度が速いとしているものもあります。
その真偽はわかりませんが、もし実行速度に差がなかったとしても、
While文はわかりやすいので、While文があった方が思考の幅は広がると思います。
実際、私がC言語で最初に作った魔方陣作成ソフトはWhile文によるものでした。
For文でも同様にできると気がついたのは、ずいぶん後のことで、魔方陣作成ソフトをVBAに移植したときですから
While文の方が発想しやすいことを示しているのではないでしょうか。

いずれにしろプログラミングをするときには、引き出しを多くもっていた方がよい、ことは間違いないと思います。

以上で、第6講は終了して第7講のSub プロシージャに進みたいと思います。


第5話へ 第7講第1話へ

006

VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座

数学研究室に戻る