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命令とジャンプする先を指定するラベルについて学習する。

goto *ラベル名
gosub *ラベル名
 ラベル名の行にジャンプする。gosub命令はジャンプした後、return命令で元の位置に戻ってくる。
*ラベル名
 ラベル名はアスタリスク(*)の後に続く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 

 

 

inserted by FC2 system