e-Gadget - プログラム関数電卓 Casio Basic入門37

Casio Basic入門37

Casio Basic入門
<目次>

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

修正:2015/01/25


 4. CasioBasicを使ってみる(続き)

Chapter 6

前回: Casio Basic入門36 を見る


◆ Chapter 6 の目標: プログラムを速くする
入力ボックスの改良と拡張

入力ボックス2.0 にバージョンアップして、ようやくfx-5800P Casio Basic でストレスなく使えるようになりました。この汎用サブルーチンは、より画面の広い fx-9860GII ではさらに役立つので、今回は入力ボックスfx-9850GII に移植します。
今回 fx-9860GII に移植したプログラムは、以下のモデルでも動作します。
- fx-9860GIII
- fx-9750GIII
- fx-CG10 / fx-CG20
- fx-CG50




Chapter6-7
fx-5800P から fx-9860GII へ移植する

高速動作する fx-9860GII では、キーリピート対策が必要です。そこで、この対策を行った fx-5800P 用 IN Ver 2.1 のプログラム(以下)を元に移植を進めます。

[2015/01/25 修正] INPI Ver 2.0 のコードを掲載していたのを正しく IN Ver 2.0 に修正しました。

INv20src1_fx-5800P 


プログラム構造

[初期表示と変数の初期化]

[キー入力]

[後処理]


このプログラムをそのまま fx-9860GII で動作させても、以下の理由からエラーになります。

1. fx-9860GII には配列変数がない
2. fx-9860GII では、Getkey が返すキーコードが異なる

さらに、fx-9860GII の広い画面を活かすために、Locate の引数を最適なものに変更した方が良いでしょう。



fx-9860GII Casio Basic での配列

fx-5800P の配列変数 Z[ ] は fx-9860GII の Casio Basic には準備されていません。配列変数の代わりとして使えそうなのは、行列とリストです。

以前、fx-9860GII (ノーマルクロック 29MHz) で行列とリストのアクセス速度を測定しています。結果の表を再掲載します。
 ⇒ fx-9860GII への移植 - ピタゴラス数

表 行列とリストのアクセス速度
処理内容処理時間 (ミリ秒)
リスト読み出し13.2
リスト書き込み17.6
行列読み出し10.7
行列書く込み12.0

明かに行列の方がアクセス速度が速いので、配列変数の代わりに行列を採用します。

さて配列変数は、1行K列の行列と同じなので、87個の配列変数Z[K] を1行87列の行列 Z[1,K] に置き換えます。ここで、K は1~87の整数です。


この行列 Z の領域確保は、{1,87}→Dim Mat Z

そして、配列変数 Z[K] の代わりに、行列 Mat Z[1,K] で各要素にアクセスします。
例えば、数 1 を、1行72列目の要素に代入する場合は、

1→Mat Z[1,72]

とします。


異なるキーコードの対応

同じキーを押しても Getkey が返すキーコードは、fx-9860GII と fx-5800P で異なります。キーコードを知るには、取扱説明書を見るか、キーコード取得プログラムを実行してください。

取扱説明書キーコード取得プログラム
fx-5800P99 ページプログラムライブラリ - キーコード取得
fx-9860GII8-17 ページ

入力ボックス IN Ver 2.1 で使うキーコードをまとめます。

キーfx-5800Pfx-9860GII
1 (テンキー)3572
2 (テンキー)3663
3 (テンキー)3752
4 (テンキー)2173
5 (テンキー)2263
6 (テンキー)2353
7 (テンキー)3174
8 (テンキー)3264
9 (テンキー)3354
・ (小数点)2661
DEL3444
(-) (負号)5741
- (減算記号)6732
その他 [AC] 以外のキー・・・・・・
キーコード最大値8779
入力ボックスで使うキーだけを具体的に示していますが、他のキーのキーコードも異なります。



これに基づき、行列の領域確保と初期化は、以下のようになります。

なお、fx-9860GII ではキーコードの最大値が 79 になっていることに留意します。行列の領域確保はその分メモリを消費するので、必要最小限にすべきです。

{1,79}→Dim Mat Z
1→Mat Z[1,72]
2→Mat Z[1,62]
3→Mar Z[1,52]
4→Mat Z[1,73]
5→Mat Z[1,63]
6→Mat Z[1,53]
7→Mat Z[1,74]
8→Mat Z[1,64]
9→Mat Z[1,54]



初期表示と変数の初期化

fx-9860GII 用に書き直すために、キーコードの扱いを変更し、配列変数を行列に切り替えましたが、最後に Locate コマンドを使った画面表示を変更します。入力ボックス・インジーケータは、画面の右下の端に表示するのが良いので、それに併せて表示位置を変更します。なお、fx-9860GII では小文字アルファベットや特殊記号 などが文字として使えるので、それを利用します。

If E=2:Then
Locate 11,7,"<EXE>:Enter"
Else If E=1:Then

Locate 20,7,"▶E"
IfEnd:IfEnd
E→Mat Z[1,1]
For 1→I To D
Locate X+I-1,Y,">"
Next
0→C:0→F:1→E



キー入力ループ

キーコードが異なる以外は、fx-5800P のプログラムと全く同じになります。fx-5800P と異なる部分を青文字で示します。同じ Casio Basic なので移植性は高いようです。

但し、fx-9860GII は、fx-5800P に比べると処理速度が格段に速く、キーリピートが頻発して使いにくいので、以下の赤文字の部分でキーリピートを抑制しています。

 ⇒ キーリピート抑制 - 逆引き Casio Basic

Do

While Getkey
WhileEnd


Do
Getkey→K
LpWhile K=0
Mat Z[1,K]→I

If (I≧1 And I≦9) Or K=71
Then
If C<D:Then
If F:Then
Z+EI÷10^(F)→Z
Isz F
Else
10Z+EI→Z
IfEnd
Locate X+C,Y,I
Isz C
IfEnd

Else If K=61
Then
If F=0:Then
Locate X+C,Y,"."
Isz C:Isz F
IfEnd

Else If K=44
Then
If C:Then
If F:Then
F-1→F
F⇒Int(10^(F-1)Z)÷10^(F-1)→Z
Else
Int(Z÷10)→Z
IfEnd
C-1→C
C=0⇒1→E
Locate X+C,Y,">"
IfEnd

Else If K=32 Or K=41
Then
If C=0:Then
Locate X,Y,"-"
-1→E:Isz C
IfEnd
IfEnd:IfEnd
IfEnd:IfEnd

LpWhile K≠
31




行列利用の後処理

fx-5800P と殆ど変わりません。fx-5800P では 配列変数の領域解放を行っているので、配列変数の代わりに使った行列も領域解放を忘れずに行います。これをやらないと、メモリが占有されたままになって、使えるメモリが減ってしまいますので要注意です。行列の領域解放には ClrMat コマンドを使います。変更部分を青文字で示します。


For 1→I To D-C
Locate X+C+I-1,Y," "
Next
Mat Z[1,1]→E
If E=2:Then
Locate 11,7,"      "
Else If E=1:Then
Locate 20,7,"  "
IfEnd:IfEnd
ClrMat
Return


これで、IN の移植が終わりました。ここで行った変更は、INPINPI にもそのまま適用できます。

なお、移植したプログラムのプログラム名は、fx-5800P 向けと同様に、それぞれ INPIINPIN としておきます。



プログラム

fx-9860GII (及び fx-CG20) は、プログラムを入力せずに、ファイルをダウンロードして電卓に転送するだけでプログラムを利用できます。プログラムファイルのダウンロードはプログラムライブラリからできます。
 ⇒ 入力ボックス 2.1G - fx-9860GII & fx-G20専用

IN Ver 2.1G for fx-9860GII

IN Ver2.1G for fx-9860GII 


INP Ver 2.1G for fx-9850GII

INP Ver2.1G for fx-9860GII 


INPI Ver 2.1G for fx-9860GII

INPI Ver2.1G for fx-9860GII 


処理能力の高い fx-9860GII では、入力速度の問題は全くありません。



さて、処理速度の遅い fx-5800P でも実用的な応答性で動作する入力ボックス2.0 /2.1 が出来たので、次々回 Chapter 8入力ボックス2.0 /2.1 (好みの方を使って下さい)を使って、初級者向けの簡単なプログラムを作ってみます。

次回 Chapter 7 では、Casio Basic(超)入門編 として、Casio プログラム電卓で作れる、最も簡単なプログラムの作り方を紹介します。この最も簡単に作れるプログラムを出発点として、Casio Basic を駆使した高品質なプログラムへの改造方法を Chapter 8 で行います。



つづく...

Casio Basic入門38 / 目次



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




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

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



関連記事

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

コメントの投稿

非公開コメント

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

やす (Krtyski)

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


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

プログラム電卓を実際に使って気づいたこと、自作プログラム、電卓での Casio Basic, C.Basic そして Casio Python プログラミングについて書いています。

なお管理人はカシオ計算機の関係者ではありません。いつでもどこでもプログラミングができるプログラム電卓が好きな1ユーザーです。


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR