日本語プログラミング言語「なでしこ」 > マニュアル > 入門編

なでしこマニュアル入門編 - 条件分岐

条件によってプログラムの動きを変えたい場面があります。そんなときは『もし〜ならば〜違えば〜』構文を使います。

1.もし〜ならば〜違えば〜

次は条件によってプログラムの動きを変えてみます。
以下のプログラムを見てください。
天気は「晴れ」

もし、天気が「晴れ」ならば
   「遠足に行く」と表示。
違えば
   「遠足は中止」と表示。
これを実行すると、「遠足に行く」と表示されます。
へぇ。日本語の意味通りに動くんですね。
そうです。なんとなく動きが分かる気がしますよね。
じゃぁ、一行目の「晴れ」を「雨」に変えてみるとどうでしょう?
天気は「雨」

もし、天気が「晴れ」ならば
   「遠足に行く」と表示。
違えば
   「遠足は中止」と表示。
これを実行すると、「遠足は中止」と表示されます。
これも予想通りに動きました。
以下が、『もし〜ならば〜違えば〜』構文の書式です。
もし(条件)ならば
  (条件が真のときのプログラム)
違えば
  (条件が偽のときのプログラム)
実行したいプログラムをインデント(段下げ)して書くのがポイントです。
もし、インデントしないと、うまく動かないので注意が必要です。

2.以上(いじょう)、以下(いか)、超(ちょう)、未満(みまん)

その昔、私は、国家試験の一つである「宅地建物取引主任者資格試験」を
受けたことがあります。
そのとき、民法の問題にある『以上』『以下』『超』『未満』のひっかけ問題に
悩まされたことがありました。

まとめると下の表の通りで、つまり、以上・以下と「以」があるときは、
『=』を含むと覚えれば良いのですが、なかなか、試験となると、忘れてしまうんですよね。
語句 例文 不等号で表すと
以上 リンゴが5個以上 リンゴ≧5
以下 ミカンが3個以下 ミカン≦3
年齢が18歳超 年齢>18
未満 年齢が20歳未満 年齢<20
そうなんですよね〜。
試験になると、急に緊張してしまって、混乱してしまいますよね。
それで、なでしこの「もし〜ならば〜違えば〜」構文でも、
この「以上」「以下」「超」「未満」を使えるので、ちょっと遊んでみましょう。
未成年者の飲酒は法律で禁止されています。未成年とは、二十歳未満の人を指します。
以下は、未成年かどうか判定するプログラムです。
「何歳ですか?」と尋ねて、年齢に代入。

もし、年齢が20未満ならば
   「未成年です」と表示。
違えば
   「成人です」と表示。
(プログラムを実行して、19を入力すると、「未成年です」と表示され、
20を入力すると、「成人です」と表示されます。)
へぇ〜。これも日本語そのまま動くんですね。
面白いです。
それから、プログラム中では、不等号の「>」「<」「≧」「≦」も使うことができます。
このとき、「≦」は入力が面倒なので「<=」と、「≧」は「>=」と略して書くことができます。

以下は電車料金が子供料金になるかどうか判定するプログラムです。
電車料金は、11歳までの年齢が子供料金で半額になります。
「何歳ですか?」と尋ねて、年齢に代入。

もし、年齢 <= 11ならば
   「子供料金」と表示
違えば
   「大人料金」と表示。
プログラムを実行して、11を入力すると、「子供料金」と表示され、
12を入力すると、「大人料金」と表示されます。

3.入れ子にして分岐させる

ここまでは、大人か子供か、晴れか雨かの2つだけの判断でした。
しかし、現実の世界は、そんな簡単なものではありません!!
もっと複雑な判断が必要となることもあります。

そんなときは、「もし〜ならば〜違えば」を入れ子状に記述します。
もし、(条件1)ならば
  
  もし、(条件2)ならば
    (条件1と条件2が真のとき)
  違えば
    (条件1が真で条件2が偽のとき)
  
違えば
  
  (条件1が偽のとき)
例えば、4年に一度しか誕生日が来ない『2月29日』生まれの人がいます。
この、2月29日のある年を閏(うるう)年というのですが、閏年の判定は、
完全に4年に一度という単純なものではないのです。

基本的には、西暦で表した年が4で割り切れれば閏年なのですが、例外があります。
西暦で表した年が100で割り切れれば閏年でないというものです。
しかし、これにも例外があって、西暦で表した年が400で割り切れれば閏年なのです。

非常に複雑ですね。
もうちょっと分かりやすく書いてみましょう。

(1)年が4で割り切れれば閏年の可能性がある
(2)年が4で割り切れても、100で割り切れれば閏年ではない。
(3)年が4で割り切れて、100で割り切れても、400で割り切れれば閏年である。

これをプログラムにしてみます。
年は2000
#(1)4で割れたら閏年の可能性
もし(年%4)=0ならば
  #(2)100で割れたら閏年でない可能性
  もし(年%100)=0ならば
    #(3)400で割れたら閏年
    もし(年%400)=0ならば
      「閏年である」と表示。
    違えば
      「閏年ではない」と表示。
  違えば
    「閏年である」と表示。
違えば
  「閏年ではない」と表示。
割り切れるかどうかというのは、余りを調べて余りが0ならば割り切れるということになります。
割り算の余りを求めるには、『A%B』のように書きます。

色で区別しましたが、入れ子になっている部分の対応が分かるでしょうか?
→次へ

→戻る