fx-5800P【プログラミング入門】:言語仕様
Casio Basic入門 連載中
一般にプログラムの基本構成は、
・入力
・データ処理
・出力
・データ保存
に集約される。
従って、それぞれの基本構成に必要な命令やコマンドを覚えると、とりあえず動くプログラムを書けるようになる。そして、動くプログラムができれば、それを改造したり、機能を追加したりすることで、実用的なプログラムができるし、学習者はストレスなくプログラミングを覚えられると思う。
fx-5800P【プログラミング入門】:プログラム作成から実行までの操作
で、たった1行で、とりあえず動くプログラムが書けた。これに、色々と追加していけば、それらしいプログラムになる。少なくとも、非常に簡単な手順でプログラムを作れることは、お分かり頂けたと思う。
手軽さが電卓プログラムの1つの特徴と言える。
プログラム電卓は、一言でいえば、
電卓以上、パソコン未満。
プログラムを作れば、電卓以上のことが出来るが、パソコンほどのことは出来ない。しかし必要な時にポケットからサッと出して、パッと使えるので、パソコンよりも気楽に手軽に使える。そのような目的では、十分実用的なプログラムを作れるので、利用価値が高いと思う。
プログラム電卓に搭載されるプログラミング言語は、それほど強力なものではない。
電卓の機種によって搭載言語の仕様が異なることが多く、一概には言えないが、プログラムを作るための最低限の機能が搭載されていると思って良い。PCでのプログラミング経験者なら、Basicコマンドはこのように動作するはずだという感覚通りに動作するので、特に悩むことも無くすぐにプログラミング出来る。但しグラフィックスコマンドはとても癖が強く一般のBasicコマンドの感覚通りに動作しない (Casio Basic グラフィックス - 目次 参照)。
学習者にとっては、グラフィックスコマンドを除けば (fx-5800P にはグラフィックス機能は無い) ;
- プログラミング経験者には、簡単にプログラムを作れる
- プログラミング初心者には、入門に良い
学習者がプログラミングを覚えるための良い方法については、様々な方が色々な論を展開している。個人的な経験に基づけば、
・作りたいプログラムがあること
・最も簡単で低機能の、しかし取りあえず完成したプログラムがあること
・取りあえずのプログラムを、自分の望むように改造する
学習者にとっては、必要性或いはモチベーションがあれば、必要なことから勉強してゆけるし、Casio Basic 頭の中に定着しやすい。如何であろうか?
最近のカシオのプログラム電卓では、Casio Basic が搭載されていて、Casio Basic は機種間での互換性が非常に高い。
最近のカシオのプログラム電卓:[2021/11/05 更新]
- fx-5800P
- fx-FD10 Pro
- fx-CG50
- fx-9750GIII / fx9860GIII
それでは、fx-5800P
先ずは、この電卓が搭載しているプログラミング言語について、私が特徴だと思う点を挙げる。
▍新世代 Casio Basic
2006年発売の fx-5800P には、それまでの機種の搭載言語とは大きく異なる。Basic 風だったものが、まともな Basic になったのだ。実際に使い込めば分かるのだが、この点意外に見落とされている。いわゆる構造化プログラミング風のコーディングが可能になっており、さらにキーコード取得の Getkey と柔軟な Locate コマンドが搭載されたことが、まともなBasicになったと言える要因だ。この新世代 Basic の記法は、最近の一般的な Basic でほぼそのまま使える。つまり、プログラミング経験者なら少ないストレスで実用的なプログラミングが出来る。これから Basic を習得しようとする人には、覚えたことが一般の Baisc に活かせる。新世代 Casio Basic 搭載が、fx-5800P の最大の特徴だ。
▍バランスの良い設計
作ったプログラムを実行するために、プログラムモード(PROGモード)に入る必要が無い。通常の電卓のモード(COMPモード)から、[FILE] キーを押せばプログラムリストが現れ、そこから実行できる。この手軽さは良い。今のところこの機能があるプログラム電卓は fx-5800P と fx-FD10 Pro のみだ。その他のグラフ関数電卓は、プログラム実行のためにはプログラムモードに入る必要がある。プログラムを強制終了させると、プログラム編集画面になることから、知らずにプログラムを変更してしまう事故の可能性がつきまとう。
また、旧来の機種で搭載されていた入力/出力命令は、古くからのユーザーの利便性に考慮して、新世代 Casio Basic にも残されているが、fx-5800P と fx-9860GII (およびその他のグラフ関数電卓)では、細かい動作仕様が異なっている。グラフ関数電卓に搭載されている旧来の命令の仕様は、非常に使いづらく、旧来の命令をこれ以上使うなと言っているようである。一方で、fx-5800P は使い勝手の良い仕様にチューニングされている。
fx-5800P はハードウェアとCasio Basic のバランスがよく考えられている。
▍変数
最初から用意されている変数は、電卓内の保存されている全てのプログラムで共有される。究極のグローバル変数仕様と言える。一般にグローバル変数は弊害多いように言われるが、電卓プログラムに関して言えば、異なるプログラムで変数を共有できるメリットも有る。
▍文字列処理
fx-5800Pは、文字列変数が用意されていないので、文字や文字列の処理ができない。数値計算用の関数電卓の延長線にあるための割り切った仕様なのだろう。
最近のCASIOの関数電卓全般に言えることだが、3桁区切りの表記ができない。桁数の大きな数字をパッと認識しづらいのはとても不便だ。安い金融電卓などには搭載されている機能なので、ハイエンドと言える関数電卓で3桁区切りが無いのは理解しがたい。そこで、ミリ(m)やキロ(K)といった記号で表記する機能を使うか、6.02x1023 といった指数表示を使うしかない。プログラム上で、3桁区切りを実現するためには文字列処理が不可欠と思っていたが、文字列処理がなくてもロジックを工夫することで、実現した (以下追記参照)。
[2015/04/10 追記]
2015年2月から順次発売開始となった fx-JP500 / 700 / 900 では、ようやく3桁区切り記号が戻ってきた。fx-5800P の後継機種でも3桁区切り記号の実装が期待される。
[2019/06/10 追記]
プログラム上で3桁区切り出力を行うための汎用サブルーチンを公開している。
⇒ プログラムライブラリ - 3桁区切り出力(汎用サブルーチン)
▍データ保存
データ保存の機能は、ほとんど無い。ソースコード(=プログラムの記述のこと)のみが電卓本体に保存できるだけだ。パソコンなど外部機器と繋いでソースコードを保存することは出来ない。ソースコードをバックアップするには、専用ケーブル(別売り)を用いてfx-5800P同志をリンクして、プログラム単位でコピーするのことは出来る。究極のスタンドアローン仕様だ。
この仕様はなんとかして欲しい。私は、ソースコードと色々な説明を書き込んでエクセルファイルに保存している。

(fx-5800P用、素因数分解計算のソース)
[2018/02/26 追記]
有志の個人 (takumako様) が fx-5800P をPCリンクするツールを公開なさった。これにより fx-5800P が遙かに役立つようになった。
⇒ ついに fx-5800P がPCリンク可能になった
▍配列変数
配列変数を使うと、変数の数は実質無制限になる。プログラム中で変数領域の確保と解放ができる。変数領域は最大28500バイトのプログラム領域から切り出す仕様だ。変数名は Z[ ] に固定されている。
電卓のプログラムでそれほど多くの変数を使うことは、あまり無いだろう。しかしZ[インデックス数 ]といった使い方のできる配列は、異なる処理の記述を共通化できるので、ソースコードの記述量の節約に役立つ。但し配列変数へのアクセスは通常変数の4倍程度と遅い。
配列変数へのアクセス速度があまりに遅いので、高速化が必要なプログラムでは、配列変数へのアクセスの回数を極力減らすような工夫を行っている。
▍良いユーザーインターフェースを作れる可能性
fx-5800Pは16桁x4行の液晶ディスプレイが搭載されている。GetkeyコマンドとLocateコマンドにより、電卓としては広い画面を活かして、使いやすいユーザーインターフェースを実現できる点が、最大の特徴だと思う。これには、新世代 Casio Basic の仕様が不可欠でもある。
▍ハードウェアの欠点を補えるようになった [2019/06/10 追記]
・フリックタイプのハードカバーのヒンジの欠点
[2018/02/26 追記]
有志の個人 (takumako様) が fx-5800P をPCリンクするツールを公開なさった。これにより fx-5800P が遙かに役立つようになった。
⇒ ついに fx-5800P がPCリンク可能になった
▍配列変数
配列変数を使うと、変数の数は実質無制限になる。プログラム中で変数領域の確保と解放ができる。変数領域は最大28500バイトのプログラム領域から切り出す仕様だ。変数名は Z[ ] に固定されている。
電卓のプログラムでそれほど多くの変数を使うことは、あまり無いだろう。しかしZ[インデックス数 ]といった使い方のできる配列は、異なる処理の記述を共通化できるので、ソースコードの記述量の節約に役立つ。但し配列変数へのアクセスは通常変数の4倍程度と遅い。
配列変数へのアクセス速度があまりに遅いので、高速化が必要なプログラムでは、配列変数へのアクセスの回数を極力減らすような工夫を行っている。
▍良いユーザーインターフェースを作れる可能性
fx-5800Pは16桁x4行の液晶ディスプレイが搭載されている。GetkeyコマンドとLocateコマンドにより、電卓としては広い画面を活かして、使いやすいユーザーインターフェースを実現できる点が、最大の特徴だと思う。これには、新世代 Casio Basic の仕様が不可欠でもある。
▍ハードウェアの欠点を補えるようになった [2019/06/10 追記]
・フリックタイプのハードカバーのヒンジの欠点
fx-5800P のフリップタイプのハードカバーは、ヒンジが容易に壊れるという明らかに設計上の欠点がある。カシオは一度も対応していない。良い製品なのにとてもこの欠点は非常に残念だ。
⇒ fx-5800P:ヒンジ破損でカバーが取れた
その後、以外に安価に修理対応できることを確認している。ヒンジの修理だけでなく、ほぼ新品の外観にリニューアルできる。
⇒ fx-5800P 破損ヒンジの交換、ついでにリニューアル
⇒ fx-5800P:ヒンジ破損でカバーが取れた
その後、以外に安価に修理対応できることを確認している。ヒンジの修理だけでなく、ほぼ新品の外観にリニューアルできる。
⇒ fx-5800P 破損ヒンジの交換、ついでにリニューアル
・プログラムのバックアップができない欠点
fx-5800P のプログラムファイルのバックアップするには、もう1台 fx-5800P を買ってきて 3Pケーブルでデータ転送するしかない。この欠点に対して有志の方がPCリンクのハードウェアとソフトウェアを開発され、希望者に頒布されている。これで fx-5800P 最大の欠点が解消された。
⇒ ついに fx-5800P がPCリンク可能になった
⇒ ついに fx-5800P がPCリンク可能になった
以下、言語使用をみてゆく。
1.入力
fx-5800Pでは、入力の方法が2種類準備されている。
・ 旧来の入力命令
・ Getkeyコマンド
※ Getkeyは、非常に有用だと思う。
⇒ 旧来の入力命令?の使いこなしは、Casio Basic入門38 から
⇒ ?命令からGetkey コマンドへの導入は、Casio Basic入門43 から
⇒ Getkey と Locate の使いこなしは、Casio Basic入門3 から
1) 旧来の命令: 「?」(入力)命令
この入力命令が実行されると、
・入力を待つ
・[EXE]キーが押されることで入力が確定される
と言う動作を行う。
[EXE]キーで確定されるまでは、関数電卓として搭載されている殆どすべての計算を行えることは、入力命令の最大の特徴だと思う。サイン、コサイン、ルート、対数、指数、数値積分、総和(Σ)....などなど、1行で記述できる計算ならは何でも使える。そして[EXE]キーを押すと、その計算結果が確定され、入力が終了する。プログラムの用途によっては、非常に強力な機能を何の苦労もなく使えるわけだ。
入力命令は、[EXE]キーによる確定が必要なので、逆に確定キーを押すのが煩わしい時には、Getkeyを使う。
但し、fx-9860GII などのグラフ関数電卓では、fx-5800P とは細かい動作が異なり、非常に使いにくいことがある。fx-5800P はうまくチューニングされていて、とても使いやすくなっている点で、fx-5800P が他のグラフ関数電卓よりも優れている。
2) Basic コマンド:Getkeyコマンド
Getkey は、プログラム実行中にどのキーが押されたかを知るためのコマンドだ。電卓の付いている全てのキー(但し[AC]キーは除く)を区別して、それが押されたことが分かる。
If Getkey=34: Then
<何かの処理>
IfEnd
と書くと、「キーコード34のキーが押されたら、(直ちに)<何かの処理>を実行しろ」という処理を意味する。ここで (直ちに) というのがミソ。[EXE]キーによる確定は不要だ。
ところで、34のキーとは [DEL]キーだ。[DEL]キーには、キーコード34が割り振られているわけだ。[AC]キーを除き、全てのキー、例えば矢印キーなどが押されたことを検出できる。
メニューから項目を選択させるような処理には、メニュー番号を押せばスグにその処理へ移行して欲しい。矢印キーの上下左右のキーを押して表示を変えるような目的では、なおさら直ちに反応しなければ意味がない。このような時は、Getkey が有効になる。
但し、キーコードを取得するには、キーが押された時に Getkey コマンドが実行される必要がある。そこで、ループ構造の中で Getkey が繰り返し実行されるようにプログラムを記述すれば良い。
2.データ処理
データ処理と言う言葉は非常に漠然としているが、ここでは、入力されたデータを元に望む出力を得るための処理とする。データ処理はプログラムの核となる部分だ。
ここに新世代 Casio Basic の存在意味がある。fx-5800P の Casio Basic には、必要最低限な機能が揃っている。当ブログでは、実用的なプログラムやちょっとしたアクションゲームを作れる事を紹介している。その程度の機能はあると言うことだ。
具体的な機能の一部を紹介する。
条件分岐
・ If ~ Then ~ Else ~ IfEnd
二者択一で、処理内容を変える時に使う。
取説には書いていないが、If での条件判定に変数を使う時、変数がゼロの時は偽(FALSE)で、それ以外は真(TRUE)となる。
※ fx-5800Pには、多方向分岐コマンド(switch や select など)が無いのが残念だ。
多方向分岐の代わりに、If文のElseの中に新たにIf文を入れ子にする方法を使うが、Else If という記法が可能なので、可読性を確保できる。
・⇒命令
If [条件]:Then [処理]:IfEnd
と同等の処理を行う際、
[条件]⇒[処理]
と記述できる。この命令の最大の利点は、その処理速度にある。If 文の2倍程度速い。非力な fx-5800P では非常に有用。
ジャンプ
・ Goto / Lbl
予め記述したラベルまでジャンプする。
・Isz と Dsz
指定した変数がゼロになった時、ジャンプする。ジャンプ先は、次の次の処理。
ISZ C とすると、変数C を1増やしてから、Cがゼロかどうかの判定を行う。
DSZ Cは、変数Cを1減らしてから判定する。
これらの命令の最大の利点は、その処理速度にある。単純なインクリメントやデクリメントで高速化が可能だ。
繰り返し処理(ループ)
・For ~ To ~ Step ~ Next
カウンタを増やしながら処理を繰り返して処理をする。
Forの後にカウンタ変数の初期値設定。
Toの後にカウンタ変数の終了値設定。
Stepの後にカウンタ増分を設定。Step設定がなければ増分は1。
・Do ~ LpWhile
繰り返しループの最後で、繰り返し継続判定を行う。
LpWhileでの繰り返し継続判定に変数を使う時、変数がゼロの時は偽(FALSE)で、それ以外は真(TRUE)となる。
・While ~ WhileEnd
繰り返しループの最初で、繰り返し継続判定を行う。
Whileでの繰り返し継続判定に変数を使う時、変数がゼロの時は偽(FALSE)で、それ以外は真(TRUE)となる。
制御系
・Prog
サブルーチンを呼び出す。引数や戻り値はない。VisualBasicのプロシージャに相当する。
・Break
繰り返し処理コマンドと併用して、強制的に繰り返しを中止する。
・Return
サブルーチンを終了させ、呼出元へ制御を戻す。
・Stop
プログラムを強制終了させる。
論理演算
・And / Or / Not
論理積 (And)、論理和 (Or)、真偽の否定 (Not)
Xor は搭載されていないが、必要なら論理演算の組み合わせでカバーできる。
関数電卓独特の処理
・Deg / Rad / Gra
角度単位を、度、ラジアン、グラジアンのいずれかする設定
・Dec / Hex / Bin / Oct / signed / unsigned
n進数の基数を設定、負数をとるかどうかを設定
・各種関数
電卓に内蔵されている多彩な関数を使える。
Int( )、Frac( )、log( ) などが特に有用だ。文字列処理機能の無い fx-5800P で数値の桁数を知るには log( ) を活用できる。
・行列計算
取扱説明書のプログラミングの章には明記されていないが、プログラムで行列が使える。
・統計計算
リスト操作、回帰計算のコマンドを使える。統計処理のプログラムには、一からアルゴリズムを考えずに使えて有用だ。
3.出力
fx-5800Pの出力機能は、画面への表示のみが用意されている。外部装置への出力はできない。但し
例外的に、fx-5800P同志の通信機能(別売りのリンクケーブルを使用)を使って、プログラムソースのコピーはできる。
出力(表示)
・◢ (出力命令)
この記号の直前の文字列や変数の値、計算式の結果を表示する。旧来の命令で、使いやすいが制限もある。
・Locate
数値、文字列、変数の値、計算式の結果の、先頭文字の位置を指定する。
※ 計算式の結果を位置指定に使う機能は、状況に応じて表示位置を変えることができるので、非常に役立つ。
・Cls
Clear Screen、画面全体の表示を消す。
関数電卓独特の処理
・EngOff / EngOn
数値の表示の際 f、p、n、μ、m、K、M、G、T、P などの記号を使うかどうかの設定
但し、EngOn とした時、Locate で表示する数値が上記の記号を使わない桁数の時、自動的に末尾にスペース1個が付加されるので、プログラミング時には要注意!
・Norm
指数表示をするかどうかの桁数を設定する。Norm2 としておけば10桁まで表示可能。
・ab/c、d/c
計算結果を仮分数か帯分数で表示する設定。プログラムではあまり使わないだろう。
・Sci
数値を表示する際、有効数字の桁数を設定。これによって数値そのものは変化しない。
・Fix
数値を表示する際、小数点以下の桁数を設定。これによって数値そのものは変化しない。
・Rnd(
変数に格納されている数値を、小数点桁数設定(FIX)の設定に従って丸める。
4.記録(データ保存)
fx-5800Pには、記録(データ保存)機能が準備されていない。例外的にプログラムソースを同型機同志でコピーすることができる。なお、関数電卓の機能として、計算に使うための自作公式を保存できうるが、保存された公式をプログラム内で使えない仕様になっている。
[2018/02/26 追記]
fx-5800PがPCリンク可能になっている。有志の方が開発・頒布なさっている CcLinker を利用すれば良い。最近は海外からの注目されはじめている。
⇒ ついに fx-5800P がPCリンク可能になった
以上、簡単にfx-5800P専用プログラミング言語を俯瞰した。
応援クリックをお願いします。励みになるので...