Gosub - コマンドリファレンス
Casio Basicプログラミング - コマンドリファレンス
誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します
2018/01/21
2018/01/21
[C.Basic] [FX / CG]
Gosub
プログラムファイル内のサブルーチンへジャンプする。ジャンプの際に引数と戻り値を指定することが可能。純正Casio Basicにはない C.Baisc 独自コマンドで、Goto コマンドを拡張したもの。
Prog コマンドで別のプログラムファイルを呼び出す代わりに、Gosub / Lbl / Return で同じファイル内に記述したルーチンを実行することが可能になる。
(書式) Gosub <ジャンプ先ラベル>[,<引数1>[,<引数2>]...]
ジャンプ先ラベルは、プログラムファイル内に記述した Lbl ラベル。例えば Gosub E に対して Lbl E で受ける。ここで使えるラベルは Goto / Lbl で使えるラベルと同じで、0~9、A~Z、さらに a~z、r ([ALPHA][x^2]のr)、θ ([ALPHA][∧]のθ) が使える。或いは、Alias コマンドで指定した別名ラベルも使える。
指定ラベルへジャンプした後、Gosub実行位置へ戻るには、必ず Return コマンドを用いる。制御コマンドが無い場合は、処理がそのまま下へ続く。Return コマンドを用いる際、C.Basic で拡張された機能として、戻り値を指定できる。例えば Return X とすると 変数 Ans に 変数Xの内容が格納され、Gosub コマンド位置に制御が戻る。Gosub の直後で 変数 Ans を参照すると 変数 X の値が得られる。
(例)
10->X
Gobus A
Disp Ans
Stop
Lbl A
Return 2X
Gosub 以外に Lbl A に到達しないように Stopコマンドを用いている。Lbl A にジャンプ後 2Xを変数 Ansで返す。Disp Ans で 2X の結果 (=20) を表示する。
<引数n> はジャンプ先へ渡す変数を指定する。
ジャンプ先に渡す変数はジャンプ先で別名変数にできる。その場合は Local コマンドを利用する。別名変数は全ての変数が使えるが、プログラムの可動性を得るために小文字使用を推奨する。
例えば、Gosub で変数XとYを渡し、ジャンプ先で渡された変数を a, z として利用するときは、
Gosub A,X,Y
・・・
Lbl A
Local a,z
と記述する。なお 変数 X, Y, a, z はプログラム内で共通して使える大域変数のままである点に注意。但しジャンプ先ラベル以下で別名変数として擬似的なローカル変数として使えるので、コマンド名が Local になっている。
(例)
10→X
20→Y
X+1→a
Y×2→b
Gosub A,X,Y
Disp Ans
Disp a
Disp b
Stop
Lbl A
Local a,b
Dips a
Disp b
Return a+b
-------------実行結果
10
20
30
10
20
-------------
Gosub 実行前は、X=10、Y=10、a=11、b=20 となっている。
Gosub 実行により Lbl A へジャンプし、ジャンプ後 Local コマンドで、変数 X の値は 変数 a に格納、変数 Y の値は 変数 b に格納される。この時点で、a=10、b=20 となる。これによりジャンプ前の変数 a、b の値は変更されている。
Return a+b により a+b の値は変数 Ans に格納され、Gosub の位置へ戻る。
従って、Disp Ans で 30 と表示され、Disp a で10と、Disp b で 20 と表示される。
応援クリックをお願いします。励みになるので...
- 関連記事
-
-
+ (文字列結合) - コマンドリファレンス 2018/01/28
-
StrJoin( - コマンドリファレンス 2018/01/28
-
Gosub - コマンドリファレンス 2018/01/21
-
Menu - コマンドリファレンス 2018/01/20
-
StrMid( - コマンドリファレンス 2018/01/17
-