10/10/2006

PROBLEM #3.3:平均氣溫

五月份的台北天氣已經開始轉熱,其整月的日平均溫度如下:

T=[25 26 24 23, 18 17 20 30 29, 25 19 19 21 20, 23 24 23 25 23,…
27 28 24 26 27, 23 25 24 21 19, 20]C


1. 試撰寫一程式,以上述之溫度資料為輸入值,求其月平均、最高及最低溫度。

2. 試撰寫另一程式,以交談式輸入之方式,按月份輸入每日之溫度,(必須分清楚每月應有之輸入日數)然後呼叫第一項之程式進行分析。

註:請同學針對本題目直接回應(COMMENT),請勿採用EMAIL方式提交。

6 則留言:

Eric Wu 提到...

程式如下
function [avg, mx, mn]=month(t)
% avg is average temp
% max is maximun temp
% min is minimun temp
avg=mean(t);
mx=max(t);
mn=min(t);

輸入預計算的溫度即可計算出最大值最小值以及平均

執行結果為按此看結果

Eric Wu 提到...

由於程式太長以及圖片連結太多所以改以網頁方式呈現
點我看第二題

MARTIN 提到...

Eric:
第二題的結果有點奇怪,有一些屬於亂碼

Eric Wu(堉光) 提到...

請問一下老師
亂碼出現是在哪邊,是程式本身,還是我所貼的連結出現亂碼?

ShuRuLin 提到...

第一小題的寫法和堉光差不多
第二小題我則嘗試用比較簡單的switch-case和if-else指令寫出

1.
程式指令
function [Mean Max Min]=temp(T)
% 計算月平均、最高及最低溫度
Mean=mean(T); % 平均溫度
Max=max(T); % 最高溫度
Min=min(T); % 最低溫度

執行結果
>> T=[25 26 24 23 18 17 20 30 29 25 19 19 21 20 23 24 23 25 23 27 28 24 26 27 23 25 24 21 19 20];
>> [Mean Max Min]=temp(T)

Mean =

23.2667


Max =

30


Min =

17


2.
程式指令
% month_temp.m
% 以交談方式,按月份輸入每日之溫度,呼叫另一程式進行溫度分析
month=input('請輸入月份 (1-12):');
T=input('請輸入每日溫度 ex.[24 28 30]:');
switch month
case {1,3,5,7,8,10,12}
if numel(T)==31
[Mean Max Min]=temp(T)
else
input('輸入溫度之日數不符,此月份應輸入31天之溫度!\n')
end
case 2
if numel(T)==28
[Mean Max Min]=temp(T)
else
input('輸入溫度之日數不符,此月份應輸入28天之溫度!\n')
end
case {4,6,9,11}
if numel(T)==30
[Mean Max Min]=temp(T)
else
input('輸入溫度之日數不符,此月份應輸入30天之溫度!\n')
end
end

執行結果
& 情境一 (當輸入溫度之日數與當月天數相符時,則可算出當月平均、最高及最低溫度):
>> month_temp
請輸入月份 (1-12):4
請輸入每日溫度 ex.[24 28 30]:[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30]

Mean =

15.5000


Max =

30


Min =

1

& 情境二 (當輸入溫度之日數與當月天數不符時,則會顯示警示):
>> month_temp
請輸入月份 (1-12):12
請輸入每日溫度 ex.[24 28 30]:[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30]
輸入溫度之日數不符,此月份應輸入31天之溫度!

ShuRuLin 提到...

用剛學到的menu指令將原本的程式做了一點修正
視窗中列出可供選擇的月份,可避免使用者輸入非1~12月的數字

程式指令
% month_temp2.m
% 以交談方式,按月份輸入每日之溫度,呼叫另一程式進行溫度分析
month=menu('請輸入欲計算溫度之月份:','一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月')
T=input('請輸入每日溫度 ex.[24 28 30]:');
switch month
case {1,3,5,7,8,10,12}
if numel(T)==31
[Mean Max Min]=temp(T)
else
input('輸入溫度之日數不符,此月份應輸入31天之溫度!\n')
end
case 2
if numel(T)==28
[Mean Max Min]=temp(T)
else
input('輸入溫度之日數不符,此月份應輸入28天之溫度!\n')
end
case {4,6,9,11}
if numel(T)==30
[Mean Max Min]=temp(T)
else
input('輸入溫度之日數不符,此月份應輸入30天之溫度!\n')
end
end

執行結果
在指令窗中輸入敘述檔檔名month_temp2後會出現 選擇視窗

當輸入溫度之天數與該月份相符時,會出現以下之結果
天數相符
當輸入溫度之天數與該月份不符時,會出現以下之結果
天數不符

雖然指令只有小小的不一樣,但是也會提供不大一樣的功能性 :p