HSP3 プログラミングの基礎T | |
(7) 制御文(繰り返し2)
プログラムは基本的に、上から下に向かって実行される。実行する順序を変える(制御する)命令を制御文という。
ここでは、配列の個数分だけを繰り返し処理するforeach命令について学習する。
繰り返す回数は配列変数の要素の数である。
foreach 配列変数
実行する命令 群
loop
repeat命令と同じように、システム変数cntとbreak命令、continue命令も使える。
12, 34, 56, 78, 90のデータを配列変数に格納して、合計を計算する。
dim a, 5 a = 12, 34, 56, 78, 90 wa = 0 foreach a wa = wa + a(cnt) loop mes "合計は、" + wa + "です。" stop
「合計は、270 です。」と表示される。
配列変数aの要素の数は5個である。foreach命令は配列変数の要素の個数分だけ繰り返すので、繰り返し回数は5回ということになる。
このように、配列変数の要素の個数分だけ繰り返し処理をする場合は、repeat命令よりもforeach命令が便利である。
(8) 制御文(移動 goto, gosub)
無条件に実行の順序を変える制御文として、指定した命令(行)にジャンプするgoto命令とジャンプした元の位置に戻るgosub命令とジャンプする先を指定するラベルについて学習する。
ラベル名の行にジャンプする。gosub命令はジャンプした後、return命令で元の位置に戻ってくる。
goto *ラベル名 gosub *ラベル名 ラベル名はアスタリスク(*)の後に続く59文字(半角)以下の文字列で表す。命令や変数名と同じものにならないように注意すること。
*ラベル名
◎ goto命令
goto命令で実行順を変える。
mes "実行される。" goto *label mes "実行されない。" *label mes "ここは実行される。" stop
実行される。 ここは実行される。 |
12, 34, 56, 78, 90のデータを配列変数に格納して、合計を計算する。goto命令を使う。
;goto命令
dim a, 5
a = 12, 34, 56, 78, 90
ko = 0
*loop1
wa = wa + a(ko)
ko = ko + 1
if ko < 5 : goto *loop1
mes "合計は、" + wa + "です。"
stop
|
;repeat命令
dim a, 5
a = 12, 34, 56, 78, 90
repeat 5
wa = wa + a(cnt)
loop
mes "合計は、" + wa + " です。"
stop
|
「合計は、270 です。」と表示される。
むやみにgoto命令を使うと、プログラムの流れがわかりにくくなるので、「できれば使わない」ようにしよう。
◎ gosub命令
gosub命令で実行順序を変える。
repeat 5 gosub *msg loop stop *msg mes "メッセージを表示する。" return
メッセージを表示する。 メッセージを表示する。 メッセージを表示する。 メッセージを表示する。 メッセージを表示する。 |
サンプルの最後3行(*msg/ mes "メッセージを表示する。"/ return)を「サブルーチン」という。繰り返しを使って、このサブルーチンを5回呼び出して終了している。したがって、実行するとメッセージが5回表示される。
このように、ひとつの処理を何度も使う場合などに、その処理の部分をサブルーチンとして独立させる。このサブルーチンが必要なところではgosub命令で呼び出すだけですむ。
サブルーチンで計算する。
d1 = 100 : d2 = 200 gosub *sub1 mes "答えは、" + ans + "です。" gosub *sub2 mes "答えは、" + ans + "です。" gosub *sub1 mes "答えは、" + ans + "です。" stop *sub1 mes "サブルーチン1" ans = d1 + d2 d1 = ans return *sub2 mes "サブルーチン2" ans = d1 - d2 return
サブルーチン1 答えは、300 です。 サブルーチン2 答えは、100 です。 サブルーチン1 答えは、500 です。 |
d1=100, d2=200 *sub1で加算されて、ans=300に。d1=ansでd1=300に変わる。 |
d1=300, d2=200 *sub2で減算されて、ans=100に。 |
|
d1=300, d2=200 *sub1で加算されて、ans=500に。d1=ansでd1=500に変わる。 |
プログラムがサブルーチンになっていても、そこで使われている変数はプログラム全体で共通して使われるものである。したがって、変数をサブルーチンだけで使っているつもりでも、忘れてしまって別のところで使うと思った結果が得られなくなる。変数の管理が大変になることもある。
2006, 2007 © Hiroshi Masuda |