日本肥満学会の定めた基準では 、18.5未満が「低体重」で18.5以上25未満が「普通体重」、25以上が「肥満」となり、さらにその度合いによって「肥満1」から「肥満4」に分類される。以前for文で作った関数BodyMassIndex3.mを基に、条件分岐で低体重の人のBMI値の横に「低体重」、肥満の人の横に「肥満」と表示されるようにしてみる。
BMIと肥満の判定
BMIが25以上を肥満とされる。
BMI | 判定 |
18.5未満 | 低体重 |
18.5以上25未満 | 普通体重 |
25以上30未満 | 肥満1度 |
30以上35未満 | 肥満2度 |
35以上40未満 | 肥満3度 |
40以上 | 肥満4度 |
関数名を変えて保存
ファイルを開いたら、関数名をBodyMassIndex4(data)に変更して、BodyMassIndex4.mという名称で保存する。ifからendまでを編集して以下のように完成させる。
※変数arrayは事前に読み込んでおく。
function BodyMassIndex4(data) name = { 'Aさん' 'Bさん' 'Cさん' 'Dさん' 'Eさん' }; for num = 1:5 bmi = data(1,num)/(data(2,num)/100)^2;if (bmi <= 18.5)
fprintf(1, '%s: %.1f痩せ \n', char(name(num)), bmi);
elseif (bmi >= 25)
fprintf(1, '%s: %.1f肥満 \n', char(name(num)), bmi);
else
fprintf(1, '%s: %.1f \n', char(name(num)), bmi);
end
end
if文で条件分岐を設定
基本的なif文の書き方は、関係演算子、論理演算子を用いた条件式を判断して、2分岐選択制御を行う。処理結果の出力設定部分をifとendで挟み、ifに続けて条件式を丸括弧内に書く。
if ( 条件式 ) 条件式に当てはまる場合、trueのとき実行する処理 else 条件式に当てはまらない場合、falseのとき実行する処理 end
具体的には、条件はbmiを18.5以下に設定。当てはまらない場合は「痩せ」も「肥満」も表示しないので、以下のように計算式の上にelse、下にendを追加する。
if (bmi <= 18.5)
else
fprintf(1, '%s: %.1f \n', char(name(num)), bmi);
end
続いて、条件式に当てはまらない場合に実行する処理を追加する。計算式をコピーしてifとelseの間にペーストし、BMI値を表示した後ろに「痩せ」と書く。
if (bmi <= 18.5)
fprintf(1, '%s: %.1f痩せ \n', char(name(num)), bmi);
end
else
fprintf(1, '%s: %.1f \n', char(name(num)), bmi);
「肥満」の設定を追加する。ifと「痩せ」を書いた2行の計算式をコピーして、elseの上にペーストする。ifを「elseif」、条件式を「25以上」に書き換え、痩せを「肥満」に書き換えれば、最初に示したプログラムが完成する。elseifは、条件式を判断して多分岐選択制御を行う。
if (bmi <= 18.5)
fprintf(1, '%s: %.1f痩せ \n', char(name(num)), bmi);
elseif (bmi >= 25)
fprintf(1, '%s: %.1f肥満 \n', char(name(num)), bmi);
else
fprintf(1, '%s: %.1f \n', char(name(num)), bmi);
end
コマンドウィンドウに「BodyMassIndex4(array)」と打ち込み実行する。
>> BodyMassIndex4(array) Aさん: 23.0 Bさん: 18.4痩せ Cさん: 22.0 Dさん: 27.0肥満 Eさん: 23.8
関係演算子(relational operator)
演算子 | 意味 | 使用例 | |
> | より大きい | if (a > b) | |
>= | 以上 | if (a >= b) | |
< | より小さい | if (a < b) | |
<= | 以下 | if (a <= b) | |
== | 等しい | if (a == b) | |
~= | 等しくない | if (a ~= b) |
論理演算子(logical operator)ショートサーキット
論理演算子は左から右へ評価され、左辺を評価した時点で論理式の結果が確定した場合には右辺の評価を行わない。これをショートサーキット評価という。例えば、「a && b」という論理式があったとき、aがfalseならその時点で結果が確定するのでbのチェックは行わない。
演算子 | 意味 | 使用例 |
&& | 論理AND(かつ) | if (a > 0 && b > a) |
|| | 論理OR(または) | if (a > 0 || b > 0) |
~ | 否定(ではない) | if (~ a) |
上記、BodyMassIndex4.mの場合、BMI値18.5以上25未満の人だけに「普通」と付けるときは、条件式を変更して「痩せ」を「普通」に変更してelseifの1組の行を削除する。関数をBodyMassIndex5(data)に変えBodyMassIndex5.mにファイル名を変えて以下のように作業する。
function BodyMassIndex5(data) name = { 'Aさん' 'Bさん' 'Cさん' 'Dさん' 'Eさん' }; for num = 1:5 bmi = data(1,num)/(data(2,num)/100)^2; if (bmi >= 18.5 && bmi <= 25) fprintf(1, '%s: %.1f普通 \n', char(name(num)), bmi); else fprintf(1, '%s: %.1f \n', char(name(num)), bmi); end end
コマンドウィンドウに「BodyMassIndex5(array)」と打ち込み実行する。
>> BodyMassIndex5(array) Aさん: 23.0普通 Bさん: 18.4 Cさん: 22.0普通 Dさん: 27.0 Eさん: 23.8普通