Casio Basic入門59

Casio Basic入門
<目次>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

 追記 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 の仕様
  1. 15桁対応:fx-5800P版のプログラムは、そのまま100%互換でグラフ関数電卓で動作します。しかし、1行が21桁あり fx-5800P の12桁対応では物足りなく感じる。そこで、15桁対応に拡張します。
  2. 変数を増やさない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≥2222-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回
となる。12桁までは回数は同じで、拡張した13~15桁の場合のみ2回増えることになる。

次に速度への影響を考えるべき論理演算の回数は、
  • 8桁以下の場合 (K≤8):3回 (fx-5800Pと同じ)
  • 9~15桁の場合 (9≤K≤15):7回 (fx-5800Pは2回)
なので、9~15桁では論理演算5回増え、fx-5800P ならば約 50m秒程度遅くなる計算。

しかし、グラフ関数電卓は fx-5800P より処理が圧倒的に速いので、この程度では fx-5800P よりも速く感じる

3DS src for fx-CG50 


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≥2222-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シリーズ版)
 ※ デバッグ・使いこなしテスト用プログラムもダウンロードできます。


3DS src for fx-9860GII 



つづく...

⇒ Casio Basic入門60 / Casio Basic入門G01 / 目次



応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ






keywords: fx-5800PCasioBasic、入力ボックス, プログラミング入門プログラム関数電卓

リンク集 | ブログ内マップ


関連記事

テーマ : プログラム関数電卓
ジャンル : コンピュータ

コメントの投稿

非公開コメント

最新記事
検索フォーム
最新コメント
カテゴリ
C# (3)
Visitors
Online Counter
現在の閲覧者数:
プロフィール

やす (Krtyski)

Author:やす (Krtyski)
since Oct 30, 2013


プログラム電卓は、プログラムを作って、使ってナンボ!

実際に触って気づいたこと、自作プログラム、電卓プログラミングについて書いています。

なお管理人はカシオ計算機の関係者ではなく、Casio Basicが面白いと感じる1ユーザーです。


写真: 「4駆で泥んこ遊び@オックスフォード郊外」

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR