矢印キーで項目選択(2) - 逆引き Casio Basic

逆引き Casio Basic
<目次>

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

更新 2015/04/29

[fx-5800P / fx-9860GII / fx-CG20]

矢印キーを使って項目を選択する。
矢印キーで項目選択(1) - 逆引き Casio Basic とは異なるロジックを紹介する。


関連記事: fx-5800P:矢印キーの活用


fx-5800P の矢印キー(下図の右上の4つのキー)
Keys-2 

fx-9860GII の矢印キー(下図右下の丸いキー)
TC10-9860GII 

fx-CG20 の矢印キー(下図右下の丸いキー)
fx-CG20_Func_Keys 


矢印キーのキーコード

キーfx-5800Pfx-9860GII / fx-CG20
[▲]8428
[▼]8537
[▶]8627
[◀]8338



項目選択

以下のように矢印キーの [▲] か [▼] を押して、⇒ マークを移動させ、4行目に ⇒マークのある項目番号を表示する。

menu_1 
menu_2 
menu_3 

[▼][▲] キーを押した時、⇒マークを移動させ、項目番号を表示する。

項目番号は1~3で、[▼] を押した時は⇒マークを下へ1つ移動する。項目3から移動するときは、項目1へ移動する。
[▲] を押した時は、逆方向、つまり⇒マークを上へ1つ移動する。項目1から移動する時は、項目3へ移動する。


⇒マークの移動は、
 ・移動する前に、⇒マークをスペースで上書きして消去: Locate コマンド利用
 ・移動先の位置で ⇒マークを表示: Locate コマンド利用

⇒マークの消去および表示位置は、項目番号 M を使って 1桁目、M 行目とすると
 ・消去: Locate 1,M," "
 ・表示: Locate 1,M,"⇒"

但し、⇒マークの消去時(移動前)の M と 表示時(移動後)の M の値は異なることに注意!

ここでは、移動前の M の値から、移動後の M の値を計算で求める。


⇒マークの移動前と移動後を表で示す;

[▼] キー を押したとき
移動前の項目番号 M移動後の項目番号 M求め方
31計算で求める
23
12

[▲] キー を押したとき
移動前の項目番号 M移動後の項目番号 M求め方
13計算で求める
21
32


なお、⇒マークが移動後の項目番号の表示は、 Locate 4,1,M で良い。



⇒マークの移動先の項目番号を計算する方法

⇒マークの移動先を計算で求める場合、[▼] を押した時は移動前の M を3で割った余りに1を加えた結果が移動先の M になる。同様に、[▲] を押した時は、移動前の M に対して M+1 を3で割った余りに1を加えた結果が、移動先の  M になる。

[▼] キー を押した時、計算で ⇒マークの移動先 M を求める方法
移動前の MM を3で割った余り左に1を加える移動先の M
3011
2233
1122

[▲] キー を押した時、計算で ⇒マークの移動先 M を求める方法
移動前の MM+1M+1 を3で割った余り左に1を加える移動先の M
12233
34122
23011

それぞれの計算結果⇒マークの移動先の M が一致していることが分かる。

ところで、整数 A を3で割った余りは、以下のようにして計算できる。

整数 A を3で割った余り = A - 3× Int(A÷3) 

これが、基本になる式だ。項目数が4個あれば、4で割った余りを基本に据えて、計算式を作れば良い。

・ ⇒マークの移動前の M を、そのまま使うか、1を加減いずれかして加工し、
・ それを項目数(今回は3)で割った時の余りを求め
・ これをそのまま使うか、1を加減いずれかして加工して、移動後の M を求める式を作る

項目数で割り算した時の余りの計算を中核とし、細かいところは微調整して、最終的に式を作れば良い。
今回のサンプルプログラムでは、上の表に示した計算方法で良く、式にすると以下のようになる。

 [▼] を押した後の M = M - 3×Int(M÷3) +1 = 1+M-3Int(M÷3)

 [▲] を押した後の M = (M+1) - 3×Int((M+1)÷3) +1 = 2+M-3Int((M+1)÷3)



ところで、fx-9860GII や fx-CG20 の Casio Basic には、余りを求める関数 Mod( ) が備わっていて、整数 A を3で割った余りは、

Mod(A,3)

で求められる。しかし fx-5800P には Mod( ) 関数が無いので、共通して使える上記の計算法を紹介した。


今回の方法は、「全ての整数 A は、それを整数 N で割った余りでグループ分けできる」と言う、理屈に基づいている。
例えば3で割った余りは、0、1、2 のいずれかで、全ての整数は、余り0のグループ、余り1のグループ、余り2のグループのどれかに必ず属する。そして、連続した整数は、これらのグループを順に循環する。

0123456789
余り0余り1余り2余り0余り1余り2余り0余り1余り2余り0



プログラムは以下のようになる。

[▼] [▲] で項目選択 (fx-5800P)
Locate 1,1,"⇒1:"
Locate 2,2,"2:"
Locate 2,3,"3:"
1→M

While 1

Do
Getkey→K
LpWhile K=0

Locate 1,M," "
If K=
85
Then
1+M-3Int(M÷3)→M
Else If K=
84
Then
2+M-3Int((M+1)÷3)→M
IfEnd:IfEnd
Locate 1,M,"⇒"
Locate 1,4,M


WhileEnd



[▼] [▲] で項目選択 (fx-9860GII / fx-CG20)
Locate 1,1,"⇒1:"
Locate 2,2,"2:"
Locate 2,3,"3:"
1→M

While 1

Do
Getkey→K
LpWhile K=0

Locate 1,M," "
If K=
37
Then
1+M-3Int(M÷3)→M
Else If K=
28
Then
2+M-3Int((M+1)÷3)→M
IfEnd:IfEnd
Locate 1,M,"⇒"
Locate 1,4,M


WhileEnd




上のプログラムは、処理がシンプルなので、矢印キーを軽く1回押しても、複数回押したようなキーリピートが発生する。そこで、茶色文字で示した2行(※)を追加してキーリピートを抑制する。

[▼] [▲] で項目選択 (fx-5800P)
Locate 1,1,"⇒1:"
Locate 2,2,"2:"
Locate 2,3,"3:"
1→M

While 1

While Getkey
  (※)
WhileEnd
     (※)
Do
Getkey→K
LpWhile K=0

Locate 1,M," "
If K=
85
Then
1+M-3Int(M÷3)→M
Else If K=
84
Then
2+M-3Int((M+1)÷3)→M
IfEnd:IfEnd
Locate 1,M,"⇒"
Locate 1,4,M


WhileEnd




[▼] [▲] で項目選択 (fx-9860GII / fx-Cg20)
Locate 1,1,"⇒1:"
Locate 2,2,"2:"
Locate 2,3,"3:"
1→M

While 1

While Getkey
  (※)
WhileEnd
     (※)
Do
Getkey→K
LpWhile K=0

Locate 1,M," "
If K=
37
Then
1+M-3Int(M÷3)→M
Else If K=
28
Then
2+M-3Int((M+1)÷3)→M
IfEnd:IfEnd
Locate 1,M,"⇒"
Locate 1,4,M


WhileEnd



この例では、処理がシンプルで高速動作するので、キーリピート抑制をした方が良い。但し fx-5800P は処理速度が遅いので、処理が複雑になれば実行が遅くなり、キーリピートを抑制しない方が良い場合が多い。一方、fx-9860GII は処理速度が速いので、キーリピート抑制はほぼ必要だろう。

 ⇒ キーリピート抑制 - 逆引き Casio Basic




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


人気ブログランキングへ


FC2ブログランキングへ



   



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

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



関連記事

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

コメントの投稿

非公開コメント

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

やす (Krtyski)

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


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

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

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

人気ブログランキングへ


FC2ブログランキングへ


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

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

この人とブロともになる

QRコード
QR