第9講 For文以外の様々なループ文
第7話 While文とFor文の関係
For文による解答例
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
For i = h To 1000 Step b
w = w + i
If w + i > o Then Exit For
Next
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
For i = h To 1000 Step b
w = w + i * i
If w + i * i > o Then Exit For
Next
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
For i = h To 1000 Step b
w = w + i * i * i
If w + i * i * i > o Then Exit For
Next
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
For i = h To 1000 Step b
w = w + i * i * i * i
If w + i * i * i * i > o Then Exit For
Next
Cells(12, 4) = w
End Sub
解説
For i = h To 1000 Step b
1000は勘です。合計上限値が、1万程度なら超えないであろうという勘です。
心配であれば、出来るだけ大きくしておけばよいのです。
Exit ForはFor文を強制的にやめさせる命令です。
For文とWhile文は、基本的に同じですがどこまで計算させるかがわかっていない場合は、
For文より、While文を使った方がよいことがわかります。
どちらを使っても、よいですが1000の部分は気持ちが悪いですね。合計上限値がもすごく大きいときは、
計算が途中で打ち切られてしまう可能性があるわけですから。
その点では、While文に軍配が上がります。
ですから、汎用性の点でどちらが広いかと申しますとWhile文ということになります。
好みの問題ですが、基本的には繰り返し処理はWhile文でやった方がよいと言えそうです。
さて、今回For文を強制終了させました。
強制終了は、Do文(Do While...Loop文、Do...Until Loop文などをDo文という)にも強制終了の命令があります。
Exit Doです。
皆さん、実は
Do While 条件式
・
・
・
Loop
の条件式は、条件式自身が値を持もちちます。
条件式が値をもつというと?が浮かぶでしょうが、
コンピュータは、0と1の2進数であらゆる処理を行っています、ループ処理を行うか行わないかの判断も、
0,1でなされるのです。
条件式がもつ値は、0か1です。
条件式が真であるとき1、偽であるとき0なのです。
例えば『3 < 5』は真ですから、3 < 5自身の値は1です。
また、『5 < 3』なら、5 < 3自身の値は0です。
だから、コンピュータは次のように判断しています。
条件式の内容を見ているではなく、条件式自体の値を見ています。
条件式自体の値が1なら処理を実行し、0なら処理をしないようになっています。
だから、Do文を実行させるには、
Do While 1
・
・
・
Loop
でよいのです。ただし、これだと永久ループになってしまうので、
Do While 1
・
・
If 条件式 Then Exit Do
Loop
という風に、
If 条件式 Then Exit Doの1文を入れます。
第6話へ 第8話へ
vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
数学研究室に戻る