Casio Basic入門36

Casio Basic入門
<目次>

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

修正: 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] キーで入力確定を行う前は、この外側の Do ~ LpWhile K≠47 ループがグルグル回り続けます。

何かキーを押すと、内側の Do ~ LpWhile K=0 ループでキーコードを取得します。このループは何かキーが押されるまで回り続け、何かキーが押されたらキーコードを取得してループが終了します。もし、キーを押しっぱなしにすると、内側の Do ループが再び同じキーのキーコードを取得するので、同じキーがリピートして表示されます。これが、キーリピートの原因です。

従って、キーリピートを抑制するには、内側の 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.1IN 2.1 はどうしても応答性が悪くなるようです。

そこで、私は INPI 2.1INP 2.0IN 2.0 の組み合わせで使うことにします。ゆっくりとキー入力する方なら全て 2.1 でも良いかも知れません。好みに合わせてうまく使い分けて下さい。



キーリピート抑制機能付きの 入力ボックス 2.1INPI Ver 2.1INP Ver 2.1IN Ver 2.1 は以下のようになります。

INPI Ver 2.1

INPI Ver2.1 for fx-5800P 


INP Ver 2.1

INP Ver 2.1 for fx-5800P 


IN Ver 2.1

IN Ver 2.1 for fx-5800P 



入力ボックス2.1 は便利なので、次回は fx-9860GII への移植を行います。私には入力ボックスは不可欠なサブルーチンになっています。



つづく...

Casio Basic入門37 / 目次




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

人気ブログランキングへ


FC2ブログランキングへ



カシオプログラム関数電卓 FX-5800P-N カシオプログラム関数電卓 FX-5800P-N
(2006/09/22)
CASIO(カシオ)

商品詳細を見る



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

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



関連記事

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

コメントの投稿

非公開コメント

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

やす (Krtyski)

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


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

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

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

人気ブログランキングへ


FC2ブログランキングへ


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

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

この人とブロともになる

QRコード
QR