繰り返し |
プログラミングでは、同じ処理を何度か繰り返したいということがよくあります。
1.for 〜 next |
for 変数名, 初期値, 終値, 増分 処理 next
変数にまず初期値を代入し、処理を行い、変数に増分を足し、処理を行い、増分を足し……ということを変数が終値に達するまで繰り返します。
for i, 0, 5, 1 mes "iは" + i + "です" next
実行結果
iは0です
iは1です
iは2です
iは3です
iは4です
この例ではnextの後に処理はないので、プログラムは終了となります。
上図から分かる通り、iが終値の時には処理(mes "iは" + i + "です")が行われない点に注意してください。
増分が1以外の例です。
for i, 2, 10, 2 mes "iは" + i + "です" next
実行結果
iは2です
iは4です
iは6です
iは8です
増分に負の値を指定することもできます。
for i, 5, 0, -1 mes "iは" + i + "です" next
実行結果
iは5です
iは4です
iは3です
iは2です
iは1です
なお、
for i, 0, 0, 1 mes "iは" + i + "です" next
このように最初から終値に達している場合には処理は1回も行われません。
増分が1の場合、省略することができます。
for i, 0, 5 mes "iは" + i + "です" next
2.入れ子 |
例.a(0, 0)〜a(3, 1)の合計を計算します。
dim a, 4, 2 a(0, 0) = 4 : a(0, 1) = 7 a(1, 0) = 23 : a(1, 1) = 60 a(2, 0) = 51 : a(2, 1) = 87 a(3, 0) = 100 : a(3, 1) = 202 sum = 0 for i, 0, 4 s = 0 for j, 0, 2 s += a(i, j) next sum += s next mes "合計は" + sum + "です"
for文が二重になっています。このようにfor 〜 nextの中にfor 〜 nextがある構造を「入れ子(ネスト)」と言います(if 〜 {……}の中にif文がある構造等もやはり「入れ子」と言います)。
内側のfor文に入る前にsに0を入れ、まずa(i, 0)を足しこみ、次にa(i, 1)を足しこみます。すると結局、sはa(i, 0)とa(i, 1)の小計になります。
外側のfor文でiを0から3まで変化させながらsumにsを足しこみます。
3._break命令 |
for 〜 nextの途中に_breakと書くと、そこでfor 〜 nextループから抜けます。
for i, 0, 5 if i == 3 { _break } mes "iは" + i + "です" next
実行結果
iは0です
iは1です
iは2です
for i, 0, 3 for j, 0, 5 if j == 2 { _break } mes "iは" + i + "、jは" + j + "です" next next
この場合の_breakは内側のfor 〜 nextから抜けるのであって、外側のfor 〜 nextからは抜けません。
実行結果
iは0、jは0です
iは0、jは1です
iは1、jは0です
iは1、jは1です
iは2、jは0です
iは2、jは1です
4.while 〜 wend |
while 条件式 処理 wend
while文は、条件式が真である間処理を繰り返します。
i = 0 while i < 5 mes "iは" + i + "です" i++ wend
実行結果
iは0です
iは1です
iは2です
iは3です
iは4です
while文も、途中に_breakを書くとwhile 〜 wendのループから抜けます。
while文の条件式を省略すると無限ループとなります。
mes "スペースキーを押すとウィンドウが閉じます" *Input_Space await 16 getkey key, 32 if key == 0 { goto *Input_Space } end
変数名もそうですが、ラベル名を考えるのも結構悩むものです。上のプログラムは以下のように書き直すことができます。
mes "スペースキーを押すとウィンドウが閉じます" while await 16 getkey key, 32 if key == 1 { _break } wend end