プログラム関数電卓でプログラミング

fx-5800Pプログラミング入門のための CasioBasic入門連載中
 
2014/10/05 修正
2014/12/19 fx-9860GII に関する追記
2015/03/12 Hit & Blow に関する追記
2016/04/26 fx-CG20 に関する追記
2017/08/10 fx-CG50 に関する追記
2018/10/31 CcLinker に関する追記
2020/02/25 大幅な加筆修正
2020/04/02 fx-9860GIII について修正

Casio Basicプログラミング入門に役立つと思っている

 fx5800P_calc    fx-9860GII    fx-CG20_mid        fx-CG50_small  
 カシオ  fx-5800P   カシオ fx-9860GII     カシオ fx-CG20       カシオ fx-CG50

 fx-5800P、fx-9860GII、fx-CG20、fx-CG50 に搭載されているプログラミング言語は、欧米ではCasio Basic と呼ばれていて、Basic の一種だ。Casio Basic には一部固有の命令や記法があるが、殆どが一般の Basic と同等の言語仕様となっている。Casio Basic固有の仕様として先ず挙げられるのは、代入に = を使わず → を使う点、そして局所(ロ-カル)変数が使えず大域((グローバル)変数のみが使える点、ユーザーが関数を定義して使えない点、などがある。従って、Casio Basic は構造化Basicではないのだが、構造化プログラミングの感覚で構造制御したコーディングができる。

海外専用モデルの Casio fx-CP400 や fx-CG500 に搭載されている Basic は構造化Basic に近いのだが、ループからの脱出方法に制限があることから使いづらく、そもそも動作速度が極めて遅い。これを使ってプログラミングしたいなどと思えない代物である。この言語は、お題目だけ正しくても実用的でない、発展途上の初期の段階のものだ。

形式上は非構造化Basicであっても、構造化プログラミングの感覚で、Gotoに頼らない構造制御を行い、ブロック構造の直列構造で構造制御が可能な Casio Baisc は実用的な言語と言える。

カシオは、プログラム関数電卓 fx-5800P、グラフ関数電卓 fx-9860GII、fx-CG20、fx-CG50 や土木測量向け電卓 fx-FD10 Pro に  Casio Basic を搭載しており、互いに一定レベルの互換性がある。ハードウェア依存の Getkey コマンドや Locate などの入出力関連コマンドについては、fx-5800P とそれ以外でキーコードや表示文字数の違いがあるが、移植は簡単だ。グラフ関数電卓では、fx-9860G OS2.0 以降で動作するプログラムは、fx-9860GII や fx-CG20 / CG50 でそのまま正常動作する(完全上位互換)。なお、fx-CG50 と fx-CG20 は高解像度カラー液晶を搭載しており、解像度の違いとカラーの取扱に新たなコマンドが追加されている。

管理人が最初に出会った Casio Basic は fx-5800P に搭載されているものだったので、当ブログでは fx-5800P のCasio Basic について詳しく解説している。その後 fx-9860GII や fx-CG20、fx-CG50 の Casio Basic について、fx-5800P からの違いを解説するようになった。一部のコマンドを除いて、機種間の違いは少ない。

機種間での Casio Basic の互換性に関しては、以下の記事を紹介するので、ご参考頂きたい。
 ⇒ Casio Basic - 機種間の互換性
 ⇒ fx-CG20 の概要
 ⇒ fx-5800P / fx-9860GII / fx-CG20 / fx-CG50 プログラムライブラリ - キーコード取得 
 ⇒ fx-9860GII USB POWER GRAPHIC 2
 ⇒ fx-9860GII への移植 - ピタゴラス数
 ⇒ fx-9860GII への移植 - 素因数分解
 ⇒ fx-9860GII への移植 - 厄介な旧来の命令
 ⇒ Casio fx-CG50 の概要

Casio Basic を使える fx-5800P は、実売価格、携帯性(コンパクト性)、電池寿命などの点で、圧倒的に優位だ。fx-5800P は Casio Basic 入門機として最適であるだけでなく、Casio Basic は意外に高機能なので、PCでのプログラミング経験者には、すぐにプログラムを書ける実用機でもある。

この記事を初めて書いた当時は、fx-5800P に比べて、fx-9860GII は3倍程度の価格であった。その後、fx-CG50 が登場し、fx-9860GII が国内では販売中止となった。現在では、 fx-CG50 の価格は 並行輸入品で fx-5800P の2倍以下、Amazon USA で購入する場合は 1.3倍程度と、入手し易くなっている。
Casio プログラム電卓の価格動向

fx-5800P の補修部品の供給が 2025年までとなっているので、fx-5800P はその頃までに発売中止になる可能性が高い。新モデルとして fx-9860GIII USB POWER GRAPHIC 3 と fx-7400GIII POWER GRAPHIC がヨーロッパ市場向けに2020年3月に発売となった。fx-9860GIII は明らかに fx-9860GII の後継機である。fx-74000GIII は  fx-5800P の後継機の位置づけになる可能性が考えられる。但し、これら新機種が日本国内で発売されるかどうかは現状では不明だ。発売されるとしても国内販売価格がかなり高価になる恐れがある。
⇒  速報! CASIO fx-9860GIII 発売間近? - 新しいプログラム電卓

今のうちに fx-5800P を入手されると良いと思う。 

ところで、 "行番号付きの BASIC" しか知らない方は、Casio Basic は別の新しい言語として捉えた方が良いと思う。


プログラム関数電卓でのプログラミング超入門

パソコンのプログラミング入門で、「Hello World と表示させるプログラム」が最初に取り上げられている書籍を以前よく見たものだ。

これを Casio Basic で書くと、

"Hello World"

と、たった1行書くだけ! 出力命令 " " を使っている。そして、幾つかのキー操作で、即実行できる。MS-DOS、Windows、MACだろうが、Visual Basic、VB.net やC、C++だろうが、こんな簡単ではない。

キーボードから、何か数字を入力して、それを表示させるプログラムは、

?→A

はい、たったこれだけ! 

入力して、何か計算をして、結果を出力するのが、プログラムの基本動作だ。上のプログラムは、なにやら暗号のようだが、「入力」と「出力」と言う基本的な2つの仕事を行っている。

「?」 は入力待ちの命令、「→」は入力された数字を変数Aに代入する命令。つまり、1つめの仕事は、数字を入力させ、それを変数に入れると言うもの。A は、変数Aの中身を表示しなさいと言うものだ。

このプログラムを実行すると、画面表示は

?

とそっけない。ここで何か数字を入力してから [EXE]キーを押すと、入力した数字が表示される。


ちょっとグレードアップしてみる。

"INPUT NUMBER"?→A

「?」の前に「"」で挟んだ文字を追加しただけた。これを実行すると、

INPUT NUMBER ?

と表示される。


ここで、何か整数でも少数でも入力すれば、それが表示される。


さて、ここからが関数電卓のプログラムの面白いところだ。

INPUT NUMBER ?

と表示されている時に、sin(30) と打ち込むことも出来る。すると、

0.5

と表示される。

sin(30)の代わりに、数値積分の式を入れても、しっかりその計算結果が表示される。面倒な計算は、関数電卓が持っている機能を使えば良い。プログラムは、手順を示すだけのもので良い。当然、プログラムの中で計算をさせることもできる。


さて、妙な記号ばかり出てきたが、他のコマンドは、分かりやすい。

Goto ~ Lbl
If ~ Then (~ Else) ~ IfEnd
Do ~ LpWhile
While ~ WhileEnd


といった、Basic と同じコマンドが揃っている。

上のコマンドは、それぞれ
  • Goto A は、Lbl A (指定場所)までジャンプしなさい (強制ジャンプ)
  • If の直後の式が正しい場合は Then 以降を実行、そうでなければ Else 以降を実行しなさい (条件分岐)
  • LpWhile 直後の式が正しい間は Do まで戻って処理を繰り返しなさい。LpWhile 直後の式が正しく無い時は Do にジャンプせずに LpWhile の次の行にジャンプしなさい (ループ - 繰り返し処理)
  • While の直後の式が正しい間ば WhileEnd まで実行し While まで戻って処理を繰り返しなさい。While 直後の式が正しくなければ、While まで戻らず WhileEnd の次の行にジャンプしなさい (ループ - 繰り返し処理)
と言う意味だ。英語の意味そのままなので、ちょっと練習すると、簡単にすぐ分かる。

fx-5800P でプログラムを書くのが簡単だとお分かり頂けるだろうか?


プログラム電卓にさせる仕事は、単純な計算だが、条件を種々変更して何度も実行すること、おそらくこれに尽きると思う。
付け加えるならば、パソコンを起動して、上記のような仕事をするには面倒に思う時こそ、プログラム電卓の出番だ。


電卓プログラムで便利な用途

プログラミングに科学技術の知識は殆ど不要だ。関数電卓は使いこなせなくても、プログラム電卓は使いこなせる。言い換えれば、プログラム電卓は関数電卓の延長線上にある必要はない。実際のプログラム電卓は、関数電卓の高機能バージョンとして発売されているから、勘違いされやすいのだが...

プログラミング能力は特別のものでなく、理系か文系、年齢や性別に無関係なのは、IT業界では広く知られている。プログラミング適性は、それ独自のものだ。理系の大学を卒業してもプログラムを書けない人が居ても不思議ではなく、文系でもSEやプログラマで活躍している人が普通にいる。1億3千万人の日本人の半分がプログラミングしても、驚くことではない。

さらに、作るプログラムは、科学技術に関係するものだけでなく、日常生活や事務系や営業系の仕事で便利な実用プログラムもあって、PCやスマホで使っているわけた。 当然、電卓で作るプログラムも同じで、当ブログでは科学技術以外の実用プログラムを紹介している。

電卓で作って・使って便利なプログラムには、どんなものがあるだろうか?
これまでに作ったプログラムを列挙してみる。

▶ 世界時間換算:
今日本は18:00だから、イギリスでは何時?とか カナダの朝9:00に電話するには、日本の何時に電話をかければ良いか?といったことは、グローバル社会では結構ある。海外では夏時間も考えなければならない。そんな時に電卓でパッと海外の相手の時間が分かれば、とても便利だ。このプログラムを作って、私は毎日のように利用している。地域による微妙な時差にも対応している。
Casio Basic入門で取り上げている ⇒ こちら

 年齢換算:
生まれ年から年齢を割り出す。年齢から生まれ年を割り出す。歳の話になって、電卓を持ち出すとその場の空気が淀む可能性あり...
Casio Basic入門で取り上げているこちら

 西暦と和暦の変換計算:
電卓がすぐ横にあることが大前提だが....
Casio Basic入門で取り上げているこちら

温度単位の換算
摂氏(°C)、華氏(°F)、絶対温度(K)の換算。どれか1つを入力すると、他の単位での温度の値が表示されるプログラム。特に摂氏と華氏の換算はたまにアメリカへ出かけると役に立つ。実はプログラムはとても簡単に作れる。
Casio Basic入門で取り上げているこちら

分子量計算:
この手の計算を頻繁に電卓でやりたい人は、何か特定のジャンルの化合物しか扱わないので、電卓に入れておくべき原子量データは知れていると思う。
半導体なら Si、Ga、As、Al、In、N、P、C といった程度だし、組成比が小数ならば電卓が楽だ。
有機化学なら、C、H、O、N、S、P、Mg、Zn、Cl、Br、I にあと数種の原子があれば間に合うだろう。普通の関数電卓で十分と言う人には、はいそうですね、と答えるしかない(-_-)  昔、CASIOのFX-603Pを使っていた時はこれを入れていた!

売り買いに関する計算:
原価計算、見積計算、売値から仕入値(指値)の計算など...
そもそも営業マンで値段をスバっと答える人が少ないと言う話もあるが、おそらく暗算できないという理由では無く、大人の事情があるとは思うが...
原価から各種経費を考えて最終価格を計算したり、最終コストから各種経費を前提に原価、買値を割り出したりするのに便利。
価格交渉の概算用に私の電卓には既に入っている...( ^o^)ノ

寸法精度の計算:
工作現場で、サイン・コサイン・タンジェントが絡む計算で、穴位置や切る位置を、あれこれ現物合わせするのに便利なことが多いように思う。予めプログラムを準備しておくのではなく、その場でチャッチャッチャとプログラムを組む使い方にはなってしまうが...(経験あり)

光学計算:
カメラのセンサとレンズの特性から、分解能、ピクセル数、ピクセルピッチ、センササイズ、レンズのF値、口径、焦点距離などを、色々計算してみたい....電卓でプログラムを使えると便利だ。私の電卓には既に入っていて使っている...

圧力単位の換算:
アメリカがヤード・ポンド法をいまだに使っているため、psi (pounds per square inch) などと厄介な圧力単位がある。いや、アメリカだけが悪いわけでもない。とにかく圧力の単位ってヤツは、Pa (パスカル)、Bar (バール)、Kgf / m、mmHg、mmHO、Atm 等々、技術分野が異なれば使う単位はバラバラ。会議や展示会でアメリカ人(psiを好む)やヨーロッパ人(Barを好む)と圧力の話になると、英語よりも単位換算が追いつかないことも....これはある意味必須で、私の電卓には既に実装済み
Casio Basic で圧力換算プログラム

ゲーム:
プログラミングを始めたら、やはりゲームを作ってみたいものだ。 \(^_^)/
但し、使えるプログラミング言語によって、作れるゲームが大きく異なる。
fx-5800P は動作が遅いのでアクションゲームには不向きかも知れない。

[2014/01/13 追記]
fx-5800Pの実力を確かめるために、アクションゲーム(もぐら叩き)を作ってみたが、そこそこ遊べるゲームが出来た。
【2017/08/10 追記】 もぐら叩きをプログラムライブラリに収録した。
 ⇒
プログラムライブラリ - もぐら叩き (fx-5800P)
 ⇒
プログラムライブラリ - もぐら叩き (fx-9860GII)
 ⇒
プログラムライブラリ - もぐら叩き (fx-CG20 / fx-CG50)

[2014/10/05 追記]
昔のカシオ電卓のプログラムライブラリには必ず Hit & Blow が入っていた。fx-5800P でも Hit & Blow を作ってみた(3桁から5桁に対応してみたが、あまり意味がないかも...)。

[2015/03/12 追記]
Hit & Blow を グラフ関数電卓 fx-9860GII や fx-CG20 / fx-CG50 にも移植した。fx-5800P用 ならびにグラフ関数電卓 用の Hit & Blowを プログラムライブラリに収録した。
 ⇒
プログラムライブラリ - Hit & Blow


どうであろうか?
何かを作ることが好きならば、電卓でのプログラミングも愉しいのではないかと思う。


fx-5800P はプログラミング入門に役立つと思う理由

CASIOの往年の名機とも言われる FX-603P / 602P / 502P は、かなり独特なプログラミング言語を搭載していて、私にはプログラミングの敷居は高かった。一方で、CASIOの現行機 fx-5800P は、一般的な BASIC に近い言語なので、非常に分かりやすい。

Visual Basicなどを触った経験を少しでもお持ちなら、fx-5800Pですぐにプログラミングが出来ると思う。プログラミング経験の無い方でも、何かを作ることが好きだと言う方ならば、fx-5800Pはプログラミング入門に向いていると思う。


fx-5800Pでのプログラミングの敷居が低いのには、訳がある。

非常に限られた機能しか無いので、覚えることが少ない
プログラムを入力すれば、すぐにその場で実行してみることができる
何かエラーがあれば、エラーが発生したところが分かる

といった特性があるからだ。

構造化プログラミングのエッセンスに従って分かり易いプログラムを書けるので、決してバカにしてはいけない。実用的なプログラムが作るだけの高機能なのだ。最近発売された 土木測量向け fx-FD10 pro には予め土木・測量で有用なプログラムが搭載されているが、これらは Casio Basicで記述されている。

多くの方のパソコンに入っている EXCELで使えるVBAはBasicだから簡単そうに見え、入門者向けのように言う人も居るが、実はそうでもない。簡単なプログラムでもちゃんと動かすまでに覚えることがそれなりに有る。Webで良いブログを見つけて読み込むか、本を1冊か2冊買って勉強して、Windowsの知識やオブジェクト構造の理解が無いと、Basic のコマンドを知っていても、やりたいことがスグにできないのだ。

私は、CASIOのプログラム電卓しか触ったことが無く、SHARP、HP、TI などのプログラム電卓の言語がどのようなものかは表層的な知識でしか知らない。さらに、全てのCASIO製プログラム電卓を触ったわけでもない。私が触ったことのある製品は、古いもので FX-502P、FX-602P、FX603P、fx-4000P、fx-4500P、fx-7000G、fx-9850G、fx9850GC PLUS。そして 新世代Casio Basic を搭載している fx-9860G、fx-5800P、fx-9860GII、fx-9860GII SD、fx-CG20 そして fx-CG50 だ。

これらの機種やパソコンでのプログラミング経験 (C / C++ / C# / VB) から、Casio Basic は入門に役立ち、経験者にはスグに使える実用的な言語だと思う。
Casio  Basic の勧め


fx-5800P がPCリンク可能になっている

2018年に入ってから、ついに fx-5800P がPCリンク可能になり、PC上で コーディングできるようになった。

ついに fx-5800P がPCリンク可能になった
fx-5800P Casio Basic をPCでコーディング

なお、fx-9860GII、fx-CG50、fx-9860GIII、fx-7400GIII はいずれもUSBケーブルを使ってPCリンクが可能だ。


残念なことに...

Casio Basic は実用的なプログラムを作れる程度の機能があるのだが、残念なことに取扱説明書の中でプログラミングに関する説明は、あまりに簡素化されすぎている。プログラミングの素養のある人が見て分かるような書き方しかされていない。


そこで...

fx-5800P の Casio Basic 入門講座の連載を始めている。併せてオリジナルの Casio Basic コマンドリファレンスを拡充中だ。
これから、Casio Basicを始めてみようと言う方、プログラミング経験はあるがチョット忘れかかっている方、を意識して書いている。
よろしければ、どうぞ...

 ⇒ CasioBasic 入門 - 目次-
 ⇒ CasioBasic コマンドリファレンス -目次-
 ⇒ 逆引き Casio Basic -目次-
 ⇒ プログラムライブラリ




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


 


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

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

続きを読む

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

楽屋裏 - fx-CG50 のチューンアップ - Ptune3

楽 屋 裏
e-Gadget


2017/07/20
更新 2020/03/28

Ptune3 が Ver 0.24 にアップデート [2020/02/20]



fx-CG50 を入手したので、早速チューンアップに挑戦!

これまで、fx-CG20 で愛用してきた Ptune2 (sentaro様の作品) の fx-CG50 対応版 Ptune3 を導入しました。Ptune2 はかなりの安全設計なので、引き続き fx-CG50 専用の Ptune3 を試しています。

fx-CG20 はRAMにSRAMを使っていますが、fx-CG50 は SDRAM に変わっています。従って新たに Ptune3 が登場したわけです。


使用例
  • Ptune3 を起動
  • メモリチェック: [OPTN] - [F5] (RAM) と [OPTN] - [F6] (ROM) 実行
  • SDRAM: と Write: の数値 (SDRAM最大クロック と Write 最大クロック) をメモ
  • 最大値設定画面:[SHIFT] - [MENU] でBus CLK をメモしておいたSDRAM最大 か Write が最大付近に設定
  • 最大値設定画面を抜けて設定を保存:[EXIT] でメイン画面に戻り、[SHIFT] - [F1] (SAVE) で設定を保存
  • 設定をストレージメモリにバックアップ保存:[SHIFT] - [AC] (OFF) で一旦電源オフ
  • 電源オン [AC] して、Ptune3 起動
  • PLL を保護された範囲内で最大値に設定
  • [F5] のプリセットを選び、上で設定した値以下で、BFC と PFC を大きめに設定
  • [SHIFT] - [▲] で FLL を変更すると、各クロックを小刻みに調整できる
  • PLL や CPU クロックだけでなく、BFC (メモリバスクロック) や SFC (I/Oクロック) を安全圏内で最大化した方が、全体の動作が最速化できる。場合によっては、PLL を1段落とし、BFC / SFC を大きめに設定し、さらに FLL を上げて BFC / SFC を安全圏内で小刻みに最大化する方法も有効
※ メモリチェックを行った直後は SDRAMアクセスが不安定になる傾向があるので、一旦リスタート (背面ボタン) すると良い。
  • 最大値設定画面は、できるだけ安全を確保する Ptune3 の最大の特徴。値は安全サイドに慎重に設定する必要がある。
  •  [F4] のプリセットはCPUクロックを優先して大きめに設定する。CPUが早くても必ずしも全体の動作が速くならない。全体の動作の高速化には、メモリバスクロック (BFC) や I/O クロック (PFC) の寄与が極めて大きい。これらを大きめに設定する方が良い反面、メモリアクセスの異常は、特にROMアクセスの異常はファームウェアの修復不能なダメージに繋がるので、"メモリチェック" と "最大値設定" を活用して、慎重に設定するのが良い。


Ver 0.24 ベータ版 [2020/02/20 更新]

"X" を乗算記号 "×" に変更。

Ptune3 Ver 0.24 ダウンロード
マニュアル


Ver 0.23 ベータ版 [2020/01/04 更新]

ファンクションメニューを見やすく変更。機能に変更はない。

Ptune3 Ver 0.23 ダウンロード
マニュアル


Ver 0.22 ベータ版 [2019/08/31 更新]

同じ電池を使った時に fx-9860G シリーズや fx-CG20 と同じ値を示すように、電圧表示値が実際よりも小さめであったのを修正。sその後 電池電圧表示値について C.Basicでの値との誤差を最小にする修正を行い、差替えアップデート。

Ptune3 Ver 0.22 ダウンロード


Ver 0.21 ベータ版 [2019/02/20 更新]

実際のクロックが表示よりも微妙に遅くなっていたが、スペクトラム拡散に原因があることが判明。デフォルトでスペクトラム拡散がONになっているが、これをOFFに切り替えられるようになった。OFFにすると1.6%程度速くなる。
スペクトラム拡散ONで、FLLを1.6%上げても同じ効果なので、顕著なスピードアップにはならなそう。

Prune3 Ver 0.21 ダウンロード

[X2] または [^] キーでスペクトラム拡散を On/Off できます。


Ver 0.20 ベータ版 [2018/08/19 更新]

実際の周波数とのズレを考慮して表示するように修正(セットアップで設定できる)
(暫定補正値 = PLLより算出される内部周波数 * 900 / 914)
Ptune3  Ver 0.20 ダウンロード

sentaro様によるコメント
CG50だけお持ちの場合はさして問題になることも無いのですが、
SH4AのFX機やCG10/20をお持ちの場合は
Ftune2/Ptune2とPtune3で同じクロックにした場合、
CPUベンチマーク結果が違うことに気が付かれた方もいるかもしれません。
(参考リンク)
http://www.casiopeia.net/forum/viewtopic.php?f=25&t=7327

これはCG50のCPUが何かしらの内部仕様の変更があったか、SDRAMアクセスでの何かで、
実際の動作周波数が計算で求められる周波数よりも低い周波数で動作していると思われます。

CG50デフォルトの計算上の動作周波数は
117.96MHz
ですが、
実際にはC
-1.6%ほど低いところの、
116.15MHz(正確ではありません)
くらいで動作しています。

これはFtune2/Ptune2とPtune3でCPUベンチ値を比較すると
FX機/CG20よりも-1.6%ほど低くなるのが分かるかと思います。

今回のアップデートはその周波数誤差を補正して表示できるようにするものです。





Ver 0.10 ベータ版 [2017/09/30 更新]
sentaro様によるコメント

fx-CG50国内発売前に一応、ってことで、0.10にバージョンアップしました。
アイコンをCG50スタイルに変更したのとSDRAMチェックの仕様を少し変更したのみで機能的には0.05と変わるところはありません。(^^;

ということで、現状Ptune3では2倍以上の大幅なオーバークロックは出来ないですが、CG50は基本ベースで高速化されているのであまりPtune3の必要性はないかもしれませんね。

Ptune3 Ver 0.10 ダウンロード


バグや疑問点、何かお気づきの点がありましたらよろしくお願いします。


=== コメントここまで ===

なお管理人の私が所有している個体で、[F5] で設定される CPU コアクロック 210.11Mhz で 2ヶ月使っている限りでは問題ありません。Ver 0.10 も機能面で変わりないので [F5] で問題ないと思います。



Ver 0.05 アルファ版 [2017/07/20 公開]
sentaro様によるコメント

αテスト版ですが、Ptune3 ver0.05です。(^^;
Ptune3 Ver 0.05 ダウンロード


一番の注意点としては、SDRAMのメモリチェックはチェック後にシステムエラーを起こすことが少々あるので、SDRAMのメモリチェックをした後はリセット推奨です。
それ以外は以前のPtune2と同様にUSB接続で使用しないこと、ぐらいでしょうか。

現状ではCG20のようにメモリクロックがどんどん上げられないので、デフォルトからPLL倍率を上げていくクロックアップが全体の速度向上には効果的です。
この場合はSDRAMのメモリ動作限界で全体の動作限界が決まってしまうのでCG20よりCPUクロックを高くすることが出来ません。
CPUクロックだけを上げるには[F4]を押してPLLをx32にして[SHIFT]+[UP]を押して最上段のFLLで上げていくことになります。(PLLは32倍で制限されているため)
この場合はメモリ限界よりもCPUクロック限界が先にくるので、これでCPUの動作限界が分かります。
私の個体では280MHz前後までいきましたが、速度的にはメモリクロックがあまり上がらないためにPLLを上げていく方が全体パフォーマンス的にはかなり有利になります。
現バージョンの0.05ではデフォルトからPLLを28倍くらいまで上げて1.8倍速ぐらいが安定限界というところです。

fx-CG20はPtune3で約3倍速まで引き上げられますが、fx-CG50はデフォルトで1.5倍~2倍、それがさらに1.8倍まで上がるとすればCG20の最高速度並にはなりそうです。
そしてその状態でも消費電力がCG20比で約半分というところなのでなかなか良いですね。(^^)

=====





αバージョンなので、なんと言っても完全に自分の責任で使うもので、今はこわごわ触っています。Ptune3 に関する話題をこのエントリーにまとめるため、楽屋裏ネタとしてこの記事を投稿しています。

早速、作者のsentaro様への質問をコメント欄にアップしました。

[2019/01/31 追記] 
fx-CG50 を2台持っていますが、いずれも 300MHz までチューンアップできました。単に CPUクロックが 300MHzといっても、他の設定に応じて実際のプログラム処理速度は大きく変わりますので、CPUクロックのみで話をするのはあまり意味はありません。
以下のコメント欄にあるように sentaro様のアドバイスを頂きながら、2018年8月末に 自分なりの安全かつ最速設定を見つけ、その後ほぼ5ヶ月使用使って問題ないので、運が良ければここまでチューンアップできます。ちなみにsentaro様所有のfx-CG50では300MHzには至らないようです。無理はしないでください。






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


 


keywords: プログラム関数電卓、fx-CG50、クロックアップ、Ptune3

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

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

Casio Basic の勧め

.
更新 2020年1月23日

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-CG50    (カラーグラフ関数電卓)
2) fx-CG20      (カラーグラフ関数電卓)
3) fx-FD10 pro   (プログラム関数電卓 - 土木測量向け)

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


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

新世代 Casio Basic は、上から下へ処理が流れるようなブロック構造のコードが書けます。Getkey コマンドと Locate コマンドがあるため、スクロールを抑えて1画面で自由に入出力できるプログラムが作れます。また、条件判定は基本的に 0 で偽、0 以外で真としてコーディングできます。引数と戻り値のある関数/プロシージャをユーザーが作ることが仕様上できないので、厳密な意味での構造化Basicとは言えません。そこで 新世代Casio Basic は、構造化言語と敢えて言います。


  • Getkey[AC] キー以外の全てのキーに異なるキーコードが割り当てられ、押したキーをリアルタイムで判定できるコマンド。
  • Locate: パラメータに、即値以外に変数、式、コマンドを指定して位置を柔軟に指定して出力するコマンド。
  • 条件判定を 0 で偽、0 以外で真とできること
  • ブロック構造のコーディングGoto に頼らずにプログラムの制御を記述し、可読性の高いブロック構造でプログラミングする方法。
実は、仕様上厳密な意味で 構造化Casio Basic は既に fx-CP400 や fx-CG500 に搭載されています。これらを使えばスグに分かるのが、処理速度が極めて遅い上、代表的な問題点として If ブロックから Goto で脱出できない(動作が保証されていない)、3項演算子が無いなどの中途半端な実装により、効率の悪いコーディングを強要されるので冗長なコーディングが必要になり、さらに処理速度がかかる、といった問題があります。これに対して構造化Casio Baisc は、よく作り込まれていることが分かります。

プログラミング経験者(特にPCでのプログラミング経験者)なら、新世代 Casio Basic は違和感なく使えます。

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

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

<トップへ戻る>

Casio Basic 搭載機種の選定

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

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

- fx-CG50: fx-CG50 の概要

- fx-CG20: fx-CG20 の概要

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

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

- Casio Basic - 機種間の互換性

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


fx-CG50、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 の方が優れていると思います。

fx-CG50
fx-CG50 は、デザインや寸法が異なる以外は fx-CG20 / CG10 とほぼ同じ機能を持っていて、処理速度が向上しています。
 
 
<トップへ戻る>

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 のために新たに購入する必要はありません。

[2017/08/18 追記] 最近はグラフ関数電卓に 3Pin ケーブルが付属していません。別途購入する必要があります。

[2017/09/28 追記] 2017年10月から国内販売される fx-CG50 には 3Pinケーブルが付属します。

[2018/02/26 追記] ついに fx-5800P のPCリンクが可能になりました ⇒ こちらの記事


<トップへ戻る>

Casio Basic の使いこなし

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

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

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

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

<トップへ戻る>



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


 


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

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

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

BMPファイルのロード - Casio Basicプログラミング

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

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

2018/01/08
追記修正 2020/01/17


[C.Basic] [FX / CG]

ビットマップファイルをロードして描画したい。



C.Basic では、ビットマップファイルを呼び出し、ロードして表示することができる。これは純正Caso Basicではできない。

C.Basic のグラフィックス画面は、フル画面モードで最大 384 x 216 ピクセル、標準モードでは 最大384 x 192 ピクセルのビットマップファイルを表示できる。

BmpLoad コマンドでロードする最低限のコード
BMPフォルダにある TEST.BMP をロードする例。

(サンプルプログラム) 
BmpLoad("/BMP/TEST")
ビットマップファイルの拡張子 .BMP を省略できる。画像の左上が座標 (0.0) になるように描画される。

純正Casio Basic はテキスト画面とグラフィックス画面の2つを区別して出力する仕様で、テキスト系コマンドを実行するとテキスト画面に出力、グラフィックス系コマンドを実行するとグラフィックス画面に描画する。そしてテキスト系とグラフィックス系のコマンドの出力先を同じ画面にできない仕様になっている。

一方、C.Basic では、出力先を自由に指定でき、グラフィックス画面にテキスト系コマンドを出力したり、テキスト系コマンドをグラフィックス画面出力可能。テキスト系コマンドとグラフィックス系コマンドを同じ画面に出力することも可能。

描画するビットマップ画像の左上の座標を指定することもできる。

(サンプルプログラム) 
BmpLoad("/BMP/TEST.BMP"),0,0
TEST.BMP の画像の左上を 座標(0.0) に指定して描画する。

純正Casio Basicのグラフィックス描画領域は 379 x 187 ピクセルであるが、C.Basic の標準モードでは 384 x 192 ピクセルで、さらにフル画面モードでは 384 x 216 ピクセルになっている。標準モードの画面の左上の座標は (0, 0) で、フル画面モードでの画面の左上の座標は (0, -24) となる。

そこで、最大 384 x 192 ピクセルのビットマップファイルをロードし、画面左上に併せて描画するには、上の2つの書式が使える。

一方、フル画面モードで最大 384 x 216 ピクセルのビットマップファイルをロードして表示するには、フル画面全体をクリアする_ClrVram コマンド実行することでロード先をフル画面に切替えた後、フル画面の左上の座標 (0, -24) を画像の左上に指定することもできる。

(サンプルプログラム)
_ClrVram
BmpLoad("/BMP/TEST.BMP"),0,-24,0
左上の座標の設定に続いて、0 を指定しているが、これはロード先を背景だけに指定するパラメータ。

なお、これまでのサンプルプログタムではロード先にテキスト画面かグラフィックス画面かを明示的に指定していない。
出力先を指定する Screen コマンドを使い、Screen.T とすればテキスト画面、Screen.G とすればグラフィックス画面が指定される。

グラフィックス画面をフル画面にし、その背景のみに 384 x 216 ピクセルのビットマップファイル (TEST.BMP) を描画するコードは以下のようになる。

(サンプルプログラム)
Screen.G:_ClrVram
BmpLoad'/BMP/TEST"),0,-24,0

ビットマップファイルの拡張子を省略している。


 ロードするビットマップファイルのファイル名を入力させる例
フル画面モードで最大 384 x 216 ピクセルのビットマップファイルをロード&描画する。

(サンプルプログラム)
'= Key-in file name
"_ _ _ _.BMP"→Str 1
"Input file name"?Str 1

'= Load BMP file
Screen.G:_ClrVram
BmpLoad(Str 1),0,-24,0


なお、ビットマップファイルは予めストレージメモリに転送しておく。呼び出す際はフォルダに対応していて、例えばBMPフォルダにある TEST.BMP をロードするには、この用例では /BMP/TEST.BMP と入力する。


入力時にエラーがあると、エラーメッセージと共にプログラムが中断する。そこで、エラー処理を追加してプログラムが中断しないようにする。

エラー処理を含んだ BMPファイルのロード&描画する例

(サンプルプログラム) ダウンロード: LOADBMP.g3m
'==BMP file loading routine==
' Ver 1.0  Krtyski//e-Gadget


'= Key-in file name          <ブロック1>
' file name→Str _1
"_ _ _ _.BMP"→Str 1
"Input file name"?Str 1


'= Check file existance        <ブロック2>
' exist:    S=file size
' not exist:  S=0 & Return -1

IsExist(Str 1)→S
If S=0:Then
"Not exist"
Return -1
IfEnd

'= Check BMP file format       <ブロック3>
' not BMP file: Return -1

""→Str 2         
[2020/01/17 追記: C.Basic for CG Ver 1.43での仕様変更のため]
{3,1}→Dim Mat θ.B
Load(Str 1)→Mat θ
For 1→I To 2
Mat θ[I]→Mat r
[2,I]
Next
0→Mat r
[2,3]
ClrMat θ
If StrCmp(Str 2,"BM"):Then
"Not exist"
Return -1
IfEnd

'= Load BMP file in         <ブロック4>
' back ground of text screen

Screen.G:_ClrVram
BmpLoad(Str 1),0,-24,0



<ブロック1>
ビットマップファイルをキー入力させる。
入力したファイル名を Str 1 に格納。

<ブロック2>
入力したファイル名 (Str 1) がフォルダ内に存在するかどうかを IsExist コマンドで調べる。
IsExist はファイルが見つかればそのファイルサイズ、見つからなければ 0 を返す。
そこで、S が 0 ならば Not exist と表示して、Return -1 を実行して、プログラム終了。
このルーチンを GosubProg コマンドで呼び出す場合は、-1 が返るのでエラー判定可能。

<ブロック3>
見つかったファイルがビットマップファイルかどうかを判定する。
ビットマップファイルはファイルの最初の2バイトが BM になっていることを利用。
この部分は、g3mファイルの場合は60バイト目からのファイル名を調べるなどに応用できる。
最初の2バイトが BM かどうかは、StrCmp コマンドで判定。一致すれば 0 を返し、そうでない時は 1 か -1 を返すので、0でない時 Not exist と表示して Return -1 を実行しプログラムを終了する。

<ブロック4>
ビットマップファイルをロードし、テキスト画面の背景に表示する。
ここまで来れば、入力したファイル名がビットマップファイルなので、BmpLoad コマンドでロードする。
BmpLoad(Str 1),0,-24,0 は、Str 1 のビットマップファイルをフル画面モードの左上の座標 (0, -24) から背景として描画する。




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


 



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

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




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

プログラムライブラリ - OS内蔵ファンクションメニュー探索

プログラムライブラリ
<目次>

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

2019/05/28
修正 2020/01/13


OS内蔵ファンクションメニュー探索 - SysFunc Ver 1.3


※ [2020/01/13] C.Basic for CGSysFinc Ver 1.3 を差替え再々アップデート (5桁の F-Key# へ対応できるように修正)


著作権者

やす (Krtyski)
[当ブログ管理人]



対応機種

- Casio fx-CGシリーズ - C.Basic for CG で動作
- Casio fx-9860Gシリーズ - C.Basic for FX で動作



プログラムの説明

ファンクションキー探索プログラム - Check System F-Key

fx-CGシリーズ や fx-9860GシリーズのOSには、ファンクションキーの様々なアイコン画像が内蔵されており、それぞれに System Function Key# が割り当てられている。C.Basic の独自コマンド FKeyMenu( は、[F1] から [F6] の位置に ファンクションメニューを表示できる。その際、OS内蔵の System Function Key# を指定すると内蔵されている画像を利用できる。そこで、ファンクションキーのアイコン画像と Key # を調べるために本プログラムを作成した。

その後 C.Basic for CG に独自のファンクションキーのアイコンを装備する計画があり、それに併せてプログラムを更新した。

  C.Basic for CGFKeyMenu( コマンドで呼び出せる Function Key# を調べる
  1. 画面左下に システムファンクションキーを表示する
  2. カーソルキーで システムファンクションキー#をスキャンする
   - カーソルキーの長押しで連続スキャン
   - 左右 / キー (◀▶) で1づつ Step スキャン
   - 上下 / キー (▲▼) で50刻みの Skip スキャン
  3. [F4](INPUT)[EXE] キーで数値の入力
  4. [F5](HELP) で使い方説明
    
   SysFunc3_2_1_f SysFunc3_2_2_f2 SysFunc3_2_3_f 
  ※ [2020/01/13 差替えアップデート]
    C.Basic for CG 独自に実装する(予定)の Function Key アイコンは F-Key# 10001 以降。
    それに対応するため 5桁の F-Key# に対応するよう変更した。
  ※ [2020/01/13 差替え再アップデート]
    システム内蔵Function Keyアイコンの上限番号はOSバージョンに依存するので、
    OSバージョンを自動判定し、仕様機種とOSに応じた上限番号を表示するように変更した。
機種OSバージョン判定に使ったOSバージョンFunction Key上限番号
    fx-CG101.04.32001.041248
fx-CG202.02.02002.021276
fx-CG103.10.32003.101378
fx-CG203.11.02003.111379
fx-CG503.20.02023.201394
fx-CG503.30.02023.301400
  ※ [2020/01/13 差替え再々アップデート]
    カスタムFunction Keyアイコンを Function Key アイコンは F-Key# 10001 以降。
    F-Key# が 10001 以上の時は、画面中央に Custom F-Key# と表示
    それ未満の時は、画面中央に System F-Key# と表示するように変更した。
    
  C.Basic for FXFKeyMenu( コマンドで呼び出せる System Function Key# を調べる
  1. 画面左下にシステムファンクションキーを表示する
  2. カーソルキーで システムファンクションキー# をスキャンする
   - カーソルキーの長押しで連続スキャン
   - 左右 ←/→ キー(◀ ▶) で1づつ Step スキャン
   - 上下 ↑/↓ キー (▲ ▼) で50刻みの Skip スキャン
  3. [F4] (INPUT)[EXE] キーで数値の入力
  4. [F5] (HELP) で使い方説明

   SysFunc3FX_1 SysFunc3FX_3 SysFunc3FX_2 



プログラムファイルのダウンロード

※ fx-CGシリーズ用
   SysFunc3.g3m のダウンロード

※ fx-9860Gシリーズ用
   SysFunc3.g1m のダウンロード




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


 


keywords: fx-5800PCasioBasic、プログラムライブラリプログラム関数電卓

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


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

プログラムライブラリ - TimeZone

プログラムライブラリ
<目次>

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

最終更新:
2020/01/08

Time Zone (2020年版)

2020年のヨーロッパ・北米夏時間に対応 [2020/01/08]
※ プログラム改善: >>>> 表示で何も入力せず確定時、値が 0 に変更されていたのを変更しないように改善した [2017/08/14]


著作権者

やす (Krtyski)
[当ブログ管理人]



対応機種

Casio fx-9860G, fx-9860GII シリーズで走る純正Casio Basic および C.Basic for FX で動作
Casio fx-CG10, fx-CG20・fx-CG50 で走る純正Casio Basic および C.Basic for CG で動作
(fx-FD10 Pro の純正Casio Basicでも動作すると思われます)

Casio fx-5800P 用は こちら



プログラムの説明

TimeZonefx-5800P用に作成したプログラムを移植したものです。プログラム作成方法については Casio Basic 入門をご覧下さい。

TimeZone は、日本、ヨーロッパ、北米での同じ時間を表示します。その際、タイムゾーンや夏時間を考慮した時間を計算します。

具体的には、3カ所のうち、どこか一カ所の時間を入力すると、時差を計算して他の二カ所の時間を表示するプログラムです。

例えば、日本、ドイツ、モントリオールの3カ所から接続して電話会議を行う時に、それぞれが夜中にならないように時間を決める時などに役立ちます。

2020年の夏時間は、
 ・ヨーロッパは、3月29日午前1時 ~ 10月25日午前1時
 ・北米は、3月8日 午前2時 ~ 11月1日午前2時
となります。
TimeZone では、
 ・ヨーロッパは、3月29日 ~ 10月274
 ・北米は、3月8日 ~ 10月31日
としています。


本プログラムでは、以下のタイムゾーンや夏時間の設定が行えます。

- 日本
 JST: 日本標準時間

- ヨーロッパ
 WET: 西ヨーロッパ標準時間
 CET: 中央ヨーロッパ標準時間
 EET: 東ヨーロッパ標準時間
 FET: 極東ヨーロッパ時間

 WEST: 西ヨーロッパ夏時間
 CEST: 中央ヨーロッパ夏時間
 EEST: 東ヨーロッパ夏時間
 FEST: 極東ヨーロッパ夏時間
EU-TZ 

- 北米(アメリカ、カナダ)
 PST: 太平洋標準時間
 MST: 山岳部標準時間
 CST: 中部標準時間
 EST: 東部標準時間

 PDT: 太平洋夏時間
 MDT: 山岳部夏時間
 CDT: 中部夏時間
 EDT: 東部夏時間

US-TZ 



プログラムの使い方

0:JST - 
日本時間 の入力と表示
       [0] キー: 日本時間入力

1:CET - ヨーロッパ時間の入力と表示
       [1] キー:    ヨーロッパ時間入力
       [1] キー長押し: ヨーロッパ内のタイムゾーン設定
       [3] キー:    ヨーロッパの夏時間ON/OFF
       [3] キー長押し: 夏時間の期間を表示
     
2:EDT
- 北米時間の入力と表示
       [2] キー:    北米時間入力
       [2] キー長押し: 北米内のタイムゾーン設定
       [4] キー:    北米の夏時間ON/OFF 
       [4] キー長押し: 夏時間の時間を表示

[3] キー、[4] キー長押しで表示される夏時間について:
2020年の夏時間の開始と終了は、ヨーロッパでは午前1時、北米では午前2時になっています。本プログラムでは、夏時間終了日を実際の設定日の前日を表示するようにしています。終了設定日の午前0時から午前1時 / 午前2時までの時間帯は、本来まだ夏時間のままですが、寝静まっている時間帯なので無視しています。現実的には問題ないと思いますが、留意してください。



プログラムの構成

メインプログラム: TIMEZONE
サブルーチン: TZCTZDTZMTZS、TZL
入力ボックス: INPI



プログラムファイル - TIMEZONE

※ fx-9860G/GII と fx-CG10/CG20/CG50 の純正Casio Basic ならびに C.Basic で動作します。

プログラムファイル (g1m) のダウンロード
プログラムファイル (g3m) のダウンロード

fx-9860G/GII ならびに fx-CG10/CG20/CG50 専用の入力ボックス INPI がそれぞれ必要です。

  • TIMEZONE には、入力ボックス INPI が必要です(ダウンロードファイルに含まれています)。
  • 同梱されている g1m ファイルは fx-9860GII 向けですが、変更せずそのまま fx-CG20 に転送すると正常動作します。但し fx-CG20 に転送後 fx-CG20用の g3m ファイルに変換されます。
  • ダウンロードファイルに含まれる Text_files フォルダ内に、ソースコード(テキストファイル)があります。これらテキストファイルは C.Basic で g1m ファイルから変換したものです。
  • サブルーチン TZL は、C.Basic で使用するものです。但し純正Casio Basic では実行が無視されるので転送しても問題ありません。
  • メインルーチン TIMEZONE の1行目の 300→L はキー長押し時間を決める。長押しと認識するまでの時間を短くするにはこの数値を小さくする。長くするには数値を大きくする。
  • C.Basic では 現在設定されている実際の実行速度に対応して サブルーチン TZL で長押し時間を自動調整しているので、1行目での長押し時間の設定は動作に影響しない。これは特にオーバクロック時に有効。
  • ヨーロッパと北米の夏時間期間表示は、サブルーチン TZS にある。2017年の夏時間に対応した変更を行っている。 



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


     


    keywords: fx-5800PCasioBasic、プログラムライブラリプログラム関数電卓

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



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

fx-5800P プログラムライブラリ - Time Zone

プログラムライブラリ
<目次>

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

最終更新:
2020/01/08

Time Zone (2020年版)

※ CcLinkerでfx-5800Pに転送できる CCLファイルがダウンロード可能に [2018/10/29]
2020年のヨーロッパ・北米夏時間に対応 [2018/01/20]
※※ プログラム改善: >>>> 表示で何も入力せず確定時、値が 0 に変更されていたのを変更しないように改善した [2017/08/14] 


著作権者

やす (Krtyski)
[当ブログ管理人]



対応機種

Casio fx-5800P 専用
Casio fx-9860G / fx-9860GII シリーズ、fx-CG10、fx-CG20、fx-CG50 用は こちら



プログラムの説明

TimeZone の作成方法は Casio Basic 入門をご覧下さい。

Time Zone は、日本、ヨーロッパ、北米での同じ時間を表示します。その際、タイムゾーンや夏時間を考慮した時間を計算します。

具体的には、3カ所のうち、どこか一カ所の時間を入力すると、時差を計算して他の二カ所の時間を表示するプログラムです。

例えば、日本、ドイツ、モントリオールの3カ所から接続して電話会議を行う時に、それぞれが夜中にならないように時間を決める時などに役立ちます。

2020年の夏時間期間:
 ・ヨーロッパ: 3月29日 午前1時 ~ 10月25日午前1時
 ・北米:3月8日午前2時 ~ 11月1日午前2時
TimeZoneでは、
 ・ヨーロッパ:3月29日 ~ 10月24日
 ・北米:3月8日 ~ 10月31日
としています。

以下のタイムゾーンや夏時間の設定が行えます。

- 日本
 JST: 日本標準時間

- ヨーロッパ
 WET: 西ヨーロッパ標準時間
 CET: 中央ヨーロッパ標準時間
 EET: 東ヨーロッパ標準時間
 FET: 極東ヨーロッパ時間

 WEST: 西ヨーロッパ夏時間
 CEST: 中央ヨーロッパ夏時間
 EEST: 東ヨーロッパ夏時間
 FEST: 極東ヨーロッパ夏時間
EU-TZ 

- 北米(アメリカ、カナダ)
 PST: 太平洋標準時間
 MST: 山岳部標準時間
 CST: 中部標準時間
 EST: 東部標準時間

 PDT: 太平洋夏時間
 MDT: 山岳部夏時間
 CDT: 中部夏時間
 EDT: 東部夏時間

US-TZ 



プログラムの使い方

0:JST - 日本時間 の入力と表示
       [0] キー: 日本時間入力

1:CET - ヨーロッパ時間の入力と表示
       [1] キー:    ヨーロッパ時間入力
       [1] キー長押し: ヨーロッパ内のタイムゾーン設定
       [3] キー:    ヨーロッパの夏時間ON/OFF
       [3] キー長押し: 夏時間の期間を表示
     
2:EDT
- 北米時間の入力と表示
       [2] キー:    北米時間入力
       [2] キー長押し: 北米内のタイムゾーン設定
       [4] キー:    北米の夏時間ON/OFF 
       [4] キー長押し: 夏時間の時間を表示

[3] キー、[4] キー長押しで表示される夏時間について:
(2018年版) 夏時間の開始と終了は、ヨーロッパでは午前1時、北米では午前2時となっています。本プログラムでは、夏時間終了日を実際の設定日の前日を表示するようにしています。終了設定日の午前0時から午前1時 / 午前2時までの時間帯は、本来まだ夏時間のままですが、寝静まっている時間帯なので無視しています。現実的には問題ないと思いますが、留意してください。


プログラムの構成

メインプログラム: TIMEZONE
サブルーチン: TZCTZDTZMTZS
入力ボックス: INPI



プログラムファイルのダウンロード

CcLinker で fx-5800P に転送できるCCLファイルのダウンロー
  ※ 上記6つのプログラムファイルに対応するCCLファイルが含まれます。
  CcLinkerの紹介

※ fx-5800P でのみ動作します。
fx-5800P 用入力ボックス INPI が必要です。
2020年版対応は、TSZ のみの更新です。






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


 


keywords: fx-5800PCasioBasic、プログラムライブラリプログラム関数電卓

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


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

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、プログラミング



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

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

やす (Krtyski)

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


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

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

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


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR