11/02/2006

林書如:您的體重過重嗎

前言:
BMI指數可以反映出體重是否處於理想狀態。過去已有許多文獻指出BMI指數過高往往是造成糖尿病、高血壓,甚至是心血管疾病的危險因子。因此,適度地監控自己的BMI指數是否處於正常值內是很重要的。

問題:
試寫出一個函數,當輸入體重和身高的數值後,能計算出其身體質量指數BMI值。並且依據其BMI值判斷其是否有體重過重或過輕的問題。(18.5<=BMI<24時顯示"體重標準",BMI>24時顯示"體重過重",BMI<18.5時顯示"體重過輕")

指令:

一開始我寫了一個比較簡單敘述檔案(Script file)

function [A]=BMI(w,h)
% BMI(Body Mass Index) calculation
A=w/h^2; % A means BMI
if 18.5<=A & A<24
fprintf('BMI=%0.2f 體重標準\n',A)
elseif A<18.5
fprintf('BMI=%0.2f 體重過輕\n',A)
else
fprintf('BMI=%0.2f 體重過重\n',A)
end

模擬輸出結果:

>> BMI(60,1.5)
BMI=26.67 體重過重

ans =

26.6667

結果顯示,一位體重60公斤,身高150公分的人,其BMI指數為26.67,有體重過重的傾向

==============================================

但是,為了能夠加上交談的功能,讓使用者更能清楚地了解應該輸入的內容
例如,輸入之體重應以公斤為單位,輸入之身高應以公尺為單位
因此我又改寫成另一個函數檔(function file),如下

% BMI2.m
% BMI(Body Mass Index) calculation
a=input('Please keyin your body weight? (kg)');
if isnumeric(a)
b=input('Please keyin your body height? (m)');
B=a/b^2; % B means BMI
if 18.5<=B & B<24
fprintf('BMI=%0.2f 體重標準\n',B)
elseif B<18.5
fprintf('BMI=%0.2f 體重過輕\n',B)
else
fprintf('BMI=%0.2f 體重過重\n',B)
end
end

模擬輸出結果:

>> BMI2
Please keyin your body weight? (kg)60
Please keyin your body height? (m)1.5
BMI=26.67 體重過重

結果同上,一位體重60公斤,身高150公分的人,其BMI指數為26.67,有體重過重的傾向

討論:

我是以簡單的if-elseif指令來撰寫這兩個小程式
程式中如果還有可以補強的地方(例如發現程式的bias,或是其實還有更簡單的寫法),還麻煩大家提供意見 :p

3 則留言:

ShuRuLin 提到...

不好意思
第一個應該是函數檔(function file)
第二個才是敘述檔 (script file)

ncbee 提到...

嗯我有run過這個程式,但if isnumeric(a)
好像是多加上去的...我試過它好像可有可無~還是妳有特別用途呢?

ShuRuLin 提到...

本來是為了避免輸入文字的失誤
可是發現其實在input指令中已經自動設定只允許輸入數字
所以其實if isnumeric(a)的指令是可以省略的.....
所以程式應改為
% BMI2.m
% BMI(Body Mass Index) calculation
a=input('Please keyin your body weight? (kg)');
b=input('Please keyin your body height? (m)');
B=a/b^2; % B means BMI
if 18.5<=B & B<24
fprintf('BMI=%0.2f 體重標準\n',B)
elseif B<18.5
fprintf('BMI=%0.2f 體重過輕\n',B)
else
fprintf('BMI=%0.2f 體重過重\n',B)
end

謝謝同學的指教 :p