4-4 分岐処理 (4) -case 文-

if 文は、

に応じて、プログラムの流れを2つに分岐させるものでした。

プログラムの流れを3つ以上に分けなければならないときは、【基礎課題 4-6】のように、if 文の中にさらに if 文を書かなければなりません。その結果、プログラムの構造が複雑になってしまいました。

そこで、プログラムの流れを3つ以上に分ける場合に使うと便利な、case 文の使い方を説明します。

【基礎課題 4-6】は、case 文を使うと次のように書くことができます。

この命令は、下のような構造になっています。

case 変数名 of
  変数の値の範囲
    begin
      変数の値がその範囲にあるときの処理1;
      変数の値がその範囲にあるときの処理2;
      変数の値がその範囲にあるときの処理3;
        ・
        ・
        ・
    end;
  変数の値の範囲
    begin
      変数の値がその範囲にあるときの処理1;
      変数の値がその範囲にあるときの処理2;
      変数の値がその範囲にあるときの処理3;
        ・
        ・
        ・
    end;
  変数の値の範囲
    begin
      変数の値がその範囲にあるときの処理1;
      変数の値がその範囲にあるときの処理2;
      変数の値がその範囲にあるときの処理3;
        ・
        ・
        ・
    end;
    ・
    ・
    ・
end;

解説

case の後にくる変数は、これまでに学んだ型のなかでは、Integer 型のみが許されます。値の「順序」がはっきりした変数でなければならないからです。

範囲を表すには、「6..8」のように、最小の値を先に、最大の値を後に書いて、間にピリオド「.」を2つ書きます。

範囲は上下の値が決まっていなければならないので、例えば「6以上」のような範囲の指定はできません。

変数の値の範囲は、コンピュータの能力の許す限りいくつでも書くことができます。

範囲はきちんと分類して、重複がないようにしなければなりません。

変数の値がある範囲のときの処理する命令が1つしかないときは、if 文の時と同じように、beginend; を省略することができます。しかし、省略しなくてもエラーがでるわけではないので、残しておく方がよいでしょう。


【基礎課題 4-9】

【基礎課題 4-6】を、case 文を使って作り直してください。

【基礎課題 4-10】

【基礎課題 4-7】を、case 文を使って作り直してください。

case 文には、else を使った特殊な例があります。一番下の「変数の値の範囲」を else と書いて、「今までに指定した範囲以外」という意味を表すことができます。

「診断」ボタンを押したときの処理

case 変数名 of
  変数の値の範囲
    begin
      変数の値がその範囲にあるときの処理1;
      変数の値がその範囲にあるときの処理2;
        ・
        ・
    end;
  変数の値の範囲
    begin
      変数の値がその範囲にあるときの処理1;
      変数の値がその範囲にあるときの処理2;
        ・
        ・
    end;
  変数の値の範囲
    begin
      変数の値がその範囲にあるときの処理1;
      変数の値がその範囲にあるときの処理2;
        ・
        ・
    end;
        ・
        ・
  else
    begin
      変数の値が今までのどの範囲にもないときの処理1;
      変数の値が今までのどの範囲にもないときの処理2;
        ・
        ・
    end;
end; (← case 文の終わりを表す)

【応用課題 4-1】

年齢を入力してからボタンを押すと、次の料金表にしたがって入場料金を表示するプログラムを、else をともなった case 文を利用して作って下さい。

料金表
年齢 入場料金
6歳以上12歳以下 500円
13歳以上65歳以下 1000円
それ以外(5歳以下または66歳以上) 無料