Casio Basic: ⇒命令(条件ジャンプ)

Casio Basic
コマンドリファレンス

Casio fx-5800P、fx-9860GII、fx-CG20 で確認をとっています。Casio fx-FD10 Pro では互換性はあると考えられますが、実機で確認していないので「可能性」としてご覧ください。
最終更新 2017/01/03

fx-5800P / fx-9860GII / fx-CG20
⇒命令 (条件ジャンプ)

◆概 要: 条件ジャンプを行う。

◆書 式: [条件][処理]


⇒命令は、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 の場合、処理速度の絶対値が変動するようなので、相対比較しか出来ません。



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

人気ブログランキングへ


FC2ブログランキングへ


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

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

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

コメントの投稿

非公開コメント

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

やす (Krtyski)

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


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

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

おもしろい・役に立つならクリックしてください。励みになります。
にほんブログ村 IT技術ブログ 開発言語へ
にほんブログ村


人気ブログランキングへ


FC2ブログランキングへ


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

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

この人とブロともになる

QRコード
QR