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 に移植します。



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 / 目次




応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ

 


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

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



関連記事

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

コメントの投稿

非公開コメント

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

やす (Krtyski)

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


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

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

おもしろい・役に立つならクリックしてください。励みになります。

人気ブログランキングへ


FC2ブログランキングへ


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

RSSリンクの表示
最新トラックバック
ブロとも申請フォーム

この人とブロともになる

QRコード
QR