第9講 For文以外の様々なループ文

第5話 前判断と後判断の違い

実は、シートに次のように入力して実行ボタンを押すと前判断と後判断で処理結果に違いが出てきます。
シート例
前判断のときは、
実行結果1
後判断のときは、
実行結果2
なぜ、違いが出てくるのでしょうか。
前判断の場合は、
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話へ

004


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

数学研究室に戻る