第3講 繰り返し処理for文
第1話 For文とは?
1+2+3+4+5+6+7+8+9+10
を計算させるには、
Module Module1
Sub Main() '私は社長だ。
Dim a As Integer '整数を入れる箱を用意
a = 0 '初期化
'以下計算
a = a + 1
a = a + 2
a = a + 3
a = a + 4
a = a + 2
a = a + 5
a = a + 6
a = a + 7
a = a + 8
a = a + 9
a = a + 10
'以上計算
Console.WriteLine("1+2+3+4+5+6+7+8+9+10={0:d}",a)
End Sub
End Module
実行結果
1+2+3+4+5+6+7+8+9+10=55
で良いわけですが、余りに芸のないプログラミングですね。
a = a + 1
a = a + 2
a = a + 3
a = a + 4
a = a + 2
a = a + 5
a = a + 6
a = a + 7
a = a + 8
a = a + 9
a = a + 10
は10行にわたって同じようなことを繰り返します。
同様なことを繰り返して処理することを繰り返し処理といいます。
その繰り返し処理の一つにfor文があります。
for文を使ってこの芸のないコードを書き直すと、
Module Module1
Sub Main() '私は社長だ。
Dim a, i As Integer 'aは整数を入れる箱を用意 iはFor文の制御変数
a = 0 '初期化
'以下計算
For i = 1 To 10
a = a + i
Next
'以上計算
Console.WriteLine("1+2+3+4+5+6+7+8+9+10={0:d}", a)
End Sub
End Module
となります。
iを1からはじめてひとつずつ増やしながらiが10になるまで
a = a + i
を繰り返しなさいという命令になります。
For i = 1 To 10
が1から始め10までを意味します。
Next
は次を意味します。
ですから、iは1から始まってひとつずつ増えて10まで変化します。
For i = 1 To 10
・・・
・・・
・・・
Next
こういう単位をブロックといいます。
ブロックの中が繰り返し行われるのが、
For文です。
繰り返し処理のことをループ処理ともいいます。
10回回転する=10回ループする
からです。
この処理が優れているのは、
For i = 1 To 10 をFor i = 1 To 10000 と変更するだけで、
1から10000までの和を求めるプログラムに変更できることです。
Module Module1
Sub Main() '私は社長だ。
Dim a, i As Integer 'aは整数を入れる箱を用意 iはFor文の制御変数
a = 0 '初期化
'以下計算
For i = 1 To 10
a = a + i
Next
'以上計算
Console.WriteLine("1から10000までの和={0:d}", a)
End Sub
End Module
実行結果
1から10000までの和=50005000
どうです。急に面白くなったのではないでしょうか。
ちょっと変えただけで
1+2+3+・・・+9999+10000
が計算できるようになったのです。しかも、一瞬です。
尚、
For i = 1 To 10
・・・
・・・
・・・
Next
のiを制御変数といいます。
尚、
a = a + i
は
a += i
と書くことが出来ます。
BASICの時代にはこのような簡略表現はありませんでしたが、
VBになってから、C言語のような簡略表現が出来るようになりました。
簡略表現の例を書いておきましょう。
a -= i : a = a - i
a *= i : a = a * i
a /= i : a = a / i
キーボードには×と÷はありませんので、
プログラム言語では*と/でそれぞれ代用します。
iをひとつずつ増やしたいときは、
For i = 1 To 10
・・・
・・・
・・・
Next
ですが、2つずつ増やす方法はあるでしょうか。
あります。
For i = 1 To 10 Step 2
・・・
・・・
・・・
Next
とすれば良いのです。
同様に、ひとつずつ減らしたいのであれば、
For i = 10 To 1 Step -1
・・・
・・・
・・・
Next
例えば、
For i = 1 To 10 Step 4
・・・
・・・
・・・
Next
の場合にはiは
1,5,9
の値をとります。
i = 1 To 10 はiを1から10の範囲内で変化させなさいという意味ですから、
iが13の値をとることはありません。
では
@ 2+3+4+・・・+99
A 3+5+7+・・・+101
についてプログラミングしてみましょう。