例;年齢による若さの診断メッセージ
上記 年齢によりお酒が合法的に飲めるかを判断するプログラムに追加・修正してみましょう。
ここでやりたいことは余計なお世話で、ご老人にあまりお酒を飲ませてはいけないという配慮をするプログラムを作ってみましょう。
例えば、20未満ならば「NG」、20歳以上(例えば)65歳以下ならば「OK」、それ以外(65歳以上)ならば「ほどほどに」というメッセージを表示させてみます。上記ではIF文のElse部の中にもう一つIF文があることに注意してください。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
何度も言いますが、Then部、Else部は正しいプログラムであれば何も書いてもOKです。これをやってはいけない、あれをやってはいけないと言った制約は原則としてありません。
上記プログラムのフローチャートはかけますか?
なお、上記プログラムでは「インデント」を施しています。「インデント」とはワープロなどで先頭を右にずらすという時にも使います。
よく見ると、例えば4行目の「Label2.Text = "NG"」が少し右に寄っていますね。これがインデントで、手動でスペースを入れています。
このように内部のブロック全体をインデントすると、プログラムが見やすくなります。
まず大雑把な処理の流れを考えよう。
本的にはこの二つのステップに分けて考えられる。 |
![]() |
年齢を計算するために必要な情報は、今年と生まれた年である。 |
kotoshi = 2018 |
年齢による判断であるが、IF文では二手にしか分岐でいないので、更に分解して考える必要がある。 例えば、まず「子供」とそれ以外を区別してしまおう。 このプログラムは単に一つのIF文を用いるだけなので特に問題はないはず。 |
![]() |
では次に「子供ではない場合の処理」を考えてみましょう。 既に子供ではない場合であるので、「青年」か否か(大人)かを判断して処理を行えばよいはずです。 |
![]() |
これで全体の構成は出来上がりですね。 確認のため、全体を一つのフローチャートにしてみます。 |
![]() |
後は条件をどうするのか、各処理をどうするのかを考えればよいだけですね。 IF文は、IFの行で始まり、EndIfの行でおしまいになることを間違えなければ大丈夫ではないでしょうか。。。 |
上記はあくまでも一つの考え方で別の方法もあることは言うまでもありません。
例えば、最初に子供の場合とそうでない場合と分けましたが、大人の場合とそれ以外の場合で分けても全く問題はありません。
他にも効率はよくなく全くお勧めはできませんが、次のように考えることも不可能ではありません。
・あまり良くないが不正解ではない例1) ※予想通りに動作はしますが、基本的には不正解だと思っておきましょう。
この例1はスマートさにかけるという意味でもお勧めできません。フローチャートを描くとわかりやすいとおもいますが、どんな場合でも全て3回比較が行われてしまい、無駄が多いばかりか、変更が必要の際にも非常に手間取ります。
・あまり良くないが不正解ではない例2) ※予想通りに動作はしますが、基本的には不正解だと思っておきましょう。
※この例2では、条件がかなり余分です。不要な条件や不要なIF文があります。具体的には2-1の『もし15〜20歳だったら』 の部分は15歳以上に決まっている(条件1以外だから) のにも15〜としている点、また2-3&4の20歳以上のIF文は不要で、2-1&2のIF文のELSEにすべきです。
このほかにも似たような感じであまりお勧めできないプログラムはたくさんあります。
少なくとも比較的効率よく間違いの少ないお勧めのプログラムが理解できるようにしてください。