Casio Basic入門59
Casio Basic入門
誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します
追記 2017/11/05
追記 2017/11/05
4. CasioBasicを使ってみる(続き)
Chapter 10 - 中級
◆ Chapter 10 の目標: 3桁区切り出力 - 汎用サブルーチンの作成
前回: Casio Basic入門58 を見る
これまでに完成させた fx-5800P版 3桁区切りサブルーチンのソースを再掲します。
fx-5800P版 "高速3桁区切り出力・汎用サブルーチン":3DS
Z=0⇒Return
Int(log(Z))+1→K
(K≥4)+(K≥7)+(K≥10)→I
X→D:X→W
X=0⇒17-K-I←X
If X+K+I>17 Or K≥13
Then
X+K≥17⇒17-K→D
If K≥11:Then
2→D:X<2⇒X→D
W=0⇒2→D
IfEnd
Locate D,Y,Z
Return:IfEnd
X103Frac(Z÷X103)→U
Int(X103Frac(Z÷X106))→V
Int(X103Frac(Z÷X109))→W
Int(Z÷X109)→D
If K≤8:Then
Locate X,Y,X108W+X104V+U
I≥1⇒Locate X+K-2-(I=1),Y,","
I≥2⇒Locate X+K-6,Y,","
Else
X+K-6+(I≥3)→J
Locate J,Y,X107+X104V+U
Locate X,Y,X104D+W
Locate J+4,Y,","
Locate J,Y,","
I≥3⇒Locate X+K-9,Y,","
IfEnd
今回は、グラフ関数電卓への移植を試みます。
なお、fx-CG20 / CG50 と fx-9860GII は同じプログラムで完全に動作しますが、プログラム編集画面での表現が少し異なります。fx-CG20 / CG50 では [X10x] キーを押すと X10x と表記されます。これは fx-5800P も同じです。一方 fx-9860GII では同じキーが [EXP] と印刷されていて、プログラム編集画面では E と表現されます。
先ずは、fx-CG20 / CG50 での表現でプログラムを記述します。
Chapter 10-5
3桁区切りサブルーチン グラフ関数電卓版
▍グラフ関数電卓版 3DS の仕様
- 15桁対応:fx-5800P版のプログラムは、そのまま100%互換でグラフ関数電卓で動作します。しかし、1行が21桁あり fx-5800P の12桁対応では物足りなく感じる。そこで、15桁対応に拡張します。
- 変数を増やさない:3DS で用いる変数は fx-5800P版と同じとする。メインルーチンで使う変数の制限をこれ以上厳しくしないことを優先的に考え、グラフ関数電卓版で使う変数を追加しない。
▍グラフ関数電卓版 3DS
具体的に変更した部分です。
前半の変更は、主に1行の桁数が16桁から21桁に変わるので、それに対応したもの。なお3桁区切りは12桁対応から15桁対応へ変えたことに伴う部分が一カ所ある。
後半の変更は、15桁対応への拡張に伴うもの。特に新たな変数を追加しないので一見煩雑に思えるが、12桁対応と同じロジックを拡張しただけ。
fx-5800P版のソースが分かれば難しくないと思うので、詳細はソースをみてください。
◆ fx-CG20 / CG50版
先ずは fx-CG20 / CG50版 を示します。fx-5800P版と異なる部分を赤文字で示します。
fx-CG20 / CG50版 "高速3桁区切り出力・汎用サブルーチン":3DS
Z=0⇒Return
Int(log(Z))+1→K
(K≥4)+(K≥7)+(K≥10)+(I≥13)→I
X→D:X→W
X=0⇒22-K-I→X
If X+K+I>22 Or K≥16
Then X+K≥22⇒22-K→D
If K≥11:Then
7→D:X<2⇒X→D:W=0⇒7→D
IfEnd
Locate D,Y,Z
Return:IfEnd
X103Frac(Z÷X103)→U
Int(X103Frac(Z÷X106))→V
Int(X103Frac(Z÷X109))→W
Int(Z÷X109)→D
If K≤8:Then
Locate X,Y,X108W+X104V+U
I≥1⇒Locate X+K-2-(I=1),Y,","
I≥2⇒Locate X+K-6,Y,","
Else
X+K-6+(I≥3)+(I≥4)→J
Locate J,Y,X107+X104V+U
Locate X+(I≥4),Y,X107Int (D÷X103)+X107Fac (D÷X103)+W
I≥4⇒Locate X,Y,Int (D÷X103)
Locate J+4,Y,","
Locate J,Y,","
I≥3⇒Locate X+K-9+(I≥4),Y,","
I≥4⇒Locate X+K-12,Y,","
IfEnd
▶ ダウンロード:高速3桁区切り出力・汎用サブルーチン - 3DS (fx-CG20 / CG50版)
※ デバッグ・使いこなしテスト用プログラムもダウンロードできます。
速度に最も影響を与える Locate コマンドの使用回数は、
- 8桁以下の場合 (K≤8):3回 (fx-5800Pと同じ)
- 9桁の場合 (K=9 かつ I=2):5回 (fx-5800Pと同じ)
- 10~12桁の場合 (10≤K≤12 かつ I=3):6回 (fx-5800Pと同じ)
- 13~15桁の場合 (13≤K≤15 かつ I=4):8回
次に速度への影響を考えるべき論理演算の回数は、
- 8桁以下の場合 (K≤8):3回 (fx-5800Pと同じ)
- 9~15桁の場合 (9≤K≤15):7回 (fx-5800Pは2回)
しかし、グラフ関数電卓は fx-5800P より処理が圧倒的に速いので、この程度では fx-5800P よりも速く感じる。

◆ fx-9860GII版
fx-9860GII 版も CG版と全く同じだが、X10x の編集画面上の表現が異なるだけだ。
fx-9860Gシリーズ版 "高速3桁区切り出力・汎用サブルーチン":3DS
Z=0⇒Return
Int(log(Z))+1→K
(K≥4)+(K≥7)+(K≥10)+(I≥13)→I
X→D:X→W
X=0⇒22-K-I→X
If X+K+I>22 Or K≥16
Then
X+K≥22⇒22-K→D
If K≥11:Then
7→D:X<2⇒X→D
W=0⇒7→D
IfEnd
Locate D,Y,Z
Return:IfEnd
E3Frac(Z÷E3)→U
Int(E3Frac(Z÷E6))→V
Int(E3Frac(Z÷E9))→W
Int(Z÷E9)→D
If K≤8:Then
Locate X,Y,E8W+E4V+U
I≥1⇒Locate X+K-2-(I=1),Y,","
I≥2⇒Locate X+K-6,Y,","
Else
X+K-6+(I≥3)+(I≥4)→J
Locate J,Y,E7+E4V+U
Locate X+(I≥4),Y,E7Int (D÷E3)+E7Fac (D÷E3)+W
I≥4⇒Locate X,Y,Int (D÷E3)
Locate J+4,Y,","
Locate J,Y,","
I≥3⇒Locate X+K-9+(I≥4),Y,","
I≥4⇒Locate X+K-12,Y,","
IfEnd
▶ ダウンロード:高速3桁区切り出力・汎用サブルーチン - 3DS (fx-9860Gシリーズ版)
※ デバッグ・使いこなしテスト用プログラムもダウンロードできます。

Chapter 10 はこれで終わりです。
⇒ Casio Basic入門60 / Casio Basic入門G01 / 目次
応援クリックをお願いします。励みになるので...