Casio Basic: If~Then~IfEnd

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

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

fx-5800P / fx-9860GII / fx-CG20
If 文: If ~ Then (~ Else) ~ IfEnd

◆ 概 要:
[判定条件] が「真」の場合と、「真」でない場合で、処理を変更する。


◆書 式1: (単一条件分岐)
If [判定条件]
Then [処理]
IfEnd
  • 判定条件が「真」の場合に [処理] を実行する。
  • [処理]は、Then の後に記述するか、Then の後に改行してから記述しても、どちらでも良い。
=====

◆ 書 式2: (単一条件分岐)
If [判定条件]
Then
[処理2]
Else
[処理1]

IfEnd 
  • 判定条件が「真」の場合は [処理2] を実行し、「真」でなければ [処理1] を実行する。
=====

◆ 書 式3:(複数条件分岐)
If [判定条件4]:Then
[処理4]

Else If [判定条件3]:Then
[処理3
]

Else If
[判定条件2]:Then
[処理2]

Else If [判定条件1]:Then
[処理1]
IfEnd
IfEnd
IfEnd
IfEnd

  • 判定条件N が「真」なら [処理N] を実行する (N = 1, 2, 3, 4)。
  • If の数と同じ数の IfEnd を記述しなければなりません。

対応する If~Else~IfEnd を色分けしてみます。

If E=4:Then
   [処理4]
Else If E=3:Then
 
         [処理3]
        Else If E=2:Then
 
                 [処理2]
                Else If E=1:Then
                         [処理1]
                       IfEnd
        
        IfEnd
      
  IfEnd
IfEnd

このように、Else の中に 新たな If~Else が入った入れ子構造になっています。
この記法を使うと、入れ子構造を意識せずに、単に If の数と同数の IfEnd を最後に書けば良いわけです。

注意!
Casio Basicでは、If の終わりに IfEnd を書かなくてもエラーの表示がありませんが、意図しない動作をしますので、要注意です。

注意!
fx-5800p Casio basicでは、上の色分けで示したようにコマンドの前にスペースを入れるとエラーとなります。「◆書式」の説明に書いてあるようにスペースを入れずに入力してください。

 ⇒ 楽屋裏 - Else If


◆ 書式の補足: 区切りコードを利用した書式例
If [条件]Then [処理1] 
Else [処理2]
IfEnd



◆ Else は省略可能
Else省略時の書式1:
If [条件]
Then [処理]
IfEnd


Else省略時の書式2:
If [条件]
Then
[複数行の処理]
IfEnd

Else省略時で区切りコードを利用した書式例
If [条件]Then [処理]IfEnd




二者択一の処理しかできまない
これは誤り。上記の 書式2 のように、Else If  と記述すると、複数条件分岐ができます。
If 文を入れ子構造にするのですが、Else If と並べて書けるので、その可読性が向上します。
但し、If文の入れ子構造であることには違いがないので、Else If の If の数だけ IfEnd を忘れずに書く必要があります。
[2014/02/23 修正]

これが面倒だと言う場合は、Goto / Lbl を応用した複数分岐処理の構文を参考にしてください → こちら



プログラム事例

3つに場合分けするプログラム事例として、任意の整数を入力させ、3で割った余りが、0,1,2 のいずれかに分類して、その結果を表示するプログラムは以下のようになります。

"A"?→A
A-3Int(A÷3)→M
If M=0
Then Locate 1,1,"REMAINDER 0"
Else If M=1
Then Locate 1,1,"REMAINDER 1"
Else If M=2
Then Locate 1,1,"REMAINDER 2"
IfEnd
IfEnd
IfEnd

ちなみに、A-3Int(A÷3) は、Aを3で割った時の余りを求める式です。"REMAINDER 1" は「余り1」の英語です。

青色で示した If 文の中に、赤色で示した If 文 が含まれ、赤色で示した If 文の中に紫色で示した If 文が含まれています。最後の IfEndは2つ必要ですが、忘れがちなので要注意です。[2014/10/06 今更ながら大きな間違いを見つけたので修正]


或いは、Else を使わず、If ~ Then ~ IfEnd を素直に3つ並べる方法もあります。

"A"?→A
A-3Int(A÷3)→M
If M=0
Then Locate 1,1,"REMAINDER 0"
IfEnd

If M=1
Then Locate 1,1,"REMAINDER 1"
IfEnd

If M=2
Then Locate 1,1,"REMAINDER 2"
IfEnd



Else If を利用した前者の記法の方が、処理が速くなります。



If 文の判定条件について

If 文の判定条件は、それが 「真 (True)」 であれば Then 以降を実行しし、「偽 (False)」 であれば Else 以降を実行するか、Elseが無ければ IfEndまでジャンプします。

If 文の判定では、関係演算式、論理演算式、計算式、関数、変数、戻り値を返すコマンド、数値 を指定できます。

関係演算式を用いる場合
If K≠0If X>Y  などのように、式が「真」か? あるいは「偽」であるか?で判定されます。

論理演算式を用いる場合
Ife X And Y や If X Or Y などのように、結果が「真」か? あるいは「偽」か? で判定されます。

計算式・関数・戻り値を変えるコマンドを用いる場合
If A-BIf sin(D)If Getkey などのように、これらの結果が、0でない(「真」)か? 0である(「偽」)か? で判定されます。

変数を用いる場合
If C などのように、変数が、0でない(「真」)か? 0である(「偽」)か? で判定されます。

数値を用いる場合
If 1 などとすると、常に真になるので、必ず Then 以降が実行されます。文法上は問題ありませんが、このような使い方は実用上意味が有りません。 




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

人気ブログランキングへ


FC2ブログランキングへ


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

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

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

コメントの投稿

非公開コメント

「If」の用法について

小数入力プログラムの件で一度お伺いしたものです。

その節は大変お世話になりました。

お陰様で構想のベースになるプログラムが完成致しまいた。m(__)m

今回は「If」の用法についてお伺いいたします。

ブログ中のプログラムに、「If ○○:Then ⏎ If ○○:Then」
のコマンドリファレンスにはない「 If ⏎ If 」記述がありますが、
「Else」使用の場合同様、内側を優先した処理を行うのでしょうか?

ご教授願います。m(__)m



Re:「If」の用法について

火野村 様、こんにちは!

あとで、管理人様より詳しい解説があると思いますけど、
たぶん、こういう例のことだと思うのですけど、

If [判定条件1]:Then
 [処理1]
 If [判定条件2]:Then
  [処理2]
  If [判定条件3]:Then
   [処理3]
   If [判定条件4]:Then
    [処理4]
   IfEnd
  IfEnd
 IfEnd
IfEnd

この場合には、
[処理1]は[判定条件1]が満たされた場合に実行されます。
[処理2]は[判定条件1]と[判定条件2]が同時に満たされた場合に実行されます。
[処理3]は[判定条件1]と[判定条件2]と[判定条件3]が同時に満たされた場合に実行されます。
[処理4]は[判定条件1]と[判定条件2]と[判定条件3]と[判定条件4]が同時に満たされた場合に実行されます。
つまり、[処理4]が実行される時は[処理1][処理2][処理3]も実行されるということになります。
実行順序は[処理1][処理2][処理3][処理4]となるので内側優先ではないです。


「ELSE」を使った場合と違うのは、

If [判定条件1]:Then
 [処理1]
 ELSE If [判定条件2]:Then
  [処理2]
  ELSE If [判定条件3]:Then
   [処理3]
   ELSE If [判定条件4]:Then
    [処理4]
    ELSE
    [処理5]
   IfEnd
  IfEnd
 IfEnd
IfEnd

この場合は、
[処理1]は[判定条件1]を満たした時のみ実行、
[処理2]は[判定条件2]を満たした時のみ実行、
[処理3]は[判定条件3]を満たした時のみ実行、
[処理4]は[判定条件4]を満たした時のみ実行、
[処理5]は[判定条件1~4]以外の場合に実行、
となって判定条件ごとに処理が振り分けられます。

Re: 「If」の用法について

火野村 様

If文の中にIf文が入っている構造では、優先が外側か内側か?と言う考え方は、お止めになったほうが良いと思います。優先と言う概念は、そもそもありません。

Casio Basic入門2 でも紹介している最も大切な考え方「プログラムは上から下へ実行される」に立ち戻って頂くと良いと思います。

その上で、sentaro様の説明をご覧頂くと、よろ分かりやすくなると思います。


ちょっと分からなくなった場合は、基本に戻って頂くと良いと思います。

No title

火野村です。

下記の処理の記述がない場合はどうなりますか?


If [判定条件1]:Then
 [処理1]
 If [判定条件2]:Then
  [処理2]
  If [判定条件3]:Then
   [処理3]
   If [判定条件4]:Then
    [処理4]
   IfEnd
  IfEnd
 IfEnd
IfEnd

No title

火野村 様、こんにちは!

もし、[処理1]がない場合はそのまま次のIfを実行するということになりますので、

If [判定条件1] and [判定条件2]:Then
  [処理2]
  If [判定条件3]:Then
   [処理3]
   If [判定条件4]:Then
    [処理4]
   IfEnd
  IfEnd
IfEnd

これと同等になります。



[処理1]から[処理3]がない場合は、
[判定条件1~4]が全部揃った場合に[処理4]が実行されます。

これはつまり、
If [判定条件1] and [判定条件2] and [判定条件3] and [判定条件4]:Then
[処理4]
IfEnd
という形と同じですね。


[処理1]から[処理4]がない場合は、何も意味のないことをしてることになりますね(^^;


管理人様がおっしゃっているようにCasioBasicでは上から順に実行されていくので処理の流れを追っていくと分かりやすいかと思います(^^)

具体例で説明すると

火野村様

プログラムを理解する基本には、以下の2点があります。改めてここに示します。

1. プログラムは上から下へ順に処理が進む
2. 明示的に処理順序を変える指示があった時だけ、1の原則を破る

そこで、 火野村様が提示されたプログラムテンプレートを具体例に変換してみてゆきます。

そこで、変数Xに格納されている値を使った判定を行、結果を変数A に代入することにします。

[判定条件n] を X=n に、[処理n] を n→A 置き換えているので、どの判定条件とどの処理が行われたかは、最後に変数 A に格納されている値でわかります。

If X=1:Then
 1→A
 If X=2:Then
  2→A
  If X=3:Then
   3→A
   If X=4:Then
    4→A
   IfEnd
  IfEnd
 IfEnd
IfEnd
A◢


次に、If 文は、

If

Then

Else

IfEnd

が揃っていれば、途中に何も記述しなくても、文法としては問題なく、正しく動作します。何も記述しなければ「何もしない」ことが命令されていることになります。

以上から、具体的に書いたプログラムで、どれかを省略すれば、最終的に A がどうなるのかは、プログラムの基本(冒頭の2つの項目)に従ってプログラムを追いかければお分かりになると思います。

プログラム動作の基本(上記2つ)以外には、動作を理解する基準はありません。ここは言い切らせて頂きます。

ケースバイケースで、ローカルルールにような感じで、特定のパターンを規則として当てはめるのも良いかも知れませんが、お勧めできません。これをやっていると、遅かれ速かれ躓いてしまいます。

そして、何かを目的としたプログラムを書いて、ご検討なさると、形而上的な悩みをしないで済むと思います。

如何でしょうか?

デバッグの1つの方法

火野村様

プログラムの動作が、どうも意図と異なる場合、どこがマズいのかを突き止めるために、有効な方法を紹介致します。

先ず、絶対にここは問題ない、と言う部分を特定し、それを取り除いてプッログラムを簡単にして、問題がありそうな部分だけを切り出します。

ここで切り出したプログラムについて、集中して2つの原則に従ってプログラムの動作を追いかけます。これで、大抵バグが見つかります。場合によっては Casio Basic 自体のバグが見つかることがあります(実際にありました)。

もし、切り出した部分で問題が無いことが確認されたならば、問題ないと思っていた部分に、実は問題があったと言うことになるので、最初から見直すことになります。

私自身、よく行う方法です。

ご紹介まで...

No title

火野村です

丁寧に解説いただき感謝致します。
大変参考になりました。m(__)m

こちらこそ

火野村様

ご丁寧にありがとうございます。
お役に立てたのならうれしいです。

最近、逆引き Casio Basic の連載を始めました。

Casio Basicの定石となるロジックを紹介してゆくもので、やりたいことからプログラム例を調べられるようにしようと考えています。

コマンドを詳細に正しく理解したとしても、それだければプログラムをパッパと書けないわけです、特定の考え方、ロジックに基づく記述を知っていれば、それを組み合わせるだけで作りたいプログラムを作りやすくなる筈で、そのような情報を提供しようと考えています。



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

やす (Krtyski)

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


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

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

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

人気ブログランキングへ


FC2ブログランキングへ


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

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

この人とブロともになる

QRコード
QR