Casio Basic入門45

Casio Basic入門
<目次>

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

2015/04/12 修正


 4. CasioBasicを使ってみる(続き)

Chapter 8 - 初級

前回: Casio Basic入門44 を見る


◆ Chapter 8 の目標: Basic コマンドを使ってみる


前回は、e-Gadget オリジナルの入力ボックス利用の準備と使い方を紹介しました。

前々回作ったプログラム TC6 では、温度入力画面と温度出力画面が異なる画面構成となっています。
例えば、以下のような温度出力画面になっている時、

TC5 6 

ここで、摂氏温度を 20℃ にしたら、他の温度がどうなるかを見るためには、一旦以下のような入力画面で摂氏温度を入力します。

TC6 4 

入力を確定すると、以下の出力画面になります。

TC6 5 

これでもプログラムとして全く問題ないのですが、画面構成を変えずに、摂氏温度 20 と表示されている位置で入力できる入力ボックスを使えば、換算プログラムとして見やすく、使いやすくなると思います。



Chapter 8-3
換算プログラムに入力ボックスを実装する


今回は、温度換算プログラム TC6e-Gadget オリジナルの入力ボックスを導入します。先ずは、修正前の TC6 のソースコードを示します。

温度換算プログラム TC6
0→A
Lbl 0


Cls
"1:      °C" (スペース11個)
"2:      °F" (スペース11個)
"3:      K"  (スペース12個)
If A:Then
Locate 4,1,C
Locate 4,2,F
Locate 4,3,K
IfEnd
Locate 13,1,"°C"
Locate 13,2,"°F"
Locate 13,3," K"
"INPUT MENU N°?"

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

Cls
If M=1:Then
"°C"?C
C(9÷5)+32→F
C+273.15→K
1→A
Else If M=2
Then
"°F"?F
5(F-32)÷9→C
C+273.15→K
1→A
Else If M=3
Then
"K"?K
K-273.15→C
C(9÷5)+32→F
1→A
IfEnd:IfEnd
IfEnd

Goto 0



今回は、上の赤文字の部分を、変更してゆきます。

入力ボックスは、元々ある画面構成を崩さずに、指定した位置と範囲にキー入力させるものです。

入力ボックスを使うには、

[入力ボックスの設定]
[入力ボックスの呼び出し]
[入力ボックスから、入力値の受け取り]


の順に、コードを書いてゆきます。


TC6 2 

このような画面構成で使うための、入力ボックスの設定を下記のようにします。


1) 摂氏温度の入力
"C"?→C を以下に置き換える
置き換えるコード
  4→X:1→Y:9→D:2→E (入力ボックスの設定)
  Prog "IN"          (入力ボックスの呼び出し)
  Z→C
              (入力値の受け取り)

※ 入力ボックスの設定は、
  ・ 左端の桁(X座標): 4
  ・ 左端の行(Y座標): 1
  ・ 桁数:
  ・ インジケータ種別: 2 (
<EXE>:ENTER
※ 入力値の受け取りは、
  ・入力値格納変数: Z (この変数は固定)
  ・Z を摂氏温度格納変数 C に代入



2) 華氏温度の入力
"F"?→F を以下に置き換える
置き換えるコード
  4→X:2→Y:9→D:2→E (入力ボックスの設定)
  Prog "IN"         (入力ボックスの呼び出し)
  Z→F
              (入力値の受け取り)

※ 入力ボックスの設定は、
  ・ 左端の桁(X座標): 4
  ・ 左端の行(Y座標): 2
  ・ 桁数: 9
  ・ インジケータ種別: 2 (<EXE>:ENTER
※ 入力値の受け取りは、
  ・入力値格納変数: Z (この変数は固定)
  ・Z を華氏温度変数 F に代入


3) 絶対温度の入力
"K"?→K を以下に置き換える
置き換えるコード
  4→X:3→Y:9→D:2→E (入力ボックスの設定)
  Prog "IN"         (入力ボックスの呼び出し)
  Z→K
              (入力値の受け取り)

※ 入力ボックスの設定は、
  ・ 左端の桁(X座標): 4
  ・ 左端の行(Y座標): 3
  ・桁数: 9
  ・ インジケータ種別: 2 (<EXE>:ENTER
※ 入力値の受け取り
  ・入力値格納変数: Z (この変数は固定)
  ・Z を絶対温度変数 K に代入



入力ボックスでの入力値は、必ず変数 Z に格納される仕様です。従って、入力ボックスが終了した後は、直ちに Z の値を 適切な変数に代入しておく必要があります。

なお、例えば

Prog "IN"
Z→K


の2行は、Casio Basicでは、区切り文字 : を使って1行に書けるので、

Prog "IN":Z→K

と書いても良く、行数を節約することもできます。

以上、3カ所を書き換えてから、プログラムを実行してみます。


その前に、前回作ったプログラム TC6 のプログラム名を TC7 に変更しておきます。

[MODE] [5] (5:PROG)Program Menu を表示

TC7-ProgMenu 

先ず最初に、TC6 のファイル名を TC7 に変更し、その後で TC7 を変更することにします。

[3] (3:EDIT) で、Prog Edit 画面を表示し、TC6 にカーソルを合わせ、

TC7-ProgEdit 

[FUNCTION] キーで、File Commands 画面を開き、

TC7-FileCOmmands 

[2] (2:Rename) を選択すると、File Name? 画面が現れます。

TC7-FileName 

ここで、TC6TC7 に変更します。
この画面では、自動的にアルファベットモードに切り替わっているので、数字を入力するには、[ALPHA] キーを1回押してアルファベットモードを解除します。
ファイル名を変更したら、[EXE] キーで確定します。すると Prog Edit 画面に切り替わり、TC7 にカーソルが合っています。

TC7-ProgEdit_2 

ここで、[EXE] キーを押せば、プログラム編集画面に切り替わり、そこでプログラムの変更を行います。


では、上の3カ所を、実際に変更してください。


変更したプログラム TC7 を実行してみましょう。

[EXIT] キーを2回押すと、Program Menu 画面に戻ります。

Program Menu[2] (2:RUN) を選び、Prog List が表示されると、

TC7-ProgList 

TC7 にカーソルが合っているので、そのまま [EXE] キーで TC7 を起動します。


プログラムを起動すると、以下の表示になります。

TC7-1 

ここで、[1] キーを押すと、以下のようになります。

TC8-bug1 

本来以下のようにしたいので、明かにバグです。但し入力ボックスのバグではありません、念のため。

TC7-2 

バグの画面では、1行目の >>>>>>>>> と 4行目の <EXE>:ENTER が入力ボックスにより描画されています。本来は、他は入力ボックスが呼びだされる前の表示のままであることを期待していました。

上のプログラムソースで、If M=1:Then の直前で、Cls が実行されているのが、バグの原因です。逆に言えば、せっかく入力ボックスは必要なところだけ描画するのに、全部画面消去しては意味がありません。この Cls"C"?→C を使っていた時には必要でしたが、今は不要です。

そこで、プログラムを再度編修して、Cls を削除してから、プログラムを実行します。操作方法は上と同様です。

起動画面は、変わらず以下のようになります。

TC7-1 

ここで、[1] キーを押して入力ボックスを呼びだします。

TC8-bug2 

今度は、4行目の表示がおかしなことになっています。

入力ボックスは、できるだけ元の画面構成を壊さないことがコンセプトなので、必要なところしか描画しません。この例のように、インジケータ <EXE>:ENTER の部分のみ描画して、それ以外の表示は残しています。これは仕様通りの動作です。従って、4行目の INPUT と言う表示がそのまま残っています。

そこで、If M=1:Then を実行する前に、4行目の INPUT を消去すれば良いことが分かります。
そのためには、

If M=1:Then の前に Locate 1,4,"   " (スペース5個)を追加します。


では、この修正を行って、もう一度プログラムを起動して、動作確認します。

プログラムが起動したら、[1] キーを押してみます。
一瞬 INPUT の表示のみが消え、MENU N°? が残り、その後 <EXE>:ENTER が表示されます。チョット不自然な感じです。この状況は、是非実際に実行して確認してください。

この不自然な状況を改善するために、Locate 1,4,"   " (スペース5個) ではなくて、4行目全体を消去するように変更します。

つまり、

Locate 1,4,"        "
 (スペース16個)

とすると、4行目の書き換えが自然な感じになります。

従って、上の ClsLocate 1,4,"        " (スペース16個) に置き換えるのが最適な変更です。

fx-5800P は全体的に動作が遅いので、INPUT の消去と MENU N°?<EXE>:ENTER で上書きする順序がそのまま見えてしまうことから、今回のような不自然さを視認できてしまいます。4行目全体を消去することで、上書きの工程が見えなくなるのが、不自然さ解消の理由です。


以上の修正は、以下のように言い換えることだできます。

If M=1:Then

の上にある Cls による全画面消去4行目だけ1行消去に変更すうために、この Cls

Locate 1,4,"        " (スペース16個)

に置き換える。



ここまでの変更を反映させたプログラム TC7 を以下にまとめます。

温度換算プログラム TC7
0→A
Lbl 0


Cls
"1:      °C" (スペース11個)
"2:      °F" (スペース11個)
"3:      K"  (スペース12個)
If A:Then
Locate 4,1,C
Locate 4,2,F
Locate 4,3,K
IfEnd
Locate 13,1,"°C"
Locate 13,2,"°F"
Locate 13,3," K"
"INPUT MENU N°?"

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

Locate 1,4,"        " (スペース16個)
If M=1:Then
4→X:1→Y:9→D:2→E
Prog "IN":Z→C

C(9÷5)+32→F
C+273.15→K
1→A
Else If M=2
Then
4→X:2→Y:9→D:2→E
Prog "IN":Z→F

5(F-32)÷9→C
C+273.15→K
1→A
Else If M=3
Then
4→X:3→Y:9→D:2→E
Prog "IN":Z→K

K-273.15→C
C(9÷5)+32→F
1→A
IfEnd:IfEnd
IfEnd

Goto 0


(今回の変更部分を赤文字で示す。)


では、最後にもう一度動作確認しておきましょう。
修正が終わったら、プログラム編修画面が表示されている状態で [EXIT] キーを2回押して Program Menu に戻ります。

TC7-ProgMenu 

Program Menu[2] (2:RUN) を選び、Prog List が表示されると、

TC7-ProgList 

TC7 にカーソルが合っているので、そのまま [EXE] キーで TC7 を起動します。

TC7-1 

摂氏温度を入力するために、[1] を押すと、入力ボックスが現われ、

TC7-2 

ここで、20 を入力し、

TC7-3 

[EXE] で確定すると、

TC7-4 

入力した摂氏温度と共に、華氏温度と絶対温度の換算値が表示されます。

今度は、華氏温度を入力します。[2] を押すと、入力ボックスが現れ、

TC7-5 

華氏 -40 度 を調べるために、-40 を入力し、

TC7-6 

[EXE] で確定すると、

TC7-7 

入力した華氏温度に合わせて、換算された摂氏温度と絶対温度が表示されます。

画面構成が変わらず、数値のみが変わるので、色々な値を入力した時の換算値の変化を把握しやすいことが分かると思います。色々と触っているうちに、-40度は、摂氏でも華氏でも同じだということに気がつきました。



入力ボックスの作成については、Chapter 3 で紹介し、さらに実用的なキー応答速度にする方法を Chapter 6 で紹介しています。入力ボックスを作るのは初級レベルには難しいものの、使うのは難しくないと思います。如何でしょうか?

旧来の?(入力)命令は、入力待ちなどの多彩な機能を内蔵しているので、使うのは楽ですが、入力確定のワンアクションが必要で、好きな位置で入力を行えないなどの制限があります。今回は、入力ボックスを使っての制限を取り払うことができました。

さて、温度換算プログラムは、私も実際に使っています。但し、もう少し機能を追加しています。次回は、この機能追加を行って、温度換算プログラムを仕上げることにします。



つづく...

Casio Basic入門46 / 目次




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

人気ブログランキングへ


FC2ブログランキングへ



 


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

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



関連記事

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

コメントの投稿

非公開コメント

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

やす (Krtyski)

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


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

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

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

人気ブログランキングへ


FC2ブログランキングへ


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

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

この人とブロともになる

QRコード
QR