第9講 For文以外の様々なループ文
第5話 前判断と後判断の違い
実は、シートに次のように入力して実行ボタンを押すと前判断と後判断で処理結果に違いが出てきます。
前判断のときは、
後判断のときは、
なぜ、違いが出てくるのでしょうか。
前判断の場合は、
w = 0
i = h
Do While w < o
w = w + i
i = i + b
Loop
10 <=3 ですから、条件式は偽です。
条件式が真のときのみ処理を実行しますから、
1回も処理されずDo文は終了となってしまいます。
それに対して、後判断の場合は
w = 0
i = h
Do
w = w + i
i = i + b
Loop While w < o
判断をするのは、処理が終了してからですから、1回は処理することになります。
つまり、条件式がはじめから偽であるとき、前判断では1回も処理されないのに対して、
後判断では、条件式が偽であっても1回は処理されるのです。
ですから、偽であっても1回は処理をさせたい場合に後判断を使います。
シートを少し変更して、
合計上限値を超えない範囲で合計させるように課題を変更します。
例えば、はじめの値が1、合計上限値が100、変化の幅が1なら、
1+2+3+・・・の計算を合計が100を超えない範囲で行わせるということです。
どのようにコードを変更したらよいでしょうか。
30行下にうっかり勘違いしやすいコード例をあげます。皆さん、正しい答えが出るように考えましょう。
課題は、While文、Do While...Loop文、Do... While Loop文、Do Until...Loop文、Do... Until
Loop文の6通り考えてみましょう。
うっかりしやすいコード例
Private Sub CommandButton1_Click()
Dim h As Long, o As Long, b As Long
h = Cells(5, 2)
o = Cells(6, 2)
b = Cells(7, 2)
f1 h, o, b '1乗の和の計算
f2 h, o, b '2乗の和の計算
f3 h, o, b '3乗の和の計算
f4 h, o, b '4乗の和の計算
End Sub
'1乗の和の計算
Sub f1(h As Long, o As Long, b As Long)
Dim i As Long, w As Long
w = 0
i = h
Do While w < o
w = w + i
i = i + b
Loop
Cells(9, 4) = w
End Sub
'2乗の和の計算
Sub f2(h As Long, o As Long, b As Long)
Dim i As Long, w As Long
w = 0
i = h
Do While w < o
w = w + i * i
i = i + b
Loop
Cells(10, 4) = w
End Sub
'3乗の和の計算
Sub f3(h As Long, o As Long, b As Long)
Dim i As Long, w As Long
w = 0
i = h
Do While w < o
w = w + i * i * i
i = i + b
Loop
Cells(11, 4) = w
End Sub
'4乗の和の計算
Sub f4(h As Long, o As Long, b As Long)
Dim i As Long, w As Long
w = 0
i = h
Do While w < o
w = w + i * i * i * i
i = i + b
Loop
Cells(12, 4) = w
End Sub
これで一見うまくいきそうですが、例えば
などでうまくいきません。なぜでしょうか。
第4話へ 第6話へ
vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
数学研究室に戻る