e-Gadget - プログラム関数電卓 2020年05月

Casio Basic の勧め

.
更新 2020年5月31日

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 とは? [2020/05/30 更新]

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

1) fx-5800P                            (プログラム関数電卓)
2) fx-9860Gシリーズ
                (グラフ関数電卓)
3) fx-9860GIIシリーズ             (グラフ関数電卓)
4) fx-CG10
/CG20/CG50 
      (カラーグラフ関数電卓)
5) fx-FD10
pro                        (プログラム関数電卓 - 土木測量向け)
6) fx-9860GIII
                       (グラフ関数電卓)
7) fx-9750GIII
                       (グラフ関数電卓) 

これらに搭載されている言語は、私は 新世代 Casio Basic と呼び、CFX-9850G で初めて搭載された Casio Basic とは区別しています。

新世代 Casio Basic は、上から下へ処理が流れるようなブロック構造のコードが書けます。Getkey コマンドと Locate コマンドがあるため、スクロールを抑えて1画面で自由に入出力できるプログラムが作れます。また、条件判定は基本的に 0 で偽、0 以外で真としてコーディングできます。但し、引数と戻り値のある関数をユーザーが作ることが仕様上できず、ローカル変数が使えずグローバル変数のみといった制限かあります。しかし、新世代Casio Basic は、実用プログラムを作れるだけの機能を備えていることは、意外に知られていません。実用性を与えている主な要件は、以下の項目だと思います;
  • Getkey[AC] キー以外の全てのキーに異なるキーコードが割り当てられ、押したキーをリアルタイムで判定できるコマンド。
  • Locate: パラメータに、即値以外に変数、式、コマンドを指定して位置を柔軟に指定して出力するコマンド。
  • 条件判定を 0 で偽、0 以外で真とできること
  • ブロック構造のコーディングGoto に頼らずにプログラムの制御を記述し、可読性の高いブロック構造でプログラミングする方法。
実は、構造化Basic は既に fx-CP400 や fx-CG500 に搭載されています。これらを使えばスグに分かるのが、処理速度が極めて遅い上、代表的な問題点として If ブロックから Goto で脱出できない(動作が保証されていない)、3項演算子が無いなどの中途半端な実装になっています。これに対して新世代Casio Baisc は、非常によく作り込まれていることは、実際に使いこなしてみると、よく分かります。

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

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

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

<トップへ戻る>

Casio Basic 搭載機種の選定

[2020/05/30 更新]
上でリストアアップした新世代 Casio Basic を搭載した機種にはは、既に国内で販売中止になった機種と国内では発売されず海外でのみ発売されている機種を含んでいます。現時点で国内での購入に限定すれば、fx-5800P と fx-CG50 のどちらかを選ぶことになります。

但し、セカイモンやAmazon USAなどのネット通販を利用すれば、日本に居ながら海外から購入できますので、管理人はよく利用しています。fx-CG50については、並行輸入品を国内通販で購入するか、海外から直接購入すると、半額近い価格で入手できます。最近の例でいえば、アメリカ専用モデルのモノクログラフ関数電卓 fx-9750GIII が fx-5800P とほぼ同じ価格(千円程度の違い)で入手できます。そこで上でリストアップした機種は、日本で入手可能なものという前提で、機種選定について説明しようと思います。

プログラム関数電卓 fx-5800P は最も小型軽量で、最も安価、そして関数電卓としても使いやすく、ハードウェアとソフトウェアのバランスが良いので、実用に適しており推奨機種の1つです。グラフ機能はありませんが、プログラムを実用的に使うには十分な能力があります。

グラフ関数電卓はデータや数式から様々なグラフを描画できますが、主に教育用に設計されているので、実用には fx-5800P ほど向いていないと感じています。しかしグラフ関数電卓は fx-5800P に比べてCPUパワーが遙かに高いので、Casio Basic プログラムの処理能力が高く、プログラミングを楽しむにはお勧めです。なおグラフ関数電卓には、モノクロ液晶を搭載した機種と高精細度のカラー液晶を搭載した機種があります。日本国内では、fx-9860G と fx-9860GII は既に販売されておらず、高精細カラー液晶を搭載した fx-CG20 と fx-CG50 のみが発売されています。

fx-CG20は、既に製造中止品でありOSアップデートも最近は行われていないので推奨しません。一方、現在でもOSアップデートが継続し Pythonモードも搭載している fx-CG50 を推奨します。

但し、モノクロ液晶で良いならば、現在発売されている機種ならば、fx-5800P か fx-9750GIII (Amazon USA) の二択だと思います。仮に中古機を含めるならば、fx-9860G Slim が管理人の一推しです。

Casio Basic の機能は、fx-9860G に OS2.00 以降を導入したもの以降の全ての機種がほぼ同じで、互換性があります。fx-CGシリーズは高精細カラー液晶に特化したコマンドが追加されていますが、モノクロのグラフ関数電卓の Casio Basicプログラムはそのまま動作します。

各機種の概要を以下の記事でまとめていますので、参考にしてください。

fx-CG50: fx-CG50 の概要
fx-CG20: fx-CG20 の概要
fx-9860GIII: fx-9860GIII の概要
 fx-9750GIII: fx-9750GIII の概要
 fx-9860G Slim: fx-9850G Slim の勧め


 fx-9860GII: fx-9860GII USB POWER GRAPHIC 2
 fx-5800P: 本記事は主に fx-5800Pの勧め になっています

 Casio Basic - 機種間の互換性
 Casio プログラム電卓の価格動向


fx-5800P 以外のグラフ関数電卓の Casio Basicには、グラフィックス機能があり、高機能ですが fx-5800P よりも高価です。これらの中で安価な fx-9750GIII は、fx-5800P と価格差が極めて少な点が魅力です。

[2020/05/31 更新]
国内で既に販売中止になっている fx-9860G や fx-9860GII は Casio純正の開発環境 - Casio SDK を使えば、パソコン上で C言語を使ってプログラムを作り、それを電卓に転送して Add-in プログラムとして利用できます。C言語で作った Add-in プログラムは、Casio Basicに比べてかなり高速動作し、Casio Basic では実現できない機能を使った処理が可能です。
しかしこれらのモデルはもはや販売されていません。その代わりに C.Basic を推奨します。C.Basic は純正Casio Basic の上位互換を目指しつつ、多くの独自コマンドにより Cプログラミングに近いコーディングが可能で、Cで作った Add-inプログラム並の高速処理が可能です。C.Basic は fx-9860G 以降の Add-in プログラムを使えるグラフ関数電卓で動作するので、もはや Casio SDK を使う必要はありません。
C.Basic を使うモデルとしては、個人的には fx-9750GIII (モノクロ液晶モデル) か fx-CG50 (高精細カラー液晶モデル) を勧めます。

fx-5800P
グラフィックス機能の無い fx-5800Pは、処理速度が相対的に低いものの、グラフ関数電卓に比べて、相対的に低価格(実売6~7千円程度)であり、それ以上に関数電卓としてもプログラム電卓としてもバランスが取れた使い易さと小型軽量な点が特徴です。

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

fx-9750GIII
プログラムの高速性やグラフィックス処理を重要と考えるなら、fx-9750GIII も選択肢に入れるべきです。もし使いたい Add-in プログラムがあれば fx-9750GIIIを推奨します。このモデルは北米専用モデルで国内販売されていませんが、Amazon USA や セカイモンを利用して安い時で7千円台、少なくとも1万円未満で入手できます。有用な Add-In プログラムの1つとして、当ブログで紹介しているアドイン版 Casio Basic (Casio Basic の上位互換) があり、fx-9750GIII でも使えます。そして C.Basic では Casio Basicプログラムを極めて高速に実行できることに加えて、多くの C.Basic 独自コマンドを使えば Casio Basicで実現不可能な処理ができます。C.Basic が使いたくて、モノクロ液晶で十分ならば fx-9750GIII がお勧めと言えます。

fx-FD10 Pro
fx-FD10 Pro は、屋外使用を想定した堅牢な作りが特徴です。私自身が実機を持っていないので、取扱説明書から得られる内容から判断すると、上記の fx-5800P の使いやすさを備えていますが、実売2万円程度と高価で、さらに Add-in プログラムが使えません。堅牢な作りが必要ならば選択肢に含めるべきでしょう。そうでなければ、fx-5800P か fx-9750GIII を推奨します。

fx-CG50
fx-CG50 は、高精細度カラー液晶が特徴で、内蔵の関数計算も高速化されています。表現力の優れた高精細カラー液晶が必要だと考えるなら fx-CG50 を選択すべきです。性能重視で選ぶのなら fx-CG50 を勧めます。 
 
<トップへ戻る>

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-CG50 のようなグラフ関数電卓を利用でき、Windows プログラミングよりは Casio Basic の方がプログラミングは遙かに楽です。

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

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

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

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

fx-5800P【ゲーム】:もぐら叩き~まとめ~

fx-5800Pでもぐら叩き
e-Gadget


fx-5800P で作る「もぐら叩き」ゲームのまとめ
コード修正 2014/03/20
fx-FD10 proに関する記述追加 2014/09/28
コード誤記修正 2016/05/12
  fx-CG20 に関する記述修正 2017/01/04
fx-CG50 に関する記述追加 2017/07/24
追記 2017/08/06
追記 2020/05/30



普通のプログラム作成の記事と異なり、多少冗長な内容になっており、(1)~(8)で、徐々にプログラムを作ってゆく様子を複数の記事で紹介した。


最終的なプログラムは、本ページの一番下に掲載した。またこれを一部改善したもの、および各機種へ移植したものを プログラムライブラリに収録している。[2017/08/06 追記]

プログラムライブラリ - もぐら叩き (fx-5800P)
プログラムライブラリ - もぐら叩き (fx-9860GII)
プログラムライブラリ - もぐら叩き (fx-CG20 / fx-CG50)


以下の記事は作りながら書いているので、プログラミング本のように最終形を想定した進め方になっていない。途中でロジックの変更や、バグ対策や、変数の変更など、実際にどうやって完成させたかをそのまま書いている (fx-5800P版)。

fx-5800P【ゲーム】:もぐら叩き(1)

fx-5800P【ゲーム】:もぐら叩き(2)

fx-5800P【ゲーム】:もぐら叩き(3)

fx-5800P【ゲーム】:もぐら叩き(4)

fx-5800P【ゲーム】:もぐら叩き(5)

fx-5800P【ゲーム】:もぐら叩き(6)

fx-5800P【ゲーム】:もぐら叩き(7)

fx-5800P【ゲーム】:もぐら叩き(8)


fx-5800P に搭載されているプログラミング言語は、Casio Basic というカシオの味付けをした BASIC言語 だ。

特に、もぐら叩きのようなゲームを作る際に特に重要かつ必要なものは、以下の機能だろう。
1) 広い表示画面
2) Getkeyコマンドによる、リアルタイムキー入力監視機能
3) Locateコマンドによる、柔軟な表示機能
4) 真 (0以外) と 偽 (0) による条件判定


昔のプログラム電卓やポケコンに搭載されていた BASIC は行番号と GOTO コマンドでプログラムの流れを作っていたが、現在の Casio Basic は Goto コマンドを使わずに制御構造を作れるので、上から下へのシンプルな直線構造のコードの中に、1まとまりの処理ブロック1本に繋げる、いわゆるブロック構造にできるので、分かりやすくバグの入りにくいコードが書けるようになっている。

これらの機能が、fx-5800P を魅力的にしている。


CASIOの電卓の中で、上記を満たすプログラミング言語を搭載されているのは、下記のモデルだ。

・fx-9860Gシリーズ: グラフ関数電卓(生産終了)
 取扱説明書

・fx-9860G IIシリーズ: グラフ関数電卓(生産終了)
 メーカーサイト / 取扱説明書

・fx-9860GIII: グラフ関数電卓 (現行品、ヨーロッパ専用モデル)
 メーカーサイト / 取扱説明書

・fx-9750GIII: グラフ関数電卓 (現行品、北米専用モデル)
 メーカーサイト / 取扱説明書

・fx-CG20 / fx-CG10: カラーグラフ関数電卓(生産終了)
 メーカーサイト / 取扱説明書

・fx-FD10 pro:土木測量向けプログラム関数電卓 (現行品)
 メーカーサイト / 取扱説明書

・fx-CG50:カラーグラフ関数電卓 (現行品 - 2017/10/20 国内発売)
 メーカーサイト / 取扱説明書

・fx-5800P: プログラム関数電卓(現行品)
 メーカーサイト / 取扱説明書


fx-FD10 pro fx-FD10 pro < fx-9860GII版もぐら叩き >


fx-CG50 noce photo fx-CG50 < fx-CG50版もぐら叩きのダウンロード


fx-9860GII  fx-9860G II  fx-9860GII版もぐら叩きのダウンロード >


               fx9860GIII             fx-9860GIII  < fx-9860GIII版もぐら叩きのダウンロード


               fx-9750GIII_large             fx-9750GIII   < fx-9750GIII版もぐら叩きのダウンロード


fx-CG20  fx-CG20 fx-CG20版もぐら叩きのダウンロード >


    fx5800P_calc.          fx-5800P <fx-5800P版モグラ叩き - ダウンロードも可 > 


各機種の画像の右に、対応する「もぐら叩き」プログラムのダウンロードリンクを示している。ダウンロードして転送するだけで楽しめる (fx-5800P は CcLinker を使ってダウンロードしたプログラムファイルを転送できる) ので、先ずは遊んでみてください。

完全互換でないのには理由がある。電卓の機種が異なると、ハードウェアの違いからキー配置が異なる。従って、Getkeyで得られるキーコードが異なるため、ソースレベルでの互換性は無い。これを除けば fx-5800Pのプログラムからの移植性は比較的高いと(旧来の命令の互換性については、少し注意が必要だ⇒こちらを参照)。

fx-5800P、fx-9860Gシリーズ (さらにOS載せ替えしたfx-9750Gシリーズ)、fx-CGシリーズ以外ではこのゲームは走らない。例えば、fx-72F、fx-71F 、fx-3600P、fx-3950Pなどはプログラム機能が十分でないので適用外だ。

ところで、fx-9860GII、fx-CG20、fx-CG50、fx-FD10 Pro は、1万円以上の価格だ。一方で、fx-5800P は 6千円台前半 (2017/01/01時点の Amazon価格) と格段に手軽な価格だ。この価格で、上記4つの条件を満たす言語を搭載しているのだから、改めて魅力的なマシンと言える。

※ 興味があれば、最近のCasio プログラム電卓の価格動向 をご参照。


当初は、fx-5800P のような電卓で、遊べるアクションゲームを作れるとは思っていなかった。たまたま、Goto~Lbl コマンドで、カウントタイマーを作ってみると、意外に速いことから、実際に遊べるレベルのアクションゲームを作れるかどうかを試したくなったのが、もぐら叩きを作り始めた動機だった。

パソコンで作るゲームと異なり、最初にゲーム仕様を作るのではなく、機能を追加した時にゲームとしてのスピード感を損なわないように探りつつ、様子を見ながら後付けでゲーム仕様を考えた。実際に私自身が考えたり試したりした事柄を、時系列で実況中継風に書いた結果、冗長な記事となってしまった。

できあがったゲームは、バリバリのゲーマーには物足りないのだが、普段からあまりゲームで遊ばない人間(=私)には、少しすつスキルアップして、得点が増えてゆくのが愉しい。


ご興味の有る方は、是非一度プログラムを入力して、遊んでみて欲しい。


もぐら叩きが意外にうまくいったので、最近はシューティングゲームができないものか?と、色々と動きのあるルーチンを作って遊んでみている。ひょっとしたら、何かシューティングゲームができるのかも知れない。

電卓の遅い処理速度、完全シングルタスク、広いといっても16×4 しかない画面で、動きやロジックを試しながら、遊べそうなゲームを模索してみようと思っている。


おしまい( ^o^)ノ



以下は、プログラムコード: [2016/05/15 誤記修正]

[2017/08/06 追記]
メインルーチンの3行目 Lbl 0 の下に、2行追加したものをプログラムライブラリに収録している。
追加した2行は、
While Getkey
WhileEnd


もぐら叩き: Wack -a-Mole by やす(Krtyski)

Wack-a-Mole_src 



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





keywords: fx-5800Pfx-CG20fx-9860G IIゲーム、プログラミングもぐら叩きプログラム関数電卓

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

関連記事

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

fx-CG20 の概要

初版: 2016/04/18
追記: 2016/06/04
更新: 2017/06/29
追記更新 2017/12/05
周期関数の積分について訂正 2020/05/23 


Casio fx-CG20

[2017/12/05 追記] fx-CG10 / CG20 ユーザーへ福音 - アドイン版 Casio Basic が fx-CG10 / CG20 に対応しました。遅い fx-CG10 / CG20 でも高速処理系を楽しめます。本稿最後に追記しました。

fx-CG20_M

fx-CG20 を入手したので、概要を調べてみました。

fx-CG20 は、寸法や重さは fx-9860GII とほぼ同じで、キー配置や機能も fx-9860GII とほぼ同じです。
Casio Basic プログラムも fx-9860GII の上位互換となっているので、fx-9860GII の Casio Basicプログラムファイルは、一部のコマンドを除けば、ほぼそのまま fx-CG20 へ移植できます。

プログラムファイルのキーワードプロテクトの仕様が fx-9860GII から変更されていて、fx-9860GII では一旦設定したパスワードは削除できませんが、fx-CG20では削除可能です。[2016/06/04 追記]

fx-9860GII と大きく異なるのは、高精細カラー液晶を搭載していることです。精細度が高いので画面の物理的なピクセル数が増えています。従って、物理座標系で動作するコマンド(PxlOnPxlOffPxlChgPxlTest、Text)は互換性がありません。また、Xmin, Xmax, Xdot に関する挙動も一部異なります。

このようなグラフィックスコマンドを用いたプログラムファイルは、fx-CG20 へそのまま移植すると描画動作が異なってしまいます。面白いことに、物理座標系で動作する Text コマンドだけは、そのパラメータで座標を指定する部分が、転送作業後自動的に変更されて、互換性が保たれます。

fx-9860GII と fx-CG20 の互換性という点では、キー配列と割り当て機能が殆ど同じ([5] キーに [SHIFT] [5] (FORMAT) が追加されているのが唯一の違い)で、関数電卓としては全く同じです。ちなみに積分計算は高速化されています。

ここでは、主に Casio Basicを使うことを念頭において、fx-CG20 の特徴やfx-9860GII から変化した点などを実際に調べて、その結果を紹介します。
 
 


さて、fx-CG20 に搭載されている Casio Basic は、2006年に発売された fx-5800P 以降の機種に搭載されている 言語との互換性が高く、見かけによらず高機能です。当ブログでは、これらの言語を新世代 Casio Basic と呼んでいます。

< 新世代Casio Basic搭載機 >
 - 2006年発売 fx-5800P
 - 2007年発売 fx-9860G (OS Ver 2 以降)、生産中止
 - 2009年発売 fx-9860GII
 - 2010年発売 PRIZM fx-CG10 (北米のみ)、fx-CG20とほぼ同じ
 - 2012年発売 fx-CG20
 - 2013年発売 fx-FD10 Pro


新世代 Casio Basic については、Casio Basic の勧め を参考にしてください。

新世代 Casio Basic は、fx-5800P、fx-9860GII、fx-CG20 と機種が異なっても、一定の互換性が確保されています。当ブログでも fx-CG20 や 搭載 Casio Basic に関する記事を今後公開してゆくつもりです。


目 次

fx-CG20 の外観 / 概要

 寸法 / 重さ

 外装 / デザイン

 表示 / 出力

    テキスト表示
    グラフィックス表示
     1ピクセルの細線描画プログラム
     3ピクセルの標準線秒がプログラム

 カラー表示

 キー配置 / キー入力

 プログラムリストの利便性

 関数電卓として

    メモリバックアップ機能
    ユーザーデータ・バックアップ機能
    複素指数関数
    積 分
    周期関数の積分

fx-9860GII から fx-CG20 へのプログラム移植

 電卓同士を繋いで直接転送

 PCとのリンク

プログラムの動作比較

 互換性

    テキスト表示のプログラム例
     入力ボックス
     TempConv
     TimeZone
     HitBlow - Hit&Blow ゲーム

 処理速度

    計算主体プログラム例
     PRIME - 素因数分解

    動きのあるテキスト表示プログラム例
     PYTHA - ピタゴラス数探索

   動きのあるグラフィックス・プログラム例
     MONTECAR - モンテカルロ法

まとめ...のようなもの

 互換性の利点

 動きのあるプログラム

 fx-CG20 に期待するもの
 
追 記 



fx-CG20の外観 / 概要

   5800P_9860GII_CG20 
 左から、fx-5800P、fx-9860GII、fx-CG20

主な仕様
機種fx-5800Pfx-9860GIIfx-CG20
液晶ディスプレイ
Casio Basic Graphics 出力
Caso Basic Text 出力
表示種別
モノクロ、96 x 31 ピクセル
なし
16 桁 x 4 行
テキストのみ
モノクロ、128 x 64 ピクセル
127 x 63 ピクセル
21 桁 x 7 行
 
テキスト、グラフィックス
カラー、384 x 216 ピクセル
379 x 187 ピクセル
21 桁 x 7 行
テキスト、グラフィックス
寸法 (mm)163 x 82 x 15184 x 91.5 x 21.2188.5 x 89.5 x 20.6
重量 (g)150260220
電池 / 寿命単4電池 x1 / 1年単4電池 x4単4電池 x4 / 140時間
仮数+指数10桁+2桁10桁+2桁10桁+2桁
内部演算桁数15桁15桁15桁
プログラムメモリ容量最大28.5 KByte最大 62 KByte最大 61 KByte
プログラムファイル名最大12文字最大8文字最大8文字

▲目次に戻る


寸法 / 重量

fx-9860GII と fx-CG20 はほぼ同じサイズ、重量は fx-5800P よりも厚みが1.5倍程度(カバーを付けると2倍程度)あって、一回り大きい感じです。


外装 / デザイン

fx-CG20 は、一言で言えばかっこいいですね。上半分の天板が透明プラスチックになっていて、矢印キーから液晶までの上全体をカバーしています。これがデザイン上の高級感を出しているように思います。しかし、透明天板は表面硬度が低くて傷つきやすく、使い込んでゆくと傷が目立ってくるのではないか気になります。スマホ用の保護シートを貼るなどの対策が良いかも知れません。保護ケースは、グレーの半透明で少し弾力性のあるプラスチック部材で、これもデザイン性が高いと思います。

▲目次に戻る


表示 / 出力

fx-CG20 は高精細カラー液晶を採用しているので、表現力が高いのが最大の特徴です。

 テキスト表示
Casio Basicでのテキスト表示の範囲は横21桁、縦7行。fx-9860GII と同じです。

CG20_Text 

▲目次に戻る


 グラフィックス表示

fx-CG20 のカラー液晶は、384×216 ピクセルありますが、Casio Basicでのグラフィックスプログラミングで使える描画エリアは、それより狭く制限されています。

Casio Basic での描画エリア制限は fx-9860GII にもあって、128 × 64 のドットマトリックスを搭載していて、Casio Basic で描画できるのは、127 × 63 ピクセルです(Casio Basic入門G01 参照)。

さて、fx-CG20 は fx-9860GII に比べると、Casio Basic で実際に使える描画エリアは、縦横ともに約3倍の精細度となっていて、

 ・横: (127 × 3 - 2) = 379 pixel
 ・縦: (63 × 3 - 2) = 187 pixel


となります。

ViewWindow コマンドによる座標系の設定は、fx-9860GII と互換性が保たれています。
例えば PlotOn コマンドで描画を行うと、fx-9860GII では液晶の1ピクセルが描画されますが、fx-CG20 では3 pixel x 3 pixel の 9 pixel の領域が1ドットとして描画されます。このようにしてグラフィックスが同じ位置に描画され、互換性が保たれています。

高精細液晶の fx-CG20 で、1ピクセルを1ドットに対応させようと思い、

ViewWindow 1,379,0,187,1,0
PlotOn 300,100

を実行すれば、1ドットが小さくなって細かい点が描画されることを期待しましたが、そこまで柔軟ではなくて、1ドットは 3x3 ピクセルのままです。PlotOn などのViewWindow 座標系やデフォルトの論理座標系で、ドット(点)を描画するコマンドは、3x3 の1ドットが描画の単位であり、fx-9860GII との互換性の確保が優先されているようです。

そこで、せっかくの高精細度液晶を活かすために、fx-CG20 の液晶の1ピクセル単位で描画したいと思って調べてみると、いくつかのコマンドは1ピクセル単位の描画に対応しています。

fx-CG20 で追加された細線のスタイル設定 SketchThin コマンド や S-L-Thin コマンドを組み合わせて使ってみると、1ピクセルの幅で直線や円を描画できました。さらに、1ピクセル単位で点を描画するためには、物理座標系で使える PxlOnPxlOffPxlChgPxlTest( ) コマンドが有効だと分かりました。

そこで、高精細カラー液晶で1ピクセル単位で描画するサンプルプログラムを走らせて、概略を調べてみます。

▲目次に戻る


 1ピクセルの細線描画プログラム

ファイル名: THINLINE.g3m

ClrGraph
CoordOff
GridOff
AxesOff
LabelOff
ViewWindow 1,127,0,63,1,0 ・・・(T-1)

Plot/Line-Color Black ・・・(T-2)

SketchThin Circle 63,31,25 ・・・(T-3)

Blue SketchThin F-Line 1,1,127,63 ・・・(T-4)

Red SketchThin Vertical 63 ・・・(T-5)

Magenta SketchThin Horizontal 31 ・・・(T-6)

For 1→A To 63×3-2 ・・・(T-7)
PxlOn A,A
Next


※ このプログラムファイルのダウンロード: THINLINE (細い:THIN + 線:LINE)

このプログラムについて、簡単に説明します。

まず、このプログラムを入力しますが、キー操作は fx-9860GII と殆ど同じなので、fx-9860GII で慣れていると fx-CG20 で楽に入力できます。上のリンクからダウンロードできます。
では、MAIN MENU から Program を選び...

MENU 

Program
 を起動し、THINLINE を選んで実行します。
   ThinLine 

上のソースコードで、冒頭から (T-1) までは、 グラフィックスプログラムの設定です。ViewWindow座標系を設定しています。

ViewWindow 1,127,0,63,1,0 ・・・(T-1)

で、左上の座標が (1, 1) で、右下が (127, 63) になるような論理座標系を設定しています。これは、fx-9860GII の物理座標系に近い設定です。

fx-9860GII の Casio Basic グラフィックス座標系については、Casio Basic入門G01Casio Basic入門G07 でまとめていますので、参考にしてください。

続いて、

Plot/Line-Color Black ・・・(T-2)

では、デフォルトの色を Black に指定しています。

Plot/Line-Color コマンドの入力:
 ショートカットキーが見つかっていません。
 とりあえず以下で入力できます。
 ・[SHIFT] [7] (CATALOG)
 で、現れるコマンドリストから探して入力。

※ 色指定コマンドの入力:
 ・ [SHIFT] [5] (FORMAT)
 ・ [1] (1:Color Command) ⇒ [EXE]
 ・ [1][7] で7色を選ぶ

なお、工場出荷状態では、デフォルトの色が Green になっているようで、Plot/Line-Color コマンドを使わないと、デフォルトは緑色になっているようでです。購入したもの以外に、実機が置いてあるお店で色々と試した結果です。

次の行の、

SketchThin Circle 63,31,25 ・・・(T-3)

は、SketchThin で1ピクセルの幅を指定して、Circle コマンドを実行しています。

Thin_Circle 

続いて、

Blue SketchThin F-Line 1,1,127,63 ・・・(T-4)

では、色を Blue 、線の太さを SketchThin で1ピクセルに指定して、F-LINE コマンドで線を描画します。

THin_F-LINE 

さらに、

Red SketchThin Vertical 63 ・・・(T-5)

では、色を Red、線の太さを SketchThin で1ピクセル幅にして、垂直線描画 Vertical コマンドを実行しています。

Thin_Vertical 

今度は、水平線描画コマンド Horizontal に、色を Magenta に、線の太さを SketchThin で1ピクセルに指定して実行します。

Magenta SketchThin Horizontal 31 ・・・(T-6)

Thin_Horizontal 

最後に以下の3行で、物理座標系で使う PxlOn で点を描画しますが、fx-CG20 の高精細液晶の1ピクセル単位での描画が可能になります。
For 文を使って、左上 PxlOn 1,1 から 右下まで 1ピクセルの点を順に描画してゆきます。

For 1→A To 63×3-2 ・・・(T-7)
PxlOn A,A
Next


ここで、63x3-2 は、187 ですが、分かり易いように計算式のままにしています。Casio Basic で使える描画エリアは、縦 187 ピクセル分です。

ところで、PxlOn コマンドの前に色指定をしていません。この場合は、Plot/Line-Color Black でデフォルト色に Black を指定しているので、これが活きて、自動的に Black 指定となります。

Thin_PxlOn 

▲目次に戻る



3ピクセルの標準線描画プログラム

次に、上の THINLINE プログラムにある SketchThin コマンド を全て削除して、線の幅の1ピクセル指定を無効にして、描画がどうなるかを調べてみます。

ファイル名: NORMLINE.g3m
ClrGraph
CoordOff
GridOff
AxesOff
LabelOff
ViewWindow 1,127,0,63,1,0 ・・・(N-1)

Plot/Line-Color Black ・・・(N-2)

Circle 63,31,25 ・・・(N-3)

Blue F-Line 1,1,127,63 ・・・(N-4)

Red Vertical 63 ・・・(N-5)

Magenta Horizontal 31 ・・・(N-6)

For 1→A To 63×3-2 ・・・(N-7)
PxlOn A,A
Next


※ このプログラムファイルのダウンロード:NORMLINE (標準:NORM + 線:LINE)

これを実行すると、以下のように順次描画が進みます。

Norm_Circle Norm_F-LINR 

Norm_Vertical Norm_Horizontal 

Norm_PlotOn 

同じプログラムを fx-9860GII で実行すると、以下のような出力が得られ、同じようになりました。

9860GII_NormLine 

fx-9860GII では円がデコボコになっていますが、高精細液晶の fx-CG20 ではスムーズな円になっていて、fx-CG20 の表現力の高さがはっきりと現れています。

fx-9860GII での標準の太さは1ピクセルなのに対して、fx-CG20 での標準の太さは3ピクセルで、互換性を保っていることが確認できました。

▲目次に戻る

 
 
カラー表示

テキスト表示やグラフィックス表示に7色(Black、Blue、Red、Magenta、Green、Cyan、Yellow)の色指定を各描画コマンドの前に設定すると描画の色を変えることができます。或いは、まとめて設定するコマンド Plot/Line-Color もあって、これらのカラー表示の様子は上で紹介しました。

テキストのカラー表示は、Locate コマンドの前に色指定を書けば良さそうです。
例えば、Locate コマンドを使ってテキストキャラクタの を画面一杯に表示させ、 の表示のたびに指定する色をランダムに変えています。このプログラムを何度か実行させると、以下のように色のパターンがランダムに現れます。カラー液晶搭載の fx-CG20 の楽しい部分ですね!

CLORTXT COLORTXT2 COLORTXT3 COLORTXT4 

ファイル名: COLORTXT.g3m
For 1→Y To 7
For 1→X To 21
RanInt#(1,7)→N
If N=1:Then
Black Locate X,Y,"■"
Else If N=2:Then
Blue Locate X,Y,"■"
Else If N=3:Then
Red Locate X,Y,"■"
Else If N=4:Then
Magenta Locate X,Y,"■"
Else If N=5:Then
Green Locate X,Y,"■"
Else If N=6:Then
Cyan Locate X,Y,"■"
Else If N=7:Then
Yellow Locate X,Y,"■"
IfEnd:IfEnd:IfEnd
IfEnd:IfEnd:IfEnd
IfEnd
Next:Next


※ 色指定コマンドの入力:
 ・ [SHIFT] [5] (FORMAT)
 ・ [1] (1:Color Command) ⇒ [EXE]
 ・ [1][7] で7色を選ぶ

※ このプログラムファイルのダウンロード: COLORTXT (色:COLOR + テキスト:TXT)

これで、テキスト表示の色指定についても確認できました。

▲目次に戻る
 
 
キー配置 / キー入力 

キーの数と配置はfx-9860GII と同一で、Getkey コマンドで得られるキーコードも全く同じです。

試しに、プログラムライブラリ - キーコード取得 に掲載しているプログラムを fx-CG20 に転送するか、或いはキー入力してから実行して、fx-9860GII と一緒に実行してみると、キーコードが同一であることが分かります。取扱説明書でも、キーコードが同一であることが確認できます。

▲目次に戻る
 
 
プログラムリストの利便性
 
プログラムの編集や実行を行う時のプログラムリストの利便性については、機種間の違いがあります。

例えば、fx-5800P のプログラムリストは、アルファベットを1文字入力すると、そのアルファベットから始まるファイル名までジャンプします。

ProgList3 

一方、fx-9860GII のプログラムリストでは、アルファベットキー入力によるジャンプ機能はありません。

ProgramList ×

fx-CG20 では、例えばアルファベット M を入力してみると...

CG20_ProgList 

...このようにジャンプしました。fx-CG20 には、この使いやすいジャンプ機能があります。

▲目次に戻る

  
 
関数電卓として

fx-CG20 と fx-9860GII は、キーの数と配置が全く同じであるだけでなくて、計算の内部桁が15桁と同じで、各関数の精度範囲も同じなので、fx-CG20 の関数電卓としての使い勝手は fx-9860GII と同じだと分かります。
 
 
▶ ユーザーデータ・バックアップ機能

カシオの関数電卓は電源をオフにすると、作業内容やその際のユーザーデータが消えます。

一方、カシオのプログラム関数電卓 fx-5800P や、グラフ関数電卓 fx-9860GII や fx-CG20 (おそらく fx-FD-10 Proも ...) は、一旦電源をオフにしても、使用モードを変えても、各モードのユーザーデータはバックアップされています。

管理人は、この機能だけでもプログラム電卓を関数電卓として使う価値があると思っていて、日常的にプログラム電卓を関数電卓として使っています。
 
 
▶ 3桁区切り表示

カシオの最新の関数電卓 fx-JP900 / 700 / 500 では、関数電卓として3桁区切りが登場しました。標準電卓には搭載されているのに、なぜ関数電卓には無いのか?登場が遅すぎるようにも思います。

一方で、プログラム電卓には3桁区切り機能は無く、fx-CG20 にもありません。プログラムだけでなく関数電卓としても使う人は多いと思うので、是非とも追加して欲しい必須機能だと思います。

▲目次に戻る
 
 
 複素指数関数
複素数を表示するように設定して、πi  を計算させてみると、fx-5800P はエラー、fx-9860GII は正しく -1 と結果を表示します。

5800と9860、複素数


fx-CG20 でも fx-9860GII と同様に、複素指数関数を正しく計算して、 -1 表示します。

 ComplexExp 

他にも、以下のような計算結果が正しく得られます。

 ComplexExp2 

このあたりも、fx-9860GII と同じになっています。

▲目次に戻る


積 分
 
積分計算速度の比較をしてみます。[2016/04/19 の部分を修正]
機種積分1積分2
fx-JP9005.5秒48.7秒
fx-5800P10.1秒56.7秒
fx-9860GII (SH4A)1.5秒8.4秒
fx-CG201.0秒5.8秒
 積分の詳細はこちら

fx-9860GII よりも速くなっていることが分かります。 

▲目次に戻る


周期関数の積分

積分計算にガウス・クロンロッド法が使われていることから、このアルゴリズムが苦手とする周期関数の積分を行って、タイムアウトする限界を比較してみます。

積分3
機種計算できる nタイムアウトする n
fx-JP900
fx-5800P
fx-9860GIIn ≦ 60 Or (n = 64, 128, 256, 512)n ≧ 61 Or n = 2m (m≧10)
fx-CG20n ≦ 60 Or (n = 64, 128, 256, 512)n ≧ 61 Or n = 2m (m≧10)
 積分の詳細はこちら

これについても、fx-9860GII と同じ結果となりました。

▲目次に戻る

 


fx-9860GII から fx-Cg20 へのプログラム移植

プログラムをfx-9860GII から fx-CG20 へ移植する方法を試してみます。


電卓同士を繋いで直接転送

fx-9860GII や fx-CG20 に添付されている 3ピンシリアルケーブルを使って、fx-9860GII と fx-CG20 を直接繋いで、Casio Basic プログラムファイルを転送できます。fx-CG20 ソフトウェアバージョン 2.02 取扱説明書の「第13章 データ転送」に書かれている通りに操作を行えば簡単に fx-9860GII にある Casio Basicプログラムファイルを転送できます。

下図のように、fx-9860GII と fx-CG20 の間でのデータのやりとりが簡単にできます。

3Pin_Serial_Connection 

...但し、オーバークロックしていると、接続完了までは問題無いのですが、実際に転送を行おうとすると、エラーになります。
電卓間を 3Pin シリアルケーブルで繋いでデータ転送する場合は、ノーマルクロックにしましょう。

▲目次に戻る


PCとのリンク

fx-CG20 に添付されている USBケーブルで、PCと電卓を繋いで、取扱説明書(上記と同じ第13章)に従って操作すると、PCから見て電卓が外部ドライブとして認識されるので、あとはPC上の操作だけで、ファイルの転送ができます。

そこで、私は、購入時の fx-CG20 内のデータを全てバックアップしました。バックアップしてあれば、電卓をリセットしてデータが無くなっても、元に戻せます。

PCとのリンクに関しては、オーバークロックしていても今のところ問題が出ていません。


=====


さて上記のいずれの方法でも、fx-9860GII のCasio Basicプログラムファイルを fx-CG20 へ転送すると、ファイルはfx-CG20 用に自動変換されます。プログラムファイルの拡張子が、g1m から g3m へ変換されます。さらに、Text コマンドの1つめと2つめのパラメータは座標を指定しますが、座標値設定は自動的に3倍 (x3 を付加) してくれます。

1例を挙げると、


Text_Parameter 

fx-9860GII のソースコードが

Text 7,3,"    "
Text 13,3,"      "

となっていたものが、転送されると上図のように、自動的にパラメータの座標値に( ) を付け、さらに x3 を付加します。

但し、逆向きの転送、つまり fx-CG20 のCasio Basicプログラムファイルを fx-9860GII へ転送する場合は、Text コマンドのパラメータの座標値は、自動的に3で割る変換はしません。fx-CG20 が上位互換ということなのでしょう。

さて、fx-9860GII から fx-CG20 へプログラムファイルを転送する場合、Text コマンド以外の物理座標系で動作するコマンド PxlOn、PxlOff、PxlChg、PxlTest については、パラメータの座標値を自動的に3倍にしません。これらのコマンドが使われているプログラムは、転送しただけでは互換性が得られないので、手直しが必要です。

一部のコマンドを除き、上のいずれかの方法で fx-9860GII から fx-CG20 へ Casio Basic プログラムファイルを転送するだけで、殆どのプログラムがそのまま fx-CG20 で動作するのは、とても便利なことです。両機間の Casio Basic の互換性の確保をカシオが考えていることが分かります。

▲目次に戻る
 
 


移植プログラムの動作比較

互換性

テキスト表示のプログラム例

一部のグラフィックスコマンドを使わなければ、そしてグラフィックスコマンドを一切使わないテキスト表示のプログラムは、fx-9860GII で動作するものは、ソースコードを全く変更しなくても fx-CG20 で動作します。

このエントリーで紹介するプログラムは、全て最初はfx-5800P で作ったオリジナルプログラムで、それを僅かに変更して fx-9860GII へ移植したものです。主に、Getkey コマンドで使うキーコードを変更し、Locate コマンドによる画面出力の配置を変更するだけで、そして旧来の命令を極力使わなければ、新世代 Casio Basic は互換性の高い言語と言えます。

さらに、ここで紹介した fx-9860GII用プログラム全ては、アドインCasio Basic "C.Basic" でも完全動作することを、強調しておきます。
C.Basic - アドイン Casio Basic 参照
 
 
入力ボックス 

fx-9860GII用のソースコードを変更せず fx-CG20 に転送するだけで、完全に fx-CG20 で動作します。

※ ダウンロード
- fx-9860GII用 g1mファイル一式 (ZIPファイル)
- fxCG20用 g3mファイル一式 (ZIPファイル)

※ 詳しくは、入力ボックス 2.1G - fx-9860GII & fx-CG20 専用 を参照

▲目次に戻る
 
 
TEMPCONV

fx-9860GII用のソースコードを変更せず fx-CG20 に転送するだけで、完全に fx-CG20 で動作します。

※ ダウンロード
- fx-9860GII用 g1mファイル一式 (ZIPファイル)
- fx-CG20用 g3mファイル一式 (ZIPファイル)

これらのZIPファイルには、このプログラムで使う 入力ボックス2.1GIN.g1mIN.g3m  が含まれているので、解凍して得られるプログラムファイル(拡張子が g1mg3m のもの) を電卓に全て転送すれば、プログラムが使えます。

※ 詳しくは、Casio Basic入門48 参照
 
▲目次に戻る
  
TIMEZONE

fx-9860GII用のソースコードを変更せず fx-CG20 に転送するだけで、完全に fx-CG20 で動作します。

※ ダウンロード
- fx-9860GII用 g1m ファイル一式 (ZIPファイル)
- fx-CG20用 g3m ファイル一式 (ZIPファイル)

これらのZIPファイルには、このプログラムで使う 入力ボックス2.1GINPI.g1m か INPI.g3m が含まれているので、解凍して得られるプログラムファイル(拡張子が g1mg3m のもの)を電卓に全て転送すれば、プログラムが使えます。

※ 使い方など詳しくは、Casio Basic入門23 参照。この記事は fx-5800P 向けですが、プログラムの動作や使い方は全く同じです。
プログラムライブラリ - TimeZone も併せて参照 [2017/06/29 更新]

実は、上記の fx-9860GII用プログラムファイルは、現在開発進行中(テストバージョン)のアドインCasio Basic "C.Basic" で最適動作するように僅かに手を入れたものです(TIMEZONE.g1mの数行と C.Basic 専用サブルーチン TZL.g1mの追加のみ)。グラフィックスの一部のコマンドを使わなければ、或いはグラフィックスコマンドを一切使わなければ、fx-9860GII、fx-CG20、C.Basic そして、おそらく fx-FD10 Pro でも、ソースレベルで完全互換のプログラムを作れます。

C.Basic
は、純正 Casio Basic のソースコードを極めて高速に動作させられるメリットがあので、fx-9860GII や fx-CG20 の純正 Casio Basic とのソースレベルでの完全互換には、大きな価値があります。

▲目次に戻る
 
  
HITBLOW - Hit & Blow ゲーム

fx-9860GII用のソースコードを変更せず fx-CG20 に転送するだけで、完全に fx-CG20 で動作します。

※ ダウンロード
- fx-9860GII用 g1m ファイル一式 (ZIPファイル)
- fx-CG20用 g3m ファイル一式 (ZIPファイル)

※ 遊び方など詳しくは、fx-5800P;Hit&Blow【完成版】 参照。操作方法や遊び方は、fx-5800P 版と同じです。
プログラムライブラリ - Hit & Blow も併せて参照。[2017/06/29 更新]
 
▲目次に戻る
 
 
処理速度

 計算主体プログラム例

PRIME - 素因数分解

fx-9860GII用のソースコードを変更せず fx-CG20 に転送するだけで、完全に fx-CG20 で動作します。

※ ダウンロード
- fx-5800P用 pdf ファイル
- fx-9860GII用 g1m ファイル
- fx-CG20用 g3m ファイル

※ 使い方やプログラムソースの詳細は、fx-9860GII への移植 - 素因数分解 参照

プログラムを起動したところ...

Prime1 

数値を入力して [EXE] で素因数分解を始め、[EXE] を押しながら結果を1行ずつ表示させる。

Prime2 Prime3 

<EXE> 表示が出たら、最後の行を示すので、これで素因数分解の全結果となります。


このように、プログラム PRIME を走らせると、計算中表示の更新は無く、CPUの殆どは計算に使われています。例外として、計算中はビジーマーカー表示がありますが、このプログラムは計算速度の比較に使えます。

そこで、以下の10桁の数の素因数分解の計算時間を比較してみます。

計算する数値: 7,849,516,203 = 32 x 9811 x 88897

fx-CG20 の画面は以下のようになります。

   Prime4 Prime5 

機種別、クロック別に計算処理時間の一覧は以下のようになりました。
CPUクロックfx-5800P 純正fx-CG20 純正fx-9860GII 純正fx-9860GII×C.Basic
? MHz444秒---------
29 MHz---81秒 (Down)89秒 (標準クロック)3.8秒
59 MHz---63秒 (標準クロック)55秒3.1秒
250 MHz---29秒 (最大クロック)26秒0.55秒
280 MHz------23秒 (最大クロック)0.50秒 (最大クロック)
オーバークロック---Ptune2 Ver 1.10Ftune2 Ver 1.10Ftune2 Ver 1.10

標準クロックでの結果を比較すると、fx-CG20 > fx-9860GII >> fx-5800P の順になります。
しかし、オーバークロックツールを用いてCPUクロックを揃えて比較すると、表から分かるように同じクロックでは fx-CG20 は常に fx-9860GII よりも少し遅いことが明らかです。fx-CG20 では演算中にカラーのアニメージョンが表示されるので、そのグラフィックス表示が律速になって足を引っ張っている可能性が高いです。

● fx-5800P のCPUクロックは不明ですが、ビジーマーカーが同様な fx-9860GII と同じ演算処理を行っているとして逆算すると、5~6MHz 程度と思われます。

● オーバークロックには、sentaro様作のアドインを使いました。fx-CG20 ではクロックを上げるだけでなく、敢えてクロックを下げて fx-9860GII の標準クロックに合わせました。

● Casio Basic 環境をアドインで提供する C.Basic も合わせて使ってみました。C.Basic は sentaro様によって現在開発中のアドインです。C.Basic の圧倒的な速さは、感動ものです (^_^)/

※ C.Basic について
現在は fx-9860GII 用の C.Basic がテストバージョンとして公開されていて、開発継続中です。 fx-CG20 用は将来の対応になるようです。C.Basic については、アドイン Casio Basic - トップページ を参照ください。

※ オーバークロックツールについて [2016/04/20 追記変更]
オーバークロックはメーカーの保証外の使い方なので、万一の場合電卓が再起不能になる可能性を受け入れ、自己責任で使って下さい。これば絶対の前提条件です。

fx-CG20用のPtune2 や fx-9860GII (SH4A)用のFtune2 では、5個の設定が [F1][F5] キーにプリセットされでいます。[F1] は電卓本来のクロック設定で、[F5] には5つの設定のうち最も高いクロック設定です。

比較的リスクが低いと思われるのは、

fx-9860GII: プリセットの [F5] を選んでおけば、低いリスクでオーバークロックが楽しめると思います。 なお、 [F5] を選んだ時は、235.95MHz(本来のクロック 24.49MHz)となると思います。

fx-CG20: プリセットの [F5] を選んでおけば、低いリスクでオーバークロックを楽しめると思います。なお、[F5] を選んだ時は、CPU 191.69MHz (本来のクロック 58.98MHz)になると思います。

これでは物足りないなら、さらに[→] キーを押すことで、段階的にクロックを上げられますが、リスクが上がることを意識してください。

私の経験では、クロックをかなり高く設定したらRAM異常が発生して、動作がおかしくなったことがあります。この時は必要なソフトウェアを再インストールして復活しました。まだ経験していませんが、一番怖いのが、ROMが書き換わったり消去される場合です。この場合は再起不能となります(危機一髪でこれを逃れた経験があります)。

私の場合は、fx-9860GII × Ftune2 では、目安としては可能な最大クロックから2段階落としたクロックで使っています。、fx-CG20/10 × Ptune2 では、目安として可能な最大クロックから3段落として使っています。

但し、製品に実際に使われている個別の電子部品の限界は製造ロットでも個体でも異なるので、上の私の目安が全ての製品に適用できないことは、申し添えておきます。作者の sentaro 様に質問すれば相談にのってもらえるかも知れませんが、自己責任を了承の上で相談してください。


私の場合は、fx-9860GII 向けに Ftune2 を1年以上使っていて今のところ大きなトラブルを経験していません。fx-CG20 用の Ptune2 は使い始めて数日ですが、既にRAM異常を経験していて、おそらくROM異常で再起不能になる一歩手前まで経験しています。

上の表では、用いたオーバークロックツールの種類とバージョンを併記しています。

[2016/04/24 最新バージョンを追記]
Ftune2Ptune2 については、fx-9860GII のオーバークロック を参照ください。ここから sentaro様のページを経由してダウンロードできます。ご質問があれば、このページにコメントを頂くか、sentaro様へ直接お問い合わせください。
 
▲目次に戻る
 
 
動きのあるテキスト表示プログラム例

PYTHA - ピタゴラス数探索

fx-9860GII用のソースコードを変更せず fx-CG20 に転送するだけで、完全に fx-CG20 で動作します。

※ ダウンロード
- fx-5800P用 pdf ファイル
- fx-9860GII用 g1m ファイル
- fx-CG20用 g3m ファイル

※ ピタゴラス数探索プログラムの使い方など詳細は、fx-9860GII への移植 - ピタゴラス数 を参照。

このように、テキスト表示で動きのあるプログラムでは、fx-CG20 は fx-9860GII と比べて速いかどうかを調べてみます。

   Pytha Pytha3  

[EXE]
キーを長押しすると連続モードになって、A、B、C 1組のピタゴラス数が、次々に変化します。つまり、このピタゴラス数探索プログラムは、テキスト表示が常に更新し続けます。

そこで、500個のピタゴラス数が見つかるまでの時間を、機種別、クロック別に調べて比較してみました。
CPUクロック
fx-5800P 純正
fx-CG20 純正
fx-9860GII 純正
fx-9860GII×C.Basic
? MHz
 441秒
---
---
---
29 MHz
---
291秒 (Down)
93秒 (標準クロック)
17.5秒
59 MHz
---
185秒 (標準クロック)
61秒
13秒
250 MHz
---
60秒 (最大クロック)
24秒
3秒
280 MHz
---
---
22秒 (最大クロック)
2.7秒 (最大クロック)
オーバークロック
---
Ptune2 Ver 1.01
Ftune2 Ver 1.02
Ftune2 Ver 1.02

標準クロックで比較しても fx-CG20 は fx-9860GII よりもかなり遅いことが分かります。

同じクロックでは fx-XG20 は fx-9860GII よりも大幅に遅くなっています。fx-CG20 での画面表示のオーバーヘッドが大きい ことがよく分かります。

なお、C.Basic は、この例でもかなり速いですね。

▲目次に戻る
 
 
動きのあるグラフィックス・プログラム例

物理座標系で動作する描画コマンド


MONTECAR - モンテカルロ法による円周率計算

fx-9860GII用のソースコードを変更せず fx-CG20 に転送するだけで、完全に fx-CG20 で動作します。

※ ダウンロード

- fx-9860GII用 g1m ファイル
- fx-CG20用 g3m ファイル

※ ピタゴラス数探索プログラムの使い方など詳細は、fx-9860GII グラフィックス - モンテカルロ法 を参照。この記事では、実際の画面の変化を動画で見られます。

Montecar_1 Montecar_2 

Montecar_3 Montecar_4 

[EXE]
キーを押すと、ランダムに点を打ち始め、それが円内にある割合から円周率を求める、モンテカルロシミュレーションプログラムです。このプログラムは、動きのあるテキスト表示と動きのあるグラフィックス描画を行うもので、fx-CG20 は fx-9860GII と比べて速いかどうかを調べてみます。 

そこで、500個のピタゴラス数が見つかるまでの時間を、機種別、クロック別に調べて比較してみました。

但し、プログラムファイルを fx-CG20 へ転送すると、Text コマンドのパラメータの座標値に x3 が自動的に付加されます。このままだと、x3 の計算を行うことになり、その計算時間が余分にかかることになって、比較には適当でないことになります。そこで、x3 の部分は計算結果の数値に書き換えました。この変更を行ったプログラムファイルを、上からダウンロードできます。
 
CPUクロック
fx-CG20 純正
fx-9860GII 純正
fx-9860GII×C.Basic
29 MHz
513秒 (Down)
135秒 (標準クロック)
8秒
59 MHz
429秒 (標準クロック)
95秒
6.4秒
250 MHz
108秒 (最大クロック)
26秒
1.1秒
280 MHz
---
23秒 (最大クロック)
0.99秒 (最大クロック)
オーバークロック
Ptune2 Ver 1.01
Ftune2 Ver 1.02
Ftune2 Ver 1.02

標準クロックで比較しても fx-CG20 は fx-9860GII よりも非常に遅いことが分かります。

同じクロックでも fx-XG20 は fx-9860GII よりも大幅に遅くなっています。fx-CG20 でのグラフィックス描画のオーバーヘッドが非常に大きい ことがよく分かります。オーバークロックにより CPUクロックや I/O バスを速くしても、純正 Casio Basic では画面更新に一定の時間がかかるため、特にグラフィックス描画が遅いという仕様上の問題がありそうです。

なお、C.Basic は今回の例でも極めて速いです。実は、C.Basic は画面更新のタイミングを最大限速くする工夫がなされているのです。後出しジャンケンで失礼しました。

▲目次に戻る
 


まとめ...のようなもの

ざっと fx-CG20 について調べてみました。

互換性の利点

fx-CG20 の Casio Basic は、fx-9860GII と互換性が高いことが分かりました。特にテキスト表示のプログラムなら、ほぼ完全に互換性が確保されていると思います。その上で、カラー表示の一手間を加えると、表現力の高いプログラムに仕上がります。

さらに精細度の良い液晶を使っているので、とても見やすいプログラムになります。動きの少ないグラフィックス描画をを併用すれは、魅力的なプログラムを書けるでしょう。

これらの点は、fx-9860GII よりも fx-CG20 を使いたいと思わせる魅力です。高精細カラー液晶を最大に活かしたプログラムをいずれ作ってみたいと思います。

▲目次に戻る
  
 
動きのあるプログラム

今回のプログラムの処理時間の比較結果をグラフにしてみます。

Calc 

計算処理だけなら、fx-CG20 は同じCPUクロックで fx-9860GII とほぼ同じ、fx-CG20 が若干遅い程度です。

同じCPU (SH4A) を使っているので、計算時間が変わるとは思えず、この差は演算中を示すビジーマーカーの表示によるものと考えられます。


Calc_Text  

計算だけでなく、テキスト表示の更新を頻繁に行うと、fx-CG20 は fx-9860GII よりも時間がかかるようになります。やはり fx-CG20 の画面更新処理が fx-9860GII よりも遅いことが分かります。


Cacl_Text_Graphics 

グラフィックスの頻繁な更新は、fx-CG20 をさらに低速化することが分かります。テキスト画面よりもグラフィックス画面の更新に時間がかかっていますが、fx-CG20 ではグラフィックス更新がより顕著に遅くなっています。

これらの傾向は、純正Casio Basic の仕様と言えます。グラフィックスは一旦VRAMに出力し、それをLCD(液晶画面)に転送して表示しますが、Casio Basic ではVRAMからLCDへの転送が頻繁に行われていることは、fx-9860GII で分かっています。これは、Casio Basic と C言語で作るアドインの両方で同じ動作を作って、VRAMからLCDへの転送頻度を色々と変えてみることで、確認できています。fx-CG20 でも同様なことになっていると思います。

頻繁な画面更新を行うプログラムは、Casio Basic には向かず、特にグラフィックス・プログラミングには向かないわけですが、fx-CG20 ではカラーデータの転送により時間がかかる筈で、それが表示速度を遅くするのは間違いないでしょう。

動きのあるプログラムは、 fx-CG20 では fx-9860GII 以上に向いていないことを前提にして、プログラミングを楽しみたいと思います。
 
▲目次に戻る
 
 
fx-CG20 に期待するもの

Casio Basic プログラミング機としてみた場合は、どうしても表示にカラーを使いたいという場合は別として、モノクロ表示に限れば、fx-CG20 のパフォーマンスは fx-9860GII より劣る、という結果が出てしまいました。

数学や物理の教育以外の目的で、Casio Basicプログラミングを楽しむのは、マイナーな趣味かも知れません。そんなマイナーな目的で fx-CG20 を評価するのは不適切かも知れません。

本来 fx-CG20 は、高精細カラー液晶を利用して、様々なアドインで数学を楽しく勉強することを主眼に設計されているのは、カシオのホームページやインターネットでの事例集からハッキリと伝わってくるので、その目的には fx-CG20 はとても魅力的でしょう。

残念なことの一つとして、カラーの高精細液晶を搭載しているなら、是非とも日本語表示にも対応して欲しいと思います。中文対応しているのだから日本語対応も簡単な筈です。そして、3桁区切りにも是非とも対応すべきです。

今回の評価では、C.Basic の圧倒的なパフォーマンスも紹介しました。オーバークロックよりも C.Basic が fx-CG20 に対応してくれると、プログラミングがとても楽しくなりそうです。

▲目次に戻る


追記 [2017/12/05]

アドイン版 Casio Basic - C.Basic は、上でみてきたように Casio Basic の上位互換で極めて高速に Casio Basicプログラムを実行できます。これまで fx-9860G シリーズにのみ対応していましたが、fx-CG10 / CG20 / CG50 についに対応し、C.Basic for CG として公開されました。

C.Basic for CG 開発が始動

この高速処理系を使うと、fx-CG10 / CG20 が突如高速Casio Basic機としてよみがえり、fx-9860Gシリーズよりも遙かにきれいな高精細カラー液晶を活かした表現力の高いプログラムを作って楽しめます。

fx-CG50 とほぼ同等のプログラミング環境が得られますが、fx-CG50 よりも消費電力が高いのがハードウェア上の欠点です。

▲ 目次に戻る




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




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

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

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

Casio Basicでグラフィックス

Casio Basic入門 - Casio Basicでグラフィックス
<目次>


2015/10/21 更新
2015/12/07 追記
2020/05/21 追記



「Casio Basic でグラフィックス」を Casio Basic入門で連載を始めています。
 ⇒ Casio Basic入門G01 から (詳しくは Casio Basic入門 - 目次 - を参照)


これまでは、「Casio Basic を使ってみる」の連載で、Casio Basic入門50 まで続いています。グラフィックス プログラミングについては、敢えて別シリーズに分けており、今後も引き続き Casio Basic入門51 以降は続くと思います。

基本的に楽しんでやっているのですが、プログラムのネタを思いつくのは、用途や位置づけといった大枠からの発想に助けられることが多いので、一見面倒な感じの「電卓でグラフィックス プログラミングとは?」といったことも考えています。


このあたりは、今後まとまってくると思いますが、今のところ考えていることを白状しておきます。



プログラム電卓でグラフィックスプログラミングには否定的でした。今でも否定的な考えは少なからず残っています。

電卓にPCと同じ機能を求めるのではなく、電卓ならではの利点を活かしたプログラムを作って、利用すれば良いと主張してきました。特に、Casio のプログラム電卓のグラフィックス機能は、グラフ機能に特化(制限)されていて、LCDの解像度や描画速度を考えると、敢えて電卓でグラフィックスプログラミングを行うメリットは無い、というのが理由です。

では、私自身が Casio Basic のグラフィックス機能(グラフ機能) を本当に分かった上で、これを言っていたのかと問われると、幾つか味見程度のプログラミングを行った程度だったと、白状しなければなりません。

つまり、当ブログのポリシー「実際に試して、確認した内容を公開する」を考えると、中途半端です。

実は、これまでに以下のような記事を書いています。私の考えの変化がそのまま現れています。

グラフ関数電卓で観る感染症数理モデル
  • [2020/05/21] 微分方程式のグラフ化に挑戦。解くのは難しいので、差分形式の漸化式から離散的なデータを計算してグラフ化しました。ちょうどエクセルでグラフを描くのと同じことが電卓でできました。グラフを表す数式がなくてもグラフ化できるのは面白いと思いました。

fx-9860GII グラフィックス - モンテカルロ法
  • [2015/02/28] fx-5800P で作ったプログラムを fx-9860GII へ移植し、さらにグラフィックス表示を追加するために、プログラム電卓で初めてグラフィックスコードを書いた。グラフィックス描画は思った以上に処理時間がかかることが実際に分かり、画面全体を埋め尽くすようなグラフィックスプログラムには向かないと思った。
楽屋裏 - Casio Basicプログラミング
  • [2015/01/19]  少しだけグラフィックスプログラミングについて、考えを変え始めたことに触れている。
楽屋裏 - Casio Basic のグラフィックス描画
  • [2015/02/17] Casio Basic ではグラフィックス描画速度が遅いが、グラフィックスコマンドの動作に少し興味を持った。
楽屋裏 - Casio Basic のグラフィックス プログラミング
  • [2015/06/24] グラフィックスコマンドは、マニュアルには殆ど記載が無いので、実際に調べ始めたところ、従来の Basicコマンドから想像するだけでは全く分からない機能が隠されていること、プログラムに依っては処理速度が問題にならない用途も有りそうなこと、そして何よりも、実際に調べてみなければ判断するのは早いと思った。
  • そこで、Casio Basic でのグラフィックスプログラミングを徹底的に調べて、Casio Basic入門で取り上げることにした。
楽屋裏 - 酔っ払いの虫 (Drunk Bug)
  • [2015/07/20] Casio Basic のグラフィックスコマンドが少し分かってきて、安心してシミュレーションゲームを作ってみた。面白い。

「楽屋裏」で記事を書いていたのは、Casio Basic でのグラフィックスをブログで取り上げるかどうか、少しは考えていた証拠ですが、Casio グラフ関数電卓でグラフィックス プログラミングについて、本腰を入れて調べるまでに半年ほど逡巡していたことになります。そして、実際に詳しく調べ始めると、取扱説明書には全く説明されていない、重要な仕様が次々と分かってきています。宝探しのようで、やっていて面白いものです。

これまでに調べて分かっているだけでも、仕様を知っていれば有用なプログラミングが出来る一方で、仕様を知らないと想定外のバグで悩むことになりがちなのが、Casio Basic のグラフィックスコマンドだと分かってきました。


ところで、新世代Casio Basic は、Basicプログラミングの入門に良いと、これまで主張してきました。グラフィックスを使わないテキストベースでのプログラミングを前提にすれば、いまでも同じように考えています。

ところが、グラフィックスコマンドについては、かなり Casio 色が強い仕様になっていて、果たして Basic修得の入門に良いと言えないかも知れません。さらに、電卓でのグラフィックス・プログラミングでは、繰り返し処理を頻繁に使うように思うので、繰り返し処理に不慣れな初学者には、その分敷居が高いようにも思います。

グラフィックス・プログラミングには電卓特有のグラフ作成機能が活きてくるのかどうか、これはまだ分かりません。そこで、グラフィックスコマンドについて、さらに知見が深まるまで、結論は保留にしておこうと思っています。


先ずは Casio Basic でのグラフィックス プログラミングを徹底的に調べて、なにか楽しいプログラムを作ろうと思います。


[2015/12/07 追記]
Casio Basic グラフィックスコマンドの探索が進むにつれて、純正 Casio Basic では、グラフィックスコマンドが限られており描画速度が遅いので、本格的なグラフィックスプログラミングには向かないという感覚はやはり正しいと分かってきました。画面を埋め尽くすような描画やビットマップを扱うのは純正Casio Basic では無理があります。

ところが、「アドイン版高速・高機能Casio Basic」 の開発 "C:Basicプロジェクト" が始まり、テスト版でグラフィックスプログラムを作ってみると、速い処理速度でグラフィックスプログラムが走ることが経験できます。これの最大のポイントは、Casio Basic の上位互換なので、基本的にCasio Basic でプログラムが書ける点にあります。試しにライフゲームを作ってみたところ、現実的な速度でビットマップ処理が出来るので、Casio  Basicでグラフィックスプログラミングが面白くなってきました。

Casio Basic のグラフィックスコマンドを詳しく探索した結果を反映した「アドイン版 Casio Basic - C:Basic」という新しい選択肢が現実的になったので、電卓でグラフィックスプログラミングへの否定的な感覚がかなり薄くなっています。適材適所で開発処理系の使い分けると良いのです。



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







keywords: fx-9860GIICasioBasic、グラフィックス, プログラミング入門プログラム関数電卓

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


関連記事

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

グラフ関数電卓のオーバークロック - Ftune / Ptune -

更新 2020/05/21

Ftune / Ftune2 が Ver 1.40に、
Ftune3が Ver 2.40に、
Ptune2 が Ver 1.24に、
Ptune3 が Ver 0.24 にアップデート
[2020/03/28]



fx-CG50_s fx-9860GII
Casio fx-9860GII は fx-5800P よりも高速ですが、それでもより速く走らせたいプログラムがあります。

 ⇒ fx-9860GII への移植 - ピタゴラス数
 ⇒ fx-9860GII への移植 - 素因数分解

fx-9860GII は、fx-9860G のマイナーバージョンアップの3代目ですが、マイナーバージョンアップするたびに処理速度が遅くなると言う不思議(/_;) fx-9860G の時に入手していれば良かったと後悔するも、時既に遅し。 

ところが、sentaro様のオーバークロック・アドイン - Ftune 2 - に出会って、事態は一変しました。最新の fx-9860GII 搭載の CPU の潜在能力を引っ張り出すオーバークロックを行うと、最新バージョンが最も速くなるようです。 

現行機種の fx-9860GII (SH-4A搭載) は、ノーマルで 29MHz 程度。それを一気に 236MHz にしてくれます。その差は歴然で、上記の2つの移植記事の動画やデータを是非ご覧ください。

fx-9860GII は、対応SDKを用いてC言語でアドインプログラム開発でき、私は当初 プログラムをCで書いて処理速度を上げようと考えていましたが、Ftune2 を使えば、開発が楽な Casio Basic で十分だと言う気がしてきています。

どのくらい速くなるのか
グラフィックス描画のプログラムを作っていると、ノーマルクロックでは描画が遅くて、表示の確認に時間がかかることがあります。そんな時にオーバークロックを行えば、結果の確認が速くてストレスが減りますので、お勧めです。Ftune2 はプリセットクロックに簡単に切り替えができるのも、このような用途に向いています。通常はノーマルで必要な時だけクロックを上げて使えば良いのです。
 ⇒ fx-9860GII グラフィックス - モンテカルロ法

対応機種
対応機種は、fx-9860G シリーズ、fx-9860GII シリーズ、fx-CG20、fx-CG50、fx-9860GIII、fx-9750GIII、フランス専用機種 GRAPH35+EII に対応しています。


カシオ グラフ関数電卓のオーバークロック・アドイン

オーバークロックツールは、当ブログの読者 sentaro様の作品で、アドインプログラムです。

作品群の概要は、

CASIO グラフ関数電卓を限界までチューンアップ 

を参照。

作品群には、以下のものがあります。
  • Ftune: CPU に SH3 を搭載した fx-9860G シリーズ、fx-9860GII POWER USB GRAPHIC(末尾に 2 が付かない)が対象
  • Ftune2: CPU に SH4A を搭載した fx-9860GII USB POWER GRAPHIC 2 が対象
  • Ftune3: fx-9860GIII、fx-9750GIII、フランス専用機 Graph35+E II が対象
  • Ptune2: fx-CG20 / fx-CG10 が対象
  • Ptune3: fx-CG50 が対象


最新版 のダウンロード
Ftune Ver 1.40
Ftune2 Ver 1.40
Ftune3 Ver 2.40
Ptune2 Ver 2.24
Ptune3 については、こちら





祝!Ftuneシリーズのファンが、海外でも増えています(^_^)/
海外にて、Ptun2, Ftune2 の優秀性が認められ、絶賛の嵐!確実にファンを増やしています。詳しくは、Sentaro様のオリジナルダウンロードページの一番下にある、それぞれのリンクを見てください(^^;) 開発の苦労話しや、安全性を確保する考え方(保証はありませんが...)...などが読めます。和訳は各自で御願いします(^^;)
==========


このエントリーのコメント欄を利用して、Ftune2 / Ptune2 のQ&A を 開発者の sentaro 様自らご対応頂けます。私自身、幾つかの質問があるので、この機会に色々と教えて頂こうと思います。よろしく御願い致します。
 


オーバークロックとはどのようなものか? [2014/12/15 追記]

半導体製品を工場で作る際、当然のことながら品質管理されています。製造工程では、製品の性能や品質にはバラツキがあり、従って全く同じものが100%正確に製造されると言うことは絶対にありません。製品仕様は製造工程での性能や品質のバラツキを考慮して、保証できる安全な範囲で決定されます。さらには技術論だけではなく、販売戦略上の理由も仕様決定に影響があります。程度の差はありますが実際に行われていることです。通常はかなりの安全マージンを取っていることが多いようです。

言い変えると、実際に出荷される半導体製品は仕様より必ず性能が高いわけです。そして仕様と実際の個体の実力の差に目を付けて、仕様以上の実際の性能を引き出すのがオーバークロックです。製品保証外の動作をさせるので、保証対象外の行為だと言うことは自覚してください。

仕様以上の性能を引き出すオーバークロックは、メーカーの代わりに高負荷試験を行っているのと全く同じと言えます。幸運なら何も起こりません。逆に不運なら製品寿命が短くなる可能性があります。つまり、自己責任の世界です。

さて、Ftune2 は、過激な設定変更をさせないために設定範囲を決めるメニューを備えています。だから私は使用しており、本エントリーで取り上げさせて頂きました。

万一 fx-9860GII が故障したとしても、それはオーバークロックを行ったあなた自身の責任ということは、忘れないでください。当ブログで情報は提供しますが、不運な結果については作者や私が責任を負うことはありませんので、ご留意ください。


とは言っても...

CPUのクロック以外にも、種々の設定をバランス良く試してみることで、色々と違った結果が出ます。 
ベンチマークとして高い数値を狙うもよし、実際の Casio Basic を動かす時の高速化を狙うもよし、C言語で作ったアドインの高速化を狙うもよし、様々な魅力、魔力があるのが、オーバークロックの世界です。

私は、リスクを承知の上で、色々と遊ばせてもらっています。






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





keywords: fx-9860GIIプログラム関数電卓、オーバークロック

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


関連記事

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

グラフ関数電卓で観る感染症数理モデル

2020/05/06
ダウンロードリンク修正 2020/05/08
SIR2.g1m 差替えアップデート 2020/05/09
プログラムアップデート 2020/05/11

グラフ関数電卓で、感染症数理モデル - SIRモデル - をグラフ化

新型コロナウィルスのパンデミックに際して、底の浅い情報、信憑性が疑われる情報、噂が蔓延しています。これをインフォデミックと言うそうです。新型コロナウィルスについては、まだよく分かっておらず未知のウィルスと言うべき段階なので、自分の分かる範囲で情報の取捨選択をして納得できる理解をし、それを逐次修正して行動に反映したいと思っています。

地上波TVの情報はあてにならないと感じており、主にインターネットやYouTubeで情報を集めているなかで、感染対策の考え方に東大方式と京大方式があったり、大阪モデルのように自治体によって明確に異なるものがあったり、台湾方式やスウェーデン方式が対局にあるのですが国ごとに違いがあることを知りました。

様々な違いがある一方で、世界各国の対策全てに共通する感染症の数理モデルの基本が、およそ100年前のスペイン風邪流行期に提出された SIRモデルだと知りました。この数理モデルを少しでも理解すれば、実際にパンデミック対策の基本の考え方を知る良い機会になりそうです。そこで、先ずSIRモデルをグラフにして、次に重要なパラメータを変えたらグラフがどのように変化するかをビジュアル化しようと思います。

SIRモデルの微分方程式は難しいので、差分形式に変更して数値的にアプローチすれば、エクセルでグラフ化できると考え、その具体的な計算方法を調べました。そして、エクセルでの計算方法をグラフ関数電卓の Casio Basic に移植しました。

実際のグラフ描画のコードは Colon様の支援を頂きました。グラフ描画について経験が殆ど無い管理人には、とても良い勉強になりました。

SIR_CG_1s SIR_FX_1s 
fx-CGシリーズ                 fx-9860シリーズ / fx-9750GIII

高精細度カラー液晶のfx-CGシリーズのグラフの方が圧倒的に観やすいですね。

グラフを描く時に使ったパラメータは、以下の "パラメータ一覧・入力画面" で、変更してグラフ化できます。
SIR_CG_Param_1s 

これらパラメータの意味については、さらに読み進んでもらえば、お分かり頂けると思います。

ファイルのダウンロード
ダウンロードした SIR_Model2.zip を展開すると、純正Casio Basic用プログラムファイルは、g3mフォルダとg1mフォルダにあります。

fx-CGシリーズ:g3mフォルダにある下記4つのファイルを全て fx-CGシリーズの PROGRAMフォルダに転送し、純正Casio Basicで SIR2 を実行してください。
 ・SIR2.g3m
 ・INPI.g3m(入力ボックス 2.1G - 整数版)
 ・INP.g3m(入力ボックス 2.1G - 小数版)
 ・3DS.g3m(3桁区切り

fx-9860Gシリーズ  (fx-9860G OS2.00 以降のモデル):g1mフォルダにある下記4つのファイルを全て fx-9860GシリーズのPROGRAMフォルダに転送し、純正Casio Basicで SIR2 を実行してください。
 ・SIR2.g1m
 ・INPI.g1m(入力ボックス 2.1G - 整数版)
 ・INP.g1m(入力ボックス 2.1G - 分数版)
 ・3DS.g1m(3桁区切り
※ fx-9860G OS1.xx では MENUコマンドが実装されていないため、OS2.00 以降で実行可能
※ fx-9860G OS2.00 以降には、fx-9860GII、fx-9860GIII を含む
※ このプログラムは、現行の C.Baisc for CG Ver 1.45 や C.Basic for FX Ver 2.54 では、純正Casio Basicのグラフ描画プログラムの全てにまだ対応していないので、動作しません。


[2020/05/11: ver 2.1 に差替えアップデート]
  • グラフデータを格納したリストの最大値を求める関数を変更してスピードアップしました
  • グラフデータ準備に多少の時間がかかるので、その間 = Processing data = と表示するように変更しました


目 次
1.はじめに
2.SIRモデルと再生産数 - 接触機会の抑制 80% の謎
3.SIRモデルの可視化 - エクセルでグラフを描く
4.純正 Casio Basic への移植
5.おわりに




1. はじめに

新型コロナウィルス (COVID-19) の世界的な感染拡大で、私たちの生活が大きく変わってしまっています。ご自身やご家族の健康的被害、そして経済的被害に遭われている方々には心からお見舞い申し上げます。さらに、医療関係者、そして国民の生活に必須な生産や物流に携わっている方々に、深い敬意と感謝を捧げたいと思います。

日本は、感染症に対する医療的リソース (専門家と施設) が他の先進諸国に比べて圧倒的に不足している状況で、また強制力を伴った措置の法的立て付けが無いにも関わらず、死者数が欧米諸国に比べて1桁から2桁以上少ない、といったかなり特殊な状況にあります。

2020年5月6日の時点では全体的に感染者数拡大が鈍化する傾向があり、医療施設や介護施設、そして家庭内の感染が顕著になっている状況です。緊急自体宣言が5月31日まで延長されましたが、未知の新型コロナウィルスを "正しく恐れる" ことで、個人が自分の行動を工夫することで、早期に収束が迎えられるのではないか、是非そうなって欲しい、と思います。

施設内感染や家庭内感染の調査により、物に付着しているウィルスを人が触れて感染する傾向が高いことが分かってきています。このモノーヒト感染においては、ウィルスが自分の口や鼻、目に入らないことが重要で、ウィルスが付着しやすい手で顔を触らず頻繁に消毒することがかなり有効な感染対策とされています。

マスクは、自分から他人、そして他人から自分への飛沫感染を抑制するだけでなく、口と鼻を手で触らないためにも有効です。手で顔を触らない習慣は身につくものだそうです。さらに頻繁に石鹸での手洗いやアルコールでの消毒を行えば、モノーヒト感染はかなり効果的に抑えられます。

ヒトーヒト感染については、人と人の物理的接触によるウィルスの移動、そして飛沫感染を抑える効果を狙っていると考えられます。日本政府は "接触機会の抑制" を 80% にすることを要請しています。1人の外出を 55% 抑制すると、2人が出会う確率は 0.45 × 0.45 = 0.2025 ≒ 20% になり、3人以上ではさらに低い数値になります。外出を 55% 抑制すれば 80% の接触機会の抑制が達成されます。

新型コロナウィルスは、空中のウィルスがマスクをすり抜けて感染するような "空気感染" は殆どないらしいことも分かってきています。

従って、マスクをして、手で顔を触らず、手洗いや消毒を実施し、外出を 55% 抑制すれば、感染収束に向かう可能性が高いのではないでしょうか?

今は未知のウィルスを相手にしているのですから、ワクチンも治療薬も無く、万一発症すれば医療機関は命を救うためには、出来うる限りの対処療法を施すしかありません。そのための医療関係スタッフと医療機器、そして感染症用の施設、つまり感染症対策の医療リソースを、余裕を持って確保することが最重要課題となっています。

そのためには、感染防止対策を行いながら、感染者数の動向をリアルタイムで追いかけ、今後の動向予測が不可欠です。未知の新型コロナウィルスなので、統計的、疫学的に動向をシミュレーションして、医療リソースが不足しないように施策をうつことが最優先です。そこでは、感染症の数理モデルのシミュレーションが拠り所になるのでしょう。

インフルエンザでは患者数の動向を追いかけるのに、新型コロナウィルスでは何故感染者数で追いかけているのか、不思議に思っています。未知のウィルスだから数理モデルを用いて "感染者" で整理するのは判りますが、患者数、重傷者数、死者数の動向も重要なはずだと思っています。

感染症や医療のプロでなくとも、我々一般国民は論理的、科学的思考を常にアップデートしてゆきたいものです。そして未知の感染症に対して "正しく恐れる" 態度を持ちたいと思っています。

▲目次に戻る



2.SIRモデルと再生産数 - 接触機会の抑制 80% の謎

SIRモデルは、ほぼ100年前の1920~1930年の間にマルケックとマケンドリックにより提出された数理モデルです。このモデルの基本的な考え方は、今日に至るまで使われているので、それだけ信用に足るものと言えます。ネットで調べると、SIRモデルを基点として様々な発展型モデルが提案され、実際に利用されていることも分かります。

SIR_Equation 
これが、SIRモデルの常微分方程式です。

式を見ているだけでは、なんだかよく分からないのですが、このモデルから導き出される重要な指標の1つが、1人の感染者が何人に感染させるかの指標 -  "再生産数" です。再生産数には、R0ReRt があります。
  • R0:基本再生産数。何も対策をとらない時の病原体の素の感染力を示す。
  • Re:有効再生産数。R0に手洗い、マスク、行動制限などの対策後の感染力を示す。
  • Rt:実行再生産数。感染拡大防止対策に加えて集団免疫率を加味した時の感染力を示す。
基本再生産数 R0 は、英語では R nought (Rノート) や R Zero と呼ばれます。2011年公開の映画 "コンテイジョン" では R nought といっています(最近観なおしました)。R0 は数理モデルの分析から推定される値で、新型コロナウィルスではまだ確定的な値が分かっていません。現在のところWHOによれば、新型コロナウィルスの R0 は、1.4~2.5 程度の可能性が考えられているようです。

代表的感染症のR0:(国立感染症研究所の資料による
  • はしか:12-18(飛沫感染)
  • 風疹:5-7(飛沫感染)
  • おたふく風邪:4-7(飛沫感染)
  • ポリオ:5-7(経口感染)
  • 天然痘:6-7(飛沫、接触感染)
  • インフルエンザ(スペイン風邪):2-3(飛沫感染)
  • ジフテリア:6-7(飛沫感染)
  • 百日咳:12-17(空気感染)

実効再生産数 Rt は、感染拡大対策の要因に加えて集団免疫率を加味したものだと思われます。免疫を獲得する人は感染症が拡大するにつれ増えるので、実行再生産数 Rt は感染症の拡大と収束に伴って変化してくる値です。ドイツなどでは Rt を公表して、国民への指針の根拠としています。合理的ですね。日本でも最近になって 実行再生産数 Rt という言葉を使うようになっています。

さて、日本政府が使っている "接触機会の抑制" という言葉は、どうも不明瞭、不明確に感じています。
ここでは勝手に、
"接触機会の抑制率" = "ウィルスに接触する機会の抑制" = "接触抑制率"
と定義します。

ここで定義した "接触抑制率"を p としたとき、この指標だけで考える有効再生産数は、Re = R× (1 - p) となります。

Re は累乗で効いてくるので、Re = R× (1 - p) < 1 の時は、感染拡大の抑制効果が高くなります。但し、0でない限り感染拡大初期では感染が広がります。これはSIRモデルの式から分かります。

新型コロナウィルスの基本再生産数 R0 は、専門家でもまだよく分かっていないので、例えば大げさに大きな値として 2.5 ~ 4.8 までの値になる時、Re < 1 とするための接触抑制率は、この式から分かります。 

Re 
多分 R0 が 4.8 ということは無い (もっと小さい) でしょうが、あり得ないくらい悪い状況だとしても、接触機会を 0.8 つまり 80% 抑制すれば、Re が1未満になるわけです。

新型コロナウィルスの R0 は 1.4 ~ 2.5 程度だろうとWHO (国際保健機関) が言っているので、この範囲での最悪の値 2.5 の場合は、接触抑制率を 80% にすれば Re は 0.5 となり、拡大防止策に多少手抜かりがあっても余裕を持って感染を抑えられそうですね。おそらくこのあたりが、現在の指針である 80% 抑制の背景ではないかと思われます。

▲目次に戻る



3.SIRモデルの可視化 - エクセルでグラフを描く

常微分方程式を素直に解いて、式を導くのは難しいですが、グラフを描くのが目的なので、差分形式に変換すればなんとかなると考えました。そこで、下記のSIRモデルの常微分方程式から、
SIR_Equation_2 

と、少し工夫した上で、差分形式に変形してみました。

SIR_Equation_4

ここで、パラメータとして、
  • R0:基本再生産数
  • p:接触抑制率 (上述)
  • b:接触抑制を行った時の実際の再生産数 (有効再生産数、Re)
  • c:一旦感染した人が感染力を失う(免疫を獲得するか死亡する)割合
  • N:感染が始まる前 (t=0) の人口 = S(0) の値
  • I(Δt):感染が始まる最初 (t=Δt) の感染者数
  • Δt:差分の刻み
とすると、時刻 t+Δt における S(t+Δt)I(t+Δt)R(t+Δt) の値を S(t)I(t)R(t) を使った漸化式で計算できそうです。

そこで、エクセルには以下のように計算式を入れました(クリックすると拡大できます)。
Excel_Calc

計算式は150行もあれば十分でしょうか?

散布図を描いてみると、以下のようになります。
Excel_SIR_Graph
実際には、右端にある黒い背景のセル(5箇所)は、表で対応するセルへリンクしています。

ファイルのダウンロード
ダウンロードした SIR_Model2.zip にエクセルファイルを同梱していので、これをご覧ください。

パラメータを変えると、赤い感染者数のピークの高さや位置が変化する様子が分かります。
基本再生産数 Ro や、接触抑制率 p を変えて 有効再生産数 Re が大きく1を下回ると、感染者のピークが見えなくなるくらいに小さくなり、感染が拡大しないことがグラフで可視化できます。

最初の感染人口を多くすると、ピークの位置が左にシフトして感染拡大が早まることが分かりますが、感染者ピークの高さはさほど変わりません。これはチョット意外です。

現実に感染者が増え、医療機関のお世話になる人が増えすぎると、医療機関がパンクします。感染者数が医療機関の能力を超えないようにしたいので、有効再生産数 Re をどの程度コントロールすれば良いのかがポイントになります。

Re を小さくすると、感染者ピークの高さが小さくなり、ピークの幅が広がり、ピークの位置が右にずれます。これが対策の狙いだということが、グラフの変化からよく理解できます。

※ 微分液式から差分形式への変換は、100%の自信がありませんので、批判的にご覧頂き、間違いがあればご指摘下さい。

▲目次に戻る



4.純正Casio Basicへの移植

さて、上の差分方程式が正しいものとして、これをCasio Basicに移植します。

実際のグラフ描画の部分は、当ブログの強力サポータである Colon様の手によるものです。これが SIR (Ver 1) です。
管理人は、差分化形式での計算方法を Colon様に提供し、パラメータ一覧・入力部分の作成を行い、SIR2 (Ver 2) にしました。

管理人は、グラフ描画関係の関数をこれまでプログラムで使ったことが無かったので、Colon様のコードはとても勉強になります。きちんと動くプログラムのソースはをよく読むのは、最善の勉強方法ですね。SIR2 のグラフ描画部分は殆ど SIR と同じです。


プログラムの基本構成

tS(t)R(t)I(t) の値をエクセルでの計算式に基づいて、それぞれ List 1List 2List 3List 4 に格納し、このリストで 数式を定義し、最後に DrawFTG-Con 関数か DrawFTG-Plt 関数を用いて、定義した数式をグラフとして描画します。
なお、SIR2 では時間刻みΔt を 1 に固定しました。

fx-CG50 (OS 3.30) / fx-CG20 (OS 3.11) のソフトウェアマニュアル、8-31 ページに以下の記載があります;
Manual8_31

これだけでは簡潔すぎて分かりにくいと思いますので、プログラムの詳細については実際に SIR2 のソースを見て下さい。


プログラムを使ってみる

SIR2 を起動すると、パラメータ一覧・入力画面になります。以下のように初期値を決めました。
SIR_CG_Param_1s ・[0]キーでグラフ描画
 ・[1]キーで基本再生産数 R0 を変更
 ・[2]キーで接触抑制率 p を変更
 ・[3]キーで隔離率(回復率) c を変更
 ・[4]キーで最初の人口 N を変更
 ・[5]キーで時刻1での初期感染者数を変更
 ・[6]キーで横軸(時間軸)の最後を変更
 ・[EXIT]キーでプログラム終了
 ※ 有効再生産数 Re も表示しています

新型コロナウィルスに罹患してから回復するのに2週間程度かかることが分かってきましたので、1週間あたりの回復率=隔離率は 0.5 として良さそうです。これを初期値にしました。それに関連して、時間刻みを1週間としました。

パラメータ一覧・入力画面で、[0]キーを押すとメニューが現れます。
Select_Graph_s 

ここで、Connect タイプか Plot タイプを選択して [EXE] を押すとグラフが描画されます。

SIR_CG_1s SIR_CG_5s 
Connectタイプ                  Plotタイプ

感染者のピークは 28週に現れます。

さて、このグラフ描画で使った初期設定のパラメータでは、有効再生産数 Re = 1 となっています。これは1人が1人を感染させる状況ですので、感染は広がります。

この状態で [F1]を押すと、3つのグラフのどれかを [↑] / [↓] キーで選択できます。赤い色の式が表示されたら、赤い感染者数のグラフが選択されたことになり、分かりやすいです。そして、[←] / [→] キーでグラフに沿ってカーソルを移動でき、カーソルのある位置の座標値が表示されます。これで、ピークの位置にカーソルを移動すると、そこが28周目だと分かります。

これは、グラフ関数電卓内蔵のグラフ描画コマンドに内蔵されている機能です。

グラフが表示された状態で [EXE]を押すとメニューが表示されるので、そこで 3:Reset Parameters を選びます。
ResetParameter_s 
ここで、[EXE][3] を押すとパラメータ一覧・入力画面に戻るので、
接触抑制率 p0.7、つまり70%に変更してから、[0]を押してグラフを再び描画します。

SIR_CG_Param_2s  SIR_CG_2s 
有効再生産数 Re が 0.751 未満になり、赤い感染者ピークが半分以下になり、ピークの位置が47週まで遅れることが分かります。医療リソースに余裕が生まれ、必要な体制を整えるための時間が稼げます。


再びパラメータ一覧・入力画面に戻ります。ここで 接触抑制率 p  をさらに上げて 0.75 にして、グラフを描画します。

SIR_CG_Param_3s SIR_CG_3s 
有効再生産数 Re =0.62 とさらに低くなると、感染者ピークが60週まででは見えにくくなっています。

そこで、x軸(時間軸)を 90 週まで長くするように変更してみます。

SIR_CG_Param_4s SIR_CG_4s 
すると、感染者ピークが大幅に減り、 72週まで大幅に遅れることが分かります。
接触抑制率を上げるのは、確かに大きな効果があることがグラフで可視化できました。

有効再生産数 Re を下げる効果が確認できました。
実行再生産数 Rt は集団免疫率までも加味したものなので、Re よりは小さい値になると思います。

最も単純なSIRモデルに、接触抑制率 p だけを含めた今回の極めて単純なモデルでも、おおまかな傾向が分かりました。


メモリエラーへの対処
ところで、List に多くのデータを格納するので、残りメモリが少ないとメモリ不足によるエラーが発生することがあります。
MemoryERROR_s 

この場合は、メインのアイコンメニューで Memory を選び、メモリマネージャーでリストファイルを削除すれば問題は解決します。
Memory_s MemoryManager_s 
メモリマネージャで[F1]を押して、F1:Main Memory を選び、

LISTFILE_s DeleteLISTFILE_S 

LISTFILES フォルダを [F1]SELECT し、[F6]DELETE します。すると削除確認のポップアップが現れるので、Yes:[F1] を押します。

Deleted_s  

すると、リストファイルがフォルダごと削除されたことが確認できます。これでメモリの問題は解決です。

▲目次に戻る



5.おわりに

最初の1年は Re が小さくなるように行動制限をかけ、次の1年は行動制限を緩くして Re が大きくなったとき、感染者ピークのグラフがどのように変化するかを調べるシミュレーションにするなど、SIR2 プログラムには色々な改造案が考えられます。

今後の政府の方針を見ながら、現実に即したシミュレーションプログラムを作ってみては如何でしょうか?

皆様からのプログラムのご投稿やご提案を歓迎致します。

▲目次に戻る



管理人の独り言:

未知の感染症への対応は、疫学的な正当性と経済的な正当性のせめぎ合いだと思います。疫学的正当性を貫けば経済的死者数(自殺)が増え、経済的正当性を貫けば病死者数が増えます。このせめぎ合いのなかで、死者数を最小化するための着地点を見いださなければなりません。

現在の未知の新型コロナウィルスの蔓延は、過去に事例がありません。特に最近の日本では、幸いなことに感染症(SARS、MARS、鳥インフルエンザなど) の被害があまり大きくならずに済んでいて、諸外国に比べて感染症に関する日本国民全体の危機感が低かったと思います。すなわち国民の代表である政治家も危機感を持っていなかったと思います。

過去に例をみない事態を処理するのは、霞ヶ関の官僚や地方のお役人には苦手な分野です。平時には法律に則って緻密な行政を執り行うのが役人の本来業務です。法律を超えることは許されていません。前例に捕らわれず、新たな法律を作り、時には超法規的な措置を行うのは政治家の役割、政治家にしかできないことです。政治家と役人が緊密に連携し、現実を科学的に理解し、大胆な発想で国民の生命や財産を守って頂きたいと思います。

明治時代の先達は、西欧の Economics に "経済" という日本語を与えてくれました。この言葉は「世を治め、民を救う」という意味の "経世済民" が語源です。疫学的な解決だけでなく、バランスの良い疫学対策と経済対策を強力に進めて頂くよう切に願います。

我々国民は、政治家のパフォーマンスをしっかりチェックし、我々の権利である投票で正しく判断したいものです。


当ブログでは異例の意見表明ですが、今回だけは例外としてお許しください。





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




keywords: プログラム関数電卓、コロナウィルス グラフ関数電卓

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

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

e-Gadget は 40万PVになりました

2020/05/02

e-Gadget は 2013年10月30日にオープンしています。そして 2020年4月末に 累積 40万ページビューになりました。

Access202004 

Google Search Console による過去3ヶ月の検査キーワードのトップ10は、以下のようになります。
順位検索キーワード
  1.fx-5800P
  2.fx-CG50 日本語
  3.関数電卓 プログラミング 方法
  4.プログラム電卓
  5.Casio Basic
  6.fx-CG50
  7.fx-CG50 ゲーム
  8.fx-5800P ゲーム
  9.fx-5800P プログラム
10.関数電卓 素因数分解

・トップ10に "fx-5800P" と "fx-CG50" が複数登場しています。
・"fx-9860GII" は24位に出てくるので、検索の需要が減っていることが分かります。
・"fx-CG50 日本語" が2位なので、日本語化に興味を持っている方が多いことも分かります。
・"Casio Basic" が一般的になってきたかも知れません。

このように非常に限定されたトピックスを扱うような e-Gadget ですが、有り難いことにリピーターが60%~70%を占めており、新たにアクセスされる方も、ゆっくりですが確実に増加の傾向を示しています。
e-Gadget アクセス解析

Googleで検索したときに、表示されたうち実際に当ブログの記事をクリックする割合が 7% 前後です。これは直近の3ヶ月だけでなく、過去からほぼ 同じ値です。少ない値ですが、リピーターになって下さる方が確実に増えているのが嬉しいところで、励みになります。


トップページでは、過去3ヶ月のトップ10記事を紹介しています。このリストは1月ぶりに更新したのですが、温故知新 - fx-4000P / fx-4500P / fx-4800P が初めてトップ10入り(9位)したのが、興味深いところです。これらの機種に興味を持たれるのは、中高年以上の方だろうと思われます。

e-Gadget 読者アンケート で回答者の年代構成が分かりますが、60~69歳が40%、50~59歳と26~39歳がそれぞれ25%となっています。fx-4000Pシリーズに興味をお持ちなのは50歳以上の方々だろうと考えられ、このあたりが当ブログ読者の中心になっていると思われます。一方で、25%の26~39歳台の読者がいらっしゃるのも興味深いところです。

このアンケートは 1回しか参加できませんが、1回参加した方は内容を編集できますので、年代が変わったり状況が変わったら、是非とも内容を更新して頂きたいと思います。

当ブログに来られる方は圧倒的に日本からのアクセスですが、過去3ヶ月の海外からのアクセスが 1.3%あります。一番多いのがアメリカで、残りの殆どがヨーロッパとカナダです。C.Basicのユーザーからのアクセスが殆どだと推測しています。


これからもよろしくお願い致します。




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




keywords: プログラム関数電卓、グラフ関数電卓、e-Gadget、アクセス解析

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


関連記事

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

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

やす (Krtyski)

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


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

プログラム電卓を実際に使って気づいたこと、自作プログラム、電卓での Casio Basic, C.Basic そして Casio Python プログラミングについて書いています。

なお管理人はカシオ計算機の関係者ではありません。いつでもどこでもプログラミングができるプログラム電卓が好きな1ユーザーです。


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR