Casio Basic: ⇒命令(条件ジャンプ)
Casio Basic
コマンドリファレンス
Casio fx-5800P、fx-9860GII、fx-CG20、fx-CG50 で確認をとっています。Casio fx-FD10 Pro では互換性はあると考えられますが、実機で確認していないので「可能性」としてご覧ください。
fx-5800P / fx-9860GII / fx-CG20 / fx-CG50
⇒命令 (条件ジャンプ)
◆概 要: 条件ジャンプを行う。
◆書 式: [条件]⇒[処理]
⇒命令は、CasioBasic特有の命令。
[条件] が「真」の場合は[処理]を実行、そうでない場合([条件]が「偽」の場合)は[処理]を飛ばして(ジャンプして)、次へ進む。
[条件]⇒[処理]まで は、改行なしで1行に書かないとエラーとなる。さらに⇒の前後にスペースが入ると、これもエラーになる。
If 文との類似性
[条件]⇒[処理]
は、
If [条件]
Then [処理]
IfEnd
と同等です。
複数条件分岐への応用
CasioBasicには、switch~case (C言語)やSelect~Case (VisualBasic)のような多条件分岐コマンドが用意されていません。
しかし、⇒命令を工夫すると、複数条件分岐処理ができます。この記法の利点は、Fall Through (フォールスルー)が実現できる点にあります。
[2014/02/23 補足] If Else と言う記法を使えば、複数条件分岐をスッキリと書くことができます。
<CasioBasicコマンドリファレンス If文 参照>
Lbl 0
"N"?→N
N=1⇒Goto 1
N=2⇒Goto 2
N=3⇒Goto 3
N=4⇒Goto 4
Goto Z
Lbl 1
[処理1] 例えば Locate 1,2,"ONE " (スペース2個)
(Goto 0)
Lbl 2
[処理2] 例えば Locate 1,2,"TWO " (スペース2個)
(Goto 0)
Lbl 3
[処理3] 例えば Locate 1,2,"THREE" (スペースなし)
(Goto 0)
Lbl 4
[処理4] 例えば Locate 1,2,"FOUR " (スペース1個)
(Goto 0)
Lbl Z
この記法には、重要な注意点があります。
※ 重要な注意点: 赤文字で示した Goto Z と Lbl Z は絶対に省略しないこと!
※ 応用上の注意点: (Goto 0) は省略可能です。但し必要な時のみ省略すること。
この記法には、Goto を正しく使うことが条件で、1つ利点があります。青文字出示した (Goto 0) を省略すると Else If の記法では実現しない機能が得られます(Fall Through、フォールスルーが可能になります)。
(Goto 0) を省略すると、下のラベルの処理を連続して行えます。ラベルの並び順を工夫することで処理の効率化が可能になります。
柔軟で有名なC言語での以下のような記法と同等なことがCasioBasicで実現できるわけです。そのため、敢えて Goto を使った記法を紹介しています。
switch (E) {
case 4:
[処理4]
break;
case 3:
[処理3] // フォールスルー
case 2:
[処理2]
break;
case 1:
[処理1]
break;
}
ここで、break; は Goto 0 に相当します。Eが3の時、case 3: へジャンプし、ここには break; が無いので、続いて case 2 の処理を実行します。
これを CasioBasicの上の記法を用いると以下のようになります。
Lbl 0
E=4⇒Goto 4
E=3⇒Goto 3
E=2⇒Goto 2
E=1⇒Goto 1
Goto Z
Lbl 4
[処理4]
Goto 0
Lbl 3
[処理3]
Lbl 2
[処理2]
Goto 0
Lbl 1
[処理1]
Goto 0
Lbl Z
[2014/12/14 修正: (Goto Z) を (Goto 0) に変更]
If文と⇒命令の処理速度比較
If ~Then~IfEndを使った以下のプログラムの処理時間は21秒。
0→L:0→H
1000→C
Lbl 0
Ic C>500
Then Isz H
IfEnd
Dsz C
Goto 0
"DONE"
⇒命令を使った以下のプログラムの処理時間は20秒
0→L:0→H
1000→C
Lbl 0
C>500⇒Isz H
Dsz C
Goto 0
"DONE"
⇒命令は If 文よりも僅かに処理速度が速く、表記が分かりやすいので利用価値の高い命令です。
一方、Elseを用いたIf文では、事情が少し異なります。
If ~Then~Else~IfEndを使った以下のプログラムの処理時間は28.5秒。
0→L:0→H
1000→C
Lbl 0
Ic C>500
Then Isz H
Else Isz L
IfEnd
Dsz C
Goto 0
"DONE"
⇒命令を使った以下のプログラムの処理時間は32秒
0→L:0→H
1000→C
Lbl 0
C>500⇒Isz H
C≦500≦Isz L
Dsz C
Goto 0
"DONE"
従って、2者択一の条件分岐は、If文を使った方が速いことが分かります。
fx-5800P の場合、処理速度の絶対値が変動するようなので、相対比較しか出来ません。
応援クリックをお願いします。励みになるので...
コマンドリファレンス
Casio fx-5800P、fx-9860GII、fx-CG20、fx-CG50 で確認をとっています。Casio fx-FD10 Pro では互換性はあると考えられますが、実機で確認していないので「可能性」としてご覧ください。
最終更新 2017/01/03
fx-5800P / fx-9860GII / fx-CG20 / fx-CG50
⇒命令 (条件ジャンプ)
◆概 要: 条件ジャンプを行う。
◆書 式: [条件]⇒[処理]
⇒命令は、CasioBasic特有の命令。
[条件] が「真」の場合は[処理]を実行、そうでない場合([条件]が「偽」の場合)は[処理]を飛ばして(ジャンプして)、次へ進む。
[条件]⇒[処理]まで は、改行なしで1行に書かないとエラーとなる。さらに⇒の前後にスペースが入ると、これもエラーになる。
If 文との類似性
[条件]⇒[処理]
は、
If [条件]
Then [処理]
IfEnd
と同等です。
複数条件分岐への応用
CasioBasicには、switch~case (C言語)やSelect~Case (VisualBasic)のような多条件分岐コマンドが用意されていません。
しかし、⇒命令を工夫すると、複数条件分岐処理ができます。この記法の利点は、Fall Through (フォールスルー)が実現できる点にあります。
[2014/02/23 補足] If Else と言う記法を使えば、複数条件分岐をスッキリと書くことができます。
<CasioBasicコマンドリファレンス If文 参照>
Lbl 0
"N"?→N
N=1⇒Goto 1
N=2⇒Goto 2
N=3⇒Goto 3
N=4⇒Goto 4
Goto Z
Lbl 1
[処理1] 例えば Locate 1,2,"ONE " (スペース2個)
(Goto 0)
Lbl 2
[処理2] 例えば Locate 1,2,"TWO " (スペース2個)
(Goto 0)
Lbl 3
[処理3] 例えば Locate 1,2,"THREE" (スペースなし)
(Goto 0)
Lbl 4
[処理4] 例えば Locate 1,2,"FOUR " (スペース1個)
(Goto 0)
Lbl Z
この記法には、重要な注意点があります。
※ 重要な注意点: 赤文字で示した Goto Z と Lbl Z は絶対に省略しないこと!
※ 応用上の注意点: (Goto 0) は省略可能です。但し必要な時のみ省略すること。
この記法には、Goto を正しく使うことが条件で、1つ利点があります。青文字出示した (Goto 0) を省略すると Else If の記法では実現しない機能が得られます(Fall Through、フォールスルーが可能になります)。
(Goto 0) を省略すると、下のラベルの処理を連続して行えます。ラベルの並び順を工夫することで処理の効率化が可能になります。
柔軟で有名なC言語での以下のような記法と同等なことがCasioBasicで実現できるわけです。そのため、敢えて Goto を使った記法を紹介しています。
switch (E) {
case 4:
[処理4]
break;
case 3:
[処理3] // フォールスルー
case 2:
[処理2]
break;
case 1:
[処理1]
break;
}
ここで、break; は Goto 0 に相当します。Eが3の時、case 3: へジャンプし、ここには break; が無いので、続いて case 2 の処理を実行します。
これを CasioBasicの上の記法を用いると以下のようになります。
Lbl 0
E=4⇒Goto 4
E=3⇒Goto 3
E=2⇒Goto 2
E=1⇒Goto 1
Goto Z
Lbl 4
[処理4]
Goto 0
Lbl 3
[処理3]
Lbl 2
[処理2]
Goto 0
Lbl 1
[処理1]
Goto 0
Lbl Z
[2014/12/14 修正: (Goto Z) を (Goto 0) に変更]
If文と⇒命令の処理速度比較
If ~Then~IfEndを使った以下のプログラムの処理時間は21秒。
0→L:0→H
1000→C
Lbl 0
Ic C>500
Then Isz H
IfEnd
Dsz C
Goto 0
"DONE"
⇒命令を使った以下のプログラムの処理時間は20秒
0→L:0→H
1000→C
Lbl 0
C>500⇒Isz H
Dsz C
Goto 0
"DONE"
⇒命令は If 文よりも僅かに処理速度が速く、表記が分かりやすいので利用価値の高い命令です。
一方、Elseを用いたIf文では、事情が少し異なります。
If ~Then~Else~IfEndを使った以下のプログラムの処理時間は28.5秒。
0→L:0→H
1000→C
Lbl 0
Ic C>500
Then Isz H
Else Isz L
IfEnd
Dsz C
Goto 0
"DONE"
⇒命令を使った以下のプログラムの処理時間は32秒
0→L:0→H
1000→C
Lbl 0
C>500⇒Isz H
C≦500≦Isz L
Dsz C
Goto 0
"DONE"
従って、2者択一の条件分岐は、If文を使った方が速いことが分かります。
fx-5800P の場合、処理速度の絶対値が変動するようなので、相対比較しか出来ません。
応援クリックをお願いします。励みになるので...