テンキーでメニュー選択させたい - 逆引き Casio Basic

逆引き Casio Basic
<目次>

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

修正:2016/10/12
[fx-5800P / fx-9860GII / fx-CG20]

テンキーでメニュー選択するプログラムを作りたい。



画面に、

1:ONE      2:TWO
3:THREE


と表示し、テンキー [1][2] か [3] を押して、それぞれに対応した異なる処理を行うサンプルプログラムを作る。

ここでは、汎用性のある fx-5800P 用のコードを示す。fx-9860GII や fx-CG20 に対応するには、後述するように3カ所のキーコードの記述を変更するだけで良い。

サンプルプログラムの動作仕様;
  • [1] を押せば 3行目に HIT [1] と表示
  • [2] を押せば 3行目に HIT [2] と表示
  • [3] を押せば 3行目に HIT [3] と表示
  • 3行目の表示と同時に、4行目右端にガイド表示 <EXE> を示し、[EXE] で再入力できることを示す
  • [1][3] 以外のキーを押しても誤動作しない
サンプルコード
Locate 1,1,"1:ONE"
Locate 9,1,"2:TWO"
Locate 1,2,"3:THREE"

While 1

0→M
Do
Getkey→K
LpWhile K=0
K=35⇒1→M
K=36⇒2→M
K=37⇒3→M

If M=1
Then Locate 1,3,"HIT [1]"
Else If M=2
Then Locate 1,3,"HIT [2]"
Else If M=3
Then Locate 1,3,"HIT [3]"
IfEnd:IfEnd
IfEnd


If M
Then Locate 12,4,"<EXE>"◢
Locate 1,3,"    " (スペース7個)
Locate 12,4,"   " (スペース5個)
IfEnd

WhileEnd



定石として使えるのは、赤文字のブロック青文字のブロックだ。


サンプルプログラムをブロック構造で示すと、

 [初期表示]

 While 1

   [メニュー選択]

   [選択したメニュー番号に応じた分岐処理]


   [後処理]

 WhileEnd


このように構造化され、初期表示を行ったのち、While 1 / WhileEnd で構成された無限ループ内で、メニュー選択→分岐処理→後処理 が繰り返される。

==========

メニュー選択のためのキー入力は、赤文字の部分が定石として使える。

Do
Getkey→K
LpWhile K=0


は、何もキー入力が無い時はこのループをグルグルまわっていて、何かキーが押された時に押されたキーのキーコードを変数 K に格納してからこのループを抜けて、次の処理へ進む。この部分は、テンキー以外のキー入力にも対応できる。

このループに続く以下の部分、

K=35⇒1→M
K=36⇒2→M
K=37⇒3→M


ここで、押されたキーのキーコードに応じて、メニュー変数 M にメニュー番号を格納する。

実は、赤文字の部分の冒頭にある 0→M が極めて重要だ。今回はテンキー [1][3]、つまりメニュー番号が 1 ~ 3 のみで、それ以外のキーを押しても、誤動作しないようにしたい。そこで、操作上メニュー番号が 0 になることが無いので、最初にメニュー変数 M に 0 を入れておく。そしてメニュー選択により M が 1、2、3 のいずれかになる。つまり、変数 M は、必ず 0 ~ 3 のいずれかの値になって、絶対に他の値にならないことを保証している。そのため、0→M は誤動作防止のために極め重要になる。

==========

次に、得られらたメニュー番号に応じて、分岐処理を行う青文字の部分は、上のメニュー選択部と対になる重要な骨組みだ。
If / Else / IfEnd を使っている。 詳しくは、Casio Basic コマンドリファレンス: If 文 を参照。

メニュー変数 M が 1, 2, 3 の時に分岐処理を行っている。

If M=1
Then Locate 1,3,"HIT [1]"
Else If M=2
Then Locate 1,3,"HIT [2]"
Else If M=3
Then Locate 1,3,"HIT [3]"
IfEnd:IfEnd
IfEnd


この分岐処理を行うブロックで、If 文での分岐にキーコードを使わす、一旦代入したメニュー変数 M を使うには理由がある。
  • 理由1: 上のfx-5800P 用のコードを fx-9860GII へ移植する場合、赤文字部のメニュー選択部の一部を変更するだけで、青文字の分岐処理のブロックを変更する必要が無い。
  • 理由2: テンキー選択を多い場合や、テンキー以外のキー入力に対応して、分岐処理を増えた場合は、メニュー変数で整理する方がプログラムの可読性が増して、分かりやすくバグが入り込みにくい。

fx-9860GII / fx-CG20 への対応


上のコードを fx-9860GII や fx-CG20 向けに変更する場合は、赤文字部を以下のように変更すれば良い。

0→M
Do
Getkey→K
LpWhile K=0
K=72⇒1→M
K=62⇒2→M
K=52⇒3→M


変更箇所は、赤文字のキーコードのみにな、プログラムの他の部分を変更する必要がない。

==========

青文字のブロックに続く後処理は、

If M
Then Locate 12,4,"<EXE>"◢
Locate 1,3,"    " (スペース7個)
Locate 12,4,"   " (スペース5個)
IfEnd


となっている。

[EXE] で元に戻るための外と表示 <EXE> を行って、 命令で一旦停止。[EXE] で一旦停止を解除したら、全ての表示をスペースで上書き消去している。なお、これら後処理は、有効なメニュー番号が選択された時のみ実行する。
有効なメニュー番号は 0  以外の整数なので、M が 0 でない時のみ実行するために、If M / IfEnd の中に記述している。ここでも、最初に変数 M を 0 で初期化していることが活きてくる。

If [分岐条件] / IfEnd の書式で、[分岐条件] は、それが 0 以外なら If 内の処理(If と IfEnd の間の処理)へ分岐する。0 なら処理を行わず、次へ進む。従って、If M という記述が可能になる。

詳しくは、Casio Basic コマンドリファレンス: If 文 参照。





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

人気ブログランキングへ


FC2ブログランキングへ



   



keywords: CasioBasic、プログラミング入門プログラム関数電卓

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



関連記事

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

コメントの投稿

非公開コメント

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

やす (Krtyski)

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


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

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

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

人気ブログランキングへ


FC2ブログランキングへ


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

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

この人とブロともになる

QRコード
QR