Casio Basic入門35
Casio Basic入門
誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します
修正: 2015/01/26
修正: 2015/01/26
4. CasioBasicを使ってみる(続き)
Chapter 6
前回: Casio Basic入門34 を見る
◆ Chapter 6 の目標: プログラムを速くする
入力ボックスの改良と拡張
前回は、INP Ver 2.0 を作り、ストレスの無い実用的な応答性が得られました。そこで、今回はこれをさらに拡張して、負の整数/小数入力に対応した入力ボックスを作ります。プログラム名は IN です。
1) INPI Ver 1.0 から Ver 1.2 への変更
※ 遅い処理を極量排除する。
2) INPI Ver 1.2 から Ver 2.0 への変更
※ プログラムの内部仕様(ロジック)変更を行い、その高速化を実感してもらう。
3) INPI Ver 2.0 を基に、INP Ver 2.0 を作るための機能拡張
※ 小数入力への対応方法を紹介する。
4) INP Ver 2.0 を基に、IN Ver 2.0 を作るための機能拡張
※ 負の数入力への対応方法を紹介する。
Chapter6-4
処理速度を意識して機能拡張する(2)
前回作った、INP Ver 2.0 は、0以上の小数入力まで拡張した入力ボックスです。
前回作成した INP Ver 2.0 (ファイル名: INP)
このプログラムを拡張して、負の数値入力まで拡張した IN Ver 2.0 (プログラム名: IN)を作ります。
負数の扱い
fx-5800P には、負の数を入力するために、2つのキー [(-)] と [-] があり、高速化を考えた時、どちらかのキーのみを使わせることも考えられますが、プログラムの実用上、これらを限定するのは良くありません。そこで、先ずはこれら両方のキーを使えるようにプログラムを作り、満足ゆく応答性が得られない時は、どちらかに限定するようにしようと思います。
そこで先ず、負号 [(-)] キーや減算記号 [-] キーを入力する時の処理を考えます。[(-)] のキーコードは 57、[-] のキーコードは 67 なので、Getkey コマンドの戻り値が 57 あるいは 67 の時、負号入力処理を行うようにします。
IN への拡張の元になる INP のプログラム構造を踏襲すると、IN のプログラム構造は以下のようになります。
[初期化処理 1]
[初期表示]
Do
[キーコード取得]
[初期化処理 2]
If (テンキーの場合):Then
※[テンキーの時の処理]
Else If (小数点の場合):Then
※[小数点の時の処理]
Else If (DELキーの場合):Then
※[DELキーの時の処理]
Else If (負記号の場合):Then
[負記号の時の処理]
IfEnd:IfEnd
IfEnd:IfEnd
LpWhile K≠47
[後処理]
Return
----------
赤文字で示したのは今回追加する処理です。さらに ※ を付けたブロックは修正が必要と思われます。
負記号キーが押された時の処理
キーコード K が 57 あるいは 67 の時、負記号キーが押された時の処理を行います。
Else If K=57 Or K=67
Then
[負記号キーが押された時の処理]
IfEnd
さて、現在入力している数が正の数か負の数かを管理するための変数が必要です。今回は新しい変数を使うのではなく、既に使っている変数を使い回すことにします(理由は後で述べます)。
元になる INP のプログラムを眺めると、7つの通常変数 C、D、F、I、X、Y、Z はキー入力ループ内で使っていますが、変数 E はループ内で使われていないので、入力値の正負管理変数として E を使うことにします。
E は入力モード・インジケータの書式を指定するために、入力ボックスを呼び出す時に使われる変数で、キー入力ループの前の初期化表示処理と、ループの後の後処理で使われています。そこで、変数 E に格納されている変数を一旦別の変数に待避させておき、キー入力ループ内で E を自由に使います。そして、ループを出た時には、待避させていた本来の値を 変数 E へ戻し、後処理を実行させます。
E から待避させる変数には、今回は配列変数を用いることにします。87個の配列変数の多くは、プログラム内で使われていません。そこで、ループの前にある入力モード・インジケータの表示が終わった直後に、E を一旦 配列変数 Z[1] に待避しておきます(E→Z[1])。
これにより、キー入力ループ内では E を好きなように使えるようになり、ループが終わった直後に、Z[1] に待避させていた値を E に戻して(Z[1]→E)、後処理で入力モード・インジケータを消去します。
正数入力時に E = 1 とし、負数入力時に E = -1 とします。入力ボックス起動時の初期設定では、1→E、つまり正数入力としておきます。このように設定すれば、入力値の更新計算の時、変数 E を有効に使えそうです。
さて、負号は必ず最上位にしか入力できない、と言う大きな条件があります。つまり、C = 0 の時のみ負号の入力が許されます。これをプログラムコードで表現すると、以下のようになります。
If C=0:Then
Locate X,Y,"-"
-1→E:Isz C
IfEnd
負号を入力したら、E を -1 にします(-1→E)。そして入力桁数が1つ増えるので、Isz C とします。これが、負記号入力時の処理です。今回追加するのは、以下となります。
Else If K=57 Or K=67
Then
If C=0:Then
Locate X,Y,"-"
-1→E:Isz C
IfEnd:IfEnd
一番最後の IfEnd は Else If が追加されたので、合わせて追加しています。
テンキー入力時の処理
INP Ver 2.0 のテンキー入力時の処理を、抜き出してみます。
If (I≧1 And I≦9) Or K=25
Then
If C<D:Then
If F:Then
Z+I÷10^(F)→Z
Isz F
Else
10Z+I→Z
IfEnd
Locate X+C,Y,I
Isz C
IfEnd
これを変更して、負数の入力に対応させます。
テンキー入力時の処理を考えます。表示は単にテンキーの数字が入力されるだけなので、Locate コマンドを使った表示部分は、変更の必要がなさそうです。変更が必要なのは、上で赤文字で示した入力値 Z の更新の計算でしょう。
赤文字で示した小数入力の時の処理は、以下のようになっています;
Z+I÷10^(F)→Z
ここでは、Z + (I ÷ 10F) を計算して、Z に代入しています。この処理では、入力キーの数字 I に応じて、Z が更新されるのですが、I 自体は、常に一桁の正の整数です。一方、Z は、正になったり負になったりします。Z が正なら正数の入力ということですね。
この計算を数直線上でイメージすることで、Z + E(I÷10F) で良さそうだと、思いつきました。要するに、
Z + E(I÷10F) = Z + EI÷10F
従って、
Z+EI÷10^(F)→Z
これをスグに思いつかなくても、以下のように考えるとうまくゆきます。
シミュレーション 1
-12.3 が入力されていて、さらに 4 をキー入力する時、その直前の状態は、以下のようになっています。
・ C=5 (5桁が入力されている)
・ I=4
・ F=2 (小数点を含めて、小数点以下2桁)
・ E=-1 (負数入力モード)
・ Z=-12.3
・ 表示: -12.3
この状態で、4 を入力すると、-12.34 となるべきで、Z を更新する計算は以下のようになるべきです;
つまり、
-12.34 = -12.3 - 0.04 = -12.3 - (4÷100)
= -12.3 - (4÷102) = -12.3 - 4÷102 [ 除算は減算より優先される ]
= -12.3 - 4÷10F [ F=2 だから ]
= -12.3 + (-1)x4÷10F
= Z + EI÷10F [ Z=-12.3、E=-1、I=4 だから ]
= Z+EI÷10^(F)
つまり、
Z+EI÷10^(F)→Z
とすれは、良さそうです。
シミュレーション 2
今度は、正数入力モードで、シミュレーションしてみます。
12.3 が入力されていて、さらに 4 をキー入力する時、その直前の状態は以下のようになっています;
・ C=4 (4桁が入力されている)
・ I=4
・ F=2 (小数点を含めて、小数点以下2桁)
・ E=1 (正数入力モード)
・ Z=12.3
・ 表示: 12.3
この状態で 4 を入力すると、12.34 となるべきです。
ここで、上で考えた処理
Z+EI÷10^(F)→Z
をそのまま適用してみます。
Z + EI÷10^(F) = Z + EI÷10F
= 12.3 + (1)x4÷102 = 12.3 + 0.04 = 12.34
正しく更新されることが分かります。
INP Ver 2.0 では、
Z+I÷10^(F)→Z
だったので、I に E を乗算する(以下の赤文字を追加する)だけで、修正できることが分かります。
Z+EI÷10^(F)→Z
シミュレーション 3
次に、整数入力の時は、INP Ver 2.0 では以下の処理で 入力値 Z を更新しています。
10Z+I→Z
正負の整数入力に対応するには、上と同様に
10Z+EI→Z
で良さそうです。
そこで、-123 が入力されていて、4 をキー入力する時、その直前の状態は、
・ C=4 (4桁が入力されている)
・ I=4
・ F=0 (小数点を含めて、小数点以下0桁)
・ E=1 (数入力モード)
・ Z=-123
・ 表示: -123
なので、この状態から -1234 としたいわけです。
-1230 - 4
で良いので、
-123 x 10 - 4 = 10Z -I = 10Z +(-1)I = 10Z + EI
となり、これで良いことが分かります。
以上で、入力値 Z の更新計算をどうすれば良いか決まりました。
他の部分は、キー入力した数を Locate コマンドで追加表示するだけなので、INP Ver 2.0 と同じで良いわけです。
Locate X+C,Y,I
Isz C
INP Ver 2.0 のコードに、追加する部分を赤文字で示します。
If (I≧1 And I≦9) Or K=25
Then
If C<D:Then
If F:Then
Z+EI÷10^(F)→Z
Isz F
Else
10Z+EI→Z
IfEnd
Locate X+C,Y,I
Isz C
IfEnd
意外なことに、正負管理変数 E を2カ所に追加するだけでした。
小数点キーが押された時の処理
INP Ver 2.0 での処理は、以下のものです。
Else If K=26
Then
If F=0:Then
Locate X+C,Y,"."
Isz C:Isz F
IfEnd
入力値 Z の更新処理は行っておらず、単に小数点を表示するだけです。従って、入力値が正か負かは、この処理では無関係。
つまり、この部分は何も変更する必要はありません。
DELキーが押された時の処理
INP Ver 2.0 では、以下のようになっています。
Else If K=34
Then
If C:Then
If F:Then
F-1→F
F⇒Int(10^(F-1)Z)÷10^(F-1)→Z
Else
Int(Z÷10)→Z
IfEnd
C-1→C
Locate X+C,Y,">"
IfEnd
画面表示の変更は必要なさそうです。
赤文字で示した 入力値 Z の更新をどのように変更すれば良いか、考えてみます。
小数から末尾の数字を削除する時の Z の更新は、
F-1→F
F⇒Int(10^(F-1)Z)÷10^(F-1)→Z
となっています。Z が正の小数の時は、これで良いのですが、Z が負の小数の時は、どうなるでしょうか?
実は、そのまま適用でき、変更する必要は無さそうです。
シミュレーション 4
-1.2 と表示されていて、[DEL] キーで末尾を削除する直前は、以下の状態になっています。
・ C=4 (4桁が入力されている)
・ F=2 (小数点を含めて、小数点以下2桁)
・ E=-1 (負数入力モード)
・ Z=-1.2
・ 表示: -1.2
F-1→F
が実行されると、F=1 となります。そして、次の処理は、F が 0 でないので、条件ジャンプ命令 ⇒ の右が実行され、
Int(10^(1-1)Z)÷10^(1-1)→Z
ここで、
Int(10^(F-1)Z)÷10^(F-1) = Int(100Z)÷100 = Int(Z)÷1 = -1
なので、-1→Z となって、Z=-1 となります。表示は、-1. と小数点が残っています。これで正常動作が確認されました。
シミュレーション 5
-1. と表示されている時、さらに [DEL] キーを押して、末尾の小数点の削除を行うことを考えます。その直前の状態は、以下になっています。
・C=3 (3桁が入力されている)
・F=1 (小数点を含めて、小数点以下1桁)
・E=-1 (負数入力モード)
・Z=-1
・ 表示: -1.
ここで、[DEL] キーを押すと、
F-1→F
が実行されて、F=0 となり、次の処理は、F=0 なので、⇒命令の次は飛ばされて実行されません。
F⇒Int(10^(F-1)Z)÷10^(F-1)→Z
つまり、Z は変更されず、Z=-1 のままです。表示は、-1 となり、正常動作が確認されました。
F=0 となったので、整数入力モードに切り替わります。
シミュレーション 6
-1 と表示されている時、さらに [DEL] キーを押して、末尾の 1 を削除する直前の状態は以下のようになっています。
・ C= 2 (3桁表示されている)
・ F=0 (小数点を含めて、小数点以下0桁)
・ E=-1 (負数入力モード)
・ Z=-1
・ 表示: -1
ここで、整数入力モードに切り替わっているので、つまり F=0 なので、Z の更新は、
Int(Z÷10)→Z
で行われます。Int(Z÷10) を計算すると、
Int(Z÷10) = Int(-1÷10) = Int(-0.1) = 0
となるので、Z=0 となります。Int( ) 関数は、Int(-0.1) は、-0 ではなくて、0 となります。
表示は、- となって、負号が残った状態になります。これも正常動作です。この状態で、例えば 2 を入力すると、-2 になる(上のテンキー入力時の処理を参照)ので、まだ負数入力モードのままです。
シミュレーション 7
画面に負号 - のみが表示されている時、さらに [DEL] キーを押す直前の状態は、
・ C=1 (1桁が入力されている)
・ F=0 (小数点を含めて、小数点以下0桁)
・ E=-1 (負数入力モード)
・ Z=0
・ 表示: -
と、このようになっていて、ここで [DEL] キーを押すと、
Int(Z÷10)→Z
が実行され、Int(0÷10) = Int(0) = 0 なので、0→Z となり、Z=0 のままです。
表示は、何もなくなります。実際は、>>>>>>>> と入力ボックス起動直後の状態と同じになります。
このあと、テンキー 2 を入力することを考えてみます。すると、Z=2 となるはずですが、E=-1 のままなので、Z=-2 となってしまいます。というのも、テンキー入力時の処理で、Z の更新処理として、
10Z+EI→Z
が実行されるからです。これはマズイ、バグです。
シミュレーション 7 のように、負号を削除する時は、E の値を -1 から 1 に変更しておく必要があります。負号の削除は最上位桁の削除です。最上位が削除される時は、C=1 で、処理が終わるとき、C-1→C を実行して、C は 0 になります。そして、C=0 の時 E を 1 にすることで、正数入力モードに切り替えられます。
最上位桁を削除して、表示がなにも無くなるのは、入力ボックス起動時と同じ状態で、その時は負数入力モードではなくて、正数入力モードです。従って、最上位削除の時は、削除されるものが負号だろうと、数字だろうと、小数点だろうと、なんでも良いので、E を 1 にしてしまえば良いわけです。
そこで、
C=0⇒1→E
という処理を、DEL キーが押された時の処理の一番最後に追加しておきます。それ以外は、 INP Ver 2.0 と全く同じで変更は必要ありません。
DEL キーが押された時の処理は、以下になります。
Else If K=34
Then
If C:Then
If F:Then
F-1→F
F⇒Int(10^(F-1)Z)÷10~(F-1)→Z
Else
Int(Z÷10)→Z
IfEnd
C-1→C
C=0⇒1→E
Locate X+C,Y,">"
IfEnd
結局、今回追加したのは、上の赤文字の1行のみです。
これで、INP Ver 2.0 から IN Ver 2.0 への拡張ができました。負号管理は、 変数 E を使い回すようにし、負号キーが押された時の処理を追加し、それ以外はわずか3カ所の修正のみで拡張ができました。Ver 2.0 で採用した新しいロジックのおかげで、最小限の修正で済んだわけです。
正負小数入力に対応した入力ボックス IN Ver 2.0 が完成です。ファイル名を IN とします。
INP Ver 2.0 から追加修正した部分を赤文字で示しています。
IN Ver 2.0 の仕様
fx-5800P を普通の関数電卓として使う時、0123 、.123 、 -.0123 と入力すると、そのまま表示されます。そして [EXE] キーを押せば、それぞれ 123 、0.123 、-0.0123 と表示されます。これは、fx-5800P の関数電卓としての入力仕様です。
IN Ver 2.0 でも同様で、例えば 0123、.123、-.0123 と入力すると、そのまま表示されます。そして [EXE] キーで確定すると Z には、それぞれ 123、0.123、-0.0123 と格納され、メインルーチンに戻ります。
さらに、Z の更新とリアルタイム表示を互いに独立させた結果、入力ボックスのプログラム上の桁数制限が無くなりました、fx-5800P で使う場合は、Locate コマンドの制限が1行あたり16桁なので、入力ボックスの桁数は最大16桁に制限されます。入力ボックスの表示開始桁に応じて桁数の最大値は表示行の右端までの桁数なので最大桁数は減ります。従って、最大16桁と言う言い方をします。fx-9860GII で使う場合は、Locate コマンドの制限が1行あたり21桁なので、入力ボックスの桁数は最大21桁に制限されます。こうして、柔軟性と移植性が得られました。
使用方法
メインルーチンから以下の書式で呼び出します。
△→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つの変数以外に、C、I、F、配列変数を用いています。以上9個の変数は、入力ボックスを呼び出すたびに格納されている数値が変更されます。メインルーチンでこれら変数を使っても問題はありませんが、これら8個の変数は入力ボックスを呼び出すたびに変更されても良い変数として使ってください。特に配列変数は、入力ボックス内で87個の領域確保を行い、メインルーチンに戻る前に領域解放を行いますので、それを念頭に置いてメインルーチンで使用してください。
キー入力回数の測定
実際に前回と同じ方法で、INBOX TEST プログラムを使って、今回も入力応答性を実際に調べてみました。
比較対象は以下の2つのバージョン:
- INP Ver 2.0
前回作成したもの
- IN Ver 2.0
今回作成したもの
なお、整数入力と小数入力では、処理を分岐させているので、整数入力と小数入力の2通りで比較測定を行います。
整数入力時の応答性
評価プログラム INBOX TEST を以下のようにします。
ここで、INP Ver 2.0 のプログラム名を INP とし、IN Ver 2.0 のプログラム名を IN とし、入力ボックスの桁数を 10→D により10桁にします。
プログラム名: INBOX TEST
Norm 2
0→Z:0→S:0→T:0→U
Locate 1,1,"1:"
Locate 1,2,"2:"
Locate 1,3,"3:"
Lbl 0
-1→M
Do
Getkey→K
While K=0
K=35⇒1→M
K=36⇒2→M
K=37⇒3→M
Locate 1,4," " [スペース16個]
If M=1:Then
3→X:1→Y:10→D:2→E
Prog "IN12":Z→S
Else If M=2
Then
3→X:2→Y:10→D:2→E
Prog "INP":Z→T
Else If M=3
Then
3→X:3→Y:10→D:2→E
Prog "IN":Z→U
IfEnd:IfEnd
IfEnd
Locate 1,4,"Z="
Locate 3,4,Z
Goto 0
比較は、メニュー2 の INP Ver 2.0、メニュー3 の IN Ver 1.2 で行います。
測定方法は、前回と同じ方法です。
それそれの入力ボックスを開いた状態で、タイマースタートと同時にいずれかのテンキーを押しっぱなしにします。そして10桁目に表示された瞬間にタイマーを止め、時間を読み取ります。
表1 整数入力時の応答性比較
プログラムバージョン | 10桁入力所要時間 | 1秒あたりの入力回数 |
IN Ver 1.2 整数入力 | 3.6秒 | 2.7回 |
INP Ver 2.0 整数入力 | 1.6秒 | 6.2回 |
IN Ver 2.0 整数入力 | 1.6秒 | 6.2回 |
参考までに、以前 INPI Ver 1.2 と同じロジックで作った IN Ver 1.2 の測定結果も併せて掲載しました。このバージョンは入力にストレスを感じるほど応答性が悪く、正直言って公開できるレベルではありませんでした。
・ IN Ver 2.0 は、INP Ver 2.0 と差が認められず、同様の応答性能であることが分かりました。
実際にかなり速く入力してもキーの取りこぼしが無く、十分満足できる応答性になっていると思います。
小数入力時の応答性
INBOX TEST では、D→12 として入力ボックスの桁数を12桁に設定します。
INP Ver 2.0 (メニュー2)では、0. と2桁入力しておき、タイマースタートと同時に、いずれかのテンキーを押しっぱなしにし、12桁目(押しっぱなしで10桁目)が表示されたと同時にタイマーを止め、時間を読み取ります。
IN Ver 2.0 (メニュー3)では、-. と2桁入力しておき、タイマースタートと同時に、いずれかのテンキーを押しっぱなしにし、12桁目(押しっぱなしで10桁目)が表示されたと同時にタイマーを止め、時間を読み取ります。
そこで、INBOX TEST を以下のように、赤文字部分を変更します。
プログラム名: INBOX TEST
Norm 2
0→Z:0→S:0→T:0→U
Locate 1,1,"1:"
Locate 1,2,"2:"
Locate 1,3,"3:"
Lbl 0
-1→M
Do
Getkey→K
While K=0
K=35⇒1→M
K=36⇒2→M
K=37⇒3→M
Locate 1,4," " [スペース16個]
If M=1:Then
3→X:1→Y:10→D:2→E
Prog "INPI":Z→S
Else If M=2
Then
3→X:2→Y:12→D:2→E
Prog "INP":Z→T
Else If M=3
Then
3→X:3→Y:12→D:2→E
Prog "IN":Z→U
IfEnd:IfEnd
IfEnd
Locate 1,4,"Z="
Locate 3,4,Z
Goto 0
表2 小数入力時の応答性比較
プログラムバージョン | 10桁入力所要時間 | 1秒あたりの入力回数 |
INP Ver 2.0 小数入力 | 1.8秒 | 5.5回 |
IN Ver 2.0 小数入力 | 1.8秒 | 5.5回 |
・ IN Ver 2.0 の小数入力は、INP Ver 2.0 と差が見られず、同等の応答性能があることが分かりました。
実際に入力してみると、かなり速くキーを打っても、取りこぼしは発生せず、十分実用に耐えると思います。
Lbl/Goto ループと Do/LpWhile ループ
前回の INP Ver 2.0 と同様に、IN Ver 2.0 でのループの影響を調べて見ました。
キー入力中の処理は Do ~ LpWhile K≠47 ループ内に記述していますが、これを Lbl 0 ~ K≠47⇒Goto 0 ループに書き直して、応答速度の比較をしました。
表3 IN Ver 2.0 のループの違いによる応答性への影響比較
入力モード | ループ種別 | 10桁入力所用時間 | 1秒あたりの入力回数 |
整数入力 | Lbl/Goto | 2.0秒 | 4.7回 |
Do/LpWhile | 1.6秒 | 6.2回 | |
小数入力 | Lbl/Goto | 2.3秒 | 4.3回 |
Do/LpWhile | 1.8秒 | 5.5回 |
Lbl/Goto ループを使った時の応答性低下は、整数入力で25%、分数入力で 27% なので、Do ループを用いた高速化の効果が明かに現れています。INP Ver 2.0 では Lbl/Goto による応答性低下は 15~16% だったので、IN Ver 2.0 の方がより顕著です。制御構造がより複雑になると、Do ループに対して Lbl/Goto ループの処理速度の低下がより顕著になることが分かります。
まとめ
Chpater 6 では、以下の3種類の入力ボックスの高速化を図り、十分実用に使える Ver 2.0 ができました。
1. INPI Ver 2.0
0以上の整数入力のみに対応。0以上の整数のみの入力を行わせたいプログラムで使うことを想定していて、負数や小数入力のエラーチェックが不要になります。
2. INP Ver 2.0
0以上の整数/小数入力に対応。0以上の小数を含んだ数値みの入力を行わせたいプログラムで使うことを想定していて、負数入力のエラーチェックが不要になります。
3. IN Ver 2.0
正負小数/整数の入力に対応。最も汎用性のある入力ボックス。
プログラム高速化の指針
1) 比較演算、論理演算、配列変数の使用を極力控えること
2) 条件分岐には、以下を指針とする
- If A≠0 よりも If A が高速
- If A=B:Then [1つの処理]:IfEnd よりも A=B⇒[1つの処理] の方が高速
3) 制御構造※ が複雑な(プログラムでは、Lbl/Goto ループでなくて、Do ループや While ループを使う
4) 上記3点を実現するための最適なロジックを考える
※ 制御構造とは、プログラムを構成する命令やコマンドを実行する順序のことです。プログラムは通常上から下へ実行され、If 文や⇒命令、Dsz/Isz命令 による条件分岐、Goto/Lbl などの無条件分岐や Do/While/For 文などのループ処理、そして Prog コマンド によるサブルーチン呼び出しがある時だけ、この原則を破ってすぐ下の処理ではなくて、別のところへジャンプします。分岐やループの処理の無いプログラムは最も単純な制御構造を持っています。分岐やループ、サブルーチン呼び出しが多くなるほど制御構造が複雑になります。
今回の高速化検討では、ロジックの見直しがうまく働いたと思います。結果的にストレスのない入力応答性が得られたので、当面これで良いことにします。さらに高速化可能なロジックがあれば、将来バージョンアップするかもをしれません。
今回は、プログラムライブラリに入力ボックス2.0 として公開します。
入力ボックス 2.0 が高速化したため、チョットした問題が出てきました。次回は、その対応について紹介します。
つづく...
⇒ Casio Basic入門36 / 目次
応援クリックをお願いします。励みになるので...
keywords: fx-5800P、CasioBasic、入力ボックス, プログラミング入門、プログラム関数電卓
リンク集 | ブログ内マップ
- 関連記事
-
- Casio Basic入門37 2015/01/23
- Casio Basic入門36 2015/01/15
- Casio Basic入門35 2015/01/09
- Casio Basic入門10 2015/01/07
- Casio Basic入門34 2015/01/02