Casio Basic入門36
Casio Basic入門
誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します
修正: 2015/01/25
修正: 2015/01/25
4. CasioBasicを使ってみる(続き)
Chapter 6
前回: Casio Basic入門35 を見る
◆ Chapter 6 の目標: プログラムを速くする
入力ボックスの改良と拡張
前回は、IN Ver 2.0 を作り、入力ボックス 2.0 が一通り揃いました。
本ブログの読者の方から、応答性が大幅に向上した一方で、「ちょっと油断してキーを離すのが遅れると、数字がリピートしてしまう」というご報告を頂きました。
応答速度を測定するためにキーを押しっぱなしにして測定しました。つまりキーを長押しすれば数字がリピートするのは、プログラムの仕様としてそのように作ったので、仕様通りの動作と言えます。
電卓としてのハードウェア仕様は、長押しで数字はリピートしません。PCでは一定時間を超えて長押しするとキーリピートが発生する仕様になっています。
入力ボックス 2.0 がキーリピートするものの、チャッチャとキーを押せばそれほど問題なく入力できるのは、たまたま fx-5800P の動作が遅いことが理由です。実は、このプログラムを 動作の速い高機能グラフ関数電卓 fx-9860GII に移植すると、チャッチャとキーを押してもキーリピートが頻発して、とても使いにくくなります。
つまり、fx-5800P 用としては結果オーライですが、プログラムとしては不完全と言うこともできます。もし、応答性に影響を与えずにキーリピートを防止できれば、その方が良いプログラムです。
そこで、今回はキーリピート対策を施した 入力ボックス 2.1 を作ります。
Chapter6-5
キーリピートが発生する原因が分かれば、対処方法も分かります。
キー入力ループ内で、以下のようにキーコードを取得しています。
Do
Do
Getkey→K
LpWhile K=0
・・・・・
LpWhile K≠47
外側の Do ループの中に、もう一つの Do ループが入っています。
[EXE] キーで入力確定を行わない限り([AC]キーは除く)、この外側の Do ~ LpWhile K≠47 ループの中で処理が繰り返されます。
何かキーを押すと、内側の Do ~ LpWhile K=0 ループでキーコードを取得してスグにループを抜けます。もし、キーを押しっぱなしにすると、内側のループはキーコード取得後1回で通り抜け、押されたキーを出力する処理が繰り返し続くので (外側のループの働きによる)、同じキーがリピートして表示されます。これが、キーリピートの原因です。
ならば、キーリピートを抑制するために、内側の Do ループに入る前に、キーを離さないと先に進めない(つまり、キー取得処理を行う Do ループに入れない)ようなゲート(関所)を設ければ良いわけです。
そこで、内側の Do ループの上に、以下の2行を追加してみます。この2行でループになってます。
While Getkey
WhileEnd
Getkey コマンドは、キーが離されている時は 0 を返し、キーが押されていると 0 以外のキーコードを返します。この2行のプログラムは、Getkey が実行される時に何かキーが押されていると0 以外を返すので「真」となりループを継続します。Getkey が実行される時キーが離されていると、0 を返すので「偽」となり、ループを終了します。すると次へ進めます。つまり、キーを離さないと先に進めないゲートの役割を果たします。
ここで、While [ループ継続条件] の書式では、[ループ継続条件] が 「真」か「偽」かで判定します。戻り値のあるコマンド Getkey をこのような記法で使うと、戻り値が 0 ならば「偽」、0 以外なら「真」と判定されることを思い出して下さい。
⇒ Casio Basic コマンドリファレンス - While 文
Do
While Getkey
WhileEnd
Do
Getkey→K
LpWhile K=0
・・・・・
LpWhile K≠47
この僅か2行のコードで応答速度にどの程度影響があるかは、実際にプログラムを走らせて確認します。
キーリピート抑制機能を盛り込んだものを入力ボックス 2.1 とします。プログラムをまとめて以下に掲載します。
さて、INBOX TEST から呼び出して使ってみると、INPI 2.1 はキーリピートを抑制しても、応答性が悪くなる感覚が殆どないと思います。一方、INP 2.1 と IN 2.1 はどうしても応答性が悪くなるようです。
そこで、私は INPI 2.1 、INP 2.0 、IN 2.0 の組み合わせで使うことにします。ゆっくりとキー入力する方なら全て 2.1 でも良いかも知れません。好みに合わせてうまく使い分けて下さい。
キーリピート抑制機能付きの 入力ボックス 2.1 :INPI Ver 2.1、INP Ver 2.1、IN Ver 2.1 は以下のようになります。
INPI Ver 2.1
INP Ver 2.1
IN Ver 2.1
入力ボックス2.1 は便利なので、次回は fx-9860GII への移植を行います。私には入力ボックスは不可欠なサブルーチンになっています。
つづく...
⇒ Casio Basic入門37 / 目次
応援クリックをお願いします。励みになるので...
keywords: fx-5800P、CasioBasic、入力ボックス, プログラミング入門、プログラム関数電卓
リンク集 | ブログ内マップ
- 関連記事
-
- Casio Basic入門32 2015/01/25
- Casio Basic入門37 2015/01/23
- Casio Basic入門36 2015/01/15
- Casio Basic入門35 2015/01/09
- Casio Basic入門10 2015/01/07