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

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] キーで入力確定を行わない限り([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.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 / 目次




応援クリックをお願いします。励みになるので...
にほんブログ村 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