Casio Basic入門42

Casio Basic(超)入門
<目次>

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

2015/02/27
2015/06/30 修正

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


Chapter 7  - 初級

前回: Casio Basic入門41


◆ Chapter 7 の目標: ゼロからのプログラム作成と機能追加

前回は、摂氏温度、華氏温度、絶対温度の間で換算するプログラムのバグを修正しました。

プログラム TC4
0→A
"1:°C"
"2:°F"
"3: K"
"INPUT MENU N°"?→M

Cls
If M=1:Then
"°C"?C
(9÷5)C+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
(9÷5)C+32→F
1→A
IfEnd:IfEnd
IfEnd

Cls
"1:"
"2:"
"3:"
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"



プログラムの構成は、
 1.メニュー画面表示と入力待ち
 2.メニュー番号に応じた換算
 3.換算結果の表示

となっています。



Chapter 7-5
プログラムの効率化

前回作成した TC4 の起動時の画面は、以下です。

TC4-2 

換算結果の表示は、以下です。

TC4-3 


今回のテーマは、起動時の画面を 換算結果と同様な構成に変更します(下図)。

TC4-4 

初期表示を変更するだけですので、簡単な修正だと思います。
今回作るプログラム名を TC5 とします。修正する部分を赤文字で示します。

プログラム TC5
0→A
"1:      °C" (スペース11個)
"2:      °F" (スペース11個)
"3:      K" (スペース12個)
"INPUT MENU N°"?→M

If M=1:Then
"°C"?C
(9÷5)C+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
(9÷5)C+32→F
1→A
IfEnd:IfEnd
IfEnd

Cls
"1:"
"2:"
"3:"

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"




これで終わりなのですが、よく見るとプログラムの最初と最後に表示処理があって、C、F、K の各変数の表示以外は全く同じですね...と言うか全く同じにしました。赤文字の部分と青文字の部分は全く同じ表示結果になります。

同じ処理なら、どちらか1つだけにして、繰り返し処理で同じ処理を繰り返せば良いですね。

また、今の状態ですと、COMPモード(普通の電卓の画面)で [FILE] キーからプログラムリストを表示させて、そこからプログラムを実行すると、プログラム終了時に [EXE] キーを押せば、同じプログラムが再起動するので、繰り返し使えます。しかし、PROGモードから起動した時は、繰り返しません。

そこで、表示を処理を1箇所にまとめて、さらに意図的にプログラムを繰り返すようにしてみます。どちらを省略して、処理を繰り返すようにすれば良いのか?


プログラムの最初の赤文字の部分を省略すると、プログラム起動時に表示されないので、マズイです。そこで、プログラム最後の青文字の部分を省略して、プログラム最後からプログラム最初へ強制的にジャンプさせることにします。

強制的に、つまり無条件にジャンプさせるには、Goto Lbl を使います。

Goto コマンドは、Goto [記号] と書き、ジャンプ先には Lbl [記号] を書いておきます。[記号] には、0 ~ 9 の1桁の数字と A ~ Z の1桁のアルファベットが使えます。Goto は同じ記号の Lbl に無条件ジャンプします。例えば、Goto 0 とすると、Lbl 0 までジャンプします。
 ⇒ Casio Basic コマンドリファレンス - Lbl / Goto

そこで、プログラム TC5 を以下のように変更してみます。

プログラム TC5
Lbl 0

0→A

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°"?→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


プログラム全体を Lbl 0Goto 0 で挟みました。この繰り返しをループと言います。そして、プログラム最後の表示部分を全てプログラムの最初の表示部分に統合しました。最初と最後の部分の共通な処理を青文字で示しています。そして最後の部分から持ってきた If ~ IfEnd の部分Cls を追加しています(赤文字で示しています)。

これを実行してみます。ちょっとマズイです。換算結果の数値が表示されません。原因は何でしょうか?

換算結果の数値を表示するのは、以下の部分;

If A:Then
Locate 4,1,C
Locate 4,2,F
Locate 4,3,K
IfEnd


Lbl 0 にジャンプしてきて、先ず最初に 0→A が実行されます。すると、上の If 文の中が実行されずに、丸ごとスキップしてしまいますね。これが原因です。

変数 A に持たせた働きは何だったでしょうか?正しく結果の数値を表示させるために、一度でも換算計算を行ったかどうかを示すフラグでしたね。プログラム起動直後は、計算結果を格納する変数 C、F、K にはどのような値が入っているかどうか、全く保証がありません。なので、プログラム起動時に フラグ A0 を入れておいたのですね。

思い出せない場合は、前回の Casio Basic入門41 をもう一度読んでください。

ところが、Lbl 0Goto 0 で作ったループが繰り返すたびに、フラグ A0 で初期化されてしまいます。上の If 文は、A1、 つまり 0 以外の時に、その中身が実行されます。だから、結果の値が表示されないわけです。

0→A は、本プログラムが起動した時だけ実行させれば良いので、0→A  を ループの前、つまり Lbl 0 の上へ移動させます。

 プログラム TC5 を以下のように変更します。

プログラム TC5
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°"?→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


これを実行してみてください。今度は正しく動作すると思います。



これで、プログラムコードが効率的に記述できました。無駄な処理を減らすと、プログラムの実行速度が向上するメリットがあります。

[2015/03/01 追記・修正]
これまでのプログラム作成では、以下の命令やコマンドを使いました。

1) →(代入)命令
2) " "(表示)命令
3) ?(入力)命令
4) Cls コマンド (表示消去コマンド)
5) If 文 (条件分岐)
6) Locate コマンド (表示コマンド)


このうち、1) から 3) は、古くからある Casio のプログラム関数電卓に搭載されていたCasio 独自の命令で、Basic とは無縁のものです。一方、4) から 6) は、Basic のコマンドで、パソコンなどで使う Basic と共通の一般的なコマンドです。

2006年に発売された fx-5800P 以降の機種では、Basic コマンドのみでプログラムを作ることができるようになっていて、旧来の命令を殆ど全てBasic コマンドで置き換えられます。この新しいカシオ機搭載の Basic を「新世代 Casio Basic」 と呼んでいます。

※ 一般の Basic では、変数A に10 を代入する時は、A=10 と表記します。Casio Basic では 10→A と表記します。実はこの部分のみが例外的に一般の Baisc と異なります。ただし、むしろこの表記の方が代入の意味が分かりやすいとも言えます。他のコマンドは一般のBasicとほぼ同じです。

Casio のカスタマーサポートの方から、新世代 Casio Basic にも旧来の命令を敢えて残している理由を伺いました。以前から Casio のプログラム関数電卓を愛用しているユーザーの利便性を考えた結果、旧来の命令を敢えて残しているとのことです。そして、ただ残すのではなくBasic コマンドとの整合性を取るための内部仕様の見直し・実装を行っているとのことです。

Chapter 7 では、敢えて旧来の命令を最大限活用し、Basic コマンドをあまり使わなくても、実用的なプログラムを作れることを紹介してきました。古い Casio のプログラム関数電卓でプログラムを作ったことの有る方でも、昔覚えた方法を使えば fx-5800P でプログラムが作れるわけです。

視点を変えれば、fx-5800P やそれ以降に登場したプログラム電卓には、新世代 Casio Basic が搭載されており、これを活かしたプログラミングをしなければ、大変もったいないと言えます。

-----

新世代 Casio Basic と古いBasic風言語

Casio のプログラム電卓に搭載された言語の変遷を調べてみると、Basic のコマンドが搭載されるようになった当初は、Basic として最低限必要なコマンドすら揃っておらず、Basic 風ではあるものの Casio 電卓特有なプログラミング言語と言わざるを得ないものでした。この時の経験や記憶を持っていらっしゃる方はまだ多くいらっしゃるようです。

カシオ機搭載の言語は着実に進化しています。

その後、徐々に Baisc コマンドが拡充され、2006年発売の CFX-9580CG PLUS に搭載されたプログラミング言語で、ようやく Basic として最低限必要なコマンド類が一通り揃いました。言い買えれば Basic のみでプログラムを作れるようになったのです。但し、この Basic は、本格的なプログラムを作るためには、ちょっと不便なものでした。

そして、同じ年に発売された fx-5800P には、構造化プログラミングが可能で本格的なプログラムを作れる新世代 Casio Basic が搭載されました。この新世代 Casio Basic でプログラミングを覚えれば、その殆どが パソコンなどでの一般的な Baisc プログラミングに活かせます(上記の代入命令が例外ですが...)。このような新世代 Casio Basic をあまりご存じ無い方も多くいらっしゃるようです。

-----

Casio Basic 入門では、当初から 新世代 Casio Basic の Basic としての言語仕様を活かした Basic プログラミングの入門を意識して連載してきています。Chapter 7 では、敢えて 旧来の命令の実力を調べ、実際のその能力を活かした実用プログラムを作ってみました。旧来の命令が、結構使えることが改めて分かりました。

Chapter 7 はこれで終わりです。次回からは、新たに Chapter 8 として、今回作った温度換算プログラムを出発点にして、Basic コマンドを活かしたプログラミングを紹介してゆく予定です。



つづく...

Casio Basic入門43 / 目次




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

人気ブログランキングへ


FC2ブログランキングへ
 


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

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



関連記事

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

コメントの投稿

非公開コメント

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

やす (Krtyski)

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


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

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

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

人気ブログランキングへ


FC2ブログランキングへ


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

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

この人とブロともになる

QRコード
QR