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

楽 屋 裏
e-Gadget

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


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


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

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

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

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

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

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

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

構造化定理 

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



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

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

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

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



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

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

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

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

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

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



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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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


ちょっと脱線...

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

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

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

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

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

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

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

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



話を戻して...

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

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

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

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



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

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




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


 


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

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

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

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

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

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

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


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


MOD(




整数の剰余を計算する。

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

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

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

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

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

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



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


 



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



関連記事

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

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

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

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

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


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

入力コマンド


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

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

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



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

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

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

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

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


グラフィックス


行列



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


 


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

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




関連記事

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

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

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

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

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

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



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


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


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

A = QN + M  ・・・(1)

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

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


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

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

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

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


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

A-NInt(A÷N)

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




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


 



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

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

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

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

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

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

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


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

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

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

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

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


目 次

  CcEditor のダウンロードと起動

  CcEditor の基本コンセプト

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





CcEditor のダウンロードと起動

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

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

PC_Protection.PNG

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


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



<目次に戻る>



CcEditor の基本コンセプト

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

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

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

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

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

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


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

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

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



CcEditor の操作と拡張機能

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

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

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


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

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

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

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

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

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

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

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

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

Getkey=73⇒0→L

を追加、Lbl 0 の上に

1→L

を追加し、最後の行を

L⇒Goto 0
Cls

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

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

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

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

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

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

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

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

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

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

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

Building_Pythagoras13.PNG 

[はい] をクリック

FileSelect_Final_CCL.PNG

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

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

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

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

StartUp   

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

Transmit_Pythagoras_CLL.PNG

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

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

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



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

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


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

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

CcEditor を起動する。
Started_CcEditor13.PNG

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

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

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



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

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

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

Surfix_number.png


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

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

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

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

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

CcEditor Test
3


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



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




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


 



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

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



関連記事

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

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

やす (Krtyski)

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


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

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

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


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR