○IF文の応用例(二つ以上の分岐へ)

例;年齢による若さの診断メッセージ
上記 年齢によりお酒が合法的に飲めるかを判断するプログラムに追加・修正してみましょう。
ここでやりたいことは余計なお世話で、ご老人にあまりお酒を飲ませてはいけないという配慮をするプログラムを作ってみましょう。
例えば、20未満ならば「NG」、20歳以上(例えば)65歳以下ならば「OK」、それ以外(65歳以上)ならば「ほどほどに」というメッセージを表示させてみます。


n = Val( InputBox("please input your bone year") )
t = 2018 - n
If t < 20 Then
  Label2.Text = "NG"
Else
  If t < 65 Then
    Label2.Text = "OK"
  Else
    Label2.Text = "ほどほどに"
  End If
End If
Label1.Text = t
上記ではIF文のElse部の中にもう一つIF文があることに注意してください。
何度も言いますが、Then部、Else部は正しいプログラムであれば何も書いてもOKです。これをやってはいけない、あれをやってはいけないと言った制約は原則としてありません。
上記プログラムのフローチャートはかけますか?
なお、上記プログラムでは「インデント」を施しています。「インデント」とはワープロなどで先頭を右にずらすという時にも使います。
よく見ると、例えば4行目の「Label2.Text = "NG"」が少し右に寄っていますね。これがインデントで、手動でスペースを入れています。
このように内部のブロック全体をインデントすると、プログラムが見やすくなります。

○年齢から「子供」「青年」「大人」の三つに分けるプログラムの考え方

まず大雑把な処理の流れを考えよう。

  1. 年齢を計算する
  2. 年齢による判断を行う。

本的にはこの二つのステップに分けて考えられる。

年齢を計算するために必要な情報は、今年と生まれた年である。
これが分かれば基本的には年齢は計算できるはずである。
ここでは簡単にするため、両方とも西暦による年が分かっているとすれば、単純に「今年−生まれた年」で計算できる。

kotoshi = 2018
umare = 入力してもらう
nenrei = kotoshi - umare

年齢による判断であるが、IF文では二手にしか分岐でいないので、更に分解して考える必要がある。

例えば、まず「子供」とそれ以外を区別してしまおう。
そして子供でない場合は、更に青年かそれ以外つまり大人を区別しよう。

このプログラムは単に一つのIF文を用いるだけなので特に問題はないはず。

では次に「子供ではない場合の処理」を考えてみましょう。

既に子供ではない場合であるので、「青年」か否か(大人)かを判断して処理を行えばよいはずです。

これで全体の構成は出来上がりですね。

確認のため、全体を一つのフローチャートにしてみます。

後は条件をどうするのか、各処理をどうするのかを考えればよいだけですね。
IF文は、IFの行で始まり、EndIfの行でおしまいになることを間違えなければ大丈夫ではないでしょうか。。。
 

上記はあくまでも一つの考え方で別の方法もあることは言うまでもありません。
例えば、最初に子供の場合とそうでない場合と分けましたが、大人の場合とそれ以外の場合で分けても全く問題はありません。

他にも効率はよくなく全くお勧めはできませんが、次のように考えることも不可能ではありません。

・あまり良くないが不正解ではない例1) ※予想通りに動作はしますが、基本的には不正解だと思っておきましょう。

  1. もし15歳以下だったら
    1. 子供の場合の処理
  2. EndIf(15歳以下の処理終了)
  3. もし15〜20歳だったら
    1. 青年の場合の処理
  4. EndIf(15〜20歳の処理終了)
  5. もし20歳以上だったら
    1. 大人の場合の処理
  6. EndIf(20歳以上の処理終了)

    この例1はスマートさにかけるという意味でもお勧めできません。フローチャートを描くとわかりやすいとおもいますが、どんな場合でも全て3回比較が行われてしまい、無駄が多いばかりか、変更が必要の際にも非常に手間取ります。

・あまり良くないが不正解ではない例2) ※予想通りに動作はしますが、基本的には不正解だと思っておきましょう。

  1. もし15歳以下だったら
    1. 子供の場合の処理
  2. Else(そうではない場合)
    1. もし15〜20歳だったら
      1. 青年の場合の処理
    2. EndIf(15〜20歳の処理終了)
    3. もし20歳以上だったら
      1. 大人の場合の処理
    4. EndIf(20歳以上の処理終了)
  3. EndIf(15歳以下・そうではない処理終了)

    ※この例2では、条件がかなり余分です。不要な条件や不要なIF文があります。具体的には2-1の『もし15〜20歳だったら』 の部分は15歳以上に決まっている(条件1以外だから) のにも15〜としている点、また2-3&4の20歳以上のIF文は不要で、2-1&2のIF文のELSEにすべきです。

このほかにも似たような感じであまりお勧めできないプログラムはたくさんあります。
少なくとも比較的効率よく間違いの少ないお勧めのプログラムが理解できるようにしてください。

 


[「A班」プログラミング基礎のTopに戻る]