関数の練習問題として、BMI算出の関数を作ることとします。
BMIは、ボディマス指数と呼ばれ、肥満度を示すものとなります。
身長と体重から計算を行い結果にしたがって肥満かどうかを判断します。
BMI値= 体重(kg) ÷ 身長(m)2
やせ型 – 18.5 – 普通体重 – 25 – 肥満(1) – 30 – 肥満(2) – 35 – 肥満(3) – 40 – 肥満(4)
となります。
ということで、まずは今回cm単位の身長とkg単位の体重を引数として、BMI値を返すbmi関数を作りす。
jsbase.htmlをpractice11.htmlにコピーして、scriptタグの中で記述しましょう。
/********************/
/* BMIを算出する関数 */
/* sincho: 身長(cm) */
/* taiju: 体重(kg) */
/********************/
function bmi(shincho, taiju) {
var shincho_m = shincho / 100; // 身長をm単位に直す
// BMI = 体重 / (身長の2乗)
var bmi = taiju / (shincho_m ** 2);
return bmi;
}
これでbmi関数が完成しました。
メインルーチンでは、
①prompt関数で身長cm と 体重kg を入力させます。
②身長と体重を使ってbmi関数を通してBMIを算出します。
③BMIは小数点第2位で四捨五入させます。
④ブラウザに「身長**cm、体重**kgの方のBMIは****」と表示させす。入するようにしましょう。
このような流れになります。
実際にスクリプトを記述してみましょう。bmi関数の後に記述してください。
var height = prompt("あなたの身長をcm単位で入力してください");
var weight = prompt("あなたの体重をkg単位で入力してください");
var kotae = bmi(height, weight);
// 小数点第2位で四捨五入する(小数点1位まで表示する)
kotae = Math.round(kotae * 10) / 10;
document.write("身長" + height + "cm、体重" + weight + "kgの方のBMIは" + kotae + "<br>";
これでBMIが算出できました。
さて、関数の返り値は今回のように数値だけでなく、文字列でも、配列でも、オブジェクトでも可能です。
そこで、bmi関数を以下のようにグレードアップさせます。
① BMIの値をあらかじめ小数点第2位を四捨五入する
② BMIの値に応じて、肥満度の判定を行う
肥満判定は、日本と世界では基準が違うのですが、18.5未満が痩せ型、25未満が普通、30未満が肥満1度、35未満が肥満2度、40未満が肥満3度、40以上が肥満4度です。
function bmi(shincho, taiju) {
var shincho_m = shincho / 100; // 身長をm単位に直す
var answer = taiju / (shincho_m ** 2);
answer = Math.round(answer * 10) / 10;
if(answer < 18.5) { // 18.5未満
var msg = "やせ型";
} else if(answer < 25) {
var msg = "普通体重";
} else if(answer < 30) {
var msg = "肥満1度";
} else if(answer < 35) {
var msg = "肥満2度";
} else if(answer < 25) {
var msg = "肥満3度";
} else if(answer < 25) {
var msg = "肥満4度";
}
// 答えを配列に入れる
var bmi_ans = new Array();
bmi_ans.data = answer; 連想配列で保存
bmi_ans.hantei = msg;
return bmi_ans;
}
var height = prompt("あなたの身長をcm単位で入力してください");
var weight = prompt("あなたの体重をkg単位で入力してください");
var kotae = bmi(height, weight);
document.write("身長" + height + "cm、体重" + weight + "kgの方のBMIは" + kotae.data + "で、現在あなたは"+kotae.hantei + "です<br>";
どうでしょうか。関数に関しては経験上慣れるしかないと思います。