プログラミング基礎 I

第四回 (2005年 5月 9日): 条件と枝分かれ

AGU

© 2005 Martin J. Dürst 青山学院大学

演習問題・宿題

  1. BMI (body mass index) を計算するプログラムを作る
  2. 他に面白い、役に立つ、興味のある計算をプログラムにする

BMI のプログラム (1)

# perl program to calculate BMI

# input
$name = shift;
$weight = shift;
$height = shift;

BMI のプログラム (2)

# calculation
$bmi = $weight / $height ** 2;

# output
print "$name, your bmi is: $bmi\n",
       "for a weight of $weight kg\n",
       "and a height of $height m\n";

先週の復習

演習の不満点

BMI の値は計算できますが、それによっての区分は判定できない。

BMI の値によって違う処理をしたい。

枝分かれの文が必要。

BMI
下限 上限 Category 判定
18.4 underweight 軽すぎ
18.5 24.9 normal weight 普通
25.0 29.9 overweight 重すぎ
30.0 obesity 肥満

if 文の構造

if 文の例:

if ($bmi < 18.5) {
    print "underweight";
}

if 文の基本構造:

if (条件) {
    その条件の時の処理
}

if 文の意味

「条件」が真 (合っている、true) の場合:
{} 内の処理を実行する
「条件」が偽 (合っていない、false) の場合:
何もしない (if 文の次に進む)

if 文の書き方

条件の書き方

数字として比べる:
<, >, <=, >=, ==, != (等しくない)
文字として比べる:
lt, gt, le, ge, eq, ne
条件としての数字:
0 は偽、他の値は真として扱われている。
条件としての文字列:
空文字列 ("") は偽、文字のある文字列は真

条件の組み合わせ

かつ: && 又は and: 両方が真でないと条件全体は真にならない。例:

if (18.5 <= $bmi && $bmi < 25) {
    print "normal weight";
}

又は: || 又は or: どちらかが真でしたら条件全体が真。例:

if ($bmi < 18.5 || 25 >= $bmi) {
    print "take care of your weight";
}

if 文の拡張: if-elsif-else

目的: 複数の選択から一つだけを選ぶ

if-elsif-else 文の構造:

if (条件1) {
    
条件1 の時の処理
} elsif (
条件2) {
    
条件2 (かつ条件1 でない) 時の処理
} else
{
    
条件1 と条件2 以外の時の処理
}

if-elsif-else 文の例

if ($bmi < 18.5) {
    $advice = "eat more";
} elsif ($bmi < 25) {
    $advice = "keep your weight";
} elsif ($bim < 30) {
    $advice = "eat less";
} else {
    $advice = "eat much, much less";
}

演習問題 (1. は授業の終わりまで提出)

  1. 東京ガスの値段表によってある月間使用量 (m3) から使用料金を計算する
  2. 摂氏と華氏とケルビンの変換プログラムを一般化して、値と単位の入力に対して残りの二つの単位を計算するようにする
  3. 他に面白い、役に立つ、興味のある計算をプログラムする

東京ガスの料金表

使用料 r (m3/月) 基本料金 単位料金
0 < r ≤ 20 724.50 円 130.28 円
20 < r ≤ 80 1,083.60 円 112.32 円
80 < r ≤ 200 1,365.00 円 108.81 円
200 < r ≤ 500 2,499.00 円 103.14 円
500 < r ≤ 800 5,806.50 円 96.52 円
800 < r 13,786.50 円 86.55 円