第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 プロシージャに進みたいと思います。
VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
数学研究室に戻る