CASIO fx-5800p で測量プログラム (基本部分)

2013/11/18

◆ プログラム関数電卓 fx-5800P

カシオのプログラム関数電卓 fx-5800P は大きな表示エリアと大容量のメモリが利用でき、かなり複雑なプログラムを作成することができます。

プログラム言語は構造化 BASIC 風の独自言語で、プログラムをプログラムから呼び出せるのでサブルーチン的な使用ができます。

変数は A~Z を使用しますが配列が使用できるのでメモリの許す限り増やすことができます。 ただし、グローバル変数となるのでプログラム内のみの使用はできず、プログラム作成時には変数管理が必要となります。

単4電池を使用しているので電池が切れてもコンビニで容易に入手できます。 これは結構重要な事です。

◆ メニュープログラムの作成

全てのプログラムはメニュープログラムから呼びだされるようにします。 これは角度や小数点以下の表示を規定したり、配列の宣言を行うためです。

ファイル名を、[ MAIN ] とし、プログラムを作成します。

 ========================
   MAIN
 ========================

 Deg ←角度の種類を Degree に設定
 Fix 4 ←小数点以下の表示桁数を設定
 50→DimZ ←使用する配列数を宣言(とりあえず50個)
 Lbl 1
 Cls ←画面消去
 表示する画面データ
 "1.----- 2.-----"
 "3.----- 4.-----"
 "5.----- 6.-----"
 ?→F ←メニュー番号を変数 F に格納
 Int(Abs(F))→F ←変数 F を整形
 F=0 Or F>6 ⇒ Goto 1 ←メニュー番号以外の入力は Lbl 1 に戻る
 Goto 9 ←Lbl 9 へジャンプ

 Lbl 9
 F=1 ⇒ Prog "A" ←プログラム A を実行
 F=2 ⇒ Prog "B" ←プログラム B を実行
 F=3 ⇒ Prog "C" ←プログラム C を実行
 F=4 ⇒ Prog "D" ←プログラム D を実行
 F=5 ⇒ Prog "E" ←プログラム E を実行
 F=6 ⇒ Prog "F" ←プログラム F を実行
 Goto 9 ←Lbl 9 へジャンプ
 

たとえばメニューで 1を入力した場合、変数 I には 1 が格納されたままプログラム A が実行され、プログラム A が終了した場合、MAIN プログラム Lbl 9 の Prog コマンドの位置から実行が継続されます。
もし、プログラム A 内で変数 I の値を 3 等に変更した場合にはプログラム C が実行されてしまいます。

これを防ぐには Lbl 9 の条件分に IF文を使用するか、呼び出し先のプログラムが終了する時点で変数 I の値を 0 にしておく必要があります。


 Lbl 9
 If F=1 Then Prog "A"
 Else If F=2 Then Prog "B"
 Else If F=3 Then Prog "C"
 Else If F=4 Then Prog "D"
 Else If F=5 Then Prog "E"
 Else If F=6 Then Prog "F"
 IfEnd
 Goto 9
 

◆ 変数の取り扱い方法

A~Z までのアルファ変数と Z[n] の配列変数が使用できます。

アルファ変数の X,Y,Z は直前に表示した X,Y,Z を格納するようにします。

S,T も S は距離、T は角度の表示値とします。

その他に、POL や REC の関数を使用した場合、I, J の値が変更されるので I や J を変数として使用する場合は注意が必要です。逆に、一時的な汎用変数として I,J を使用します。

本プログラムを作成するにあたり、F を汎用入力変数とします。また、E をプログラム呼び出し確認用変数として使用します。

◆ サブルーチンの作成

サブルーチンも一般のプログラムと同じ作り方をします。 ただし、サブルーチンからサブルーチンを呼び出してゆくと入れ子が深くなりすぎてエラーとなります。

サブルーチンからサブルーチンを呼び出すことは不用意なエラーを引き起こす要因となりますが、ユーザー関数の様なサブルーチンは頻繁に利用するので一概に禁止することはできません。

サブプログラム、サブルーチンはアルファベット一文字のファイル名を使用し、ユーザー関数の様にサブルーチンから呼び出されるものは数字一文字のファイル名とします。

サブプログラムやサブルーチンを単体で呼び出すと、予想外の動作を引き起こしたり変数の内容が変わったりしするので、確認用変数 E をフラグとして使用します。

サブルーチンを呼び出す際には必ず変数 E を 0 以外にし、サブルーチンはプログラムの先頭で変数 E の値を確認し、0 ならば何もしないで終了するようにする。

サブルーチンの終了は Return 命令で行うが、必ず Lbl 9 を経由し終了するようにする。

●数値表示サブルーチン

fx-4850 には無かった Locate 命令が追加された為、文字と数字を同じ行に表示できるの様になった。

ただし、Locate 命令で表示した数値は左寄せとなり、値により小数点の位置がずれるのでこれをサブルーチンで整形することにする。

配列変数の値を変数 E で受け渡し、変数 F では表示指定行に表示します。

 

●座標入力サブルーチン

変数 E で指定された配列変数を初期値として座標値 X,Y を入力します。

 ========================
   X
 ========================

 E=0 ⇒ Return ←フラグが立っていない場合は終了

 座標値 X の入力
 Z[E]→F ←変数 F に X の初期値を格納
 "X ="?F ←X の値を変数 F に入力
 F→Z[E] ←変数 F に X の初期値を格納

 座標値 Y の入力
 Z[E+1]→F
 "Y ="?F
 F→Z[E+1]

 終了
 0→E
 特に Return 命令を入れなくても文末で終了し、呼び出しプログラムへ戻ります。
 

出来れば100点程度の座標値を記憶させ、呼び出せるようにしたいのですが別項目で修正するようにします。

本プログラムはサブルーチンから呼び出されるサブルーチンなので実行後に即リターンするようにする。

表示サブルーチン

変数 E で指定された配列変数を座標値 X,Y として表示します。

表示命令として Locate があり、任意の位置に表示できるのはいいのですが、数値の桁数が一定ではないので桁数の算出が必要となるのですが、結構頻繁に使用するのでプログラムが必要となります。

 ========================
   Y
 ========================

 E=0 ⇒ Return

 座標値 X の表示
 Z[E]→F ←変数 F に X の初期値を格納
 "X ="?F ←X の値を変数 F に入力
 F→Z[E] ←変数 F に X の初期値を格納

 座標値 Y の入力
 Z[E+1]→F
 "Y ="?F
 F→Z[E+1]

 終了
 0→E
 特に Return 命令を入れなくても文末で終了し、呼び出しプログラムへ戻ります。
 

 

座標計算では、距離と角度を入力して座標値を得るものと、座標値から距離と角度を得るものがあります。

距離と角度は光波測距儀(以下「光波」)からのものとなるので光波の設置条件を入力しておく必要があります。これを器械設定プログラムとし一番初めに作成します。

◆ 器械設定プログラム

光波を設置した座標とゼロセットした後視点の座標値を入力し、方向角を記憶させておきます。

【プログラム開始】
光波を設置した点の座標値を入力する。
ゼロセットした点(後視点)の座標値を入力する。
方向角を計算して記憶させる。
方向角と2点間の距離を表示する。
プログラム終了

 

以下にプログラムの流れを上記のプログラムを実現するためには座標値入力サブルーチン

とりあえず座標計算プログラムを作ります。

 

 

・距離と角度を入力して座標値を知りたい。
・座標値を入力して距離と角度を知りたい。
・距離と角度を入力して測点と幅を知りたい。
・測点と幅を入力して距離と角度を知りたい。

上記のプログラムに必要となるサブルーチンを考えます。

◆ 座標計算系のプログラムについて

・距離と角度入力のサブルーチン
・座標入力サブルーチン
・距離と角度表示のサブルーチン
・座標表示のサブルーチン
・距離角度→座標の計算サブルーチン
・座標→距離角度の計算サブルーチン