Casio Basic入門18

Casio Basic入門
<目次>

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

最終:
2015/01/17


 4. CasioBasicを使ってみる(続き)

2014年12月22日: テンキー入力判定の If 文の条件式の記述の修正、および必要なコードの追加の説明の抜けがありましたので、修正、追加しました。
2015年1月17日:DEL キーを押した時のシミュレーションで説明をプログラムに則して分かり易く変更しました



Chapter 3

◆ Chapter 3 の目標: 自由自在な入力をする

前回: Casio Basic入門17


「入力ボックス」プログラムの動作確認のためのメインプルーチン CH3M を変更しました。

プログラム名 CH3M

Locate 1,1,"0:"

While 1

-1→M
Do
Getkey→K
K=25⇒0→M
LpWhile K=0

If M=0:Then
3→X:1→Y:10→D:2→E
    (パラメータ D と E を追加)
Prog "CH3-1S"
Z→A

IfEnd

If M=0: Then
Locate 3,2,"              "
    (スペース14個)
Locate 3,2,A

IfEnd

WhileEnd


================


表示形式へ対応した「入力ボックス」プログラム CH3-1S を作りました。

プログラム名 CH3-1S

EngOff:Norm 2
0→Z:D>10⇒10→D
37→DimZ
1→Z[35]:2→Z[36]
3→Z[37]:4→Z[21]
5→Z[22]:6→Z[23]
7→Z[31]:8→Z[32]
9→Z[33]:0→Z[25]
If E=2:Then
Locate 6,4,"<EXE>:ENTER"
Else If E=1
Then
Locate 15,4,"►t"
    ([FUNCTION] [7] [3] [4])
Locate 16,4,"E"
IfEnd;IfEnd

For 1→I To D
Locate X+I-1,Y,">"
Next


0→C
    (桁数カウンタの初期化)
Lbl 0


Do
Getkey→K
LpWhile K=0

If (K≧21 And K≦23) Or K=25 Or (K≧31 And K≦33) Or (K≧35 And K≦37)
Then
If C<D:Then
10Z+Z[K]→Z
Locate X,Y,Z
Isz C         [2015/01/17 修正]
IfEnd
IfEnd

K≠47⇒Goto 0

If E=2:Then
Locate 6,4,"           "
    (スペース11個)
Else If E=1
Then
Locate 15,4,"  "
    (スペース2個)
IfEnd:IfEnd

0→DimZ
Return



「入力ボックス」プログラムの構造

[初期化処理]

[キーコードからキーの数への変換]

Lbl 0

        [キーコード取得]

        [戻り値 Z の算出と表示]

K≠47⇒Goto 0

[後処理]

Return


現状では、入力はできても、打ち間違いの修正ができません。そこで、[DEL] キーを使った削除機能を追加します。



Chapter 3-2
入力ボックス - 末尾文字の削除機能を追加する

入力ミスや入力修正に対応するために、[DEL] キーを押すと末尾の1桁を削除する機能を追加します。

[DEL] キーは、キーコードが34なので、キーコードが34の時の処理を追加するにあたり、枠組み(構造)を先に作っておきます。


EngOff:Norm 2
0→Z:D>10⇒10→D
37→DimZ
1→Z[35]:2→Z[36]
3→Z[37]:4→Z[21]
5→Z[22]:6→Z[23]
7→Z[31]:8→Z[32]
9→Z[33]:0→Z[25]
If E=2:Then
Locate 6,4,"<EXE>:ENTER"
Else If E=1
Then
Locate 15,4,"►t"
    ([FUNCTION] [7] [3] [4])
Locate 16,4,"E"
IfEnd;IfEnd

For 1→I To D
Locate X+I-1,Y,">"
Next


0→C
    (桁数カウンタの初期化)
Lbl 0


Do
Getkey→K
LpWhile K=0

If (K≧21 And K≦23) Or K=25 Or (K≧31 And K≦33) Or (K≧35 And K≦37)
Then
If C<D:Then
10Z+Z[K]→Z
Locate X,Y,Z
Isz C
IfEnd

Else If K=34
Then
[末尾文字の削除機能のプログラムコード]
IfEnd

IfEnd

K≠47⇒Goto 0

If E=2:Then
Locate 6,4,"           "
    (スペース11個)
Else If E=1
Then
Locate 15,4,"  "
    (スペース2個)
IfEnd:IfEnd

0→DimZ
Return



ここでは、Else If と言う記法を使って、

If [条件1]: Then
[処理1]

Else If [条件2]
Then

[処理2]

IfEnd
IfEnd


このような複数条件分岐の構造を利用しています。

この記法の優れているのは、[条件1] と [条件2] の両方を判定することがなく、[条件1] が真なら [条件2] の判定を行なわないので、プログラム動作の効率が上がる点にあります。

※ CasioBasicコマンドリファレンス
      - If


では、[DEL」 キーを押した時の具体的処理を作りましょう。

Int(Z÷10)→Z
C-1→C
Locate X+C,Y,">"


シンプルですね。


1) 戻り値 Z の末尾(一番右)の数を消した Z の値を計算
  Int(Z÷10)→Z

2) 桁数カウンタC1つ減らし、
  C-1→C

3) 削除された桁に 入力範囲を示す ">" を表示する
  Locate X+C,Y,">"


細かい動作をコードを1行づつ追いかけながらシミュレーションして確認すると...
[2015/01/17 修正] 以下のシミュレーションで カウンタCが示す桁 の説明を Locate X+C,Y,Z の X+C が示す桁の説明に変更し誤りを修正。


削除前
桁数カウンタ:C=5
Z=12345
1 2 3 4 5 > > > > >




  X+C が示す
桁数カウンタCには、現在の桁数が入っています。この "5" が削除されることになります。
X+C は次に入力する桁を示しています。この状態で、[EXE] キーが押された時は、

1) Z の更新: Int(Z÷10)→Z
桁数カウンタ:C=5、Z=1234 に更新
1 2 3 4 5 > > > > >




  X+C が示す桁
12345 の末尾の "5" を削除すると、1234 になるので、Z を更新する必要があります。
12345÷10 とすると 1234.5 になり、整数部を取り出せば 1234 になります。


2) 桁数カウンタを1つ戻す: C-1→C
桁数カウンタ:C=4、Z=1234
1 2 3 4 5 > > > > >



  X+C が示す桁
Dsz C ではなく C-1→C とする必要があります。
削除を続けて、1文字も入力されていない状態になれば、C=0 となります。ここで Dsz C を実行すると次のコマンドをスキップするので問題です。さて、この状態では、5桁目の "5" の表示が残っています。


4) 削除された桁に ">" を表示: Locate X+C,Y,">"
桁数カウンタ:C=4、Z=1234
1 2 3 4 > > > > > >



  X+C が示す桁
">"を表示する桁は、X+C で、"5" が表示されている桁です。

これで、表示が正しくなります。


なお、桁数カウンタC が0の時、つまり数字が全く入力されていない状態で、削除を行うと表示がおかしくなります。
そこで、C=0 の時には削除動作を行えないように制限をかけます。言い換えれば、C>0 つまり C が0でない時だけ、上の動作を行うように、プログラムコードを書きます。

なお、この制限をかけると、C は負の数になることが無いので、以下のように If C:Then と言う表記で問題ありません。

[削除動作]
If C:Then
Int(Z÷10)→Z
C-1→C
Locate X+C,Y,">"
IfEnd



これで、削除機能が追加されました。プログラム CH3-1S を修正します。変更部分を赤文字で示します。

プログラム名 CH3-1S

EngOff:Norm 2
0→Z:D>10⇒10→D
37→DimZ
1→Z[35]:2→Z[36]
3→Z[37]:4→Z[21]
5→Z[22]:6→Z[23]
7→Z[31]:8→Z[32]
9→Z[33]:0→Z[25]
If E=2:Then
Locate 6,4,"<EXE>:ENTER"
Else If E=1
Then
Locate 15,4,"►t"
    ([FUNCTION] [7] [3] [4])
Locate 16,4,"E"
IfEnd;IfEnd

For 1→I To D
Locate X+I-1,Y,">"
Next


0→C
    (桁数カウンタの初期化)
Lbl 0


Do
Getkey→K
LpWhile K=0

If (K≧21 And K≦23) Or K=25 Or (K≧31 And K≦33) Or (K≧35 And K≦37)
Then
If C<D:Then
10Z+Z[K]→Z
Locate X,Y,Z
Isz C
IfEnd

Else If K=34
Then
If C:Then
Int(Z÷10)→Z
C-1→C
Locate X+C,Y,">"
IfEnd


IfEnd:IfEnd

K≠47⇒Goto 0

If E=2:Then
Locate 6,4,"           "
    (スペース11個)
Else If E=1
Then
Locate 15,4,"  "
    (スペース2個)
IfEnd:IfEnd

0→DimZ
Return



「入力ボックス」プログラムの構造

[初期化処理]

[キーコードからキーの数への変換]

Lbl 0

        [キーコード取得]

        [戻り値 Z の算出と表示]

K≠47⇒Goto 0

[後処理]

Return


今回の機能追加は、[戻り値 Z の算出と表示] の中なので、プログラム構造は変わりません。



それでは、プログラム CH3M を走らせて、動作確認をしてみましょう。

1つ、想定外の動作になることがあります。バグです。分かりますか?


プログラムの動作チェック

入力モードに入り、最初に 0(ゼロ)を入力した後 1、2、3 と入力してみます。表示は、0123 ではなくて、123 となります。

ここで、[EXE] キーで入力を確定すると 2行目に 123 と表示されます。戻り値 Z が123 になっていることが分かります。Z の値には問題ありません。


10Z+Z[K]→Z
Locate X,Y,Z

の動作に注目してみます(Zの初期値は0です)。

最初に 0 を入力すると、上の計算結果、Z には 0 が入ります。
次に 1 を入力すると、Z には 1 が入ります。
続いて 2 を入力すると、Z は 12。
さらに 3 を入力すると、Zは 123。
問題ありません。

ところが、Locate X,Y,Z に注目すると、
最初に 0 を入力すると Z =0 なので、0 が表示されます。
次に、1 を入力すると、Z=1 なので、1 と表示され、01 とは表示されません。
続いて 2 を入力すると、Z=12 なので、12 と表示され、
さらに 3 を入力すると、Z=123 なので、123 と表示されます。

ここまでは、プログラムの内部仕様上も問題なく、プログラム実行上も問題ありません


もう一度入力モードにして、0、1、2、3 と順に入力してみます。
次に、[DEL]キーを1回押します。

あれっ?表示上何も変化がありません。削除動作に失敗しているようです!
このまま、[EXE] キーで確定すると、2行目には 12 と表示されます。
Z は正しく、その末尾の数字が削除され 12 になっているのに、画面表示上では削除動作に失敗しています。



プログラムのデバッグ

原因を調べるために、デバッグを行ってみます。デバッグでは、桁数カウンタ C戻り値 Z の変化を確認しようと思います。

そこで、入力ボックス CH3-1S で、

K≠47⇒Goto 0

の上に、次のデバッグ用コード、4行を追加してみます。

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

これで、メインプログラム CH3M を走らせてデバッグを行いましょう。

入力モードに入って、0 を入力すると、以下のような画面表示になります。

================
0:0>>>>>>>>>

1
0
================


C=1、Z=0 になっていて、これは内部動作上正常です。

次に 1 を入力すると、以下のようになります。

================
0:1>>>>>>>>>

2
1
================


C=2、Z=1 になっています。Z=1 は正常ですが、C=2 は異常ですね。
C=1 となっているべきです。従って、テンキー入力の処理のどこかで、この異常が発生してることが分かります。

続いて [DEL]キーを押してみましょう。

================
0:1>>>>>>>>>

1
0
================


C=1、Z=0 になっています。
C=1 は正常です。
Z は、1 から削除動作で0になるべきなので、これも正常動作です。


つまり、削除動作は正常に機能していると考えられます。
ここで、以下のように推測できます。

0 に続いて 1 を入力すると、桁数カウンタC の処理で問題が発生し、1 となるべきが 2 になっている。

別のケースで調べてみると、以下が分かります。

・1文字目が 0 の時、1以外のテンキーを押しても、同じ症状が確認される。
・1文字目が 0 以外の時は、この症状が発生しない。


従って、1文字目が 0 の時、次にテンキーを押した時に、桁数カウンタ C の処理に問題がある ようです。


プログラムの改善(デバッグ)

つまり、今回のバグは1文字目の 0 を入力した時、次のテンキー入力で、C を増やしてはいけないのに、増やしていることが問題です。通常は、テンキー入力時にCを1つ増やすのは正常ですが、1文字目が 0 の時は次のテンキー入力時に例外的に Isz C をスキップして実行しない例外処理が必要だと分かります。

そこで、Isz C を実行する前に、条件判定をして、Isz C を実行するかしないか...と言う理屈で例外処理を考えてみます。


2文字目のテンキー入力の直前は、C=1 になっています。
そして、1文字目 0 であるかどうかが分ければ、

「C=1」 かつ 「1文字目が 0」 の時 Isz C を実行しない。それ以外は Isz C を実行する 

といった処理をすれば良いことになります。

ここで、1文字目のキーコードを 変数 A に代入しておくとします。
[0]キーのキーコードは25です。

すると、

C=1 かつ A=25 の時 Isz C を実行せず、それ以外は Isz C を実行する

これを、論理演算コマンドを使って表現すれば、

C=1 And A=25 ならば Isz C を実行せず、それ以外は Isz C を実行する

If 文を使って表現すると、

If C=1 And A=25
Then
Else
Isz C
IfEnd


となります。

Then の後何も処理をせず、Else の後だけ処理を行うような If 文を使うのは効率が悪い気がします。プログラムの実行速度が無駄に遅くなることだけは確実です。それは避けたいと思うのです。

そこで、

Not (C=1 And A=25) ならば Isz C を実行する

としても良いので、

If Not (C=1 And A=25)
Then
Isz C
IfEnd


とスッキリします。

さらに、条件ジャンプ命令:⇒ を使えば、さらにスッキリします。

Not (C=1 And A=25)⇒Isz C


さて、ここで ド・モルガンの法則 を思い出しましょう。

Not (X And Y) = (Not X) Or (Not Y)

でした(以下のコマンドリファレンス、または Casio Basic入門16 を参照 )。

※ CasioBasicコマンドリファレンス
      - 論理演算: Or / And /Not


ド・モルガンの法則 を使うと、

Not (C=1 And A=25)

は、


C≠1 Or A≠0


となるので、

C≠1 Or A≠25⇒Isz C

と、非常にスッキリとしたコードになりました。


これまで作ってきたプログラムで、テンキー入力時の処理にある

Isz C



C≠1 And A≠25⇒Isz C

に置き換えれば良いことがわかります。


最後に、1文字目のキーコードを変数A に入れておくには、テンキー入力時の処理の最後で、C=1 の時に K→A とします。

C=1⇒K→A


テンキー入力時の処理部分の改善

If (K≧21 And K≦23) Or K=25 Or (K≧21 And K≦23) Or (K≧31 And K≦33) Or (K≧35 And K≦37)
Then
If C<D:Then
10Z+Z[K]→Z
Locate X,Y,Z
C≠1 Or A≠25⇒Isz C
C=1⇒K→A
IfEnd


(追加部分を赤文字で示した)


これで、例外処理の実装が終わり、期待通りの動作をするようになりました。

デバッグ用のコード(4行)を削除しておきましょう。



※ 局所変数 / 大域変数 と言う用語を概念として使ったが、大きな混乱と誤解を招きそうなので、以下の記述を大幅に変更した [2014/11/08]

変数の扱い方について: 使い捨て変数 と 予約変数

Casio Basicで使う変数は、全てのプログラムで共通して使えます。具体的に言えば、例えば変数 K をメインルーチンとサブルーチンの両方で使っている場合は、メインルーチンとサブルーチンのどちらかでその値を変更すると、もう一方での値も同時に変更されます。

サブルーチンを使う場合は、「変数の値がいつ・どこで変更されるのか」を よく考えてプログラムを作る必要があります。

例えば変数 K に着目してみます。変数 K は、メインルーチンと「入力ボックス」の両方でキーコードを格納する変数として利用しています。しかし変数 K が勝手に書き換えられても問題は発生していません。変数 K を明確に狭い範囲のみで使うように留意してプログラムを書いたことがポイントです。


メインルーチン CH3M では、 [メニュー番号取得]  ブロックで、Getkey→K を実行し、そこで変数 K を使っています。このブロック内では、取得したキーコードに従って、メニュー変数 M にメニュー番号を入れています。このブロックは、メニュー番号を取得する機能として完結しており、メニュー番号を取得できれば、その後で変数Kが変化しても全く影響がありません。変数 は、いわば使い捨ての変数です。

一方、メニュー番号 はメインプログラム全体で、正しい値になっていることを保証する必要があります。変数 M は、プログラムにより予約された変数です。メインルーチンで予約された変数 をサブルーチンで使うと、M の値が保証されず、プログラム動作に影響を与えます。

変数を使う時には、それが使い捨て変数なのか予約変数なのかを、意識する必要があります。


では、「入力ボックス」と共用する変数 X, Y, Z, D, E, Z に着目します。

3→X:1→Y:10→D:2→E
Prog "CH3-1S"
Z→A


変数 X, Y, D, E は、「入力ボックス」サブルーチン CH3-1S の動作を決める変数なので、直前で値を設定しています。サブルーチンが動作して、メインルーチンに戻ってくれば、変数 X, Y, D, E は用済みです。これらの値が変更されても問題がありません。変数 X, Y, D, E は使い捨て変数として使えます。

「入力ボックス」サブルーチンは、入力値を変数 Z に入れてから終了します。次に「入力ボックス」が使われると、Z の値は変わってしまうので、「入力ボックス」の直後で Z→A を実行して、入力値をメインルーチンの予約変数 A に代入する必要があります。変数 Z はメインルーチンの使い捨て変数として使うことができます。

このように、メインルーチンとサブルーチンで共有する変数、メインルーチンの予約変数使い捨て変数意識して使い分けることが大切です。

プログラム名 CH3M

Locate 1,1,"0:"

While 1

-1→M
Do
Getkey→K
K=25⇒0→M
LpWhile K=0


If M=0:Then
3→X:1→Y:10→D:2→E
    (パラメータ D と E を追加)
Prog "CH3-1S"
Z→A

IfEnd

If M=0: Then
Locate 3,2,"              "
    (スペース14個)
Locate 3,2,A

IfEnd

WhileEnd


==========


最後に、変数 A に着目してみます。

メインルーチンでは、変数 A をメニュー番号0の項目で得た入力値を格納するための予約変数として使っています。
一方で、「入力ボックス」では、変数 A を「1文字目のキーコード」を格納する変数として使っています。

メインルーチンでの変数 A はメインルーチン全体で使うものだから、もし変更されては誤動作します。つまりメインルーチンと「入力ボックス」で変数Aを共有してはいけません。

今のところ、CH3M を実行しても誤動作しないのは、運が良いだけです。と言うのも、メニューが1つしかなく、戻り値から 変数A を取得(Z→A)した後、次の「入力ボックス」使用の前に A の値を表示しているので、問題が表面化していないだけです。

そこで、2つのプログラムで競合する変数 A の取り扱いをどうするか? です。

今回のプログラムだけでなく、一般にプログラムを作る際には 変数A を予約変数として比較的よく使うのではないか...と思います。そこでメインルーチンで変数 A を使用禁止にするのではなく、「入力ボックス」側でも変数 A を使いつつ問題が発生しないようにしてみます。その方が、「入力ボックス」の汎用性が向上すると思います。

その対策として、「入力ボックス」プログラムの初期化処理で、変数 A を一旦別の変数にコピーしておき、終了処理で、コピーから変数 A を元に戻してから、メインルーチンへ戻るようします。

ここで、配列変数に着目します。配列変数 Z[ ] は、37個確保していますが、そのうち10個しか使っていません。例えば Z[1] は未使用です。そこで、変数 A のコピーを Z[1] にとっておき、終了処理で 変数A を復元します。具体的には、「入力ボックス」の初期化処理で A→Z[1] としておき、終了処理で Z[1]→A とします。


配列変数の仕様による制限

なぜ、最初から 変数 A でなくで Z[1] を使わないか?という疑問が当然でてきます。

配列変数にはアクセス速度(読み書き速度)が非常に遅いと言う問題があり、入力モードのループの中では配列変数を極力使いたくない事情があります。

そこで、初期化処理と終了処理なら配列変数を使って多少時間がかかっても良いと考え、Z[1] に A のコピーを取っておく作戦を採用しました。こうすれば、入力ボックスで、入力を確定する間の Lbl / Goto ループで A を頻繁に使っても、処理速度への影響を最小限に抑えられます。

他の変数についても配列変数にコピーして使えば良いかと言えば、それにも制限があります。初期化処理でコピーに使う配列変数
が多くなれば、それだけ初期化処理に時間がかかります。その結果、入力モードに入って入力範囲を表示するまでの待ち時間が長くなってしまうので、限度があります。

現状の10個のテンキーのキーコード変換を配列変数で行う処理だけでも、それなりの待ち時間が発生しているので、このコピー作戦を無制限に使うのは良くありません。


これまで、幾つもの換算プログラムを実際に作った経験では、「入力プログラム」で使う変数が上記のもので、それほど困っていません。


Casio Basic プログラミングでの変数の扱い方

上で紹介した、使い捨て変数と予約変数の概念を意識すると、サブルーチンを使いこなせます。

1)メインルーチンで使う変数を2つに分けて考える
 ・予約変数: メインルーチン全体で使う変数で、勝手に変更されては困るもの
 ・使い捨て変数: メインルーチンのブロック内で一時的に使う変数で、ブロック外で変更されても気にならないもの

2)メインルーチンの予約変数には、「入力ボックス」で使っている変数と重複して使わない



[2014年12月23日 追記]

最後に、入力を確定した後に、入力範囲をしめす>>>>> を消去する必要があります。
そこで、現在の桁 C から入力範囲の最大位置までを " " (空白)で上書きすることにします。
以下のコードを、ループの終わり K≠47⇒Goto 0 の直後に追加します。

For 1→I To D-C
Locate X+C+1,Y," "
Next




これで、「入力ボックス」の完成です。プログラム名を 
INPI に変更します。INPI は、0と正の整数入力専用です。


入力ボックス(0と正の整数対応版)INPI Ver 1.0
EngOff:Norm 2
0→Z:D>10⇒10→D
37→DimZ
A→Z[1]
1→Z[35]:2→Z[36]
3→Z[37]:4→Z[21]
5→Z[22]:6→Z[23]
7→Z[31]:8→Z[32]
9→Z[33]:0→Z[25]
If E=2:Then
Locate 6,4,"<EXE>:ENTER"
Else If E=1
Then
Locate 15,4,"►t"
    ([FUNCTION] [7] [3] [4])
Locate 16,4,"E"
IfEnd;IfEnd

For 1→I To D
Locate X+I-1,Y,">"
Next


0→C
    (桁数カウンタの初期化)
Lbl 0


Do
Getkey→K
LpWhile K=0

If (K≧21 And K≦23) Or K=25 Or (K≧31 And K≦33) Or (K≧35 And K≦37)
Then
If C<D:Then
10Z+Z[K]→Z
Locate X,Y,Z
C≠1 Or A≠25⇒Isz C
C=1⇒K→A

IfEnd

Else If K=34
Then
If C:Then
Int(Z÷10)→Z
C-1→C
Locate X+C,Y,">"
IfEnd
IfEnd:IfEnd

K≠47⇒Goto 0

For 1→I To D-C       (入力範囲 < を消去)
Locate X+C+I-1,Y," "  (スペース1個)
Next
If E=2:Then
Locate 6,4,"           "
    (スペース11個)
Else If E=1
Then
Locate 15,4,"  "
    (スペース2個)
IfEnd:IfEnd

Z[1]→A
0→DimZ
Return


(今回追加した部分を赤文字で示します)



「入力ボックス」プログラムの構造

[初期化処理]

[キーコードからキーの数への変換]

Lbl 0

        [キーコード取得]

        [戻り値 Z の算出と表示]

K≠47⇒Goto 0

[後処理]

Return



「入力ボックス」プログラムで使う変数

X: 入力開始位置のX座標(桁)
Y: 入力開始位置のY座標(行)
Z: 戻り値(確定後の入力値)
C: 桁数カウンタ
D: 入力範囲の桁数
E: 確定ガイドのフラグ
K: 取得するキーコード
I: For文のインデックス



私は、ここで完成したプログラムを、プログラム名 INPI として、様々な換算プログラムで利用しています。

実は、他に2つの「入力ボックス」を作って、使っています。

1) 入力ボックス INPI0以上の整数入力版INput-box for Positive Integer)
2) 入力ボックス INP0以上の小数入力対応版INput-box for Positive number)
3) 入力ボックス IN負の小数入力対応版INput-box)

例えば、0か自然数対応版 (INPI)を使えば、少数や負の数を入力できないので、メインルーチンでの余計な入力値管理(0か自然数数のみの入力をさせる管理)が不要になるメリットがあります。

0以上の小数入力対応版(INP)でも同様にメインルーチンで負の数の管理が不要になります。適切なバージョンを選択して使うメリットは、ここにあります。



[2014/12/31 追記]

INPI の高速化を行なった後、INPIN を作ります。

 ⇒ Casio Basic入門32 - プログラムを速くする
 ⇒ fx-5800P プログラムライブラリ - 入力ボックス




つづく...


CasioBasic入門19 / 目次




応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ



カシオプログラム関数電卓 FX-5800P-N カシオプログラム関数電卓 FX-5800P-N
(2006/09/22)
CASIO(カシオ)

商品詳細を見る



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

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

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

コメントの投稿

非公開コメント

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

やす (Krtyski)

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


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

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

おもしろい・役に立つならクリックしてください。励みになります。

人気ブログランキングへ


FC2ブログランキングへ


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

RSSリンクの表示
最新トラックバック
ブロとも申請フォーム

この人とブロともになる

QRコード
QR