2017年11月16日

LGP講座(かり~第4回 繰り返しについて学ぼう!

yuu_bustup.jpg
優:こ、こんにちは……。柊 優です・・・。

airi_bustup.jpg
愛梨:こんにちはーっ。結城愛梨でーすっ。

haruka_bustup.jpg
陽香:こんにちは。今月も、よろしくお願いします。永乃原 陽香です。

yuu_bustup.jpg
僕たち三人がお届けする、LGP講座(かり、今月もよろしくお願いします……。

airi_bustup.jpg
それで優ちゃん。今日は何するの?

yuu_bustup.jpg
うん……。今回は、繰り返しについて勉強するよ……。

airi_bustup.jpg
はーい。がんばりまーすっ。

haruka_bustup.jpg
それでは、今回もはじめていきましょうか。

~LOOPとENDLOOP

yuu_bustup.jpg
まず、繰り返しの基本となる、LOOPとENDLOOPからはじめていくよ……。
これは、この二つの命令にはさまれた命令を繰り返す命令なんだ……。

airi_bustup.jpg
なるほどー。あれ、それじゃ止めるにはどうしたらいいの?

yuu_bustup.jpg
BREAK命令を使えばいいんだ……。この命令が実行されれば、そこでその繰り返しは終了されるんだよ……。

haruka_bustup.jpg
そこで、このBREAK命令と、条件分岐とを組み合わせればいいんですよ。
例えば、これは変数を1ずつカウントしていき、10になったら停止するプログラムです。
--------------------
A = 0
LOOP
 A = A + 1
 IF A = 10 THEN
  BREAK
 ENDIF
ENDLOOP
--------------------

airi_bustup.jpg
なるほどー。終了させる条件を満たしたら、BREAK命令を実行させればいいんだねっ。

haruka_bustup.jpg
では、ここで愛梨ちゃんに問題です。このプログラムを応用して、1から9までの合計を表示するプログラムを作ってみてください。

airi_bustup.jpg
え?えーとえーと……これでいいかな?

--------------------
S = 0
A = 0
LOOP
 S = S + A
 A = A + 1
 IF A = 9 THEN
  BREAK
 ENDIF
ENDLOOP
SC=G@SETUP(640,480,16,1)
LOOP
 //変数Kの内容を表示
 G@PRINT(SC, 320, 240, STR(S))
 G@FLIP()
 S@SLEEP(1000) //1秒停止
ENDLOOP
--------------------

airi_bustup.jpg
それじゃ、実行させてみるねー。……あれ?

lgp1711-01.JPG
▲ あれ?

airi_bustup.jpg
1~9までの合計は45のはずなのに、どうしてだろ?

haruka_bustup.jpg
プログラムの流れを追ってみてください。8が変数Sに足されたあと、どうなりますか?

airi_bustup.jpg
あ!変数AをSに足した後、Aに1を足して9にして、そのあと条件判断にいってる。そしてそのままA=9の条件が成立して、BREAKを実行してるから、9が足されないで繰り返しから抜けちゃったんだー!

haruka_bustup.jpg
そういうことです。 ここでは、A=A+1をS=S+Aの前に書くか、条件判断の下に書くのが正しいんですよ。

yuu_bustup.jpg
このように、繰り返しでは、繰り返しの中の命令の順番によっては、正しく動作しない可能性があるから、気を付けてね……。

airi_bustup.jpg
はーい、わかりましたー。

~FORとNEXT

yuu_bustup.jpg
さて、続いては、FOR~NEXTについて説明するね。これは、このように書くんだ……

-------------------------------------------------------
FOR 変数=始めの値 TO 終わりの値 STEP 変数に加える値
……
NEXT
-------------------------------------------------------

airi_bustup.jpg
BASICでのFOR~NEXTと同じなんだね。

yuu_bustup.jpg
うん……。 あと、BASICと同じように、『変数に加える値』が1のときは、STEPのところは省略できるんだ。だから……
FOR A = 1 TO 5
これと、
FOR A = 1 TO 5 STEP 1
これは同じ意味になるんだよ……。

airi_bustup.jpg
なるほどー。

haruka_bustup.jpg
動作もBASICと同じですよ。ループ開始じに、指定した変数の値を始めの値にセットして、繰り返すごとに、その変数に、『変数を加える値』を足していき、終わりの値に達したときに、ループを終了させます。
また、このFOR~NEXTでも、BREAKが使えますよ。

airi_bustup.jpg
はーい、わかりましたー。

~ループの入れ子と配列

yuu_bustup.jpg
さて、繰り返しのテクニックについてだけど、繰り返しのループの中には、さらにループを入れることができるんだ……。

airi_bustup.jpg
ループの中にループ?

yuu_bustup.jpg
うん……。この場合、内側のループに入ったら、まずその内側のループの繰り返しを行い、その繰り返しが全部終わってから、外側のループに戻るんだ……。

haruka_bustup.jpg
このテクニックは、ある繰り返し処理の中に、さらに繰り返しの処理があるときに便利ですよ。

airi_bustup.jpg
うん、わかったよー。

yuu_bustup.jpg
そして続いて、配列について……。
配列というのは、一つの変数を、いくつかの部屋に区切ったものなんだ……。

airi_bustup.jpg
それぞれの部屋は、( )の中の、添え字という数で区別するんだよね?
A(5)
という感じで。

yuu_bustup.jpg
そうそう……。さて、LGPでは、配列を定義するには、DIM文を使うんだ……

-------------------------
DIM 変数(添え字のMAX)
例 DIM A(5)
-------------------------

yuu_bustup.jpg
なお、添え字は0から始まることに注意してね……。つまり、上の例だったら、部屋はA(0)からA(5)の6つ作られることになるんだ……。

airi_bustup.jpg
はーい、わかりましたー。

haruka_bustup.jpg
さて、この配列は、繰り返しと組み合わせると便利です。
繰り返しの中で変化する変数を添え字とすることで、いくつもの配列の中身を、ループで扱うことができるんですよ。
例えばこれは、A(0)~A(9)までの配列の中身を合計するプログラムです。

--------------------------------
DIM A(9)
A(0)=4
A(1)=93
A(2)=24
A(3)=85
A(4)=10
A(5)=3
A(6)=35
A(7)=54
A(8)=21
A(9)=43
S = 0
FOR B = 0 TO 9
 S = S + A(B)
NEXT
SC=G@SETUP(640,480,16,1)
LOOP
//変数Kの内容を表示
 G@PRINT(SC, 320, 240, STR(S))
 G@FLIP()
 S@SLEEP(1000) //1秒停止
ENDLOOP
--------------------------------

airi_bustup.jpg
へぇ~。 配列の数が10個でも100個でも、短い繰り返しの処理だけでできるから便利だね。

yuu_bustup.jpg
そうだね……。それじゃ、今回はここまで……。次回は、ユーザー関数について説明するよ……。

haruka_bustup.jpg
それではまた次回。 ごきげんよう。

airi_bustup.jpg
またね~。

※次の更新は、11月20日。レトロゲーレビューの予定です。お楽しみに!
posted by 裏編 at 07:22| LGP講座(かり | 更新情報をチェックする