星期四, 11月 02, 2006

林書如:您的體重過重嗎?

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

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

指令:

一開始我寫了一個比較簡單的函數檔(function 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,有體重過重的傾向

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

但是,為了能夠加上交談的功能,讓使用者更能清楚地了解應該輸入的內容
例如,輸入之體重應以公斤為單位,輸入之身高應以公尺為單位
因此我又改寫成另一個敘述檔(Script 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

5 則留言:

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

ShuRuLin 提到...

將程式改為條件式地繼續執行:
% BMI(Body Mass Index) calculation
while 1
a=input('Please keyin your body weight? (kg)','s');
if isempty(a), a='78';end
a=str2num(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
AA=input('繼續執行嗎?(Y/N) [Y]','s');
if ~isempty(AA) & upper(AA)~='Y',break;end
end

ShuRuLin 提到...

修正後程式的執行結果:
>> BMI2
Please keyin your body weight? (kg)50
Please keyin your body height? (m)1.4
BMI=25.51 體重過重
繼續執行嗎?(Y/N) [Y]y
Please keyin your body weight? (kg)

Unknown 提到...

請問該如何顯示圖


這是題目 該如何寫出 謝謝你

請寫一函數計算及繪製人的身體質量指數(BMI),公式為:

BMI=weight(Kg)/[height(m)*height(m) ]

輸入為自己的身高及12組體重量測數值.

輸出為BMI的現變化圖,標準BMI為22,請依線條標出此標準值!

Unknown 提到...

請問該如何顯示圖

這是題目 

請寫一函數計算及繪製人的身體質量指數(BMI),公式為:

BMI=weight(Kg)/[height(m)*height(m) ]

輸入為自己的身高及12組體重量測數值.

輸出為BMI的現變化圖,標準BMI為22,請依線條標出此標準值!