[目次へ][前へ][次へ][表紙へ]
 繰り返し

 プログラミングでは、同じ処理を何度か繰り返したいということがよくあります。

 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

[目次へ][前へ][次へ][表紙へ] inserted by FC2 system