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

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 に関する追記

fx-5800Pプログラミング入門に良いと思っている

 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だ。カシオのプログラム電卓に固有で便利な命令もあるが、殆どが一般の Basic と同等の言語仕様となっている。但し、代入の記法の違いと大域変数のみである、ユーザー関数を作れない点を入門用としてどう考えるか?で判断が分かれるかも知れない。この特殊な条件を受け入れながら構造化プログラミングの感覚でコーディングできるので、私は大きな問題ではないと思っている。

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

fx-5800P
プログラム関数電卓
fx-9860GII
グラフ関数電卓
fx-CG20 / CG50
グラフ関数電卓
制御 / ステートメント
入出力
 Getkey
 Locate
5800P独自
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 は高機能なので、C / C++、C#、VB、java、python などのプログラミングの経験のある人には、すぐにプログラムを書ける実用機でもある。

fx-5800P に比べて、fx-9860GII や fx-CG20、fx-CG50 そして fx-FD10 Pro は高価だ。
 ⇒ Casio プログラム電卓の価格動向


ところで、 "行番号付きの 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には、pause命令(待ちの命令) / HLT命令 (動作再開) がない。ループやGetkeyを使って作れなくもないが、アクションゲームには不向きと言える。
FX-603P / 602P / 502P には、pause / HLTがあるので、アクションを含めた数々のゲームが過去公開されていた。付け加えるなら、間接ジャンプ命令(現行の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-4500P。そして Casio Basic を搭載している fx-5800P, fx-9860GII, fx-9860GII SD, fx-CG20 そして fx-CG50 だ。

これらの機種やパソコンでのプログラミング経験 (C / C++ / C# / VB) から、 fx-5800Pはプログラミング入門 に良いと思う。

Casio  Basic の勧め



fx-5800P がPCリンク可能に...

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

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

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



残念なことに...

せっかく良い製品なのだが、取扱説明書の中でプログラミングに関する説明は、あまりに簡素化されすぎている。プログラミングの素養のある人が見て分かるような書き方しかされていない。



そこで...

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

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




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


 


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

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

続きを読む

関連記事

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

fx-5800P【ゲーム】:Hit&Blow

2013/11/07
追記 2018/10/30

※ CcLinker で fx-5800P に転送できるCCLファイルをダウンロードできるようにした [2018/10/31]


Hit&Blow と言うゲームをご存知だろうか?

フジテレビのNumer0nでの元になるもので、古くからある数当てゲームだ。

最初に、互いにN桁の数を決める。数の決め方には決まりがある。
・0から9までの数を使い、
・各桁は異なる数とする
・一番左の桁を0として良い

あなたが推測した数を相手に伝える。そして相手は、「2ヒット1ブロー」といったように、ヒット数とブロー数を答える。
・桁と数の両方が一致すれはヒット
・桁は違うが数だけ一致しればブロー



そこで、fx-5800PHit&Blow を作ってみた

ところで、fx-5800Pで素因数分解プログラムを作った時、処理速度の遅いことが骨身にしみている。そこで、電卓が出題した3桁の数を当てるゲームとした。

プログラム作成時に、主に以下の2点を考えた:
・16桁x4行の画面内で遊べるように、全てをうまく配置できるか?
 私なりのガイドライン(使いやすいプログラム参照)に従って、うまく配置してみた。

・HIT数とBLOW数の判定をどうするか?
 ここが、多分一番肝心なところ。2通りのロジックを試してみた。



プログラムの仕様

1) 試行10回以下で正解すればOKとする。

 ・この時、「VERY GOOD」と褒めてあげる。

2) 試行11回目以降でも、ゲーム継続を可能とする。
 ・但し、「QUIT?」(止めるか?)と表示する。
 ・ここで止めたら、「YOU GAVE UP」と釘をさして、正解を表示する。

3) 試行11回目以降で正解すれば、一応ねぎらう。
 ・「Good」と言葉をかける。

4) 正解を出した時は、試行回数を表示する。
 ・一応「YOU WIN」と認定してあげる。

4)  デバッグ目的で、ゲーム開始時に正解を見られるようにする
 ・秘密のキー入力で正解が分かるようにする。



プログラムファイルのダウンロード [2018/10/30:追記]

CcLinker で fx-5800P に転送してスグ使える CCLファイルのダウンロード
CcLinkerの紹介
 ここには、配列変数を使わない高速版(下記参照)を収録している。



ゲームの実行画面

こんな感じで完成した。

先ずは、メニューリストから、「HITBLOW」を選ぶ。

ManuList 



ゲームが起動した時の画面:

HB-Start 
 
ガイドラインに従って、メニュー表示をした。
< ? >は秘密のキーだ(ここでは、まだナイショ)。
ここで、[EXE]キーを押して、ゲーム開始。




HB-1 

ゲーム開始早々、405 で 2HIT だ!
右上の :1 は試行回数を示す。



さらに [EXE] キーを押すと...

HB-2 

試行2回目、ここまでくれは、こっちのものだ!!
[EXE]キーを押して...次は決まるか?



ぶぅ~~(´д`)

HB-3 

あとは、組み合わせの問題....もうちょい...



で...

HB-4 

試行6回目で、当たり!!\(^_^)/

さらに [EXE]キーを押すと...




HB-YouWin 

試行6回で YOU WIN の表示。
ここで、[0]キーを押すと、最初の画面へ戻って、新たに出題される。 



ところで、最初の画面で秘密のキーを押すと...

HB-Sneak 

こんな感じで、正解がわかる...




プログラムの構造

メインルーチンと4つのサブルーチンを作った。

・メインルーチン:
 プログラム全体の流れを記述する。細かい作業はサブルーチンに任せる。

fx-5800P専用プログラム
プログラム名: HITBLOW
====================
Lbl 0

0→C:0→D:→E
            :初期化と初期画面表示
Cls
Locate 2,1,"Hit And BLOW"
Locate 2,3,"
:START"
Locate 2,4,"< ? >:ANSWER"

Do             
     :秘密のキーを押した時
Getkey→F              
fx-5800P:同時にキーを押してみる を参照
If F>0 And F<10
Then 1→D
Break:IfEnd
LpWhile Getkey≠47

                    :この2行が肝心
Prog "S2HB3"            :正解出題ルーチン
Prog "S3HB3"            :ゲームの中心部分

Cls                   :結果表示
If D=1:Then               
"   YOU GAVE UP" 
          :正解できなかった時 D=1
"THE ANSWER ="
Locate 14,2,A
Else
Locate 5,1,"YOU WIN"  
      :正解時の処理
Locate 3,2,"IN"
Locate 6,2,C
Locate 8+Int(log(C)),2,"TRIES"
      :関数電卓ならではの処理
IfEnd                  ⇒ 別記事で紹介予定
Locate 1,4,"<0>:TRY AGAIN"

Whle Getkey≠25 
           :もう一度遊ぶ
WhleEnd
Goto 0
====================



・サブルーチン(1):
 入力された3桁数を、各桁の数字に分解する。

fx-5800P専用プログラム
サブルーチン: S1HB3
入力された数字を各桁に分解し
変数 K、L、M に格納する
====================
Int(N÷100)→X          
     ⇒ 別記事で紹介するかも...
Int((N-100X)÷10)→Y
N-100X-10Y→Z
If X=Y Or Y=Z Or Z=X
Then 1→E:IfENd
====================



・サブルーチン(2)
 各桁の数字が同じにならないように、3桁数を作る。

fx-5800P専用プログラム
サブルーチン: S2HB3
各桁を重複しないように作り、
正解の変数、K、L、Mへ格納し、
正解の3桁数を変数Aに格納する
====================
RanInt#(0,9)→K

Do
RanInt#(0,9)→L
LpWhile L=K

Do
RanInt#(0,9)→M
LpWhile M=K Or M=L

100K+10L+M→A
If D=1:Then
"THE ANSWER =   "
Locate 14,1,A

IfEnd
====================



・サブルーチン(3)
 ゲームの核心の流れを記述する。

fx-5800P専用プログラム
サブルーチン: S3HB3
正解するか、諦めると
メインルーチンへ戻る
====================
10→DimZ
Do
0→E:Isz C

Lbl 0
Cls
Locate 12,1,":"
Locate 13,1,C
"3 DIGITS"?→N
Prog "S1HB3"

If E=1:Then
Locate 12,2,"ERROR"
Locate 6,3,"SAME NUMBER"
Locate 2,4,"FOUND IN DIGITS"
0→E:Goto 0
IfEnd

Prog "S4HB3"

If D=1:Then
Break:IfEnd
LpWhile H≠3

0→DimZ
Return
====================



・サブルーチン(4)
 回答を判定して、△HIT、◇BLOW を表示する

 2つの異なるロジックで作ってみた。


サブルーチン(4-1):桁数の拡張性を考えたロジック

For 文と配列変数Z[ ]を利用した。


fx-5800P専用プログラム
サブルーチン: S4HB3
ヒット数を Hへ、ブロー数をBへ
格納してサブルーチン S3HB3へ戻る
====================
0→S:0→T
0→H:0→B:0→D
X→Z[1]:Y→Z[2]
Z→Z[3]:K→Z[6}
L→Z[7]:M→Z[8]

For 1→S To 3
If Z[S]=Z[S+5]
Then Isz H
IfEnd:Next

For 1→S To 3
For 1→T To 3
If Z[S]=Z[T+5]
Then Isz B
IfEnd:Next:Next

Locate1,3,H
Locate 3,3,"HIT"
Locate 1,4,B-H
Locate 3,4,"BLOW"

If H≠3 And C>10
Then
Locate 12,3,"QUIT?"
Locate 12,4,""
IfEnd

If H=3:Then
If C>10:Then
Locate 13.3."GOOD"
Else
Locate 8,3,"VERY GOOD"
IfEnd:IfEnd

Do
Getkey→F
If F=34:Then
1→D:Break:IfEnd
LpWhilr F≠47
====================



処理速度が少し遅いように思われた。 For 文の実行分と、配列変数へのアクセスに多少余計に時間がかかるのかも知れない。配列変数に関しては単なる思い込みの可能性もあるが...

[2014/03/09:追記]
速度低下の主要因は配列変数へのアクセスが非常に遅いためである。通常変数に比べてアクセス速度が3倍近くかかるようだ。

[2018/10/30:追記]
桁数を拡張して3~5桁を選べるようにした Hit & Blow を作成している。
プログラムライブラリ - Hit & Blow
※ 拡張版 Hit & Blow ではメインルーチンは HitBlow と同じファイル名。そこで私は、3桁固定で配列変数を使わない高速オリジナル版のメインルーチンを HB に変更して、拡張版と一緒に fx-5800P に入れて遊んでいる。


サブルーチン(4-2):処理速度向上を狙って、If 文のみのロジック

2者択一の If文 は処理が速いと考え、それでも桁数拡張がしやすいロジックにしてみた。


fx-5800P専用プログラム
サブルーチン: S4HB
ヒット数を Hへ、ブロー数をBへ
格納してサブルーチン S3HB3へ戻る
====================
0→S:0→T:0→U
0→H:0→B:0→D

If X=K:Then
Isz H:1→S:IfEnd
If X=L:Then
Isz H:1→T:IfEnd
If Z=M:Then
Isz H:1→U:IfEnd

If X=L And T=0
Then Isz B:IfEnd
If X=M And U=0
Then Isz D:IfEnd
If Y≠X:Then
If Y=K And S=0
Then Isz B:IfEnd
If Y=M And U=0
Then Isz B:IfEnd
IfEnd
If Z≠X And Z≠Y:IfEnd
If Z=K And S=0
Then Isz B:IfEnd
If Z=L And T=0
Then Isz B:IfEnd
IfEnd

Locate 1,4,"                "
Locate1,3,H
Locate 3,3,"HIT"
Locate 1,4,B
Locate 3,4,"BLOW"

If H≠3 And C>10
Then
Locate 12,3,"QUIT?"
Locate 12,4,""
IfEnd

If H=3:Then
If C>10:Then
Locate 13.3."GOOD"
Else
Locate 8,3,"VERY GOOD"
IfEnd:IfEnd

Do
Getkey→F
If F=34:Then
1→D:Break:IfEnd
LpWhilr F≠47
====================



思った通り、配列変数とFor文で作ったサブルーチン(4-1)よりも、If 文だけで作ったサブルーチン(4-2)の方が、処理が速かった。

ちなみに、if 文が実行される回数を比較してみた:

(4-1):12回 (おそい)
(4-2):10回 (はやい)

if文が2回多いだけだ。

あきらかに体感できる範囲で、確実に速度差を感じる。If分の実行回数に違いがないとすると、やはりFor分の実行による時間が体感の違いの原因だろう[2014/12/14 追記]: 動作の非常に遅い配列変数を使ったことが主な原因だ。

fx-5800Pで素因数分解プログラムを作った時、Doループの実行速度を簡易的に計測して、ループが1回だけ回るのに45m秒程度かかっていることが分かっている。処理時間は、当然ループ内の処理内容に依存するわけだが、それでもパソコンに比べると恐ろしく遅い。

仮に、今回のFor文のループが1回だけ回るのに50m秒かかるとすると、0.05 x 12 = 0.6(秒) かかるわけだが、体感とほぼ合う。なんとなく納得できる範囲だ。

fx-5800Pは、単4電池1本で、1日に1時間使用したとして1年の寿命と仕様に記載されている。消費電力を抑えることをかなり高い優先度としていると思われる。消費電力抑制の効果的な方策の1つに、MPUのクロックを落とすことがある。つまりその分処理速度は遅くなるわけだ。

いずれ、検証してみたいと思う。 [2014/12/14 追記]: For 文と Lbl / Goto ループの速度差は無視できるほど小さい。非常に遅い配列変数を使ったことが主要因だと判明している。


また、ソースコードの詳細については、プログラミング入門向けに別の記事で取り上げる予定だ。



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


 


keywords: fx-5800PゲームプログラミングHit & Blowプログラム関数電卓

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

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

e-Gadget 開設5周年

2018/10/30

e-Gadget は、2018年10月29日で5周年!

昨年も今年も、新しい記事の投稿の無い時期がありましたが、来訪者の累計は8月に9万人を超え、ページビューは9月に30万を超えました。

Access20181029 
図 2013年10月30日開設から2018年10月29日までの e-Gadget へのアクセス推移


リピーターの方は確実に増えていますが、検索で当ブログにお越しになる時の検索ワードは過去3ヶ月で、"fx-5800P" が 44% と圧倒的に多く、次が "関数電卓 & プログラミング" で 26% となっています。当ブログは、fx-5800P と 関数電卓でのプログラミング にご興味をお持ちの方に支えられていることが明らかです。

ちなみに機種別での検索ワードの過去3ヶ月間での順位は、圧倒的 fx-5800P の次が fx-CG50 となっています。 
  1. fx-5800P - 44%
  2. fx-CG50 - 10%
  3. fx-260 Solar II - 3.4% 
  4. fx-JP900 - 2.7%
  5. fx-9860GII - 1.8%
  6. fx-CG20 - 1.0%

5周年の当ブログの最大のトピックスは、間違い無く以下の2点に尽きると思います。

 ・fx-CG20/CG50 で動作するアドインCasio Basic - C.Basic for CG の登場

 ・fx-5800P とPCのデータリンクを可能にする CcLinker の登場


C.Basic for CG の開発だけでなく、管理人が多忙な折に ”編集長" として当ブログを支えてくださっている sentaro様、そして C.Basic for CG の開発サポートに多大なるご尽力を頂いた ツル様、iron2様、Colon様 に、この場を借りてお礼を申し上げます。

そして、fx-5800P のPCリンクを可能にした CcLinkerCcEditor などを開発、公開、頒布頂いている takumako様には、fx-5800P の世界を広げ ワクワク ドキドキを提供して頂き、言葉もありません。ありがとうございます。

実は、当ブログの陰の支援者 とね様にもお礼を言わなければなりません。
外部から当ブログへの訪問者が圧倒的に多いのが とね日記 なのです。

5年前に細々と始めた「電卓でのプログラミング」という究極のワンテーマブログですが、私自身が面白いと思うことだけを記事にしてきました。とっくに絶滅してもおかしくないのですが、多くの方に支えられてここまで続き、ゆっくりながら確実に発展できたのは感無量です。


e-Gadget を支え、応援頂いている皆様に、お礼を申し上げます。

m(_ _)m







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


 
関連記事

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

プログラムライブラリ - 3桁区切り出力 (汎用サブルーチン)

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

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

2017/11/17
追記修正 2018/10/29


3桁区切り出力 - 汎用サブルーチン: 3DS
Casio Basic プログラムで、数値を3桁区切り出力するための汎用サブルーチン

CcLinker で fx-5800P に転送できるプログラムファイルをダウンロード可能に [2018/10/29]


著作権者

基本ロジック:sentaro
 [当ブログ読者]
汎用版作成:やす (Krtyski) 
 [当ブログ管理人]



対応機種

Casio fx-5800P / fx-9860G / fx-9860GII / fx-CG20 / fx-CG50 (fx-FD10 Pro 対応可と思われる)



汎用サブルーチン 3DS の使い方

2桁, 3行の位置から 数値 123456789 を出力させる場合、通常は以下のように記述する。

2→X:3→Y:123456789→Z
Locate X,Y,Z

この9桁の数値を3桁区切り出力にしたいときは 汎用サブルーチン 3DS を使って、

2→X:3→Y:123456789→Z
Prog "3DS"

と記述すれば、2桁3行の位置から

123,456,789

と出力される。

0→X (X0 を設定) すると、右寄せ出力になる。



サンプルプログラム

   "A×B×C"
   "A"?→A
   "B"?→B

   "C"?→C
   "A×B×C="
   7→X:4→Y:ABC→Z

   Prog "3DS"

A=123、B=456、C=789 を入力するとして、
スクロールする部分も含めて以下のように出力される;

   A×B×C
   A?

   123
   B?

   456
   C?

   789
   A×B×C=44,253,432




詳しい説明

Casio Basic入門55~59 Chapter10:3桁区切り出力 - 汎用サブルーチンの作成 を参照

※ サンプルプログラムの使い方も上記を参照のこと


プログラムソース

fx-5800P 用 - 最大12桁まで対応
▶ ソースリスト (PDFファイル) ダウンロード
CcLinker で fx-5800P に転送可能なプログラムファイル(CCLファイル)のダウンロード
※ デバッグ用プログラムも含む.

3DS_src_fx5800P.jpg 

fx-9860GII 用 - 最大15桁まで対応
プログラムファイル 3DGT.g1m のダウンロード
 ※ デバッグ用プログラムもダウンロードできる.

3DS src for fx-9860GII 


fx-CG20 / fx-CG50 用 - 最大15桁まで対応
プログラムファイル 3DGT.g3m のダウンロード

3DS src for fx-CG50 



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


 


keywords: CasioBasic、プログラムライブラリプログラム関数電卓、3桁区切り出力、汎用サブルーチン

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


関連記事

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

プログラムライブラリ - Hit & Blow

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

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

最終更新:
2018/10/29

Hit & Blow

※ CcLinker で fx-5800P に転送できるプログラムファイル(CCLファイル) をダウンロード可能に [2018/10/29]


著作権者

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



対応機種

Casio fx-5800P、fx-9860GII、fx-CG20、fx-CG50 (fx-FD10 Proでも動作すると思われます)



プログラムの説明

Hit & Blow  は、古典的な数当てゲームで、Casio FX-502P / 602P / 603P のプログラムライブラリにも収録されていました。またフジテレビ系列で放映されていたゲームバラエティー 「戦略的推理ゲーム Numer0n」 は Hit & Blow をベースにしていました。

0 ~ 9 までの数字から重複無しに選んで所定の桁数にしたものを当てるゲームです。本プログラムでは、桁数を3桁、4桁、5桁のいすれかを初に決めます(デフォルトで3桁です)。

乱数機能を用いてプログラムが出題した数をユーザーが当ててゆきます。
ユーザーが推理した数を入力すると、数字と桁の両方が合っていると HIT 、数字は合っているが桁が合っていないと BLOW とプログラムが判定します。HIT が1個、BLOW が2個の場合は、1HIT、2 BLOW とプログラムが表示します。完全に正解すると 3 HIT、0 BLOW と表示します。

プログラムが返す HIT 数と BLOW 数を手がかりにして、出来るだけ早く正解を導くゲームです。


ゲーム開始画面
1.ゲーム開始時に、数字の桁数を、3、4、5から選択・設定する
2.開始画面には、以下を表示する
  ・HIT And BLOW のゲームタイトル
  ・3~5の桁数の選択機能
  ・<EXE>:START
  ・< ? >:ANSWER (fx-5800P のみでこの秘密のキー入力が有効)
  ・<(-)>:Answer (fx-9860GII、fx-CG20 の場合)
    ※ これは fx-5800P のみで有効です。開始画面で、秘密のキー(キーの同時押し)で正解を表示する
     詳しくは fx-5800P:同時にキーを押してみる を参照

hb_Start4hb_Start5hb_Start3 
※ 桁数の選定は、矢印キー [▲] と [▼] で3~5が順次変化するようにする。
※ fx-5800P の16桁X4桁画面をフルに活かした画面設計にする。

ゲーム進行画面
 3.電卓が出題する正解数を、1HIT、2BLOW と言ったヒントを元に当ててゆく
 4.正解数は、各桁0~9各の異なる数字とし、一番左の桁は0であっても良い
 5.入力する数字の桁に同じ数字があると、エラーを表示して正しい入力を促す
 6.入力する数字の桁が、最初に指定した桁より多いと、エラーを表示して正しい入力を促す
 7.何回目の回答かを、表示する
 8.10回以内に正解すると、EXCELLENT と表示する
 9.10回を超えても正解しない時は、QUIT? と表示する。
10.10回を超えて正解すると、GOOD と表示する。

hb_3d_3hb_4d_4hb_3d_bingo  

ゲーム終了画面
11.正解すると、終了画面で YOU WIN IN xx TRIES と正解するまでの回答数を表示する
12.正解できず、QUIT? の表示で[DEL]キーを押すと、終了画面で正解を示す
13.正解できずに終了すると、終了画面で YOU GAVE UP   ANSWER = xxxxx と表示する
14.終了画面では、:QUIT、<0>:TRY AGAIN とメニューも併せて表示する

hb_FInish_win 


プログラムの構成

メインプログラム: HITBLOW
サブルーチン: S1HB345S2HB345S3HB345S3HB345


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

CcLinker でfx-5800P に転送するプログラムファイル (CCLファイル) のダウンロード
CcLinker の紹介



ソースコード & プログラムファイル

fx-5800P 用ソースコード

※ 
ソースコード(pdfファイル)のダウンロード

jpegファイル(1453 x 981 ピクセル) を縮小表示しています 
HitBlow_5800P_Src



fx-9860GII 用プログラムファイルとソースコード

プログラムファイルとソースコードのダウンロード
  • ダインロードファイル (HitBlow_g1m_files.zip) を解凍すると、プログラムファイル (g1m ファイル) 5個、Test_files フォルダ、PDF_file フォルダが得られます。
  • ダウンロードファイル (HitBlow_g1m_files.zip) に含まれるプログラムファイル(HITBLOW.g1m、S1HB345.g1m、S2HB345.g1m、S3HB345.g1m。S4HB345.g1m)全てを fx-9860GII に転送(FA-124A、PCリンクソフト使用)して、メインプログラム HITBLOW を起動してください。
  • ダウロードしたプログラムファイル (g1m ファイル) は、純正 Casio Basic および C.Basic で動作します。
  • fx-9860GII の Main (メイン)メモリに、PCリンクソフト FA-124A を使って転送すると、純正 Casio Basic で動作します。
  • fx-9860GII の Storage (ストレージ)メモリに、PCリンクソフト FA-124A を使って転送すると、C.Basic で動作します。
  • ダウンロードファイル (HitBlow_g1m_files.zip) に含まれる Text_files フォルダにあるテキストファイルは、C.Basic で g1m ファイルからテキストファイルに変換したもので、これらテキストファイルを fx-9860GII の Storage (ストレージ)メモリに転送すると、C.Basic でそのまま実行可能です。これらテキストファイルはPCでも見られますが、一部の特殊コードの表示が fx-9860GII 上の本来の表示と異なります。但し、プログラム全体をPCで確認するのに役立ちます。
  • ダウンロードファイル (HitBlow_g1m_files.zip) に含まれる PDF_file フォルダにあるPDFファイルは、fx-9860GII でプログラムコードを入力する際に役立ちます。またPDF ファイルは、fx-9860GII の編集画面の表示にできるだけ近づけた表示になっています。
※ 本プログラムは、fx-5800P 用に作成したものを、fx-9860GII 用に移植したものです。移植の際には旧来の命令の動作が fx-5800P と fx-9860GII では異なるため、同等に動作しない旧来の命令を Casio Basic の Basic コマンドに置き換えて動作の互換性を確保しています。具体的には、それぞれのソースコードを示した PDF ファイルを見比べて参考にしてください。併せて fx-9860GII の広い画面に併せて、画面表示を追加しています。



fx-CG20 / fx-CG50 用プログラムファイルととソースコード

fx-9860GII 用のプログラムファイルがそのまま使用できます。ダウンドーロした5個の g1m ファイルを fx-CG20 / CG50 へ転送するだけで、使用できます。なお fx-CG20 / CG50 へ g1m ファイルを転送すると、自動的に g3m ファイルに変換されます。





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


 



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

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


関連記事

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

プログラムライブラリ - もぐら叩き (fx-5800P)

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

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

更新 2018/10/29

WHACK-A-Mole (もぐら叩き) - fx-5800P

※ CcLinker で転送できるプログラムファイルがダウンロード可能に [2018/10/29] 


著作権者

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



対応機種

Casio fx-5800P

Casio fx-CG20 / fx-CG50 用は こちら
Casop fx-9860G / fx-9860GII 用は こちら



プログラムの説明

Whack-A-Mole は、非力な fx-5800P でアクションゲームを作れるかどうか試しに作った "もぐら叩き" です。プログラム作成の詳細は fx-5800P【ゲーム】:もぐら叩き を参考にしてください (この記事のプログラムにおいて。Lbl 0 の下に2行追加したものをプログラムライブラリに収録しています。

3×3 の配置の孔から モグラが顔を出した時に [1] ~ [9] の対応するテンキーで叩く、お馴染みのモグラ叩き。

一定ポイントを超えると、偽モグラが顔を出したり、偽モグラと本物が一緒に顔を出すようになり、偽モグラを叩くとペナルティとなります。各種設定を変更する機能があり、難易度を自由に変えられます。



プログラムの使い方

もぐら退治の賞金稼ぎがゲームコンセプト:
  • ゲーム開始時に、LIFE ポイント (初期値 7) をもらう。
  • モグラ退治が遅い場合や間違って退治するとLIFE が減り、LIFE ゼロでゲーム終了!
  • モグラ1匹あたり、定額の資金 (FUND、初期値 20) をもらう。
  • モグラ退治に時間がかかるほど、退治費用 (COST) がかさむ。
  • モグラ退治が速ければ、FUND - COST が儲けとなり、賞金 PRIZE に加算される、
  • モグラが顔を出してから所定の時間がかかり COST が BURSTポイント (初期値 6) までかさむと、BURST となり LIFE が 1 減る、
  • モグラが顔を出してから時間がかかり過ぎて COST が TIME-OUTポイント (初期値 8) までかさむと、時間切れ (Time-Out) になって  LIFE が 1 減るだけでなく、賞金 PRIZE が BURST LOSS (初期値 25) だけごっそり減る 。
  • 賞金 PRIZE が INVOKE FAKE ポイント (初期値 200) に達すると、FAKE モードが発動する。
  • FAKE ONE モードは、偽モグラが出現する。放置しなければならない。手を出すと LIFE が 1 減る。
  • FAKE TWO モードは、偽モグラと本物モグラが同時に出現。本物を退治すると儲けがあるが、偽モグラを退治すると LIFE が 1 減る。
限られたLIFEで、どこまで賞金(PRIZE) を稼げるか、がんばろう!!

wam-fake1 wam-fake2 
左は 偽モグラが現れている。右は偽モグラと本物モグラが同時に現れている。

なお、設定値 LIFE、BURST、TIME-OUT、FUND、BURST LOSS、INVOKE FAKE は SETTINGS で変更できます。

wam-menu 



プログラムの構成

メインプログラム: WHACK-A-MOLE (これを起動する)
ゲーム本体: WAM



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

CcLinker で fx-5800P に転送できるプログラムファイル (CCLファイル) のダウンロー

CcLinker の紹介



ソースコード

PDFファイルのダウンロード

 Wack-A-Mole_fx-5800P Src 


 



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


 


keywords: fx-5800PCasioBasic、プログラムライブラリもぐら叩き、プログラム関数電卓

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


関連記事

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

fx-5800P プログラムライブラリ - 入力ボックス

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

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

最終更新:
2018/10/28

入力ボックス 2.0 / 2.1
INPI、INP、IN 2.0/2.1 for fx-5800P - 汎用サブルーチン

CcLinkerでfx5800Pに転送可能な CCLファイルがダウンロード可能に [2018/10/28]



著作権者

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



対応機種

Casio fx-5800P 専用
Casio fx-9860GII、fx-CG20、fx-CG50 用は こちら



プログラムの説明

INPI / INP / IN は、fx-5800P Casio Basic プログラミングで、好みの位置に好みの桁数で数値を入力させる機能を実装する、汎用サブルーチンです。

画面構成を崩さずに数値を入力させるプログラムを簡単に作れるので、換算プログラムなどに最適です。

Casio Basic の入力命令 ? は、入力位置が左端で、入力結果は改行されて右端に表示され、入力するたびに画面がスクロールするので、入力位置や入力結果の表示位置を選べません。もう1つの入力コマンド Getkey はキー1つが押されたことを検出するものなので、そのままでは複数桁の入力や編集に使えません。

そこで画面設計をしたプログラムで使うため、Windows などの Edit Box に近い入力機能をCasio Basic に提供するのが入力ボックスです。

以下の Ver 2.02.1 を用意したので、好みと必要性に応じて使い分けてください。
・Ver 2.0
キーをゆっくりと入力すると、キーリピートすることがありますが、Ver 2.1 よりも応答性が良いです。
・Ver 2.1
キーリピートを抑制していますので、ゆっくりキー入力してもキーリピートが発生しません。


それぞれのバージョンごとに、以下の3種類の入力ボックスを用意しました。

1. INPI 2.0 / 2,1
0以上の整数入力のみに対応。0以上の整数入力のみを行わせたいプログラムで使うことを想定していて、負数や小数入力のエラーチェックが不要になる。

2. INP 2.0 / 2.1
0以上の整数/小数入力のみに対応。0と正の小数のみの入力を行わせたいプログラムで使うことを想定していて、負数入力のエラーチェックが不要になる。

3. IN 2.0 / 2.1 
正負小数/整数の入力に対応、最も汎用性のある入力ボックス。

入力ボックスは、汎用サブルーチンとして作っていて、他のプログラムから呼びだして使うことを前提にしています。従って、Basic コマンドとは少し使い方が異なります。



入力ボックスの概要

Basic コマンドの使い方は、

[コマンド] [設定1],[設定2],[設定3], ...

といった使い方になります。

一方、入力ボックスはサブルーチンです。サブルーチンを呼びだす時に色々な設定を一緒に指定することができません。そこで、

[入力ボックスの設定]
Prog "入力ボックス"
[結果の受け取り]


といった書式になります。

入力ボックスには、使い勝手を考えて複数のバージョンがあります。

入力する数値の種類応答性が速い
バージョン(Ver2.0)
キーリピート抑制が
バージョン(Ver2.1)
プログラム名
0以上の整数(INPI Ver2.0)INPI Ver2.1INPI
0以上の小数と政数INP Ver2.0(INP Ver2.1)INP
正負の小数と整数IN Ver2.0(IN Ver2.1)IN

入力ボックスには、fx-5800P で使うために、大きく Ver 2.0Ver 2.1 の2種類があります。fx-5800P はCasio Basic プログラムの実行速度が比較的遅いので、できるだけキー入力の応答性を高める必要があり、その目的で作ったのがVer 2.0 で、応答性を高めるために、キーを押したままにするとその数字が繰り返し入力される(キーリピートが発生する)仕様になっています。

一方、キーリピートを抑制したものが Ver2.1 です。

Ver 2.0 / Ver 2.1 それぞれについて、入力する数値の種類に応じて3つのバージョン、INPI、INP、IN を用意しています(上の表参照)。

実際に使用してみると、Ver 2.0INPI の処理が軽いのでキーリピートが発生しやすいと思います。そこで INPI を使う場合はキーリピートを抑制した Ver 2.1 をお勧めします。

INPIN については、INPI に比べて相対的に処理が少し重く、キーリピートがあまり問題になりません。むしろキーリピートを抑制すると応答性の悪化を感じるので、Ver 2.0 の利用を勧めます。

上の表で赤文字で示したように、INPI Ver2.1INP Ver2.0IN Ver2.0 を使えば、間違いないと思います。



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

CcLinker を使えば、プログラムファイルを以下からダウンロードして fx-5800P に転送してすぐに使えます。
 INPI Ver 2.1 / INP Ver 2.0 / IN Ver 2.0 / INBOX_TEST
 fx-5800P 用入力ボックス、プログラムファイルのダウンロード
 ※ CcLinker の紹介 



プログラム作成について

INPI、INP、IN 2.0 / 2.1 の詳しい説明は、Casio Basic入門32 ~ 36 を参照。
 ・ Casio Basic入門32  (入力ボックス応答性向上)
 ・ Casio basic入門33  (INPI 2.0 作成)
 ・ Casio Basic入門34  (INP 2.0 作成)
 ・ Casio Basic入門35  (IN 2.0 作成)
 ・ Casio Basic入門36  (キーリピート抑制)



プログラムの使い方

具体的な使い方については、Casio Basic入門44 、Casio Basic入門51 を参照。

メインルーチンから以下の書式で呼び出します。

→X:→Y:→D:→E
Prog "INPI"
Z→■


□ は任意の数、■ は任意の変数、但し使用機種の画面範囲内に収まるように設定する。
  参考 fx-5800P: 1≦X≦16、1≦Y≦4、X+D≦16

- X: 入力ボックス表示開始桁
- Y: 入力ボックス表示開始行
- D: 入力ボックス桁数
- E: 入力ボックスインジケータの選択
   E=2: 画面右下に <EXE>:ENTER と表示
   E=1: 画面右下に ▶E と表示
   E=(上記以外): インジケータ非表示
- Z: 入力ボックスで確定した数値が代入される

入力ボックス内部では、上記5つの変数以外に、CIF (F は、INPIN の場合のみ)、配列変数を用いています。これらの変数は、入力ボックスを呼び出すたびに格納されている数値が変更されます。メインルーチンでこれらと同じ変数を使う場合は、入力ボックスを呼び出すたびに変更されても良い変数として使ってください(Casio Basicでは変数が全てのプログラムで共用されるため)。特に配列変数は、入力ボックス内で領域確保を行い、メインルーチンに戻る前に領域解放を行いますので、それを念頭に置いて使ってください。



使用例

呼び出しルーチンのプログラム例を掲載します。
・ 予約変数は S, T, U, V
これを元に色々なプログラムを作ってみると、楽かも知れません。

0→S:0→T:0→U:0→V  [予約変数の初期化]

Locate 1,1,"1:"      [初期画面表示]
Locate 1,2,"2:"
Locate 1,3,"3:"
Locate 1,4,"4:"

While 1            [無限ループ、[AC] キーでプログラム終了]

-1→M             [メニュー選択] 
Do:Getkey→K
LpWhile K=0
K=35⇒1→M
K=36⇒2→M
K=37⇒3→M
K=21⇒4→M

Locate 1,4,"        " (スペース16個)

If M=1:Then        [INPIを使った入力処理]
3→X:1→Y:8→D:2→E
Prog "INPI":Z→S
Else If M=2         [INPを使った入力処理]
Then
3→X:2→Y:6→D:2→E
Prog "INP":Z→T
Else If M=3         [INを使った入力処理]
Then
3→X:3→Y:4→D:1→E
Prog "INPI":Z→U
Else If M=4
Then
3→X:4→Y:2→D:1→E
Prog "INPI":Z→V
IfEnd:IfEnd
IfEnd:IfEnd

Locate 1,4,"Z="
Locate 3,4,Z

WhileEnd


プログラム例

Birthday_2 
INPI 使用 - 0と自然数入力 - 年齢換算プログラム


YearConv_5_convert_20140312192414.jpg
 
INPI 使用 - 0と自然数入力 - 和暦西暦換算プログラム


PressureConv_2
 
INP 使用 - 0と正野小数入力 - 圧力単位換算プログラム


3-JST_inputBox 
INPI 使用 - 0と自然数入力 - 世界時間換算プログラム


TEMP_CONV_P3 
IN 使用 - 正負小数入力 - 温度単位換算プログラム



入力ボックス 2.0

Ver 1.0Ver 1.2 よりも大幅に応答性を向上させ、速いキー入力でも取りこぼしがないと思います。
CcLinkerで転送できる ccl ファイルのダウンロード

プログラム - INPI Ver 2.0: プログラム名 INPI

INPIv20src_fx-5800P 

注1) 下から10行目の Locate X+C+I-1,Y, " " の " " は、スペース1個
注2) 下から7行目の Locate 6,4, "           " の " " は、スペース11個
注3) 下から4行目の Locate 15,4,"  " の " " は、スペース2個


プログラム - INP Ver 2.0: プログラム名 INP

INPv20src_fx-5800P 

注1) 下から10行目の Locate X+C+I-1,Y," "  の " " はスペース1個
注2) 下から7行目の Locate 6,4,"      " の " " はスペース11個
注3) 下から4行目の Locate 15,4,"  " の " " はスペース2個


プログラム - IN Ver 2.0: プログラム名 IN

INv20src1_fx-5800P 

注1) 下から11行目の Locate X+C+I-1,Y," "  の " " はスペース1個
注2) 下から7行目の Locate 6,4,"      " の " " はスペース11個
注3) 下から4行目の Locate 15,4,"  " の " " はスペース2個



入力ボックス 2.1

Ver 2.0 にキーリピート抑制機能を追加しています。但し、INP と IN については、僅かですが応答性の低下が体感されます。
CcLinker で転送できる cclファイルのダウンロード

プログラム - INPI Ver 2.1: プログラム名 INPI

INPI Ver2.1 for fx-5800P 

注1) 下から10行目の Locate X+C+I-1,Y, " " の " " は、スペース1個
注2) 下から7行目の Locate 6,4, "           " の " " は、スペース11個
注3) 下から4行目の Locate 15,4,"  " の " " は、スペース2個


プログラム - INP Ver 2.1: プログラム名 INP

INP Ver 2.1 for fx-5800P 

注1) 下から10行目の Locate X+C+I-1,Y," "  の " " はスペース1個
注2) 下から7行目の Locate 6,4,"      " の " " はスペース11個
注3) 下から4行目の Locate 15,4,"  " の " " はスペース2個


プログラム - IN Ver 2.1: プログラム名 IN

IN Ver 2.1 for fx-5800P  高機能テキストエディタ

注1) 下から11行目の Locate X+C+I-1,Y," "  の " " はスペース1個
注2) 下から7行目の Locate 6,4,"      " の " " はスペース11個
注3) 下から4行目の Locate 15,4,"  " の " " はスペース2個




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


 



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

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


関連記事

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

番外編 - 常時SSL化の概要

番外編
e-Gadget


2018/08/03
更新 2018/10/17


当ブログの常時SSL化を行ったが、その時に得られた知識を簡単に整理して自分の備忘録として残しておく。

私自身はあまり理解していなかったので、ネット検索で調べながら作業した。もし、事前に全体の知識があれば、もっと落ち着いて楽に進められたと思うので、SSL化の概要を俯瞰できるような記事にする。なお、この記事が読者の方に役立つことが少しでもあれば嬉しい。より詳しいところは、各自で検索して補足頂きたい。

[2018/10/17] Chrom70公開に伴い追記・更新


そもそも常時SSL化って何だ?

インターネットで通信を暗号化する仕組みをSSLと言う。この仕組みができると、通信は FTTPSプロトコルとなり、URLの始まりが fttps となる。末尾の s は Secure の s。セキュア(Secure) とは安全のこと。SSLの仕組みが大雑把でも分かっていると、SSL化作業の見通しが良くなり、個々の作業の意味と目的が分かって、作業が楽になる。

SSLの仕組みには大きく2つある。1つは「暗号化通信」で、もう1つは「サーバーと運用者の正当性証明」

通信が暗号化されれば、データの盗聴が難しくなるので安全になる。暗号化通信に使う公開鍵、コモンネーム(FQDN)、ドメインの所有者情報を紐付けて、第三者(認証局)がSSLサーバー証明書を発行する。

サーバーとクライアント(Webブラウザ)がSSL通信する時にSSLサーバー証明書を使う。クライアントはサーバーからSSLサーバー証明書を受け取り、サーバーのFQDNと証明書に含まれるコモンネームを照合し、その一致を確認する。一致していれば、サーバーと通信しようとしているクライアントは、ドメイン所有者が運営しているサーバーだと確認できる。つまり、正当性が保証された相手と暗号化通信をしていること確認しながら安心して接続できる。なりすまし防止(フィッシングサイトの防止など) に役立ち、暗号化通信が安全になる。

最初に1994年に SSL 2.0 が公開された。1年後に安全性の問題が見つかり SSL 3.0 が公開され、これが長らく使われていた。2014年に暗号化通信の解読ができることが分かり、SSL 3.0 利用が禁止された。今は SSL をより安全にした TSL が使われている。現在は 1996年に公開された TSL 1.0 を使う。しかしSSLが長らく使われ、一般人向けの用語としてSSLが定着しているので、今でも SSL化と呼ばれる。或いは SSL/TSL化や https化とも言われる。

なお、重要な情報を入力させるページに限って以前からSSL化が行われてきた。それに対して、今はサイトを構成する全てのページでSSL化することが要求されていて、それを常時SSL化という。


SSL化作業に必要なこと

SSLサーバー証明書の取得
・ドメイン認証のみの証明書: ドメイン使用権の確認。無料か低価格で提供され、個人サイト向け。
・企業実在性認証の証明書:ドメインと運営団体が実在していることの確認。信頼性高い。
・EV認証の証明書:サイト運営団体の厳格な確認。信頼性高く、高額。

個人ブログや個人ホームページは、契約している業者のサービスにSSL設定サービスがあればそれを使う。すると証明書発行まで行ってくれる。大抵ボタンクリック1回で完了となる。無ければSSL化を諦めるか、SSL設定サービスのある業者に乗り換える。

証明書には有効期限があるので、期限切れになる前に忘れずに更新するか、自動更新の設定が必要。

SSL設定
SSL設定サービスがある場合は、大抵ボタンクリック1つで設定完了。しかしこれだけでは常時SSL化は完了しない。
多くのサービスではリダイレクト設定もできる。リダイレクト設定には301リダイレクトと302リダイレクトがあり、大抵どちらかを選択できる。

リダイレクト設定
SSL設定サービスには、たいていリダイレクト設定がある。新たにブログやホームページを開く時は、最初からSSL化して作れば良い。一方、既に有るものをSSL化する場合は、検索ページからアクセスされたり、ブックマークからアクセスされる時は http のURL にアクセスされ、ページが見つからないとなる。そこで、http ページへアクセスされたときに https ページに自動転送するためにリダイレクト設定が必要。

多くの場合、恒久的転送の 301リダイレクトと一時的転送の 302リダイレクトを選択できる。301リダイレクトは検索サイトでのランキングなどのこれまでのサイト評価が引き継げるが、元に (httpプロトコル)には戻せない。ブログやホームページの中でSSL化されていない外部サービスを使っている場合、SSL化の確認や他のサービスに切り替える必要があり、その間は仮にリダイレクトし、万一の場合は元に戻せるために 302リダイレクトを使う。302リダイレクトではこれまでのサイト情報は引き継がれない。作業中は 302 リダイレクトにしておき、最終的に 301 リダイレクトにすると良い。

もしボタンクリックで簡単にできるリダイレクト設定が準備されていない時は、.htaccess ファイルにスクリプトを書いて 301リダイレクトか302リダイレクトを記述すれば良い。詳しくは、利用しているサーバーのQ&Aか検索で解決する。私自身もネット情報を参考にして、とあるサーバーについては .htaccess ファイルで301リダイレクトの設定ができた。

リンクの設定変更
各ページにある画像ファイルへのリンクやサイト内の他ページへのリンクは、頭の http:// を https:// に書き換える。スクリプトやCSS(スタイルシート)、WordPressなどの記述にある http 参照部分も https に書き換えておく。サイト内リンクのどこかに暗号化されない FTTPプロトコルでの参照が含まれる時点で、安全性が崩れるのでこの書き換えを行なって、サイト内リンクはFTTPSプロトコルにしておく必要がある。

外部サイトへのリンク
単に外部サイトへのリンクを記述している場合は、URL参照の部分が http:// で始まっていても自身のサイトのSSL化に影響はない。外部へのリンクをFTTPプロトコルで呼び出しても、自分のサイトに戻らないので構わないわけだ。

 アマゾンなどの外部リンクのあるバナー
ブログランキング、アマゾン、楽天などの外部リンクのあるバナーもSSL対応する。それぞれのサービスごとにSSL化するための html 設定を改めてコピー&ペーストする。SSL化対応していない場合は、貼り付けるページをSSL化できないので、代替え策を考える。

ブログやホームページサーバーごとの違い
本質的な違いは無いと思うが、それぞれの細かい違いがあればサービス業者のホームページで確認する。


SSL化の必要性

何故SSL化するのか?

最近皆がやり始めているから?
まぁ、ネットの世界の流れはSSL化なので、それには沿ってゆくのは間違っちゃいない。でも作業が面倒。SSL化を有償で請け負うビジネスも登場している。自分でやれるならやってみる...

SEO対策になるから?
Googleが、SSL化されたサイトの優先度を上げる可能性を公言しているので、これは大きな動機になる。

安全でないと表示されると訪問者に良い印象を与えないから?
会社のホームページならこの問題は大きい。個人サイトでもこれは気になるかも知れない。


Google Chrome の対応の変化

SSL化に対して厳しく対応しているのが Google で、Google Chrome は安全性が保たれないと判定した場合は、「保護されていません」と表示するようになっている。他のブラウザもいずれ追従するだろうが、今は Chrome に対応しておけば良さそうだ。

SLL対応がOKと判定されると、鍵のマークと一緒に「保護された通信」と表示される。

 eGadget_Protecte 


Chrome 62 (2017年10月)
SSL化が不完全な場合、

殆どの場合、チョット控えめに

 i_mark 

i マークのみの表示。

但し、入力フォームが有るページで、<input> タグtype属性に "text", "tel", "email", "search", "url" とある時

 Not_Protected 

と明確な警告を出していた。


Chrome 67 (2018年7月)
それまで、SSL化が不完全で

 i_mark 

と表示されていたページでも

 Not_Protected 

と表示されるようになった。

但し、

 i_mark 

i マーク表示だけで「保護されていません」とは表示されないケースもある。どのような条件で、このような i マークだけの表示なるかは、まだよく分かっていない。当ブログ以外に、複数のホームページの常時SSL化を進めているが、この状況を経験している。

Chrome 70 (2018年10月) (2018/10/17更新)
あと2ヶ月ほどで、さらに表示が厳しくなるとのこと。
「保護されていません」と判定される時の表示が、さらに悪印象を与えるようになる。

2018/10/16 に Chrome 70 にアップデートされてみると、事前情報とは逆にグレーでの表示になり、地味になった。

・常時SSL化されている
 scure_Chrom70 
・常時SSL化されていない  
 unsecure_chrom70 
・完全に常時SSL化されていない
 mid-secure_chrom70 

将来は完全SSL化が当たり前になるので、今後は鍵マークも無くしてゆくらしい。
逆に完全SSL化していないと、「保護されていない通信」という余計な文字列が表示されることで、暗号化されていないことが明示されるわけだ。

一応、段階的に警告度合いを引き上げているわけだが、ここまで強烈に警告されると、却って悪いヤツラのターゲットになる心配も出てくる。逆に言えば、被害に遭うまでに常時SSL化しておいたほうが良さそうだ。



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


 



keywords: ホームページ、ブログ、SSL、TSL、https

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

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

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

やす (Krtyski)

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


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

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

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


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR