Casio Basic入門1

Casio Basic入門
<目次>

誤字脱字・記載ミスや分かりにくい表現などは随時追記・修正します.
最終更新:2019/08/31


はしがき
[2014/11/03追記]

fx5800P_calcfx-5800P を買ってきてプログラムを作ってみようと思い、取扱説明書を見ると、プログラムが分かる人向けのヒントくらいしか書かれていません。

これはヒドイ!!(以前は良かったのに...このあたりは「1.はじめに」で紹介してます)

とりあえずプログラミングを始めたものの、細かいことは、色々と試行錯誤を繰り返さないと分かりません。こうして、取扱説明書には書かれていない詳しいことが、少しづつ分かってきました。

プログラムを作りながら色々と調べているうちに、fx-5800P に搭載されているプログラミング言語:Casio Basic は、かなり優れモノだと分かってきました。プログラミング経験者向けに Casio Basic の面白さを一言で紹介すると、「電卓で使える構造化BASIC風言語 」 です。

なかなか優れている Casio Basic なのに、こんな取扱説明書では、さっぱり使いこなせない人が多いだろうし、経験者が取扱説明書を読むと、未だに古い Basic 風言語と変わらないと思うだろうし、良さを知らないままにプログラミングを諦める人も多いだろうと思うので非常にもったいないと思います。

"新世代 Casio Basic" が使える fx-5800P は、非力なプロセッサしか積んでいないにもかかわらず、まともな実用プログラムを作れます。さらに、fx-5800P はプログラムを呼び出して使う利便性が高く、高機能な fx-9860GII や fx-CG20 よりも便利なことは、あまり知られていないのではないでしょうか? 

自分の必要性に合わせて、いくつもの実用プログラムを作ってみて、分かったこと試してみたこと を含めて、取扱説明書では絶対にわからない Casio  Basic の使いこなしを整理したものが Casio Basic 入門 講座です。それと並行して、取扱説明書では絶対にわからない Casio Basic のコマンドリファレンス 、逆引き Casio Basic を公開しています。

「1.はじめに」 では、Casio Basic や fx-5800P の歴史や特徴を私見を交えて書いていますので、「2.プログラミングとは」まで飛ばしてもらって結構です。



1.はじめに [2015/01/04 修正]

私が初めて手にした電卓が、カシオのFX-502Pという関数電卓でした。手帳サイズでプログラミングできる画期的な製品で、世界中にカシオファンを増やした原動力となったようです。

fx-502P 
手帳タイプのソフトカバーが付属した FX-502P

私がFX-502P を入手した当時は、関数電卓として使っていて、プログラミングの「プ」の字も知りませんでした。その後プログラムに興味を持ち、生まれて初めて作ったのが、FXー502Pのプログラム「反射ゲーム」
画面表示が変化した直後に、どれだけ早く反応してキーを押せるか...そんなゲームでした。
 ⇒ FX-502P / 602P / 603P のプログラム

カシオはFX-502Pに続いて、プログラム互換性の高い後継機として、1981年にFX-602P、1990年にはfx-603Pを発売しました。
FX-602P には取扱説明書だけでなく、「プログラムライブラリー」と言う厚い本が付属していて、それには数多くの実用プログラムが掲載されていました。掲載されているプログラムを入力し、理解し、さらに自分なりに改造することで、プログラミングがどのようなものか、少し分かりました。きちんと動作するサンプルプログラムを参考にして、自分でプログラムを改造する作業が、プログラミングの学習には非常に有効だと実感しました。

これらのプログラム機能は、今思えばアセンブリ言語に近い感じで、電卓のメモリに直接あるいは間接的にアクセスして、ジャンプはインクリメント/デクリメントを行うことができるなど、工夫のしがいがある面白いもので、プログラミングの好きな人には楽しく遊べるものでした。

その後登場したプログラム互換のFX-602P や FX-603P は、アルファベット表示が可能になり、記憶容量が増えたことで、測量計算などの実用に耐えるプログラム関数電卓として不動の地位を得てきました。プログラム言語としての完成度、ハードウェアとしての使いやすさがユーザーに支持された結果でしょう。


プログラミング言語仕様から読み解く Casio Basicの開発史 [2019/08/31 追記修正]

カシオは、プログラム関数電卓とグラフ関数電卓、そしてポケットコンピュータの3系統で、搭載言語の開発を進めている時期がありました (プログラム電卓メモワール1990-12 参照)。ポケットコンピュータはPCの高機能化、小型化、低価格化により市場からその姿を消しました。プログラム関数電卓では、fx-4850P を最後にプログラム関数電卓の新製品が発売されなくなり、fx-4850P 搭載言語の系統のバージョンアップが止まりました。そして、唯一グラフ関数電卓が搭載言語とともに進化してゆきました。

プログラム関数電卓 fx-4000番台の製品に搭載された言語は、試行錯誤の跡がみられ、このシリーズ最終機種の fx-4850P の搭載言語は中途半端な仕様のまま成功せずに終わったと感じています。fx-4850P のハードウェアデザインは fx-5800P に引き継がれましたが、搭載言語はシリーズ初号機の fx-4000P の仕様が 現在の Casio Basic に引き継がれています。

一方で、グラフ関数電卓での搭載言語は着実な進化を見せました。fx-7400Gで初めてBasicコマンドが搭載され、1996発売の CFX-9850G には、ついに GetkeyLocate コマンドが搭載され、現在の世代のCasio Basic に近づきました。但し空行改行や If 文の Then や Else の直後での改行がエラーになる、コード編集画面がデフォルトで上書きモードになるなど、実用的なプログラミング言語としてはもう一歩という感じでした。しかし、これは Casio Basic の歴史上極めて重要な一歩だと言って良いと思います。GetkeyLocate が、Casio Basic の実用性を格段に向上させているからです。⇒ プログラム電卓温故知新 - CFX-9850G の最後の項目 "プログラム電卓の系譜" を参照。


翌年の 2006年に登場した fx-9860G は、基本的に CFX-9850GC PLUS の Casio Basic をベースに改行の問題を解決し、コード編集画面がデフォルトで挿入も度に変更され、プロット系コマンドのバグとも言える理解不能な仕様がうまく整理されました。ここでようやく現在の "新世代 Casio Basic" が登場しました。

fx-9860G の搭載言語からグラフィックス関連とシリアル通信関連のコマンドを取り去り、さらにいくつかのコマンドが改良したものが fx-5800P に搭載されました。fx-9860G 発売と同年のことでした。


fx-5800P での改良点の代表的なものを挙げてみます。

入力命令 ?A では、変数 A に既に入っている値を表示し、変更がなければ [EXE] キーを押すだけで確定できる機能が追加されました。一方、?→A とすれば、A の値を表示せずに新たに入力させます。この ?A の機能は、変更が無ければ [EXE] を押すだけで良いので、作成したプログラムの使い勝手が格段に向上します。現在のところ、この機能があるのは、fx-5800P と fx-FD10 Pro のみで、グラフ関数電卓にはこのような便利な機能はありません。

[FILE] キーでプログラムリストを表示し、そこからプログラムを実行できる機能も、fx-5800P の利便性を向上させる優れた改良だと思います。これが可能なのは、他には fx-FD10 Pro のみです。グラフ関数電卓では、一旦プログラムモードに入らないとプログラムを呼び出せません。

fx-9860G にあった グラフィックス関連とシリアル通信関連のコマンドは、fx-5800P にはありません。fx-5800P をプログラム関数電卓に位置づけるなら、グラフィックス関連のコマンドは不要といっても良いと思いまが、シリアル通信関連コマンドは残して欲しかったと思います。さらに、電卓とPCの間でプログラムファイルをやりとりするPCリンク機能が無いのも fx-5800P の利便性を発揮しきれない仕様上の大きな弱点です。

このような弱点があるものの、fx-5800P は、グラフ機能の無いプログラム関数電卓として、極めて大きく進化した "新世代Casio Basic" を搭載し、プログラム電卓としてバランスの取れた、そして関数電卓としても使いやすい優れた製品です。

歴史を少し遡って、プログラム関数電卓として大成功を納めた FX-502P や FX-602P の最終進化形 の FX-603P は、結果的に21世紀に入っても販売が続き、その製品寿命は10年以上の長きにわたりました。趣味ではなく仕事用に実用プログラムが使われ続け、ユーザーの大きな支持に答え続けた結果なのだと思います。FX-603P の実用品としての完成度の高さの証明でもあります。FX-603P に取って代わるプログラム関数電卓が永らく登場しませんでした。

※参考: プログラム関数電卓ノスタルジア(Casio fx-502P、fx-602P、fx-5800P)

さて、グラフ関数電卓で熟成してきた新世代 Casio Basic を機能制限して搭載した fx-5800P は、しばらく FX-603P と併売されていましたが、ついに FX-603P が生産中止となりました。fx-5800P が プログラム関数電卓 FX-603P の後継機となったわけです。

その後も Casio Basic の改良がグラフ関数電卓で続き、fx-9860Gシリーズで文字列処理コマンドが追加搭載され、ハードウェアとしては高精細カラー液晶搭載した fx-CG10/20 が登場しています。そして 2015年1月時点での最新機種、fx-FD10 Pro は、fx-5800P の利便性と最新の Casio Basic を搭載したハイブリッド機とでも言える、面白い性格を持っています (fx-FD10 Pro は Casio Basic専用機です。fx-9860GII とほぼ同じハードウェアを使いながらアドインが使えない設定にした判断は、販売戦略上のものなのでしょう)。

気がつけば、新世代Casio Basic搭載のプログラム関数電卓 fx-5800P は、2006年の登場から12年を超えており、その製品寿命を超える可能性も見えてきました。使用しているIC類などの部品調達の継続性を考えれば、FX-603P と同様に 10年を1つの区切りとすれば、2019 年には fx-5800P の後継機種が期待されるところです。

2014年12月に、スタンダード関数電卓の新シリーズ fx-JP500, fx-JP700, fx-JP900 (CLASSWIZ シリーズ) が発表され、順次発売が開始されました。高精細液晶の搭載、省電力でありながらCPUの大幅な処理速度向上、その他様々な改良が加えられ、死角が殆ど無い関数電卓と言えます。fx-JP900 のみに搭載された表計算機能 は、データ保存機能が無いので実用的とは言えないものの、実力をアピールする意味は十分にあります。この表計算が、操作性やユーザーインターフェースの面でグラフ関数電卓 fx-9860GII に似ていることは、大変興味深いのです。

高精細液晶と高速・省電力CPUと言う新しいハードウェアに加えて、グラフ関数電卓と酷似した表計算機能を新ハードウェアで走らせる機能のアピールは、発売開始から12年目の fx-5800P の後継機種がそろそろ現実性を帯びてきているのではないかと、大きな期待を寄せています。 

[2018/10/31 追記]:fx-CG50 が登場
2017年春に fx-CG10/20 の後継機として fx-CG50 が欧米で発売開始され、同年10月に日本国内で発売されました。fx-CG50 は fx-CG10/20 とほぼ同じ仕様で、消費電力が大幅に抑えられ、処理速度が大幅に向上しました。そのデザインは fx-JP900 と極めて似通ったものになりました。

最新のグラフ関数電卓 fx-CG50 (2017) 
Casio fx-CG50 の概要

カシオは、プログラム電卓については欧米ならびに中国市場を中心に考えているののが残念なところですが、シャープがプログラム電卓開発から事実上撤退している状況で、日本企業として唯一カシオがプログラム電卓の開発を続けていることは、歓迎したいと思います。但し、特にグラフィック関連は、マクロ言語を出自とする故かVRAMへの転送速度が非常に遅いことから、fx-CG50でさえグラフィックスプログラミングを自由に行えるレベルには至っていません。

さてこのような状況下で、fx-5800P の後継機種の動向が気になります。fx-JP900 と fx-CG50 と同様のデザインで、これらの中間サイズの グラフィック機能を割愛したプログラム関数電卓が fx-5800P の後継として登場すれば面白いと思います。

===== 追記おわり ====


fx-5800Pの特徴

最新の Casio Basic から見れば、fx-5800P 搭載の Casio Basic はサブセット版と言えますが、プログラム関数電卓として不要な機能を省略しただけで、新世代 Casio Basic 搭載機としては、低価格で使い勝手の良い絶妙なバランスの製品です。

上て述べたように、fx-5800P の最大にして唯一の欠点が、作ったプログラムをPCにバックアップすることが出来ない点で、なんとも中途半端な仕様になっています。非常にもったいない。なぜこんな中途半端な仕様にしたのか?機会があれば、是非ともカシオに話を聞きたいところです。

fx-5800P で作ったプログラムは、もう1台の fx-5800Pへ転送することはでき、そのための通信ケーブルがオプションで用意されています。バックアップしたいなら「もう1台買って下さい」と言うわけです。 ここを参照

ところで、この通信ケーブル(3pinシリアルケーブル)は、fx-9860GII や fx-CG20 にUSBケーブルと共に標準添付されているものです。

fx-5800P の後継機種では、同様に3PシリアルケーブルとUSBケーブルを標準添付してPCリンク機能を実現してもらいたいものです。これがあれば、fx-5800P のプログラムも PCにバックアップ可能になるからです。

なお、私は作ったプログラムをエクセルに転記して、バックアップをしています。
[2014/09/30 追記] バックアップ用に、専用通信ケーブルと2台目のfx-5800P を購入してしまいました。但し、エクセルへのソースコードの記録は続けています。→ ここを参照


fx-502P&fx-5800P 
fx-502P と fx-5800P (写真は「プログラム関数電卓ノスタルジア(fx-502P、fx-602P、fx-5800P)」掲載のもの)


My_func_calcs_20190803
My_graph_calcs_20190803
 
※ 管理人所有のプログラム電卓


fx-5800P は、薄型、軽量で上着の内ポケットに十分入る大きさです。そして、4行x16桁の液晶ディスプレイを搭載し、加えて新世代 Casio Basic が搭載されています。 高機能グラフ関数電卓 fx-9860GII も入手し、fx-5800P と比較していますが、改めて fx-5800P のバランスの良さを再認識しています。新世代 Casio Basic は、実用プログラムに加えて、ちょっとしたアクションゲームを作れるレベルの構造化Basic です(本ブログでも、いくつか紹介しています)。さらに、fx-5800Pは実売で6000円台なので圧倒的に購入しやすいのです。



さて、新世代 Casio Basicを搭載した fx-5800P の取扱説明書では、プグラミングが分かっている人しか分からない程度の記述しかありません。その上、プログラム事例は殆ど紹介されていません。カシオは、紙のプログラムライブラリーやウェブでの情報も国内では用意するつもりはなさそうです。

[2014/1/21 追記] 
fx-CG20の簡単なプログラミングの紹介を見つけました。申し訳ない言い方ですが、とりあえずやっつけたといった内容に感じられ、電卓の使い方の導入で終わっています。それが目的ならば敢えて申し上げることはありませんが、プログラミング入門としては、あまり力を入れているとは思われません。→ここ

一方で、海外では、カシオのホームページで動画による様々な説明(Webinar)が紹介されています。但し全て英語なので、明らかに日本人向けではありません。日本メーカーであるカシオ製品のサポートが、日本で積極的に行われないのは、非常に残念です。

Webinarの一例

そこで新世代 Casio Basic の良さを共有したいと考え、私なりの「Casio Basic入門」を公開することにしました。fx-5800P のプログラミングのしきいを下げてみよう、という試みです。合わせて、プログラミング経験者、特に長らく Casio プログラム電卓でプログラムを作ったことのある方には、新世代 Caso Basic が大きく進化していることを伝えたいという気持ちもあります。

[2017/08/06 追記]
この連載を始めた当初は、fx-5800P しか持っておらず、その後 fx-9860GII、fx-9860GII SD、fx-CG20、fx-CG50 を入手し、それらの Casio Basic でプログラムを作っています。その結果 これらの Casio Basic は互いに一定レベルの互換性が保たれるように考慮されていることが分かっています。fx-5800P で Casio Basic を使いこなせるようになれば、fx-9860GII シリーズや カラー高精細液晶の fx-CG20 / fx-CG50 でも問題無く使えるということです。

[2018/12/26 追記]
有志の方により CcLinker が開発され、fx-5800PのPCリンクが実現され、プログラムの保存や導入が容易になりました。
- 開発者 takumako様による CcLinker のサイト
- 当ブログの CcLinker 紹介記事


2. プログラミングとは
[fx-5800P] [fx-9860G (SD) fx-9860GII (SD) / fx-CG20 / fx-CG50]

プログラムの「プ」の字も知らない方のために、最初にあらかじめ知っておいて頂きたい基本的な事柄を紹介します。


プログラムって何だ?

プログラムと言うのは、「手順書」です。そして予め用意された単語と文法を使って、手順を書くことをプログラミングと言います。
手順を書くために使う言葉を「プログラミング言語」と言います。

そして、その単語と文法が分かればプログラムを書けるようになるわけです。

プログラムを読む相手は電子回路ですから、そこには情緒も感性も不要です。むしろ曖昧さがは有ってはなりません。厳密に一通りにしか解釈できないように書くために、単語や文法が考えられています。

言葉に動詞や文型があるように、プログラミング言語にもコマンド(命令)やステートメント(文)があります。これらの単語を覚え、文法を覚えるのは難しくありません。普通の外国語に比べると覚えることはとても少ないのです。Casio Basic については、覚えるべき事柄が非常に少ないので、さらに楽です。



プログラミング言語とは?

プログラムは手順書なので、基本的にはコマンド(動詞)と必要な名詞(目的語)をステートメントの規則(文型)に従って書きます。

「~をしなさい」  「~に~をしなさい」

といった短い文の組合せと繰返しで、プログラムは構成されます。


プログラミング言語には、多くの種類があります。C言語、java、BASIC、FORTRAN などを見聞きしたことは有りませんか?これらは最もよく用いられる代表的な言語です。これらの言語に一般的な優劣は有りませんが、それぞれ得意とするものが異なっています。

なお、これらの多くはアメリカで発明されたので、英単語から派生した単語を使い、語順は英文法に近くなっています。「O に V しなさい」 は、「V O」 といった語順になります。「ピアノを弾きなさい」「Play piano」 となるのと同じです(動詞 + 目的語)。

fx-5800P や fx-9860GII などのカシオのプログラム電卓には、BASIC が内蔵されています。但し、カシオが作った BASIC なので、Casio Basic と呼ばれています(特に海外のサイトでは、この表現をよく見ます)。基本的な単語や文型はパソコンで使う BASIC とほぼ同じです。

一部カシオ独自のものがありますが、古くからのユーザーのために残しているとのことです。古くから採用されていた独自のものは、当ブログでは旧来の命令と読んでいますが、使い勝手が良いので残っていても良いと思います。

ちなみに、Casio Basic で検索すると、おかげさまで当ブログがヒットしますが、CASIO Basic はカシオ時計のブランドだというのが分かります。



プログラムで計算

プログラムを書く時に、計算をさせることもできます。

1234 x 5678

とプログラムに書けば、電子回路が計算してくれます。プログラムを書く時に計算結果を知る必要はありません。

但し、上の計算結果を知るためにわざわざプログラムを書く人はいないでしょう。電卓のキーをチョイチョイと叩けば答えが出ますね。

上のように決まった数でなくて、色々と異なった数のかけ算をしたい時、プログラムが役立ちます。

A = 1234
B = 5678

としておいて、

C = A x B
Print C


とプログラムを書くと、かけ算の結果を画面に表示します。この書き方はパソコンで使う一般的なBASICの書き方です。

A x B は、A や B に色々と異なった数を入れると、異なった答えを出してくれます。これを Casio Basic で書くと、

1234→A
5678→B
AxB→C


正確に、このように3行のプログラムを書いて、それを実行させると、画面には 7006652 と計算結果が表示されます。


前置きが長くなりましたが、ポイントは以下の6項目です。

1) パソコンのプログラミングは、こんなに簡単ではありません
プログラム電卓ならではの簡便さです。

2) A や B は変数
変数は、数を入れておく容器です。A や B は容器の名前です。
予め、容器Aに数1234を入れ、容器Bに5678を入れておきます。
そして、AxB は、容器の中身の数のかけ算をしなさい、と言うプログラムです。
このように、プログラムでは頻繁に「変数」を使います。

fx-5800P や fx-9860GII などのプログラム電卓で使える変数は、アルファベットの A~Zの26文字です。但し、配列変数 (fx-5800P) や 行列 (fx-5800P や fx-9860GII など) という変数を必要に応じて追加して使うことができます。配列変数や行列については、その使い方を含めて、後で説明します。今は忘れてもらって結構です。

3) → は代入命令
変数Aに 1234を入れることを、「変数Aに1234を代入する」と言います。
そして、Casio Basic では、代入をしなさいと言う「代入命令」を 「」と言う右矢印の記号で表現します。

の左のものを、右へ代入すると決められています。
1234→A
のように、数字を変数に代入するだけでなく、変数を変数に代入できます。

例えば、

1234→A
5678→B
A→B


とすると、変数Bの中身は、5678でなくて、1234 に変化します。

CasioBasicコマンドリファレンス: → (代入命令)

パソコンの Basic では、変数 A に 1234 を代入するとき、

A = 1234

と書きます。代入命令については、Casio Basic は独特なものですが、 記号は代入の方向を示しているので、却って分かりやすいと思います。



4) は出力命令

これも Casio Basic 独特の命令です。◢ は出力、つまり画面表示するだけでなく、併せて一時停止の機能があります。

上の3行のプログラムは、上から下へ順に実行されます。

AxB

は、AxBの結果を表示して、そこでプログラムの実行を一時停止しなさい、という命令です。そして、[EXE] キーを押すと一時停止が解除されます。これも命令に含まれる機能です。

CasioBasicコマンドリファレンス: (出力命令)


5) ?は入力命令
変数Aと代入命令を併せて使って、

?→A

と書くと、画面表示が、

?

となり、そこでプログラムが一旦停止します。

の表示は、キー入力をしてください、と言う意味です。そして、プログラムが一時停止し、何かキー入力を待ちます。[EXE] キーを押すと入力内容が確定され変数Aに代入され、プログラムの一時停止が解除されます。これも Casio Basic 特有の命令です。

実はここには、Casio Basic 特有のおもしろい面があります。
画面に

?

と表示され、入力が促されている時に、例えば

9999÷3

と入力して[EXE] キーを押すと、この計算結果が変数Aに代入されます。

fx-5800P は関数電卓なので、様々な関数機能が内蔵されています。そこで、? が表示されて入力待ちの状態で、sin(30) と入力して[EXE]キーを押すと、計算結果の 0.5 が変数 A に代入されます(DEGモードの時)。関数電卓特有の機能を活かした入力命令になっていることが分かります。

"A="?→A

と書くと、画面には" と "で括られた文字

A= ?

のように表示され、入力待ちになります。

"A="?→A
5678→B
AxB


は、キー入力した数字を変数Aに代入して、AxBを計算した結果を表示するプログラムです。様々な数値や計算結果に5678を掛け算した結果を表示します。

CasioBasicコマンドリファレンス: ? (入力命令)


6) プログラムは上から下へ連続実行
プログラムは、上から下へ連続的に実行されます。

そして、出力命令や入力命令は、一旦停止の機能があるので、そこで実行が一旦停止します。この一旦停止は特別な例です。さらに、実行の流れを変えるコマンドや文があり、これらを使えば上から下への実行順序を変えることができます。

このような明示的なコマンドや文が無い限り、プログラムは上から下へ連続的に実行され、プログラムの一番下の行で、完全に実行が停止します。

プログラムは上から下へ実行される原則は、当たり前のように感じられるでしょう。しかし、これを忘れるとプログラムの動作が分からなくなるものです。とても重要な原則なので、必ず覚えてください。


関連記事:
- プログラム関数電卓でプログラミング
- fx-5800P【プログラミング入門】:プログラム作成から実行までの操作



*****


次からは、実際にプログラムを作りながら、プログラムの単語や文型をみてゆきます。


つづく...

⇒ CasioBasic入門2 / 目次



応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


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

リンク集 | ブログ内マップ
関連記事

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

楽屋裏 - 構造化プログラミング

楽 屋 裏
e-Gadget

2014年09月28日 追記
2017年08月27日 追記
2019年08月21日 追記修正


CasioBasic入門」シリーズは、改めてキチンと勉強する良い機会になっています。CasioBasic入門12 で、構造化プログラミングについて、チラッと触れたのですが、改めて整理をしてみます。


50年くらい前、COBOLPL/IFORTRANPascal などの高級言語が使われるようになって、ソフトウェアの生産性と品質が向上してきました。時期を同じくして、ソフトウェアの需要が増加したため、生産性や品質の向上が追いつかなくなりました。それを「ソフトウェア危機」と呼び、なんとかしなければヤバイという時代がありました(当然私はリアルタイムでは知りませんが、プログラミング雑誌「C Magazine」 などを通して知っていました。

この当時は、アセンブリ言語がプログラミングの主流でした。この言語はプロセッサの動作に近い命令を記述するものなので、ジャンプ命令が非常に多く(gotoの嵐と言っても良い)、プログラムコードからプログラム動作を理解し解析することが簡単ではありません。プログラミングは工芸であり、匠の技の世界でした。作ってみて動かして、不具合が見つかったらそれを直すと言う方法では、生産性や品質の向上は容易に進みません。こういう背景の中、構造化プログラミングStructured Programmingと言う概念が出てきました。

プログラミングの匠が活躍していた時代に、生産性と品質の向上を目指した新しい考え方構造化プログラミングは簡単には受け入れられませんでした。パラダイムシフトの前には必ず旧来の考え方との激しい争いがあるのは、いつの時代でも同じですが、当時も大論争が勃発しました。それでも、世の中はより良いプログラムをより多く必要としていたわけで、それに応えてゆく必要はあり、それが新勢力と旧来勢力の共通目標ではあったのでしょう。ついに両者が歩み寄ることが出来ました。

私が調べる範囲では、その落としどころのきっかけを作ったのが、1974年に発表された Donald Knuth の論文 "Structured programming with goto statement" のようです。この説が最も説得力があり、現実的なように思われます。

ここに落ち着くまえには、2つの重要なポイントがあるとの指摘があります。

1966年にCorrad Boehmら から提案された「構造化定理」

これは、どのようなプログラムでも、下図に示すような、連結(Concatenation)、選択(Selection)、反復(Iteration)の3つで表現できると言う数学理論です(引用)。

構造化定理 

要するに、goto がなくてもプログラムを作れると言うことを言っています。それ以上でもそれ以下でもない、単なる数学理論です。この理論が出された時は「構造化定理」とは呼ばれておらず、goto使用禁止を唱える人たちによる命名と言う話もあります。さらに細かいことですが、ここでは「連結」を使っていますが、「順」、「順次」、「順接」と言う和訳も見られます。



1968年にEdsger Dijkstraが書いた書簡"Goto statement considered harmful"

これは、Association of Computing Machinery (ACM) に送られた書簡で、書簡のタイトルgoto文は有害である」通りに、極めてストレートにgoto文の使用禁止を主張するものです。goto文を使うと、プログラムは簡単にスパゲティ構造になり、これには異論の余地はありません。

これが大論争に油をそそいだようです。もうこうなると、どこまで行っても平行線、宗教論争の様相であったに違いないと私は思います。Boehmの構造化定理がいくら数学的に正しくても、それまで goto文を使ってプログラムを作っていたプログラマが、いきなり使うなと言われても、そう簡単に受け入れられるものではないことは想像に難くありません。

ネットで検索すると、今でもgoto論争を見ることができ、そこではダイクストラ (Dijkstra)の名前が必ずでてきます。それくらい根源に迫る劇薬のようなものなのだと思います。



このような歴史的背景があって、10年近くたってから出された Knuth の論文 "Structured programming with goto statement"「goto文を使った構造化プログラミングは、goto使用是非論争を一旦横に置き、大目標である生産性と品質の向上を達成する構造化プログラミングとは「読んで分かりやすいソースコードを書くこと」であり、非常時には goto もやむなし、と言う大人の議論だと思います。

私の主張: Gotoは用法・用量を守って使いましょう! を支持するものでもあります。

実際問題、2000~3000行の中規模のプログラムを作った経験(個人の趣味で1万行超えの大規模プログラムを作ることは滅多に無いでしょう)では、絶対に必要な時以外に goto文を使うと、あとで絶対に自分の首が絞まります。

私は、エラー処理や例外処理には goto を使っても良いと自分で決めています。この使い方は、goto のジャンプ先が、必ずエラー処理や例外処理になるので、むしろプログラムの流れが明確になる利点があります。

落としどころとして Knuthの論文が受け入れられた歴史的事実を知ることは、考え方に幅を与えるものと思います。今では、構造化プログラミングは空気を吸うくらい当たり前になっているのでしょう。普通にC言語を使えば、自然にこの手法になります。と言うのも、最近の高級言語 (最近のBasic を含む) は構造化プログラミング言語として作られているので当然なわけです。これらには例外処理専用のステートメントが準備されているものがありますが、内部的には goto を使っていて、外から見えないだけだと言えます

生業としてのプログラミング経験の無い私の目には、goto是非論争は子細なことのように映るのです。



Casio Basicは構造化プログラミング風言語

構造化プログラミングは、「読んで分かりやすいプログラムを書こう」という目標で、以下の方針でプログラムを作ることです。

1. 構造化定理に出てくる 1)連結、2)分岐、3)反復 に加えて 4)呼び出し のみで構成されるブロックを作る。

2. このブロックは出口と入り口が1つだけでなければならず、ブロックの連結でプログラムを構成する。

3.Goto はなるべく使わない。使う場合は、先へ進むGoto のみを使い、後戻りするGoto は使わない。


CasioBasicは、これらの感覚でコーディング可能です。

1) 連絡: 要するにプログラムが上から下へ動作する、実はこれは大切なこと

2) 分岐: If文や⇒命令があります。

3) 反復: Doループ、Whileループがあります。

4) 呼び出し: サブルーチンや関数の呼び出し。プログラム呼び出しの Prog コマンドがあり、関数電卓の機能を呼び出す多くの関数がある。

そして、プログラム記法として、処理内容別に「連結」で繋がるブロックを作ることが最も大切です。ブロックとは、複数の処理をまとめて区切り、出口と入り口が1つだけになるようにした機能のかたまりです、。

[2019年08月20日 修正] 
構造化プログラミングを行う手続き型言語の要件として、ユーザー定義の関数とローカル変数(局所的変数) がありますが、Casio Basic では仕様上これらが使えません。つまり、サブルーチンに引数を渡したりサブルーチンから戻り値を返せません。また、ローカル変数(局所的変数)が使えず、変数は全てグローバル変数(大域変数)として扱われます。
逆に考えれば、大域変数を利用してサブルーチンとの間での値のやりとりが可能です。そこで、コーディングの工夫で関数のようなサブルーチンを作れます。この手法の一例としては、入力ボックス3桁区切り出力 を紹介しています。そこで Casio Basic は構造化Basic ではありませんが、Casio Basic は構造化風プログラミングが可能です。

変数のスコープ(適用範囲) は構造化プログラミングでは重要ですが、それ以上にブロック構造で構成されたコードを上から下へ流れるような制御構造で書くスタイルは、さらに重要だと考えています。現在の "新世代Casio Basic" は、機能別ブロック構造が上から下へ流れる構造をコーディング可能で、このような構造化プログラミングを意識したコーディングは、実際に分かりやすいコーディングに繋がります。現在連載している CasioBasic入門でも、意識的に構造化Basic風プログラミングをしていて、機能別ブロックが連結で繋がるコーディングを体験してもらいながら、処理の変更や追加が楽に行えることを紹介しています。

ちなみに 海外のみで販売されている fx-CP400 や fx-CG500 に搭載されている Casio Basicは、構造化Basicと言えます。定義上は構造化Basic になっていますが、実はこれが極めて使いにくいだけでなく、処理速度がかなり遅いものになっおり、実用プログラムを作って使おうという気にとてもなれないほど中途半端なものです。さらなる進化が望まれます。極めて使い勝手の悪い構造化Basicであり、現在のところ構造化Basicを目指して試行錯誤の段階ではないかと思われます。

実用上は 構造化風プログラミング言語である Casio Basic の方が遙かに使いやすく、処理速度もグラフィックスプログラムを除けば十分速い仕様に、とてもうまくまとまっています。プログラミングが楽しめる言語と言えます。

なお、"新世代 Casio Basic では、使いやすくするために、Basicコマンドを導入する前の 各種ジャンプ命令をそのまま残していますが、それゆえに Goto コマンドの内部動作が複雑になっています。具体的には、多重ループとカウントジャンプの組み合わせで発生する異常動作対策のために Goto 0:Lbl 0 という記述を使います。詳しくは、
ここを参照 ください。
================


ちょっと脱線...

オブジェクト指向プログラミング

構造化プログラミングは30年以上も前に生まれたもので、今ではその問題点がハッキリしていて、それを解決するために考えられた「オブジェクト指向プログラミング」が主流になっています。

プログラムは、手続きとデータから成り立っています。

構造化プログラミングは、プログラムの流れの制御を構造化するもの、つまり手続きを管理するものです。しかし、データについては何も言っていません。プログラムの中の色々な局面で、データに自由にアクセスすると、データの管理が出来なくなります。goto文を野放しにすることで制御構造がグチャグチャになるのと同じことが、データ管理で起きます。これを何とかしよう、と言うのがオブジェクト指向なのです。

私自身は、Visual C++ を使ってきており、最近 C# を使い始め、オブジェクト指向プログラミングの経験だけはありますが、オブジェクト指向プログラミングについて正しくまとめられるかどうか自身がありません。ただその有効性と重要性は肌感覚として認識しているので、少し触れておこうと思います。

プログラムの中から自由にデータアクセスすると、問題が有ったときにプログラム内のどこで誤ったデータ操作をしたのかを見つけるのがかなり面倒になります。そこで、データへのアクセスを大幅に制限してしまおう、と言うのがオブジェクト指向プログラミングの根本にあります。

読み書きできるデータは変数なわけですが、その変数には大域変数(グローバル変数)と局所変数(ローカル変数)があります。大域変数とは、プログラム内のどこからでも自由にアクセスできるので、これが問題になります。

オブジェクト指向プログラミングは、大域変数を無くそうと言うものです。



話を戻して...

CasioBasicはオブジェクト指向ではない

CasioBasicにオブジェクト指向は関係ありません。変数は大域変数のみ、同じ変数に異なるプログラムからアクセスが自由に行える仕様です。CasioBasicには局所変数はありません。

GotoLbl で使うラベルの及ぶ範囲は、1つのプログラム内に制限されるのですが、まぁラベルは変数でないし、使えるラベルは英数字1文字に限られるので妥当な仕様です。

使える変数も極めて限られ、A~Z、そして配列変数Z[ ]のみです。頑張って管理するしかありませんし、管理しきれる範囲内と言えましょう。



ですから、CasioBasicを使う場合は、構造化プログラミングを行うのが最良の道と言うわけです。

見方を変えると、30年前の最新技術が、今や単4電池1本で何ヶ月も動作する電卓の中に詰まっているわけで、これは素晴らしいことだと思うのです。




応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: fx-5800PCasioBasic構造化プログラミングプログラミング入門プログラム関数電卓

リンク集 | ブログ内マップ
関連記事

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

MOD( - コマンドリファレンス

Casio Basicプログラミング - コマンドリファレンス
<コマンドリファレンス・トップ>

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

2018/08/17
追記修正 2018/08/18


[純正 / C.Basic] [FX / CG]


MOD(




整数の剰余を計算する。

(書式) MOD(A,N)
整数 A を 整数 N で割った余りを返す。

(キープレス) [OPTN] [F6](▷) [F4](NUM) [F6](▷) [F4](MOD)

(例)
 MOD(7,3)
※ 7 を 3 で割った余り 1 を返す。

(例)
  14→A
  5→N
  MOD(A,N)→M
  Locate 1,1,"M="
  Locate 3,1,M
  ※ 14 を 5 で割った余り M = 4 を出力する。

(注意) A や N が負の整数の場合は、AN で割った余りにならない。
MOD_Schematic2  
AN が負の整数の場合は、上表から分かるように 0, 1, 2 が繰り返すような計算結果になる。

※ 取扱説明書には "除算を行った際の余りを求める関数" とあるが、必ずしも正しくない。
※ この仕様は Casio Basic 特有のもので、特定の処理では役立つが、自然数に限定して使うのが良いかも知れない。



応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 



keywords: プログラム関数電卓、Casio Basic、C.Basic、プログラミング



関連記事

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

コマンドリファレンス - Casio Basicプログラミング

Casio Basicプログラミング - コマンドリファレンス・トップ
<目次>

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

2018/01/09
追記修正 2019/08/17


純正Casio Basic と C.Basic に共通のコマンドがあり、C.Basic で純正コマンドを拡張したものがあり、さらに C.Basic 独自のコマンドがある。

入力コマンド


出力コマンド
 [純正 / C.Basic] [FX / CG] Menu

制御コマンド
 [純正 / C.Basic] [5800 / FX / CG] If ステートメント
 [純正 / C.Basic] [5800 / FX / CG] For ステートメント
 [純正 / C.Basic] [5800 / FX / CG] While ステートメント
 [純正 / C.Basic] [5800 / FX / CG] Do ステートメント
 [純正 / C.Basic] [5800 / FX / CG] Prog
 [純正 / C.Basic] [5800 / FX / CG] Return
 [純正 / C.Basic] [5800 / FX / CG] Break
 [純正 / C.Basic] [5800 / FX / CG] Stop

 [C.Basic] [FX / CG] Switch ステートメント
 [C.Basic] [FX / CG] ElseIf
 [C.Basic] [FX / CG] Gosub



 [C.Basic] [FX / CG] Local
 [C.Basic] [FX / CG] ACBreak

文字列
 [純正 / C.Basic] [FX / CG] + (文字列結合)
 [純正 / C.Basic] [FX / CG] StrJoin( 
 [純正 / C.Basic] [FX / CG] StrLen(
 [純正 / C.Basic] [FX / CG] 
StrCmp(
 [純正 / C.Basic] [FX / CG] StrSrc(
 [純正 / C.Basic] [FX / CG] StrLeft(
 [純正 / C.Basic] [FX / CG] StrRight(
 [純正 / C.Basic] [FX / CG] 
StrMid(
 [純正 / C.Basic] [FX / CG] Exp▸Str(
 [純正 / C.Basic] [FX / CG] Exp(
 [純正 / C.Basic] [FX / CG] StrUpr(
 [純正 / C.Basic] [FX / CG] StrLwr(
 [純正 / C.Basic] [FX / CG] StrInv(
 [純正 / C.Basic] [FX / CG] StrShift(
 [純正 / C.Basic] [FX / CG] StrRotate(

 [C.Basic] [FX / CG] ToStr(
 [C.Basic] [FX / CG] StrChar(
 [C.Basic] [FX / CG] StrCenter(
 [C.Basic] [FX / CG] Hex(
 [C.Basic] [FX / CG] Bin(
 [C.Basic] [FX / CG] StrRepl(
 [C.Basic] [FX / CG] 
Sprintf(
 [C.Basic] [FX / CG] 
文字列変数 Str

座標変換
 [純正 / C.Basic] [FX / CG] Pol( / Rec(

関数
 [純正 / C.Basic] [FX / CG] MOD(


グラフィックス


行列



応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: プログラム関数電卓、Casio Basic、C.Basic、プログラミング

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




関連記事

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

fx-5800P で Mod を使いたい - Casio Basicプログラミング

Casio Basicプログラミング
<目次>

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

2015/06/12
修正 2018/08/17

[純正] [5800P]
fx-5800P で整数の割り算の余りを求める Mod 関数を使いたい。



カシオのグラフ関数電卓 fx-CG50 / CG20 や fx-9860GII などに実装されている Mod 関数が、fx-5800P には無い。そこで、fx-5800P のプログラムで Mod 関数と同じ機能を実装する。


fx-9860GII などのグラフ関数電卓の Mod 関数
Mod は剰余を得る関数。fx-CG50 / CG20 や fx-9860GII では、1373 で割った余りは、Mod (137,3) で得られる。整数を格納した変数 AN を用いて、Mod (A,N) とすれば、AN で割った余りが求められる。


fx-5800P で Mod 関数と同じ機能を実現する
正の整数 A を 正の整数 N で割った時の商 Q と余り M は、以下の関係になる。

A = QN + M  ・・・(1)

一方、商 Q は以下のように現せる。

Q = Int(A÷N)  ・・・(2)


式(2) の Int( ) は、小数点を以下を切り捨てた結果の整数を求める関数だ。
式(2) を使って、式(1)の Q に代入すると、

A = N・Int(A÷N) + M

従って、式を変形して、余り M は以下の式(3)で現される。

M = A - N・Int(A÷N)   ・・・(3)


fx-5800P では、Mod(A,N) の代わりに以下の記述をすれば良い;

A-NInt(A÷N)

[2019/08/17 修正]
但し、Casio BasicMOD(A, N) と同じ動作とするには、A ≧ 0、N ≧ 0 (A, N0以上の整数) が前提条件となる。




応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 



keywords: プログラム関数電卓、Casio Basic、C.Basic、プログラミング

リンク集 | ブログ内マップ
関連記事

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

fx-5800P Casio Basic をPCでコーディング - CcEditor

2018/02/12
追記修正 2019/08/13

fx-5800P の Casio Basic をPCでコーディング - CcEditor

[2019/05/06] CcEditor が Ver 2.2 にアップデート
ダウンロードはこちら


Pclink_fx-5800P_2
fx-5800P の Casio Basic プログラムがPCとデータリンク可能になったことを既に紹介している。

ついに fx-5800P がPCリンク可能になった

一旦PCにバックアップされたプログラムをPC上で編集するためのエディタ - CcEditor が、同じく takumako様により公開されている。

CcEditor は、CcLinker でバックアップしたプログラムの編集だけでなく、最初からプログラムを書ける。さらに fx-5800P で公開されていない隠し機能を使って、Casio Basic を拡張して使うこともできる。

そこで、実際に CcEditor を 現時点で最新バージョンの Windows 10 で使ってみたので、紹介する。


目 次

  CcEditor のダウンロードと起動

  CcEditor の基本コンセプト

  CcEditor の操作と拡張機能
    CCLファイルのインポート&プログラム変更 ⇒ fx-5800P へ転送
    CcEditor だけでプログラム作成 ⇒ fx-5800P へ転送





CcEditor のダウンロードと起動

CcEditor 最新版は ダウンロードページ からダウンロードできる。

ダウンロードし最初に実行すると、Windows の保護機能が発動する。

PC_Protection.PNG

詳細情報 をクリックすると [実行] ボタンが現れるので、これをクリックして 実行。次回からは保護機能の警告は出ない。


[2018/08/07 追記]
 CcEditor Ver 1.6e 以降は、この問題を回避するために フリーの圧縮解凍アプリ CGA にで圧縮されたファイル(拡張子がCGA)での提供に変更されている (詳しくはコチラを参照)。



<目次に戻る>



CcEditor の基本コンセプト

CcEditor の基本コンセプトを理解するとスムーズに使える。先ず File メニューを示す。
Booted_CcEditor13.PNG

Project (プロジェクト)、Build (ビルド)、Import (インポート) という項目があることに着目して欲しい。

fx-5800P から CcLinker でPCにバックアップすると拡張子が ccl の CCL ファイルフォーマットになる。
また CcEditor が扱う専用ファイルフォーマットには、CCLファイル に加えて拡張子が cce の CCEファイルがあり、CcEditor で編集した内容を保存するために用いる。CcEditor の編集画面は、fx-5800P のプログラム編集画面よりもコードが見やすくなっており、そのための特殊文字や制御文字を加えて内容を保存するための専用フォーマットにしているのが CCEファイルだ。

さて、CcEditor は単なるエディタではなく、簡易的なプログラム開発環境になっていると理解すると良い。つまり CCEフォーマットで扱うファイルは Project (開発プロジェクト) ファイルという扱いになっていて、fx-5800P に転送できるフォーマットになっていない。

そして編集が終われば、一旦 Build (ビルド)という操作を行って、fx-5800P に転送するための最終的な CCLフォーマットに変換する。この概念は、コンパイラ型言語 (C++ や C# など)と同様で、プログラムコードはプロジェクトファイルとして編集・保存し、これをコンパイル&ビルドすることで、実際に使える実行ファイルや中間コードファイルに変換する、という考え方に基づいている。

なお、File メニューに Import (インポート) 項目があり、これは CCL ファイルを取り込む操作だ。


以上をまとめると、CcLinker でバックパップした CCL ファイルImport (インポート)で読み込んで編集できる。それをファイルとして保存するには、CCE ファイル ( = Projectファイル) として保存する。CCEファイルを Build (ビルド)すれば fx-5800P に転送可能な CCLファイルに変換して保存する。

CcEditor で最初からコーディングすることもできる。その場合も CCE ファイル (= Projectファイル) として編集・保存する。或いは Build (ビルド)することで fx-5800P に転送可能な CCLファイルとして保存する。いずれにせよ CcLinker で fx-5800P に転送する前に、CcEditor で Build して CCLファイルに変換しておく必要がある。

以上の概念を理解すると、CcEditor をスムーズに使えると思う。
<目次に戻る>



CcEditor の操作と拡張機能

代表的な使い方を試したので、それを紹介する。拡張機能は随時追加されているので、ここでは全て触れていない。

[2019/05/08 追記] デバッグモード
デバッグモードが秀逸だ。fx-5800Pを CcLinker で接続した上で CcEditor の画面でデバッグができる機能だ。指定変数値のウォッチ、ブレークポイントの設定が可能で、PCの広い画面でデバッグができるため、プログラム全体の見通しが良くなり、とても効率が良い。⇒ デバッグモードの説明

詳細は takumako様のCcEditorのページで確認して欲しい。


CCLファイルのインポート&プログラム変更 ⇒ fx-5800P へ転送

初めて使うことを想定して、少し細かく説明する。

題材として、以前紹介している ピタゴラス数を計算して表示するプログラム (PYTHAGORAS) を変更して fx-5800P へ転送してみる。

PYTHAGORAS の CCL ファイル (PYTHAGORAS COMP 0142.ccl) のダウンロード
事前にダウンロードしたファイルを 全て大文字のファイル名 PYTHAGORAS として fx-5800P に転送して欲しい。その上で、以下の説明を見ながら、実際に操作して進めると分かり易いと思う。。

さて、CcLinker で fx-5800P から (再度) PCに転送し、ファイル名を小文字混じりの Pythagras.ccl として転送 (バックアップ) する。操作方法は "ついに fx-5800P がPCリンク可能になった" 参照。

CcEditor を起動し、PYTHAGORAS.cclImport で読み込む。
Import_Pythagoras13.PNG 

ファイル選択ダイアログで、PYTHAGORAS COMP 0142.ccl を選んで、[開く] をクリックする。

PYTHAGORAS COMP 0142.ccl が読み込まれ、ソースが表示される。
Imported_Pythagoras13.PNG 

このプログラムは、終了させるには [AC] キーを押す。そこで、[AC]たけでなく [EXIT]キーでも終了できるように変更してみる。
ここでは、例えば下から9行目の Doの下に

Getkey=73⇒0→L

を追加、Lbl 0 の上に

1→L

を追加し、最後の行を

L⇒Goto 0
Cls

に変更してみる。これで、ピタゴラス数が連続表示されている時に [EXIT] キーを長押しすると、画面クリアしてからプログラムが終了するようになる。

プログラムコマンドは、[Program]ボタンを押して現れるコマンドリストから入力する。"", "="、""、"Getkey" はコマンドリストから入力、数字はキーボードから直接入力できる。

変更が終わったので、一旦 CCE ファイルとしてプロジェクトを保存する。

[File] - [Project] - [Save] とすると、
Save_Project_PYTHAGORAS_CCE_13.PNG 

ファイル選択ダイアログが表示されるが、ファイル名の欄は左詰めになっていないので、左端までスクロールしてファイル名を確認する。[2018/02/21 追記] Ver 1.3 で左詰め表示がされるようになった。

ここでは、試しに 頭の P 以外を小文字にしたファイル名 (Pythagoras.ccl) にしてみる。
Pythagoras_Save.PNG 

[開く] をクリックすると、プロジェクト Pythagoras.cce が保存される。指定フォルダに保存されていることを確認する。

Check_Saved_Pythagoras.PNG
さて、プログラム文法をチェックするために、[File] - [Check] を選択。
Check_Pythagoras13.PNG 

Check
されると、コマンドに色が付く。もしエラーがあればエラーメッセージがポップアップする。
Checked_Pythagoras13.PNG 

fx-5800P に転送可能な CCL ファイルに変換するために、[File] - [Build] を選択すると、
Build_Pythagoras13.PNG 

Check
を選んだ時と同じ文法チェックが自動的に行われ、エラーがなければ、確認ダイアログが現れる。

Building_Pythagoras13.PNG 

[はい] をクリック

FileSelect_Final_CCL.PNG

ファイル選択ダイアログで [開く] をクリックして、Pythagoras COMP.ccl を保存する。ここでオリジナルの Pythagoras.ccl とは異なるファイル名にしておくことを勧める。

Saved_Pythagoras_CCL.PNG
Pythagoras COMP.ccl が保存されていることを確認。

最後にこれを CcLinker で fx-5800P に転送する。そこで先ず、fx-5800P と CcLinkerドングルを繋ぎ、ドングルをPCに刺し、CcLinker を起動する。

或いは CcEditor Ver 2.0  以降では Add-In 機能から CcLinker を直接呼び出せる。

StartUp   

fx-5800P で [MODE] - [▼] - [1](1:LINK) - [2](2:Receive) を押すと、CcLinkerアプリは自動的に Transmit モードになり、ファイル選択ダイアログが表示される。ここで Pythagoras COMP.ccl を選ぶ。

Transmit_Pythagoras_CLL.PNG

[開く] をクリック (或いは ファイルをダブルクリック) すると転送が始まる。

転送が正常に終わると fx-5800P と CcLinnker の両方で Complete! と表示される。 

fx-5800P で動作確認してOKなら、プログラム変更は成功だ。



CcEditor の拡張機能 (1) - 小文字ファイル名が使える

fx-5800P のプログラム名は大文字アルファベットと数字に限定されるが、上の例のようにファイル名に小文字を使ってfx-5800Pに転送すると、大文字だけのファイルと共存できることが分かる。
<目次に戻る>


CcEditor だけでプログラム作成 ⇒ fx-5800P へ転送

CcEditor で最初からプログラムを作る例を紹介する。

CcEditor を起動する。
Started_CcEditor13.PNG

Project 名が Default、その右で動作モードが COMP になっている。
ここでは、Project 名に test と入力、動作モードは COMP のままにする。そしてプログラムコードを入力する。
test_code13.PNG 

プログラムコードは下記のようにした。赤文字部分は純正Casio Basicでは入力できない表記だ (ところが実行するとエラーにならない、以下参照)。

"CcEditor Test"
1→a
2→αⓑ
Locate 1,2,
a①+αⓑ



CcEditor の拡張機能 (2) - 表示に小文字アルファベットやギリシャ文字が使える
純正Casio Basic では入力できない小文字アルファベットやギリシャ文字、添え字を文字列の1部として出力できる。

CcEditor の拡張機能 (3) - 小文字アルファベット、ギリシャ文字が変数として使える
  • 純正では使えない小文字アルファベットが変数として使える。
  • 純正で使えないギリシャ文字が変数として使える。
はエディタでの表示は〇に囲まれているが、1文字変数の添え字となる。
プログラムを fx-5800P に転送すると、電卓上では、添え字付き変数 a1αb と表示される。それぞれ1文字変数の添え字になっていて、変数として正常に使える。添え字が異なると別の変数として使えるので、使える変数が大幅に増える。

小文字アルファベットの入力は、キーボードから直接入力できる。
ギリシャ文字や〇で囲まれる添え字は、[Function] ボタンを押して現れる Functionメニューで [ALPHA] を選び、プルダウンメニューから選んで入力する。

Surfix_number.png


CcEditor の拡張機能 (4) - 1文字変数に添え字を付加して別変数として使える
  • [Function] ボタン - [ALPHA] ⇒ プルダウンメニューから入力
  • 〇に囲まれた文字は添え字入力に使う

入力が終われば、一旦 test プロジェクトとして保存 (test.cce 保存)。そして Build して CCL ファイル (test.ccl) に変換する。
最後に CcLinker で fx-5800P に転送する。

転送後、Prog List では小文字のプログラムファイル名 test が見つかる。コードを表示させると以下のようになる。

"CcEditor Test"
1→a1
2→αb
Locate 1,2,a1b

これを実行すると、出力は以下になり、小文字アルファベットやギリシャ文字が添え字付きで変数として正常に使えていることが分かる。

CcEditor Test
3


なお、これらの 小文字出力や 小文字変数、ギリシャ文字変数、添え字付き変数は、fx-5800P の Casio Basic に既に備わっている隠し機能であり、CcEditor によってこれら隠し機能が使えるようになる。
<目次に戻る>



今後、必要に応じて随時追記・修正してゆく。




応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 



keywords: fx-5800PCasioBasic、データリンク、CcLinker

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



関連記事

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

ついに fx-5800P がPCリンク可能になった

2018/02/10
更新 2019/08/13

fx-5800P と PCのデータリンクを使いこなす CcLinker


アップデート状況
  • CcLinker Dongle の頒布 ⇒ 詳しくはこちら [2019/05/08]
  • CcLinker が Ver 4.0a にアップデートダウンロードはこちら [2019/05/08]
    ※ fx-5800Pと連動して自動化され、さらにWindowsバージョンの違いによる誤動作発生が低減されました


はじめに

小型でバランスのとれた fx-5800P での Casio Basic プログラミングは、当ブログの重要テーマです。しかし致命的な問題として、カバーのヒンジが壊れやすいこと、そしてPCとのデータリンクができない点が挙げられる。これについては "fx-5800P プログラムのバックアップ" で取り上げている。

本来カシオが提供すべきものだと思うのだが、fx-5800P 発売から10年以上経ても、カシオ自身やサードパーティからまだ提供されていなかったが、ついに待ち望んだPCとのデータリンクが実現した

以前から、fx-5800P のデータリンクが検討されてきた。当ブログにおいても、"fx-5800P プログラムのバックアップ" の記事に kikkawa様や AkSd様のコメントで、データ解析ができて、なんとかなるかも知れないというコメントを頂いていた。そして、AkSd様の 関数電卓ファン掲示板 で様々な情報交換がなされ、応援コメントなども集まるようになった。

その中で、takumako様 が CcLinker というデータリンクツールを完成なさった。

takumako様の CcLinkerホームページ

現在は、ファームウェア書き込み済みの以下のような形態で頒布なさっている。
 CcLinkerDongle 

購入方法の詳細は、CcLinker Dongle の頒布 を参照のこと。


CcEditor の紹介

CcLinker で転送したプログラムファイル (CCLファイル) を CcEditor というプログラミングアプリで編集・作成すると fx-5800P の隠し機能が使えてプログラミングの幅が広がる。また、ソースコードにインデントが付けられたり、Getkey のキーコードが簡単に入力できたりと、CcEditor は fx-5800P 専用の優れたプログラミングツールだ。 CcLinker と合わせて CcEditor を使う価値は十分ある。

[2019/05/08 追記]
CcEditor は Ver 2.2 にアップデートされ、さらに使い勝手が改善されている。
CcEditor の簡単な紹介


CcLinker Dongle の導入

NewUSBDongle実際に CcLinker Dongle を入手して使ってみた。左の写真は私が入手した最新のものだ。

[2018/08/07 追記]
できるだけ多くの方に使って頂きたいという作者のtakumako様のお考えから、期間限定を無くして、いつでも有償頒布を受け付けるとのこと。とてもありがたい話だ。

fx-5800P をPCとリンクするには、写真の USBドングルとWindows デスクトップアプリを使う。




実際にWindows 10 で使ってみたので、以下に紹介する。


デバイスドライバーのインストール

先にUSBドングルをPCに奥まできちんと刺し、添付の Windowsデスクトップアプリ - CcLinker を起動すると、自動的にデバイスドライバのインスト-ルが始まる。Windows 10 では、右下にインストールが終了した旨のメッセージが現れる。但し、Windowsアプリのウィンドウは表示されない。

一旦デバイスドライバがインストールされた後 CcLinker アプリを起動するとアプリウィンドウが表示される。


PC保護の警告

Ver 1.6d 以前の CcLinker を初めて起動するとき、Windowsの保護機能が発動してしまう。

PC_Protection.PNG 

自作プログラムでは、最初は間違い無くこれが表示される。CcLinker も危険ではないのに大きなお世話である。気をつけるべきはダウンロード先は作者のオリジナルサイトを使うことだ。おそらく Microsoft がユーザーのPCからインストールプログラムを監視し、そのデータを抽出し、多数決方式でインストール数が少なければ一旦待ったをかける機能だろうと思われる。

ここで、詳細情報 をクリックしたら現れる [実行]をクリックし、アプリを実行すれば次回からこの警告は現れない。
自作プログラムがPC保護機能に引っかかる

[2018/07/31 追記]
CcLinker Ver 1.6e 以降は、この問題を回避するために フリーの圧縮解凍アプリ CGA にて圧縮されたファイル(拡張子がCGA)でも供されている(詳しくはコチラを参照)。

[2019/05/08 追記]
CcLinker Ver 4.0a は zipファイルでの提供もされている。古いバージョンからのアップデートなら zipファイルを入手上書きすれば良く、PC保護機能に引っかかることはない。



CcLinker の起動

最初に USBドングルとfx-5800Pを接続した後、USBドングルをPCに刺す (確実に接続する方法)。
その後 Windowsアプリ CcLinker を起動する。無事に起動すると、CcLinker のウィンドウが表示される。

Pclink_fx-5800P   StartUp    

CcLinker Ver 2.0b 以降は [Transmit] ボタンと [Receive] ボタンが廃止され、fx-5800P 上で Transmit や Receive を選択した時に CcLinkerが自動的に連動するようになった。Ver 2.1a で画面の背景に薄い色が付き、見やすくなった。 

もし、ドングルを刺さずに アプリを起動すると、エラーメッセージが表示される。

Boot_Error.PNG 

そこで、メッセージに従って ドングルを刺してから [OK] で、正常起動する。




CcLinker の終了

USBドングルを外す前に、CcLinkerアプリを必ず先に終了させる。
そうでないとエラーになり、結局 CcLinkerを強制終了することになる。




CcLinker の操作
 
CcLinkerアプリには [AC] ボタンしかない。基本操作は 接続した fx-5800P で行い、PC上ではファイルやフォルダの選択操作のみを行うようになっている。

fx-5800P からPCへ特定のプログラムファイルを転送 (PCにバックアップ)

CcLinker は、fx-5800P のプログラムファイルを CCL ファイル (CcLinker独自フォーマットのファイル形式)でバックアップする。

試しに、"fx-5800P【ゲーム】:Hit & Blow" で作ったプログラムのメインルーチンをPCにバックアップしてみる。私の fx-5800P ではメインルーチンのプログラム名を HB に変更している。

fx-5800Pを繋いだUSBドングルをPCに挿入した後 CcLinkerアプリを起動。


Pclink_fx-5800P   StartUp 

アプリでは何もせず、fx-5800P で、[MODE] - [▼] - [1] (LINK) - [1] (Transmit] - [2] (Select) と押し、
Select Data で バックアップしたいプログラム (今は "HB") にカーソルを合わせ、[1](SEL) を押し、最後に [0] (TRAN) を押す。
Transmit OK?[EXE] (Yes) を押すと、PCの一時ファイルに一旦バックアップされ、CcLinker と fx-5800P の両方でCompleted! と表示される。

CompleteSave  

そして、バックアップ先を選択するフォルダの選択画面が現れるので、そこでハックアップ先のフォルダを指定する。

SelectSaveFolder   

ファイル名を変更せず、そのまま [開く] ボタンをクリックすると、一時フォルダに一旦転送されたファイルが、指定したフォルダに移動される。


ここで最初に表示されるファイル名は、fx-5800Pに保存されているファイル名のうしろに COMP [ファイルサイズ] の情報が付加されている。この例では、HB COMP 027.cll になっている。ここでファイル名を自由に変更可能で、変更されたファイル名でバックアップできる。

なお、HB COMP 0127 の "COMP 0127" の部分は 必ずしも必要ではなく、消してしまっても問題ない。COMPモードのファイルであることを明示的に示すだけで、0127 はファイルサイズだ。

このファイル選択画面は、いわゆるコモンダイアログになっており、右クリックして現れるメニューから新規にフォルダを作ってからそこへ保存するなど Windows標準の操作ができる。


fx-5800P からPCへ全てのファイルを一気に転送 (PCに全てバックアップ) - Ver 1.7 以降 [2018/08/18]

fx-5800P のプログラムを全て一気にPCに転送できる。

上と同じ要領で、fx-5800P とPC を USBドングルで接続してから、CcLinker アプリを起動する。

CcLinkerアプリでは何もせず、fx-5800P で [MODE] - [▼] - [1] (LINK) - [1] (Transmit) - [1] (All) 、そして [EXE] をキーインする。

すると、「ファイルを選択してください」ダイアログが現れるので、バックアップするフォルダに移動するか、右クリックして新たにフォルダを作り、 [開く(O)]をクリックするか PCの [Enter] キーを押す。これで、電卓内の全てのプログラムがPCへ転送される。

保存先フォルダに同名ファイルがある場合は次のポップアップが現れる。

OverwriteFile  

ここで、[はい(Y)] を押すと、他に同名ファイルがあっても上書きコピーされる。無事に転送が終わると、fx-5800P と CcLinker アプリの両方で Completed! と表示される。

上書き確認は安全のため表示されるが、頻繁に表示され面倒になり、バックアップを中止したい時は、[キャンセル] を押せば、一連の転送そのものをキャンセルできる。

なお、何かエラーが発生したら、エラーメッセージが表示される。エラーメッセージで [OK] をクリック後、CcLinker アプリで [AC] をクリックして一旦バックアップを中止し、バックアップをやり直す。何度か繰り返す必要があるかも知れない。


PCから fx-5800P へ特定のプログラムファイルを転送 (電卓に転送)

CcLinker でバックアップしたCCLファイルを fx-5800P にプログラムファイルとして転送する。

fx-5800P をUSBドングルに繋いだ上で、ドングルをPCに刺し、CcLinkerアプリを起動する。

StartUp    

CcLinker アプリでは何もせず、fx-5800P で [MODE] - [▼] - [1] (1:LINK) - [2] (Receive) と押すと、保存するファイルの選択画面が現れる。

SelectResumingFile  

このファイル選択ダイアログで、転送したいファイルを選び [開く] ボタンをクリック。

既に同名ファイルがある場合は、上書きして良いかを確認するメッセージが現れるので、

OverwriteFile   

[はい(Y)][いいえ(N)] をクリックして先に進む。

OverWightBackFile_Disp 

無事に転送されると、fx-5800P と CcLinker の両方で Complete! と表示される。

BackUpAllCOmplete.png 




PCから fx-5800P へ全てのファイルを一気に転送 (電卓に全て転送)  [2018/08/18]

PCにバックアップしたファイルを一気に fx-5800P に転送できる。

fx-5800P で [MODE] - [▼] - [1] (LINK) - [2] (Receive) をキーイン。CcLinker アプリで [Transmit] クリックする。するとTransmit コモンダイアログが開くので、そこでfx-5800P へ転送するファイルのあるバックアップフォルダを開き、転送するファイルを選ぶ。[Ctrl]-[A] で全て選択するか、[SHIFT][Ctrl] を押しながら複数ファイルを選択し、[開く(O)] クリック。これで、選択したファイルが一気に fx-5800P に転送される。

転送が無事に完了した時は、fx-5800P と CcLinkerアプリの両方で Completed! と表示される。

fx-5800P に同名ファイルが有る場合は、見つかる度に以下のポップアップが表示される。

OverWightBackFile 

転送を中止したいときは、fx-5800P で [AC] (Cancel) を押すか、このダイアログで [キャンセル] をクリックする。




fx-5800P プログラムをCCLファイルで公開

当ブログで公開している fx-5800P 用プログラムファイルは、今後 CCLファイルでダウンロードできるようにしてゆく予定だ。

これまでは、プログラムを fx-5800P に手入力するしかなかったが、ダウンロードしたCCLファイルを CcLinker を使って fx-5800P に転送できるので、インターネットを使った fx-5800P のプログラムの流通が容易になる。



CcEditor

Takumako様のホームページ では、CcEditor が公開されている。

これを使うと、fx-5800P の Casio Basic をPC上でコーディングし、CcLinker で扱える CCL ファイルに変換できる。CCL ファイルを変更し、CCLファイルに変換することも可能だ。

それ以上に CcEditor の面白いところは、fx-5800P の Casio Basic で公開されていない機能を使うことが出来る点にある。
  • 表示文字列としてアルファベットの小文字、ギリシャ文字(大文字と小文字)が自由に使える
  • 変数にアルファベット小文字やギリシャ文字(大文字と小文字)が使える
  • 変数に添え字として数字アルファベットギリシャ文字を使える。
"fx-5800P Casio Basic をPCでコーディング - CcEditor" を参照。 

CcLinkerCcEditor を併用すると、fx-5800P の隠し機能として、表示に小文字が使え、使える変数が大幅に増加するので、fx-5800 Casio Basic プログラミングの幅が大きく広がる。



今後、何か分かれば随時追記修正してゆく。



応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: fx-5800PCasioBasic、データリンク、CcLinker

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


関連記事

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

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

やす (Krtyski)

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


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

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

なお管理人はカシオ計算機の関係者ではなく、Casio Basicが面白いと感じる1ユーザーです。


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR