Casio Basic の勧め

.
2017年01月04日 改訂

Casio Basic は、最近の カシオ 製プログラム電卓(プログラム関数電卓やグラフ関数電卓)に搭載されているプログラミング言語で、意外に高機能なので実用的なプログラムが作れます。科学技術計算目的以外にも実用的なプログラムを作れます。私自身、技術計算以外のために作った自作プログラムをほぼ毎日使い、技術計算プログラムはたまに使う程度です。

カシオのプログラム電卓で新世代 Casio Basic を勧めたくなるには、幾つかの理由があります。

新世代 Casio Basic でのプログラミングは敷居が低いこと、初心者にも覚えやすいこと、プログラミング経験者はスグに使えること、Casio Basic が意外に使えることなどが、その理由に挙げられます。


目 次
  1. プログラミングは特殊技能なのか?
  2. 新世代 Casio Basic とは?
  3. Casio Basic 搭載機種の選定
  4. Casio Basic の習得は容易
  5. fx-5800P の勧め
  6. Casio Basic を勧める背景
  7. fx-5800P の利点と弱点
  8. Casio Basic の使いこなし


プログラミングは特殊技能なのか?

プログラミングは、理系や文系、男女差、年齢や経験などとは無関係に習得可能なことはよく知られており、IT企業ではごく普通に文系出身のSEやプログラマが活躍しています。特に Casio Basic は覚えることが少なく、簡単なので、誰でも電卓プログラミングが出来ると思います。

参考:
<トップへ戻る>

新世代 Casio Basic とは?

実際にCasio Basic を使いながら、取扱説明書には記載のない機能や仕様が分かってくると、以下に挙げる4機種に搭載されている Casio Basic が意外によくできていることが明かになってきました。

1) fx-CG20      (カラーグラフ関数電卓)
2) fx-FD10 pro   (プログラム関数電卓 - 土木測量向け)

3) fx-9860GII   (グラフ関数電卓)
4) fx-9860G   (OS 2.0 以降、グラフ関数電卓) 
5) fx-5800P      (プログラム関数電卓)


これらに搭載されている言語は、私は 新世代 Casio Basic と呼び、それ以前の言語と区別しています。

新世代 Casio Basic は、簡単に言えば、Getkey コマンドと 柔軟な Locate コマンドがあり、条件判定は基本的に 0 で偽、0 以外で真で、その上で構造化プログラミングの考え方でプログラミング出来きます。
  • Getkey[AC] キー以外の全てのキーに異なるキーコードが割り当てられ、押したキーをリアルタイムで判定できるコマンド。
  • Locate: パラメータに、即値以外に変数、式、コマンドを指定して位置を柔軟に指定して出力するコマンド。
  • 条件判定を 0 で偽、0 以外で真とできること
  • 構造化プログラミングGoto に頼らずにプログラムの制御を記述し、可読性の高いブロック構造作れるプログラミングの方法。
プログラミング経験者(特にPCでのプログラミング経験者)なら、新世代 Casio Basic は違和感なく使えます。

旧来の命令
新世代 Casio Basic には、以前のプログラム電卓に搭載されていた旧来の命令も搭載されています。カシオによれは従来のユーザーの利便性を考慮して旧来の命令を残しているとのことです。最近、この旧来の命令を使いこなして、どの程度のプログラムを作れるのか色々と試して、それを反映させたエントリーを Casio Basic入門38から連載を始めています。使いこなしを検討してみると、確かに一定レベルの実用プログラムを比較的楽に作れることが分かります。

旧来の命令は表記はシンプルでも、多彩な機能を持っています。プログラミング経験の少ない人でも簡単に使えて便利です。しかし、旧来の命令が機能が多彩であることが、逆にプログラミングの自由度を減らしているとも言えます。この旧来の命令では実現できないプログラムを作るには、Casio Basic の構造化Basic を積極的に使えばよいのです。旧来の多彩な命令と Basic コマンドを併せて使いこなすことで、自由度が高く、実用的なプログラミングが可能になります。

<トップへ戻る>

Casio Basic 搭載機種の選定

上記製品の中でも、特に fx-5800P は最も安価であり、さらにハードウェアとソフトウェアのバランスが良いため、実用に最も適していると思うので、私は愛用しています。fx-9860GII も Casio Basic プログラミングを楽しむために使っていますが、日常には実用性の高い fx-5800P を多用しています。fx-CG20 も入手してみると fx-9860GII の Casio Basicの移植性が高いことは確認済みです (グラフィックスの一部コマンドやカラー対応の部分に手を入れる必要があります)。

fx-CG20、fx-9860GII、fx-5800P について簡単にまとめています;

- fx-CG20: fx-CG20 の概要

- fx-9860GII: fx-9860GII USB POWER GRAPHIC 2

- fx-5800P: 本記事は主に fx-5800Pの勧め になっています

- Casio Basic - 機種間の互換性

- Casio プログラム電卓の価格動向


fx-CG20 と fx-9860GII は、グラフィックス機能があり、高機能、高価格の製品(実売9千円台~2.5万円程度)で、これらの中で比較的安価な fx-9860GII は、処理速度が速い点が魅力です。さらに、fx-9860GII は Casio SDK (Casio 純正の開発環境)を使えば、パソコン上で C言語を使ってプログラムを作り、それを電卓に転送して Add-in プログラムとして利用できます。C言語で作った Add-in プログラムは、Casio Basicに比べてかなり高速動作し、Casio Basic では無理な処理も可能です。

fx-5800P
グラフィックス機能の無い fx-5800Pは、処理速度が相対的に低いものの、価格が圧倒的に安く(実売6~8千円程度)、関数電卓としてもプログラム電卓としてもバランスが取れた使いやすい機種です。

fx-5800P には プログラムリストを 通常の電卓モード (Comp モード) で呼び出して使えますが、fx-9860GII ではプログラムリストを表示するには一旦プログラムモードに入る必要があります。Casio Basicで作ったプログラムを日常的に使う場合は fx-5800P の方が利便性が高いことは、使ってみて分かります。fx-5800P と fx-9860GII を実際に使い比べてみると、日常使いには、バランスの良い fx-5800P が優れていると思います。

fx-9860GII
但し、プログラムの高速性やグラフィックス処理を重要と考えるなら、fx-9860GII も選択肢に入れるべきです。もし使いたい Add-in プログラムがあれば fx-9860GII が正しい選択肢となります。
例えば、当ブログで紹介している C.Basic (Casio Basic の上位互換、開発中) は fx-9860GII のアドインとして提供しているので、これが使いたいなら fx-9860GII がお勧めです。

fx-FD10 Pro
fx-FD10 Pro は、屋外使用を想定した堅牢な作りが特徴です。私自身が実機を持っていないので、取扱説明書から得られる内容から判断すると、上記の fx-5800P の使いやすさを備えていますが、実売1万6千円以上するが、Add-in プログラムが使えず Casio Basic のみが使えるので、fx-5800P と fx-9860GII の間にある機種だと感じます。従って、Casio Basic を使うのであれば、敢えて fx-FD10 Pro を選ぶよりも fx-5800P にするか、Casio Basic の上位互換の C.Basic が使える fx-9860GII を選択すべきだと思います。

fx-CG20 / CG10
fx-CG20 / CG10 は、カラー液晶が特徴で、内蔵の関数計算も高速化されています。但し、主に液晶への表示やメモリアクセス処理速度が fx-9860GII よりも遅く、Casio Basic プログラムの処理速度は fx-9860GII よりも遅くなります。さらに、オーバークロック・ツールを用いると fx-9860GII が fx-CG20 / CG10 の5倍以上高速になります。高精細カラー液晶の表示が必要だと考えるなら fx-CG20 / CG10 が良いのですが、それ以外の私なりの評価は、総合的に fx-9860GII の方が優れていると思います。

<トップへ戻る>

Casio Basic の習得は容易

過去にPCでプログラミング経験があれば、Casio Basic はスグに使えると思います。私自身も過去にPCでのプログラミング経験があり、fx-5800P を買ってすぐにプログラミングができました。但し細かなところは取扱説明書に書かれていないので、自分で色々と調べました。その結果が当ブログです。

プログラミング経験があれは、当ブログの「Casio Basic コマンドリファレンス」、「Casio Basic入門」、「逆引き Casio Basic」を参考にすれば、すぐに使いこなせると思います。[2017/01/03 追記修正]

これからプログラミングをやってみようと思われる方の場合、新世代 Casio Basic を覚えることはPCで使う Basic 習得に有効だと思います。上で紹介した機種の中で特に fx-5800P は、ハードウェア的には最も非力ですが、最も安価で入手しやすく、さらに使いやすいので、学習用に向いています。僭越ながら、当ブログの Casio Basic 入門をほぼ理解できれば、Visual Basic の習得の敷居はかなり下がると思います。

Casio Basic のコマンドは、殆どが他のBasic と同じなので、覚えたことが将来無駄になりません。さらに必要最小限度の機能まで絞り込まれているので、覚えることが少いことが初心者向きの理由です。この点をもう少し説明してみます。

一般にプログラムを作る際、実現したい機能には無数の方法があります。無数の方法から適切な方法を選び出すことが、プログラミングの主な作業になるのですが、それは初級者には逆に習得の妨げとなります。Casio Basic は機能が少ないので、選択肢が限られます。従って、プログラミングの方法の選択で悩むことなく、必要なことを覚えやすいと言えます。色々なプログラムを作れば、効果的な反復学習になるわけです。

またコマンドが絞り込まれているので、アルゴリズムの工夫や計算式の応用で対応することになり、これも学習に向いていると考える理由の1つです。

機能が限定されていても、実用的なプログラムやゲームが作れることは、当ブログで紹介しています。実際にこれらのプログラムを作りながら、新世代 Casio Basic の良さに気付いたのです。実際に使ってみないと分からないものです。

<トップへ戻る>

fx-5800P の勧め

電卓でプログラミングを始めてみようと思う方には、私は fx-5800P を勧めます。

1.関数電卓としての fx-5800P
fx-5800Pは、関数電卓として見た場合、十分な機能を実現しています。プログラム機能の無い fx-995ES とほぼ同等の機能と操作性が有り、fx-5800P は高機能関数電卓と位置づけられます。カシオの関数電卓は電源を切ると、計算履歴もメモリの内容も全て消去されます。一方 fx-5800P は電源を切っても全てメモリに保存されたままです。これが関数電卓として fx-5800P を推奨する最大の理由です。

2.携帯型コンピュータとしての fx-5800P
携帯型コンピュータとして見た場合、手軽に実用プログラムを作れるので、パソコンでは真似のできない圧倒的な携帯性が最大の利点です。搭載されている Casio Basic は、ちょっとしたアクションゲームも作れます。実際に、fx-5800P のハードウェアの能力と Casio Basic の機能を確かめる目的で、「もぐら叩き」を作ってみました。結構遊べることが分ったので、冒頭で 『意外に良くできている』 と書きました。

3.Casio Basic
fx-5800Pに搭載されているCasio Basicは、グラフ関数電卓 fx-9860GII や fx-CG20 さらに 土木測量向けプログラム電卓 fx-FD10 pro に搭載されている Casio Basic と比べて、グラフィック機能や文字列処理、外部との通信機能を使うコマンドが省略されていますが、それ以外の機能は同じです。そして、fx-5800Pで作った Caso Basic プログラムは、上位機種への移植性が高いことは確認済みです。

<トップへ戻る>

Casio Basic を勧める背景

新世代 Casio Basic 搭載のプログラム電卓を勧めるには、いくつかの背景があります。

1. パソコンと同様な機能を求めない
パソコンでできることはパソコンでやれば良い。それをわざわざ電卓でプログラムを作る必要はありません。


2. サッと取り出し、パッと使える
必要な場所で、必要なタイミングで、上着やかばんのポケットからサッと出して、スグ使うのはパソコンでは絶対に出来ません。プログラムを作るだけで自分専用のオリジナル関数電卓が手に入ります。今や電卓は誰でも1台は持っている文房具です。プログラムを書くことで自分専用の機能にカスタマイズした文房具が手に入ります。


3. プログラムを簡単に作れる
ゲーム繰返し技術計算金融計算その他お金の計算単位や年月の換算時差計算 など作っておくと便利なプログラムが多くあります。自分に必要なプログラムを予め作っておくと、プログラム電卓のメリットは絶大です。

関数電卓の各種関数キーが[SHIFT]キーなどと併用しないと使えない(裏機能などと言われます)のは、2ステップキータッチが必要で効率が悪いとの評価基準があります(関数電卓マニアの部屋)。学生への関数電卓選びのガイダンスとしては、教育的配慮を斟酌すれば、私も100%同意するところです。しかし、この主張を金科玉条の如く受け売りする気になれないのも正直なところです。

実際に何度もキーを叩いて繰り返し計算を行う際には、プログラムを作ったり、数式記憶機能を使えば良いわけです。

道具は相応しい目的で正しく使えば良い。幸なことにfxー5800Pは、今や新品でも6000円程度で買えるので、2000円から3000円で関数電卓を買う変わりに、プログラム関数電卓を買うメリットを十分に感じる人は非常に多く居るはずです。ここでは、簡単なプログラミング・スキルがあれば良く、幸いなことにBasicを搭載しています。


4. 上位機へのプログラム互換性
高価で高機能なグラフ関数電卓や土木測量専業電卓への移植性が高いことは重要です。

fx-5800Pのハードウェア仕様に依存した部分を除けば、互換性、移植性が高いので、1からプログラムを作り直す手間はありません。上位機種を入手して、そこへfx-5800P のプログラムを容易に移植できるのは、Casio Basicの大きな利点です。

なお、カシオのグラフ電卓には、C、Lua、Python といった言語の開発環境(公式や非公式を含む)もあり、Casio Basic のプログラムを移植せずに別の言語でプログラミングする選択肢もあります。

fx-5800P の Casio Basicプログラムの fx-9860GII や fx-CG20 への移植をいくつか行いましたが、機種のハードウェアに依存するコマンド (GetkeyLocate)、旧来の命令 (出力命令 ◢ 、" "、入力命令 ? など) の動作の違いに適切に対処し、配列変数を行列やリストに置き換えれば、他の Basic コマンド類は互換性があります。


5. グラフ機能の優先度は低い
パソコンでできることはパソコンを利用する...と考えれば、プログラム電卓にグラフ機能は必ずしも必要ではないと思います。グラフィックスを利用したプログラムを電卓で使いたい場合は fx-9860GII のようなグラフ関数電卓を利用でき、Windows プログラミングよりは Casio Basic の方がプログラミングは遙かに楽です。

ゲームではなく、実用面からグラフ描画機能が欲しいと言う場合もあるでしょう。例えば、実験をしながらグラフを書くのは大変重要なことです。しかしそのために、プログラム電卓でわざわざプログラムを書く必要はあるでしょうか?
パソコンでエクセルを使えば、簡単にグラフを書けます。報告書、レポート、論文を書くのに最近ではエクセルのグラフが普通に使われているわけで、それなら最初からエクセルを使えば良いと思います。

私は、実用を強く意識して fx-5800P を使っていますが、グラフ機能がことさら必要だと思うことは殆どありません。本当に必要なら fx-9860GII などのグラフ関数電卓で、ブラフ表示をプログラミング可能です。しかし、正直に言えば グラフ機能の無い fx-5800P で十分に実用的なプログラムを作って、利用できます。

敢えて言えば、適材適所でしょう。そして Casio Basic 搭載機のなかでも fx-5800P は、プログラム利用の利便性が高く、小型軽量で、グラフ関数電卓よりもプログラム入力が格段に楽で、電池の持ちも長く、ハードウェアとソフトウェアのバランスが良いことは間違いありません。処理速度の遅い fx-5800P でも工夫次第で実用プログラムを作成できるので、プログラミング自体も楽しくなってきます。当ブログでは、その工夫について多く取り上げています。


6. 最も簡単にプログラミングできる携帯機器
Casio Basicを使うのなら、電卓本体のみでプログラミングできるので、いつでもどこでもプログラムを作れます。そして自分だけの付加機能を、恐らく最も簡単に追加できる携帯機器がプログラム電卓です。オリジナルプログラムを作りそれを使う楽しみと利便性があります。

<トップへ戻る>

fx-5800P の利点と弱点

fx-5800P は、新世代Casio Basic を搭載している点に最大の価値があり、同時に関数電卓としても使いやすい点が評価できます。関数電卓としてみた場合は、グラフ関数電卓 fx-9860GII よりも fx-5800P の方が必要な機能へのアクセスが速いので、使いやすいでしょう。しかしプログラミング時の使いやすさの点では fx-5800P が最も優れています。

fx-5800P のもう1つの利点は価格で、他の機種に比べて圧倒的に安価です。

要するに fx-5800P は、非常にバランスの良い製品と言えます。

fx-5800P に対する唯一にして最大の弱点は、プログラムコードのバックアップややりとりをパソコンとの間で行えるPCリンク機能が用意されていない点にあります。少なくとも fx-5800P 同志のプログラムデータのやりとりはできるので、外付けの3Pin - USB アダプタと対応ソフトウェアを発売して頂ければ実現するはずです。カシオ製でなく、サードパーティーでも良いのです。

PCとリンクしてプログラムを転送する機能の実現は、是非ともお願いしたい。

私の場合は仕事などで実用プログラムを作って、毎日のように使っていますので、電子データのバックアップ機能がどうしても欲しくなり、2台目の fx-5800p と専用通信ケーブル (SB-62)を購入しバックアップしています。なお、グラフ関数電卓を購入すれは、通信ケーブル(SB-62)は付属しているので、fx-5800P のために新たに購入する必要はありません。

<トップへ戻る>

Casio Basic の使いこなし

fx-5800P 搭載の Casio Basic は、使いこなしてみて初めてその価値が分かると思います。PCで一定以上のプログラミング経験があれば、この新世代 Casio Basicが構造化BASIC であることがすぐに分かると思います。カシオ自身がこの Casio Basic に関する情報発信を殆ど行っていないので、当ブログでは Casio Basic の使いこなしについて、異なる3つの切り口で紹介しています。

CasioBasic入門 / 目次
じっくりと読みながらプログラムを入力して Casio Basicの使いこなしやプログラムの作り方を修得する。題材のプログラムは、ある程度の完成度があり、実用的に使えるレベルになっている(と思う...)。

CasioBasic コマンドリファレンス 目次
Casio Basic のコマンドや命令を、出来るだけ詳しく調べた結果に基づいて解説している(抜けが無いことを祈るばかり...)。

逆引き Casio Basic 目次
Casio Basic で何か実現したいこと、やりたいことに対して、ピンポイントで実現方法、サンプルプログラム、考え方を紹介している(思いついたことから順次拡充中...)。

<トップへ戻る>



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

人気ブログランキングへ


FC2ブログランキングへ

  

keywords: fx-5800PCasioBasicプログラム関数電卓

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

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

Casio Basic: ◢ (出力命令)

Casio Basic
コマンドリファレンス

Casio fx-5800P、fx-9860GII、fx-CG20 で確認をとっています。Casio fx-FD10 Pro では互換性はあると考えられますが、実機で確認していないので「可能性」としてご覧ください。
最終更新 2017/01/03

fx-5800P / fx-9860GII / fx-CG20
◢ (出力命令)

◆概 要: プログラムを一時停止し、数字、文字列、式や関数の計算結果、コマンドの戻り値を出力する。

◆書 式: [出力内容]◢


出力命令 ◢ は、CasioBasic 独特のコマンド。

この出力命令は、プログラムを一時停止して出力を行い、[EXE] で一時停止を解除する一連の動作を行う。
プログラムの一時停止をせずに出力したい場合は、"   " (文字列出力)、や Locateコマンドを用いる。

※ 出力命令 でプログラムが一時停止した時の画面出力が、fx-9860GII と fx-5800P で違いがある。
・ fx-9860GII / fx-CG20現在の内部カーソル行に - DISP - (右から8桁使用) が上書き表示される。
 [EXE] キーを押せば - DSIP - 表示は消える。

・ fx-5800P: 画面最上部のステータス表示部に  DISP  アイコンが表示され、プログラム実行画面には特に何も表示されない。

(参考) " "  命令に関連した内部カーソル行について ⇒ Casio Basic コマンドリファレンス - " " (出力命令)






変数Aに5が代入されている時、
A◢
と記述すると、画面に5が表示される。


5→A◢
と記述すると、画面に5が表示される。


Aに1234が、Bに5678が代入されている時、
AxB◢
と記述すると、画面に 7006652 と表示される。


"OUTPUT TEST"◢
と記述すると、画面に OUTPUT TEST が表示される。


fx-9860GII / fx-CG20 での - DISP - 表示について
一時停止する時表示される - DISP - は、右から8桁を使用して、右橋に表示される。表示される行は、現在の内部カーソル行になる。内部カーソル行は プログラム起動後の出力命令 "  "  の実行回数で決まる。起動直後および "  " が実行されない時は1行目、1回実行されるたびに改行されて1つ下の行になる。" " が6回実行されると内部カーソル行が7行目になり、それ以降は " " が何回実行されても内部カーソル行は7行目のままとなる。

現在のカーソル行が1行目のの時、

Locate 1,1, "LINE"

を実行すると、LINE と表示されるが、

Locate 1,1,"LINE"◢

を実行すると、LINE の表示の上に、ー DISP ーが上書きされるので、LINE の表示が消える。

従って、"" を利用して内供カーソル行を所定の位置にしてから Locate コマンドを使うか、" " を一切使わずに内部カーソル行を1行目に固定した上で、Locate コマンドを2行目以下で使うように、プログラム上で考慮すると良い。

"":"":"":"":"":""
Locate X,Y,"LINE"


とすると、最初に "" を6回実行することで内部カーソル行を7行目にしいる。その後 Locate コマンドでの表示では、Y は 1~6 の範囲で使えば、- DISP - に表示を妨害されない。

(参考) ⇒ fx-9860GII への移植 - ピタゴラス数





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

人気ブログランキングへ


FC2ブログランキングへ


keywords: fx-5800PCasioBasic出力命令プログラミング入門プログラム関数電卓

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

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

Casio Basic: ⇒命令(条件ジャンプ)

Casio Basic
コマンドリファレンス

Casio fx-5800P、fx-9860GII、fx-CG20 で確認をとっています。Casio fx-FD10 Pro では互換性はあると考えられますが、実機で確認していないので「可能性」としてご覧ください。
最終更新 2017/01/03

fx-5800P / fx-9860GII / fx-CG20
⇒命令 (条件ジャンプ)

◆概 要: 条件ジャンプを行う。

◆書 式: [条件][処理]


⇒命令は、CasioBasic特有の命令。

[条件]「真」の場合は[処理]を実行、そうでない場合([条件]「偽」の場合)は[処理]を飛ばして(ジャンプして)、次へ進む。

[条件]⇒[処理]まで は、改行なしで1行に書かないとエラーとなる。さらに⇒の前後にスペースが入ると、これもエラーになる。



If 文との類似性

[条件][処理]

は、

If [条件]
Then [処理]
IfEnd


と同等です。


複数条件分岐への応用

CasioBasicには、switch~case (C言語)やSelect~Case (VisualBasic)のような多条件分岐コマンドが用意されていません。
しかし、⇒命令を工夫すると、複数条件分岐処理ができます。この記法の利点は、Fall Through (フォールスルー)が実現できる点にあります。

[2014/02/23 補足] If Else と言う記法を使えば、複数条件分岐をスッキリと書くことができます。
CasioBasicコマンドリファレンス If文 参照>

Lbl 0
"N"?→N
N=1⇒Goto 1
N=2⇒Goto 2
N=3⇒Goto 3

N=4⇒Goto 4
Goto Z

Lbl 1
[処理1]
      例えば Locate 1,2,"ONE  " (スペース2個)
(Goto 0)

Lbl 2

[処理2]      例えば Locate 1,2,"TWO  " (スペース2個)
(Goto 0)

Lbl 3
[処理3]
      例えば Locate 1,2,"THREE" (スペースなし)
(Goto 0)

Lbl 4
[処理4]
      例えば Locate 1,2,"FOUR " (スペース1個)
(Goto 0)

Lbl Z


この記法には、重要な注意点があります。

※ 重要な注意点: 赤文字で示した Goto Z Lbl Z は絶対に省略しないこと!
※ 応用上の注意点: (Goto 0) は省略可能です。但し必要な時のみ省略すること。

この記法には、Goto を正しく使うことが条件で、1つ利点があります。青文字出示した (Goto 0) を省略すると Else If の記法では実現しない機能が得られます(Fall Through、フォールスルーが可能になります)。

(Goto 0) を省略すると、下のラベルの処理を連続して行えます。ラベルの並び順を工夫することで処理の効率化が可能になります。

柔軟で有名なC言語での以下のような記法と同等なことがCasioBasicで実現できるわけです。そのため、敢えて Goto を使った記法を紹介しています。

switch (E) {
    case 4:
        [処理4]
        break;
    case 3:

        [処理3]  // フォールスルー
    case 2:
        [処理2]
        break;
    case 1:
        [処理1]
        break;
}


ここで、break; は Goto 0 に相当します。Eが3の時、case 3: へジャンプし、ここには break; が無いので、続いて case 2 の処理を実行します。

これを CasioBasicの上の記法を用いると以下のようになります。

Lbl 0
E=4⇒Goto 4
E=3⇒Goto 3
E=2⇒Goto 2
E=1⇒Goto 1
Goto Z


Lbl 4
[処理4]
Goto 0

Lbl 3

[処理3]

Lbl 2
[処理2]
Goto 0

Lbl 1
[処理1]
Goto 0


Lbl Z


[2014/12/14 修正: (Goto Z) を (Goto 0) に変更]



If文と⇒命令の処理速度比較

If ~Then~IfEndを使った以下のプログラムの処理時間は21秒。
0→L:0→H
1000→C
Lbl 0
Ic C>500
Then Isz H
IfEnd

Dsz C
Goto 0
"DONE"


⇒命令を使った以下のプログラムの処理時間は20秒
0→L:0→H
1000→C
Lbl 0
C>500⇒Isz H
Dsz C
Goto 0
"DONE"



命令は If 文よりも僅かに処理速度が速く、表記が分かりやすいので利用価値の高い命令です。


一方、Elseを用いたIf文では、事情が少し異なります。
If ~Then~Else~IfEndを使った以下のプログラムの処理時間は28.5秒。
0→L:0→H
1000→C
Lbl 0
Ic C>500
Then Isz H
Else Isz L
IfEnd

Dsz C
Goto 0
"DONE"


⇒命令を使った以下のプログラムの処理時間は32秒
0→L:0→H
1000→C
Lbl 0
C>500⇒Isz H
C≦500≦Isz L

Dsz C
Goto 0
"DONE"


従って、2者択一の条件分岐は、If文を使った方が速いことが分かります。

fx-5800P の場合、処理速度の絶対値が変動するようなので、相対比較しか出来ません。



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

人気ブログランキングへ


FC2ブログランキングへ


keywords: fx-5800PCasioBasic命令プログラミング入門プログラム関数電卓

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

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

Casio Basic: Locate

Casio Basic
コマンドリファレンス

Casio fx-5800P、fx-9860GII、fx-CG20 で確認をとっています。Casio fx-FD10 Pro では互換性はあると考えられますが、実機で確認していないので「可能性」としてご覧ください。
最終更新 2017/01/03 更新

fx-5800P / fx-9860GII / fx-CG20
Locate

◆概 要:
数字や文字を画面内の指定した座標に出力する。

◆書 式: Locate [x 座標],[y 座標],[出力内容]

◆引 数:
[x 座標] (左端からの1から始まる桁数)
  fx-5800P: 1 ~ 16 のいずれかの整数値。
   - これ以外の数値を設定するとエラーになる。
   - 正数、変数、式、この範囲の正数を返す関数やコマンドも設定可能。
  fx-9860GII / fx-CG20: 1 ~ 21 のいずれかの整数値。
   - これ意義亜の数値を設定するとエラーになる。
   - 正数、変数、式、この範囲の正数を返す関数やコマンドを設定可能。
   ※ 画面の左上が原点(1,1) 、x座標は右へ行くほど大きくなる。

[y 座標] (上端からの1から始まる行数)
  fx-5800P: 1 ~ 4 のいずれかの整数値。
   - これ以外の数値を設定するとエラーになる。
   - 正数、変数、式、この範囲の正数を返す関数やコマンドを設定可能。
  fx-9860GII / fx-CG20: 1 ~ 7 のいずれかの整数値。
   - これ以外の数値を設定するとエラーになる。
   - 正数、変数、式、この範囲の正数を返す関数やコマンドを設定可能。
   ※ 画面の左上が原点(1,1)、y座標は下へ行くほど大きくなる。

[出力内容]: 数値、変数、式、文字、文字列、値を返す関数やコマンドを設定可能。
    文字および文字列は "   "で括る

◆戻り値: なし



ENGモードが On になっている時は、Locate による表示で、空白が付加されることがあるので、要注意です。
 ⇒ Casio Basic コマンドリファレンス: EngOn / EngOff / Eng





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

人気ブログランキングへ


FC2ブログランキングへ


keywords: fx-5800PCasioBasicLocateプログラミング入門プログラム関数電卓

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

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

Casio Basic: Prog

Casio Basic
コマンドリファレンス

Casio fx-5800P、fx-9860GII、fx-CG20 で確認をとっています。Casio fx-FD10 Pro では互換性はあると考えられますが、実機で確認していないので「可能性」としてご覧ください。

最終更新 2017/01/03

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


Prog


◆ 概 要: サブルーチン呼出コマンド (プログラム呼出コマンド)

◆ 書 式: Prog "[プログラム名]"

◆ 引 数: プログラム名

◆ 戻り値: なし


Prog はプログラムを呼び出しすコマンドです。

プログラム中でプログラムを呼び出すので、サブルーチン呼び出しに使えます。

メインルーチンとサブルーチンは、いずれも独立したプログラムであって、メインルーチンとサブルーチンの違いは呼出関係で決まります。呼出元のプログラムをメインルーチンと呼び、呼び出されるプログラムをサブルーチンと呼びます。サブルーチンとして作成したプログラムも、それだけで独立して動作します。



呼び出されたサブルーチンの実行が終了すると、メインルーチン内の呼出元の位置へ戻ります。サブルーチンが Returnコマンド で終了した場合も、メインルーチンの呼出元の位置へ戻ります。

サブルーチンが実行されている間は、メインルーチンの動作は一時停止します。サブルーチンとメインルーチンが同時に動作することはありません。



サブルーチンからサブルーチンを階層的に呼び出すこと(ネスティング)ができます。ネスティングの階層(レベル)には限度があり、10階層(レベル)が最大です。

PROG 1
Prog "ROUTINE 1"

ROUTINE 1
Prog "ROUTINE 2"

ROUTINE 2
Prog "ROUTINE 3"

    :
    :
    :

ROUTINE 9
Prog "ROUTINE 10"

階層呼出(ネスティング)で、10階層を超えて呼出を行うと「ネスティング エラー(Ne ERROR)」が発生します。





大域変数

サブルーチンで使用する変数とメインルーチンで使用する変数は共有されます(大域変数 / グローバル変数)。
メインルーチンとサブルーチンで共用されている変数がサブルーチンで変更されると、メインルーチンへ戻った時には、その変数の内容が変更されています。

MAIN
0→A
Prog "SUB"


SUB
5→A

この MAIN プログラムを実行すると、プログラム SUB が呼び出されます。SUBプログラムでは、Aに5を代入していて、この時点で MAIN で使われている変数 A  は MAIN と共用されているので、 5 が格納されます。つまり、SUBの実行が終了してMAINへ戻った時には、既にプログラム MAIN の変数A は5に変更されています。
 


ラベルの範囲

Goto / Lbl で使用するラベルは、メインルーチンとサブルーチンで共有されません。サブルーチンで Goto 1 を実行すると、そのサブルーチンにある Lbl 1 にジャンプしますが、メインルーチンにある Lbl 1 へはジャンプしません。Goto / Lbl は1つのプログラム内だけで使えて、他のプログラムへジャンプすることはありません。




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

人気ブログランキングへ


FC2ブログランキングへ


keywords: fx-5800PCasioBasicReturnプログラミング入門プログラム関数電卓

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

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

Casio Basic: Return

Casio Basic
コマンドリファレンス

Casio fx-5800P、fx-9860GII、fx-CG20 で確認をとっています。Casio fx-FD10 Pro では互換性はあると考えられますが、実機で確認していないので「可能性」としてご覧ください。
最終更新 2017/01/03

fx-5800P / fx-9860GII / fx-CG20
Return

◆ 概 要: サブルーチンを強制終了させ、呼出元のメインルーチン内の、呼び出された位置に復帰するコマンド

◆ 書 式: Return

◆ 引 数:なし

◆ 戻り値:なし


実行中のサブルーチン強制終了させ、メインルーチン内にある、そのサブルーチンを呼び出した位置へ復帰する。

メインルーチンで Return コマンドを実行すると、メインルーチンを終了させる。


Returnコマンドは、サブルーチンで実行すると実行されたサブルーチンのみを終了させ、メインルーチンは終了させない。




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

人気ブログランキングへ


FC2ブログランキングへ


keywords: fx-5800PCasioBasicReturnプログラミング入門プログラム関数電卓

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

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

Casio Basic: 配列変数

Casio Basic
コマンドリファレンス

Casio fx-5800P、fx-9860GII、fx-CG20 で確認をとっています。Casio fx-FD10 Pro では互換性はあると考えられますが、実機で確認していないので「可能性」としてご覧ください。
最終更新: 2017/01/03

fx-5800P
配列変数 Z[ ] 

◆ 概 要:
インデックス付き変数。多くの高級言語でいう 配列 と似ている。Z[ ] の [ ] 内に1以上の整数のインデックスを入れて使う。 インデックスに0(ゼロ)や負の整数を指定するとエラーとなる。fx-5800Pでは、通常の変数と同様に数値のみを代入可能 (文字列には対応していない)。

変数領域を確保してから使用する必要があり、変数の数を指定して領域確保する。メモリが許す限りの領域を確保できるが、配列変数を多く確保するとプログラム領域が減る。


◆ 領域確保 
50→DimZ

DimZ[SHIFT] [・] と入力する。
この例では、50個の配列変数を確保し、Z[1]、Z[2]、・・・ Z49]、Z[50] を使える 
※ 領域確保を行うと、各配列変数は0で初期化されます。


◆ 領域解放
0→DimZ

0個の領域確保をすれば、領域解放となる。


◆ インデックス
数値や変数を使える。1以上の整数を返す式も使える。配列変数をインデックスにすることもできる。


※ fx-9860GII や fx-CG20 の場合、搭載 Casio Basic には配列変数が無いので、配列変数の代わりに行列かリストを使う。リストよりも行列の方が処理が速いので、行列の使用を勧める。



プログラム事例

fx-5800P では、インデックス付き変数という配列変数の特性を活かした使い方があります。

参照テーブル(但し1次元)としての使い道が最もふさわしいと思われます。但し、配列変数を使う場合は、アクセス速度が非常に遅いことを十分に留意する必要があります。実行速度が必要な場合は配列変数の利用は最小限にすべきです。


キーコードに対応するテンキーの値を返す事例 [2015/04/30 修正]

87→DimZ
1→Z[35]:2→Z[36]
3→Z[37]:4→Z[21]
5→Z[22]:6→Z[23]
7→Z[31]:8→Z[32]
9→Z[33]:0→Z[25]


Do
Getkey→K
Locate 1,1,"  "
Locate 1,1,Z[K]
LpWhile K=0
0→DimZ

これを実行すると、押したテンキーの値が表示されます。「入力命令: ?」 以外の方法で、テンキー入力を得る一例です。
この方法の利点は、入力を自在に操れる点にあります。入力のエコーバックをさせたくない、入力のエコーバックを自由な位置に表示したい、テンキーを入力させ ONE、TWO、・・・と対応する内容を表示させる...など、自在な入力機能を実現可能です。



フィボナッチ数列の1項から50項までの総和を計算する事例

フィボナッチ数列は、
・1項と2項がそれぞれ1
・3項目以降は、「1つ前」と「2つ前」の項の和になる

1 1 2 3 5 8 13 21 34 55 ...と続く

100→DimZ
1→Z[1]:1→Z[2]
2→S
For 3→I To 60
Z[I-2]+Z[I-1]→Z[I]
S+Z[I]→S

Next
0→DimZ
S◢


これを実行すると、正解の 2147483646 と表示されます。




配列変数へのアクセス速度

配列変数へのアクセスは、通常変数に比べて大変遅いことがわかっています。

通常変数を使ったプログラム
0→A
1000→C
Lbl 0
A+C→A
Dsz C
Goto 0
A◢


これを実行すると、約15秒で結果A (500500) が表示されます。


配列変数を使ったプログラム
1→DimZ
1000→C
Lbl 0
Z[1]+C→Z[1]
Dsz C
Goto 0
Z[1]◢


これを実行すると、約50秒で結果 Z[1] (500500) が表示されます。

この実験結果では、配列変数への入出力は、通常変数に比べて3倍近く時間がかかります。従って配列変数へのアクセスが頻繁なプログラムは動作が非常に遅くなることに留意すべきです。





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

人気ブログランキングへ


FC2ブログランキングへ


keywords: fx-5800PCasioBasic配列変数プログラミング入門プログラム関数電卓

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

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

キー押下でプログラムをコントロールしたい - 逆引き Casio Basic

逆引き Casio Basic
<目次>

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

追記修正 2017/01/03
[fx-5800P / fx-9860GII / fx-CG20]

プログラムの一旦停止や実行をキー押下でコントロールしたい。



プログラムは、コードの上から下へ順に実行されるものだ、と理解することは基本だ。逆にプログラムを一旦停止するには、一旦停止の機能をコードとして書く必要がある。

最も簡単な方法は、Casio Basic に備わっている Casio 特有の旧来からの命令の1つ  (出力)命令を使うことだ。
命令には、一旦停止の機能も備わっているので、プログラムを一旦停止したいところで使うことができる。但し、一旦停止を解除するには [EXE] を押す必要があり、他のキーは使えない。なお  命令は出力命令なので空白を含めて何か出力させるようにコードを書く必要がある。何も出力せずに一旦停止のみ行うには ""◢ とすれば良い。

命令を含んた旧来の命令の使いこなしは、Casio Basic 入門38 を参照



Basic コマンドを使うと、キーを押した時のプログラムの動作のコントロールを、より自由度高く行える。

汎用性のあるコードとして、
  • 処理を一旦停止させておき、何かキーを押している間に処理を先に進める方法
  • 処理を一旦停止させ、何かキーを押してすたびに(押している時間の係わらず) 処理を1回だけ実行する方法
  • ◢ 命令と同じ動作を、Basic コマンドで実現する方法
  • ◢ 命令とほぼ同じ機能だが、[EXE] キー以外で一旦停止を楷書する方法
  • 処理を一旦停止させ、何かキーを押している間だけ処理を実行する方法
を紹介する。基本的にキーが押されたことの検出とキーが離されたことの検出、それらの組み合わせで実現する方法だ。具体的には While / WhileEnd ループと Getkey を使って2~4行のコードで実現できる。

⇒ Casio Basic コマンドリファレンス: Whileループ


先ず、以下のプログラムを作り、これを元にそれぞれの課題を実現する方法を付加してゆく。
以下のプログラムは、fx-5800P, fx-9860GII, fx-CG20 のすべてに共通して使える。

ファイル名: C-UP
0→C
While 1
Isz C
Locate 1,1,C
WhileEnd


変数 C0 で初期化し、
Isz CC を1つ増やして Locate 1,1,C で増やした C の値を表示する。
While 1 / WhileEnd による無限ループでこの処理を繰り返す。

プログラム C-UP を実行すると、数字がカウントアップされ、[AC] キーで強制終了する。

==========

何かキーを押している時だけカウントアップを実行し、キーを離したら一旦停止するように、C-UP を改造する。

ファイル名: C-UP1
0→C
While 1
Isz C
Locate 1,1,C
While Getkey=0
WhileEnd

WhileEnd


プログラム C-UP に赤文字の2行を追加した。
 While Getkey=0
 WhileEnd

は、いずれのキーも押されていない時に処理を先に進めない (一旦停止) 機能を実現する。プログラムを一旦停止し、何かキー([AC] キーを除く)を押したら一旦停止を解除する。

さらにキーを押している間カウントアップ処理が継続され、キーを離したら処理が一旦停止する。
なお、カウントアップを1回だけ行うには、キーを押している時間をできるだけ短くする必要がある。言い換えればキーの長押しは、キーを複数回押したのと同じと判定される、つまりキ-リピートを検出する。

ここで、
 While Getkey=0
 WhileEnd

の動作を詳しく見てみる。While Getkey=0 は、While ループの [ループ継続条件]Getkey=0 になっている。
Getkey=0 は、何もキーが押されていないことを意味するから、何もキーが押されていないときこのループが継続する。つまりループがグルグル回っていて、プログラムの処理は先に進まないから、ここでプログラムが一旦停止しているように見える(実際はループ処理が続くのでプログラムは停止していない)。

Getkey は、それが実行された時に押されているキーを判別するコマンドで、押されているキーごとの固有のキーコードを返し、キーが押されていない時は 0 を返す。「返す」というのは、Getkey が その値になっていると思って良い。キーが押されていない場合は 0 になる。
従って、Getkey=0 は、いずれのキーも押されていない条件を示す。

==========

次に、C-UP1 を改造して、キーを押す時間にかかわらず、1回押したらカウントアップを1回だけ行うようにする。

ファイル名: C-UP2
0→C
While 1
Isz C
Locate 1,1,C
While Getkey
WhileEnd

While Getkey=0
WhileEnd

WhileEnd


C-UP1 に青文字の
 While Getkey
 WhileEnd

の2行を追加した。

ここで、
 While Getkey
 WhileEnd
は、何かキーが押されている限りこの2行のループ処理が続き、キーが離された時にこのループを抜ける。つまりキーリピートを抑制する機能を実現する。

Getkey は、このコマンドが実行された時に何かキーが押されていたら 0 以外のキーコードを返す。「返す」とは、Getkey その値であると思って良い。
While Getkey は、While のループ継続条件が Getkey になっていて、何かキーが押されていたら Getkey が 0 以外の値になるから、この時ループは継続され、処理は先へ進まない。キーが離されると、Getkey は 0 になるからループから抜けて、処理は先へ進む。

==========

C-UP2 を改造して、 命令と同じ機能を実現してみる。

つまり、

0→C
While 1
Isz C
Locate 1,1,C◢

WhileEnd

と同じ機能を実現する。


ファイル名: C-UP3
0→C
While 1
Isz C
Locate 1,1,C
While Getkey
WhileEnd

While Getkey≠47
WhileEnd

WhileEnd


C-UP2 の赤文字の部分を変更した。

ここで、、
 While Getkey≠47
 WhileEnd
このループは、キーコード 47 のキー、つまり [EXE] キーが押されない限り、繰り返しを継続して、処理が先に進まない。[EXE] キーが押される時のみ、処理が先へ進む。

命令を使う時は、キーリピートは無いので、
 While Getkey
 WhileEnd
によりキーリピートを抑制している。

この例は、キーコード47の [EXE] キーで処理を1回進めるものだが、他のキーに対応するキーコードを使えば、好きなキーコードで処理を1回進めることができる。汎用の高い方法だ。

==========

プログラム C-UP を改造して、何かキーが押されている時だけ、カウントアップを停止させるようにする。

ファイル名: C-UP4
0→C
While 1
Isz C
Locate 1,1,C
While Getkey
WhileEnd

WhileEnd


このコードで、
 While Getkey
 WhileEnd

は、何かキーが押されている限り、この2行のループが継続することは、上で紹介した。キーが離されている時は、このループは継続しない。

もし、この Getkey が実行されるとき、キーが押されていない場合、[ループ継続条件] である Getkey は 0 なので、ループに1度も入ることなくループを抜ける。







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

人気ブログランキングへ


FC2ブログランキングへ



   



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



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

Casio Basic入門47

Casio Basic入門
<目次>

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

修正:2016/12/24


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

Chapter 8 - 初級

前回: Casio Basic入門46 を見る


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

メニュー選択や入力にBasic コマンドたけを使って、温度の単位変換プログラムを作りました。出力には、プログラムの冒頭では簡単なため、旧来の " "(出力)命令をまだ併用しています。


温度換算プログラム TC8
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"
Locate 1,4,"MENU N°?"
Locate 11,4,"<FMLA>"

-1→M
Do
Getkey→L
LpWhile L=0
L=35⇒1→M
L=36⇒2→M
L=37⇒3→M
L=74⇒4→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
Else If M=4
Then
Cls
Locate 2,1,"C = 5(F-32)÷9"

Locate 2,2,"F = (9÷5)C+32"
Locate 2,3,"K = C+273.15"

Locate 11,4,"<EXIT>"
While Getkey≠73
WhileEnd

IfEnd:IfEnd
IfEnd:IfEnd

Goto 0



プログラム全体の流れをまとめてみます。プログラムは上から下へ順に処理が進んでゆくものだと理解することがとても重要です。そして、特定のコマンド、例えば If 文Do 文While 文Break コマンド 或いは ⇒ (条件ジャンプ)命令などがある時のみ例外的に処理の順序を変える、と理解することが基本になります。そして、今回のプログラムを機能ごとにまとめると、以下のような流れになっています。

プログラム全体は、Lbl 0Goto 0 により無限ループになっています。
その中では、[表示] を行うブロック、[メニュー選択とメニュー番号取得] を行うブロック、そして [温度入力と換算] を行うブロックに分けられます。

ここで、是非注目してもらいたいのは、これらの機能別の処理ブロックは、上から下へ順に処理が流れていることです。このように、各処理ブロックが上から下へ順に流れるようにプログラムを作ると、プログラムが分かりやすくなります。こうしておくと、機能変更や機能追加は、特定の処理ブロックに集中して行えば良くなり、結果的に修正、機能追加、バグ潰しが楽になります。

このように、機能ごとにまとめた処理ブロックが上から下へ流れてゆくような構造のプログラムを作る手法を構造化プログラミングと言って、一般に推奨される考え方です。Casio Basic は構造化プログラミングが出来るのです。


プログラムの構造

Lbl 0

 [表示]

 [メニュー選択とメニュー番号取得]

 [温度入力と換算]

Goto 0



さて、fx-5800P のような電卓でのプログラムは、プログラムを強制終する [AC] キーが備わっているので、プログラム終了に [AC] キーを使えば、終了のためのコードを書く必要が無いので、プログラミングは楽になります。
 
この方法が良いと思ってきたのですが、最近ちょっと考えが変わってきて、プログラムを正常終了させた方が良いのではないかと、思い始めています。その理由は前回書いていますが、どちらが正しいと言うことは無いと思います。好みの問題であり、ポリシーの問題でもあります。

どちらが正しいかは横に置いておいて、正常終了させるプログラムも作れることを紹介します。

そこで今回は、[EXIT] キーで正常終了させる方法を盛り込みます。



Chapter 8-6
[EXIT] キーで正常終了させる

プログラムのメイン画面を以下のようにします。

TC9-Main 

そして、[EXIT] キーを押したらプログラムが終了します。

まず方針を決めます。

[EXIT] キーが押されたことを検出するには、Getkey を使います。既に、計算式表示からメイン画面に戻る時に、[EXIT] キーを利用しているので、具体的には同様のコードを適用します。 

次に、どうやってプログラムを正常終了させるのか? プログラムの処理が一番下、つまりプログラムコードの最後までたどり着いたら、正常終了します。

一方で、今のプログラム TC8 は、Lbl 0Goto 0 の間を無限に繰り返す(無限ループ)構造です。そこで、[EXIT] キーで正常終了させるには、[EXIT] キーが押されたら無限ループから脱出して、プログラムの一番下に処理が進むようにします。都合の良いことに、Caso Basic には、他の Basic と同様に ループから脱出するための Break コマンドが用意されているので、それを使います。

Break コマンドは、以下のループなら、そこからから抜け出せます。
 ・While ループ
 ・Do ループ
 ・For ループ


しかし、LblGoto によるループでは、Break コマンドで脱出できません。これは、Break コマンドの仕様です。

 ⇒ Casio Baisc コマンドリファレンス - Break


そこで、現在の Lbl / Goto ループを While / WhileEnd を使った無限ループに変更します。結論から言えば、

Lbl 0
・・・
Goto 0




While 1
・・・
WhileEnd


に置き換えます。


While 文の書式
While [ループ継続条件]
[処理]
WhileEnd


While / WhileEnd ループを無限ループにするには、[ループ継続条件] が必ず成り立つ、つまり常に「真」となるようにします。

実は、0「偽」で、0 以外「真」と言うのが、プログラミング言語では標準で、Casio Basic もこれに従っています(取扱説明書には書かれていませんが...)。

そこで、

While 1
[処理]
WhileEnd


としたら、無限ループになるわけです。


次に、[EXIT] キーを検出したら Break を実行するように修正します。ここで、[メニュー選択とメニュー番号取得] のブロックを以下に抜き出します。

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


[EXIT] キーのキーコードは 73 なので、L73 になった時に Break を実行すれば、一気に While 1 / WhileEnd ループから脱出します。これを実現するには、

L=73⇒Break

を上のブロックの一番下に追加します。


最後に、メイン画面の一番下の行(4行目)の表示を忘れずに変更します。

Locate 1,4,"<EXIT>"
Locate 11,4,"<FMLA>"




以上をまとめて、プログラム TEMP CONV とします。

先ず、プログラム TC8 のファイル名を TEMP CONV に変更します。プログラムの修正とプログラム名の変更の具体的な操作方法は、Chapter 7Chapter 8 でこれまでに説明しているので、割愛します。

温度換算プログラム TEMP CONV
0→A
While 1


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"
Locate 1,4,"<EXIT>"
Locate 11,4,"<FMLA>"

-1→M
Do
Getkey→L
LpWhile L=0
L=35⇒1→M
L=36⇒2→M
L=37⇒3→M
L=74⇒4→M
K=73⇒Break

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
Else If M=4
Then
Cls
Locate 2,1,"C = 5(F-32)÷9"

Locate 2,2,"F = (9÷5)C+32"
Locate 2,3,"K = C+273.15"

Locate 11,4,"<EXIT>"
While Getkey≠73
WhileEnd

IfEnd:IfEnd
IfEnd:IfEnd

WhileEnd



では、これを実行してみます。

[EXIT] キーを2回押して Program Manu 画面へ戻り、

TC7-ProgMenu 

[2]
(2:RUN)Prog List 画面に切り替え、 

TC9-PROG_ProgList 

TEMP CONV にカーソルがあるので、そのまま [EXE] キーでプログラムを起動します。

TC9_Main 

ここで、[EXIT] を押すと、プログラムは終了するはずです。

TC9-Quit_Done 

右下に Done と表示があり、プログラムが正常終了したことが分かります。

ここで、[EXIT][EXE][AC] のいずれかを押せば、Prog List 画面に戻ります。


さて、最後の仕上げを行います。右下の Done 表示だけでは、プログラム終了を示すには控えめな気がするので、終了時には以下のような画面にしようと思います。

TC9-Quit_Bye 


そこで、
WhileEnd の下に、画面消去コマンド Cls と Locate 7,2,"BYE!" を追加することにします。

!の入力方法
[FUNCTION] [1] (1:MATH) [5] (5:X!)

Cls は画面消去を行います。 



温度換算プログラム TEMP CONV
0→A
While 1


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"
Locate 1,4,"<EXIT>"
Locate 11,4,"<FMLA>"

-1→M
Do
Getkey→L
LpWhile L=0
L=35⇒1→M
L=36⇒2→M
L=37⇒3→M
L=74⇒4→M
K=73⇒Break

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
Else If M=4
Then
Cls
Locate 2,1,"C = 5(F-32)÷9"

Locate 2,2,"F = (9÷5)C+32"
Locate 2,3,"K = C+273.15"

Locate 11,4,"<EXIT>"
While Getkey≠73
WhileEnd

IfEnd:IfEnd
IfEnd:IfEnd

WhileEnd
Cls
Locate 7,2,"BYE!" 



もう一度、動作確認します。

TEMP CONV を起動すると、

TC9_Main 

[FMLA] を押して、計算式を表示、

TC9-Formula 

ここで、[EXIT] 押すと、

TC9-Quit_Bye 

メイン画面に戻らず、プログラムが終了してしまいます。

計算式が表示されている時、[EXIT] を素早く叩いて、できるだけ短い時間だけ押すと、メイン画面に戻ることもありますが、

TC9_Main 

チョット油断すると、プログラムが終了していまいます。

その理由を考えてみます。

メイン画面から正常終了する時にも [EXIT] キーを押すので、計算式表示画面で [EXIT] キーを押す時間が少しでも長いと、メイン画面に戻っても [EXIT] キーが押されたことになるので、すぐに終了するわけです。

計算式画面からメイン画面に戻る時のキーと、正常終了するキーを、別のものにすれば、この問題は解決します。しかし、それでは面白くないので、今回は両方とも [EXIT] キーを使うことにして、問題を解決します。実は、定番の方法があります。

作戦は以下の通り;

1) 計算式画面表示中は、[EXIT] キーが押されるまで While ループが回っている

2) [EXIT] キーが押されたら、この While ループから脱出 

3) [EXIT] キーが押された状態では、プログラムが先へ進まないように、 次のループに入る

4) [EXIT] キーが離されたら、そのループから脱出する

5) メイン画面に戻るが、[EXIT] キーは押されていないことが確実なので、改めて [EXIT] キーを押さない限り終了しない


要するに、3) を実現すれば良いのですが、以下のように赤文字の2行を追加するだけです。

While Getkey≠73
WhileEnd

While Getkey
WhileEnd


緑色の上2行は、[EXIT] キーが押されるまで回り続けるループで、1) と 2) を実現しています。
赤色の下2行は、[EXIT] を含めて何かキーが離されるまで回り続けるループで、3) を実現しています。

Getkey は、それが実行された時に何もキーが押されていない時は、0 になります(0 を返す、と言います)。何かキーが押されていると、2桁のキーコードを返すので、Getkey は2桁の数値、つまり 0 以外の値を持っています。

While [ループ継続条件] 
WhileEnd

という書式で、[ループ継続条件] が 0以外 つまり「真」の時は、ループが回り続けます。[EXIT] キーがまだ押されている状態では、Getkey73 、つまり 0 以外(=「真」) なので、ループは回り続けます。

[EXIT] キーが離されたら、Getkey0 になるので、[ループ継続条件]0 (=「偽」になるので、ループから脱出します。

この2行の赤文字While ループは、キーが離されるまでプログラムの実行が先へ進まないようにする関所の役割を果たしています。

ちなみに、

While Getkey
WhileEnd




While Getkey≠0
WhileEnd


は、全く同じ動作をします。これは、Getkey が戻り値を返すと言う性質を利用しています(詳細は前回説明しています)。
そして、≠0 が無い方が動作は速くなるので、上の表記を用いるほうが良いでしょう。


以上のように、Getkey と ループを使いこなすことで、キー操作をうまく制御することができ、Casio Basic を含めた Basic プログラミング習得のための重要ポイントです。そのようなわけで、Casio Basic入門の最初の Chapter 1 では、GetkeyLocate コマンドを使いこなすことを目標にしているわけです。

 ⇒ Casio Basic入門3 Chapter 1 - Getkey と Locate を使いこなす



ここまでをまとめます。

温度換算プログラム TEMP CONV
0→A
While 1


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"
Locate 1,4,"<EXIT>"
Locate 11,4,"<FMLA>"

-1→M
Do
Getkey→L
LpWhile L=0
L=35⇒1→M
L=36⇒2→M
L=37⇒3→M
L=74⇒4→M
K=73⇒Break

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
Else If M=4
Then
Cls
Locate 2,1,"C = 5(F-32)÷9"

Locate 2,2,"F = (9÷5)C+32"
Locate 2,3,"K = C+273.15"

Locate 11,4,"<EXIT>"
While Getkey≠73
WhileEnd
While Getkey
WhileEnd

IfEnd:IfEnd
IfEnd:IfEnd

WhileEnd
Cls
Locate 7,2,"BYE!"



プログラム修正が終わったら、[EXIT] キーを2回押して、Program Menu 画面に戻ります。

TC7-ProgMenu 

[2] (2:RUN) で、Prrog List を表示さると、TEMP CONV にカーソルが合っているので、

TC9-PROG_ProgList 

そのまま [EXE] キーを押せば、TEMP CONV が起動します。

TC9_Main 

[FMLA] キーで計算式画面を表示

TC9-Formula 

[EXIT] キーを押したままにしてみると、何も変化は起こらず、

TC9-Formula 

[EXIT] キーを離すと、画面が切り替わり

TC9-Main 

メイン画面に戻ります。つまり、[EXIT] キーを離したら先に進むようにプログラムを書いたので、その通りの動作になっていることが確認できまし。計算式表示画面で、普通に [EXIT] キーをポンッと叩けば、違和感無くメイン画面に戻ると思います。

メイン画面で、改めて [EXIT] を押すと正常終了します。

TC9-Quit_Bye 

ここで、[EXIT]、[EXE][AC] のいずれかのキーを押せば、Prog List 画面に戻ります。

TC9-PROG_ProgList 

[EXE] で再び起動します。

TC9-Main 


ところで、バナナを液体窒素に漬けて凍らせると、釘が打てる...と言うのを見たことがあると思います。液体窒素はとても低温で、絶対温度で77度です。そこで、絶対温度77Kは、摂氏何度か? 調べて見ましょう。

[3] キーを押すと、入力ボックスが現れるので、

TC9-Press_Menu3 

ここで、77 と入力し、

TC9_Press_77K 

インジケータ <EXE>:ENTER に従って、[EXE] を押すと、入力が確定され、

TC9_result_77K 

摂氏と華氏の換算温度が表示されます。液体窒素温度は、-196.15℃ なのですね。



これで温度換算プログラム TEMP CONV が完成です。完成したプログラムは、COMP モードから実行することをお勧めします。COMP モードから実行すると、強制終了した時に、うっかりプログラムを触ってしまう危険性が無いからです。

但し、TEMP CONV は強制終了ではなくて、正常終了するようにしていますので、この心配はありません。念のため、COMP モードからプログラムを起動してみます。

[MODE] [1] (1:COMP)COMPモードに戻ります。

[FILE] キーを押して、Prog List を表示

TC9-COMP_ProgList_TimeZone 

[▼] [▲] キーで TEMP CONV にカーソルを合わせ

TC9-COMP_ProgList_TempConv 

[EXE] キーで TEMP CONV を起動します。

TC9-Main 

色々と操作してから、[EXIT] キーで終了させます。

TC9-Quit_Bye 

さて、本当に終了させるには、ここで [AC] キーを押す。

[EXIT] キーを押しても、何も変化はありません。

ここで [EXE] を押すと、再び TEMP CONV が起動します。これは以前も紹介している COMP モードでの特徴ですね。

プログラム終了時は、PROGモードで起動したか、COMPモードで起動したかで、多少異なることが確認できました。



温度換算プログラムを Chapter 7 では、 旧来の?(入力)命令を使って作り、それを Capter 8 では、Basic コマンドに置き換えました。

既に Basic を使いこなしている人には、Chapter 8 の内容は簡単だと思います。そして 構造化プログラミングが可能な 新世代Casio Basic の能力を再認識できたと思います。

プログラミング経験の少ない人には、Chapter 8 の内容は慣れない部分もあると思います。ループを使いこなすことはプログラミング習得の第一歩です。Casio Basic で習得すれば、次に パソコンなどで Basic プログラミングを行う時にそのまま役立ちます。


さて、新世代 Casio Basic は fx-5800P だけでなく、他のグラフ関数電卓にも搭載されています。そこで、次回は ここまで作った温度換算プログラムを fx-9860GII に移植することにします。





つづく...

Casio Basic入門48 / 目次




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

人気ブログランキングへ


FC2ブログランキングへ



 



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

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



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

Casio Basic入門44

Casio Basic入門
<目次>

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

2015/03/15
2016/12/24 修正

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

Chapter 8 - 初級

前回: Casio Basic入門43 を見る


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

前回作ったプログラム TC6 では、温度入力画面と温度出力画面が異なる画面構成となっています。

例えば、以下のような温度出力画面になっているとします。

TC5 6 

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

TC6 4 

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

TC6 5 

これでもプログラムとして全く問題ないのですが、出力画面のまま、摂氏表示ののところで、別の値を入力したいと思うわけです。

と言うのも、スマホやパソコンのプログラムではそうなっているので、電卓プログラムでの同様の機能を実現できないだろうか?と言うのが今回のテーマです。



Casio Basic には、位置を指定して、そこで入力させるようなコマンドが用意されていません。そこで、この機能を実現させるために、入力ボックス を作りました。

 ⇒ fx-5800P プログラムライブラリ - 入力ボックス

 ⇒ fx-9860GII プログラムライブラリ - 入力ボックス

入力ボックスは、汎用サブルーチンとして作っていて、他のプログラムから呼びだして使うことを前提にしています。従って、Basic コマンドとは少し使い方が異なります。

Basic コマンドの使い方は、

[コマンド] [設定1],[設定2],[設定3], ...

といった使い方になります。

入力ボックスはサブルーチンです。サブルーチンを呼びだす時に色々な設定を一緒に指定することができません。そこで、

[入力ボックスの設定]
Prog "入力ボックス"
[結果の受け取り]


といった書式になります。

今回は、温度換算プログラムで、入力ボックスを使ってみようと思います。



Chapter 8-2
入力ボックスを使ってみる

入力ボックスには、使い勝手を考えて複数のバージョンがあります。

入力する数値の種類応答性が速い
バージョン(Ver2.0)
キーリピート抑制が
バージョン(Ver2.1)
プログラム名
0以上の整数(INPI Ver2.0)INPI Ver2.1INPI
0以上の小数と政数INP Ver2.0(INP Ver2.1)INP
正負の小数と整数IN Ver2.0(IN Ver2.1)IN

入力ボックスには、fx-5800P で使うために、大きく Ver 2.0Ver 2.1 の2種類があります。fx-5800P はCasio Basic プログラムの実行速度が比較的遅いので、できるだけキー入力の応答性を高める必要があり、その目的で作ったのがVer 2.0 で、応答性を高めるために、キーを押したままにするとその数字が繰り返し入力される(キーリピートが発生する)仕様になっています。

一方、キーリピートを抑制したものが Ver2.1 です。

Ver 2.0 / Ver 2.1 それぞれについて、入力する数値の種類に応じて3つのバージョン、INPI、INP、IN を用意しています(上の表参照)。

実際に使用してみると、Ver 2.0INPI の処理が軽いのでキーリピートが発生しやすいと思います。そこで INPI を使う場合はキーリピートを抑制した Ver 2.1 をお勧めします。

INPIN については、INPI に比べて相対的に処理が少し重く、キーリピートがあまり問題になりません。むしろキーリピートを抑制すると応答性の悪化を感じるので、Ver 2.0 の利用を勧めます。

上の表で赤文字で示したように、INPI Ver2.1INP Ver2.0IN Ver2.0 を使えば、間違いないと思います。なお、今回、温度換算プログラムで利用する場合は、温度値は正負の小数と整数なので IN Ver2.0 を使うことにします。


IN Ver2.0 の準備

fx-5800P は、パソコンとのリンク機能がないので、プログラムをパソコンから転送することが出来ません。最初は面倒でもプログラムをキー入力する必要があります。

fx-5800P に入力ボックス IN Ver 2.0 が保存されていない場合
もし、あなたの fx-5800P に入力ボックスが保存されていない場合は、面倒でも最初はキー入力する必要があります。
入力するソースコードは、fx-5800P プログラムライブラリ - 入力ボックス の プログラム- IN Ver2.0: プログラム名 IN に掲載していますので、間違えないように入力してください。

fx-5800P に入力ボックスが保存されている場合
入力ボックスは、既に Casio Basic入門で扱っているので、既にプログラムが保存されているかも知れません。今回は、正負小数対応の IN を使います。もし、バージョンに応じて異なったファイル名で保存している場合は、今回使う IN Ver2.0 のファイル名を IN にしてください。

先ずは、fx-5800P で入力ボックスを導入して温度換算プログラムを作りますが、後で fx-9860GII へ移植する予定です。そこで、fx-9860GII で入力ボックスを準備する方法も書いておきます。fx-9860GII はPCリンク機能を使ってプログラムを簡単に転送できるので、準備が楽です。

fx-9860GII で入力ボックスを準備する場合
もし、fx-9860GII をお使いの場合は、fx-9860GII 専用入力ボックス Ver 2.1GG1M ファイルをダウンロードできるようにしています。このファイルを一旦パソコンにダウンロードすれば、専用リンクソフトを使って fx-9860GII へ転送できるので、入力の手間はありません。
 ⇒ e-Gadget アーカイブ - Archaive ページ - fx-9860GII Casio Basic から IN.G1M をダウンロード  
あるいは、
 ⇒ ここ から IN.G1M をダウンロード



入力ボックス IN 2.0 の使い方

入力ボックスは、汎用サブルーチンです。サブルーチンを呼びだすには、Prog コマンドを使い、呼びだすプログラム名を " " で括ります。正負小数に対応した IN を使うので、

Prog "IN"

と書きます。

ちなみに、Prog の入力は、[SHIFT] [FILE] です。

入力ボックスを呼びだす前に、以下の4つの変数の設定を行います。

・ 入力ボックスを表示する桁(X座標): 変数X
・ 入力ボックスを表示する行(Y座標): 変数Y
・ 入力ボックスの桁数: 変数D
・ 入力ボックスの確定インジケータの種類の設定:
変数E

具体的には、以下の書式で使います。

入力ボックスの書式
△→X:△→Y:△→D:△→E (入力ボックスの設定)
Prog "IN"          (入力ボックスの呼出し)
Z→▽              
(入力値の受け取り)


は任意の数、は任意の変数、但し使用機種の画面範囲内に収まるように設定する。
  参考 fx-5800P: 1≦X≦16、1≦Y≦4、X+D≦16

- X: 入力ボックス表示開始桁
- Y: 入力ボックス表示開始行
- D: 入力ボックス桁数
- E: 入力ボックスインジケータの選択
   E=2: 画面右下に <EXE>:ENTER と表示
   E=1: 画面右下に ▶E と表示
   E=(上記以外): インジケータ非表示
- Z: 入力ボックスで確定した数値が代入される



入力ボックスの動作確認
入力ボックス IN をキー入力した場合は、入力ミスの可能性もあるので、テストプログラムで入力ボックスの動作テストを行います。併せて、入力ボックスの使い方を紹介します。

以下のテストプログラムを使います。

プログラム TEST
0→Z
"1:"
"2:"

While 1

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

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

If M=1:Then
3→X:1→Y:10→D:2→E
Prog "IN"
Else If M=2
Then
3→X:2→Y:6→D:1→E
IfEnd:IfEnd

Locate 1,4,"Z="

Locate 3,4,Z

WhileEnd


==========

<裏技>

代入命令 → を入力する良い方法を紹介します。

4→X を速く入力する方法
[4] キー
[SHIFT] [RCL] キーで が入力され、この時 アルファベット入力モードになる
[0] キー を押すと、アルファベットモードなので X が入力される

入力ボックスを使う書式では、代入命令を多く使うので、この方法を知っていると入力が楽になります。

ちなみに、Prog の入力は、[SHIFT] [FILE] です。

==========

では、テストプログラム TEST 作成の操作です。

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

IB-ProgramMenu 

新たにプログラム TEST を作るので、[1] (1:NEW) を押し、File Name 入力画面へ...

IB-FileName 

ここで、プログラム名 TEST を入力し、[EXE] で確定。File Mode 設定画面が現れる。

IB-FileMode 

[1] (1:COMP) を選択すると、プログラム入力画面に切り替わります。

ここで、プログラム TEST を入力します。

入力が終わったら、[EXIT] を押して、Program Menu 画面に戻ります。

IB-ProgramMenu 

では、プログラム TEST を実行してみます。

[2] (2:RUN) を押して、Prog List を表示させ、

IB-ProgList  

[EXE] キーで、プログラム TEST を実行します。

TEST-1 

[1] キーを押すと、1: の右に10桁の入力ボックスが表示されます。

TEST-2 

入力ボックス表示の左端は3桁目(X座標が3)、1行目(Y座標が1)で、桁数は10です。つまり、X に 3、Y に 1 、D に 10 を指定しています。さらに右下に、<EXE>:ENTER と表示されていますが、これがインジケータで、E に 2 を指定するとこの表示になります。

つまり、

3→X:1→Y:10→D:2→E
Prog "IN"


と書いておき、これが実行されると、上のような入力ボックスが表示され、入力モードになります。

ここで、項目1 に、-12.345678 を入力すると、以下のようになります。

TEST-3 

右下のインジケータは、入力モードにあることを示し、[EXE] キーを押して確定することを示す操作案内です。
入力モード中に [DEL] キーを押せば入力した数字が削除され、内容を編集できます。

[EXE] で入力確定すると、変数 Z に 確定した値が格納されてから、入力ボックスが終了します。

TEST-4 

一番下の行で変数 Z の値を表示しています。
これは、プログラム TEST の以下のコードによるものです。

Locate 1,4,"Z="
Locate 4,4,Z


このように、希望の位置に希望の桁数で入力させることができます。色々な入力を試して、Z の値が正しいことを確認します。


さて、次に項目2に、入力してみます。[2] を押すと、以下のようになります。

TEST-5 

入力ボックスの左端は、3桁目(X=3)、2行目(Y=2)で、桁数が6(D=6)です。そして、インジケータは簡略化した表示(E=1)です。

プログラムに書く場合は、以下のようにします。

3→X:2→Y:6→D:1→E
Prog "IN"


ここで、-9.876 と入力すると、

TEST-6 

正しい位置に入力中の内容が表示されています。[DEL] で削除できて、入力内容の編集ができます。
右下のインジケータ ▶E は、[EXE] で確定、との操作方法を示しています。

[EXE] で確定すると、変数 Z に入力値が代入され、入力ボックスが終了します。

TEST-7 

Locate 1,4,"Z="
Loxate 3,4,Z


によって、4行目に、Z の値を表示しています。


では、ここで [1] を押して、再び入力ボックスを表示させ、

TEST-8 

このまま、[EXE] を押す、つまり何も入力しないで確定すると、変数 Z には 0 が代入され、入力ボックスが終了するので、

TEST-9 

このように表示されます。

テスト用プログラムをもう一度掲載しますが、赤文字で示した部分、つまり入力ボックスの桁数とインジケータの種類を変更してみて、色々と試してみてください。

プログラム TEST
0→Z
"1:"
"2:"

While 1

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

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

If M=1:Then
3→X:1→Y:10→D:2→E
Prog "IN"
Else If M=2
Then
3→X:2→Y:6→D:1→E
Prog "IN"  [2016/12/24] 追加修正
IfEnd:IfEnd

Locate 1,4,"Z="

Locate 3,4,Z

WhileEnd




今回は、入力ボックスを使う準備と、使い方を紹介しました。

次回は、温度換算プログラムに入力ボックスを導入してゆきます。






つづく...

Casio Basic入門45 / 目次




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

人気ブログランキングへ


FC2ブログランキングへ


 


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

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



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

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

やす (Krtyski)

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


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

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

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

人気ブログランキングへ


FC2ブログランキングへ


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

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

この人とブロともになる

QRコード
QR