Casio Basic

From Wikipedia, the free encyclopedia

型付け 動的型付け
主な処理系 インタプリタ
影響を受けた言語 BASIC
Casio Basic
型付け 動的型付け
主な処理系 インタプリタ
影響を受けた言語 BASIC
プラットフォーム 関数電卓
拡張子
    • .g1m
    • .g2m
    • .g3m
テンプレートを表示

Casio Basic(カシオ・ベーシック)とは、カシオが販売するプログラミング関数電卓に搭載される独自規格プログラミング言語の通称である[1]

最初にCasio Basic(以下CB)が搭載された電卓は、CFX-9850G英語版である。この頃のCBの命令はわかりにくく、命令の数が少なく、制約が多い言語であった。その後、fx-5800Pなどの機種が発売され、これらに搭載されたCBにはキーコードを取得したり任意の場所に文字を表示したりすることができるようになった。グラフ電卓(fx-CG50等)が登場するとCBにもグラフを描画する機能が搭載された。このようにCBは電卓の進歩に合わせて進歩してきた。しかしそれに伴う課題も多く見られる。

仕様[2]

ここではfx-5800Pなどに搭載されている比較的新しいCBについて説明する。計算は電卓に入力するように計算式を入力し、その他はBASICのように必要に応じて入力コマンドやループ、条件分岐コマンドなどを入力していく。

例としてオームの法則を利用し電圧、電流、抵抗のうち不明なもの1つを残りの2つから計算するプログラムを挙げる。

"V=1,I=2,R=3"?→S
If S=1
Then 
"I"?→I
"R"?→R
I*R
IfEnd
If S=2
Then 
"V"→V
"R"?→R
V/R
IfEnd
If S=3
Then
"I"?→I
"V"?→V
V/I
IfEnd

まず、最初の行で電圧、電流、抵抗のうちどれを求めるかユーザーに尋ねる文章を表示している。電圧(V)は1,電流(I)は2,抵抗は3を入力する。

(それ以外を入力するとそのまま表示される。そのためこのプログラムのように想定しない値が入力されたときにエラーになるような構文は避けるべきである。)

CBでは「”」で囲んだものは問答無用で表示される。次の?は入力を求めるコマンドであり、ユーザーが数値を入力してEXEキーを押すまで待機する。その値はSという変数に代入される。

Casio Basicでは基本的に変数名は1文字で、A-Z,θ,rが使用可能。すなわち変数の数は29個までとなる。グローバル関数、ローカル関数の概念は存在しない。

(そのため例えば画面に点を表示する関数、PxlOnではX,Yが処理用の変数として予約、使用されるため、誤ってその変数に書き込みを行うとプログラム全体がエラーで停止する。)

次のIf~IfEndでは、先程キー入力を求めSに代入された値がもし1なら、電圧を計算するため電流と抵抗を入力するよう求めている。入力された数はI,Rの変数に代入される。CBではIfを使う場合必ずThenが必要である。ThenとIfEndの間に書いた処理が、Ifで判定した条件が真である場合に実行される。

(もしここで例えば20+30と入力するとその場で計算が行われ、50が変数に代入される。)

次の行では、入力された値が代入された変数同士で計算を行っている。計算する場合は電卓のように計算式を入力するだけである。その結果は変数でもない、最後に実行した結果を保存するメモリに記録される。計算結果をすぐに表示したい場合は、▲のような形の出力コマンドを計算式のあとに入力する。すると計算結果が表示され、ユーザーが何らかのキーを押すまで待機する。

次の行にはまたIfがあるが、これは最初の入力で2を選んだときの処理である。そのため次のIfEndまでは読み飛ばされる。

その次もIf~IfEndがあるが、これは最初に3を選んだときの処理であるため、このあとの処理も飛ばされ、プログラムが終了する。CBの仕様として、先程の最後に実行した計算が保存されるメモリに入っている内容が表示される。

問題点

動作の重さ

多彩な機能を持つCasio Basicであるが、その反面主に動作が重いことが課題である。特にグラフィック関連の処理が非常に動作が遅い。カシオのグラフ関数電卓で最速であるfx-CG50でさえ、画面全体を塗りつぶすプログラムには2時間以上かかる。とはいえ、公式を記録しておいて値を入力し計算する、数十回繰り返し計算をする程度では重いことを感じないため、むしろ使用したほうが良いのは当然である。

動作が重いコマンド

  • 三角関数等
    • 単体で使用するときはほとんど問題になることはないが、Σ、積分、ループなどで使用すると通常の計算の数倍計算速度が落ちる。
  •  : (区切り文字)
    • コマンドを1行に2つ以上書くときに使用するが、これは1つの命令として処理されるため、多用すると動作が重くなる。
  • PxlOn , PlotOn
    • これらのグラフィック関連のコマンドは動作が重く、1命令に数十~数百ミリ秒かかる。
  • Locate
    • Locateは指定された場所に文字列や数値を表示するが、これの処理には数十ミリ秒かかる。
  • 行列、リストの読み書き
    • 大量のデータを処理するため必然的に遅くなる。
  • If文
    • 1回の処理に100ms程度かかる。
  • Disp(⊿)コマンド
    • 画面に値を表示するものであるが、これは値を表示後ユーザーが[EXE]キーを押すまで待機する。待機させない場合は指定した場所に値を表示するLocateを使用する。

メモリ、変数の少なさ

Casio Basicは、変数名を大文字のA-Z,θ,小文字のrのいずれか1文字にしなくてはならない。しかもグローバル変数、ローカル変数の概念がまったくない。そのためCasio Basicでプログラミングを行う場合は変数の数をいかに少なくできるかが重要である。変数を減らす手段として、行列やリストを使う方法がある。リストは他の言語における1次元配列のようなもので、名前は数字で1~27まで使用できる。データの上限は1つのリストあたり999個である。しかし実際はメインメモリの容量による制限で、最もメモリの多いfx-CG50ではほとんどすべてのメモリのデータを消しても2400個が限界である。実際は他のプログラムやデータなどでメモリが使用されるため、1000個程度が限度である。しかしリストを使用するとどこになんのデータが有るかわかりづらくなり、すぐにスパゲティプログラムになってしまう。しかもこのリストは通常計算で使用するリストと共用であるため、誤って大切なリストに書き込みをしてしまうと取り返しのつかないことになってしまう。プログラム開始時にリストはクリアされない。そのため事前にユーザーにリストモードでデータを入力させ、そのデータを用いて大量の複雑な計算をプログラムで行うことも可能である。

Casio Basicでは一応擬似的に2次元配列が使用可能である。それは計算用の行列を2次元配列のように使用することである。Casio Basicには行列を読み書きするコマンドが用意されているが、先述のリストよりもメモリの消費が激しく、他にほとんどデータがないとしても60*60の行列を一個使用する程度で限界である。また、こちらも同様に上書きには注意が必要である。誤って上書きしないようプログラムを開始する前には確認メッセージを表示させたりすると言った工夫が必要である。

しかし、これらの方法は動作が非常に重く、一回の読み書きで数百ミリ秒の時間を要し、何個も値を書き換えたりすると数秒に渡りプログラムが一時停止する。そのため動きがあるアクションゲームなどを制作する際は使用を控えるのが賢明である。また、行列を作成する時、メモリが足りなくなると容赦なくプログラムが停止するため、行列の作成は途中でプログラムが停止しないようプログラムの最初に行うようにし、プログラムの途中で行列を作成、拡張することは避ける。

対処法

これらの問題を解消する方法としては、規模の大きなプログラムやグラフィック描画の多いプログラムを作成する場合はそもそもCasio Basicを使わないことである。極端すぎるかもしれないが、よほどのこだわりがなければ後述のC.Basicなどを使うか、大きなプログラムはアドインアプリケーションとしてC言語で作成することが好ましい。Casio Basicが重い原因は、そもそも大きなプログラムを作成することを前提に設計されていないからである。Casio Basicは電卓の入力作業や公式の暗記などの手間を削減することが目的であり、その仕様をどう見てもゲームなどを作成するための言語ではないと言える。Casio Basicはあくまで電卓の延長であることを意識して使用するべきである。

C.Basic

コマンド一覧[4]

出典、参考文献

Related Articles

Wikiwand AI