作者carmelono15 (阿淦)
看板MATLAB
標題[討論] 日期計算防呆
時間Wed Nov 7 03:46:58 2012
小弟我這學期修了系上開的MATLAB 是第一次接觸這軟體
最近上到了關於for跟while的迴圈
課本上有個例題
是關於日期的計算
簡單講就是使用者輸入一組年月日
然後程式會告訴你你輸入的日期是當年度的第幾天
例如:輸入1/10/2012
程式就會告訴你是2012的第10天
然後我反正閒閒 回家都會照著課本 把課本的程式碼打進去matlab當作練習
就在run的時候我發現
如果輸入15/33/99999
程式還是會告訴我 那天是當年度的第398天
囧 但是沒有15月也沒有33號啊
翻了翻後面 也沒有說要怎麼防呆
這章節是在說迴圈
所以我在想是不是要在哪個地方加個for或while loop進去就可解決這問題了
有高手可以提點我嗎
我貼一下程式碼
clear all;close all;clc;
% get day, month, and year to convert
disp('This program calculates the day of year given the special date.');
month = input('Enter specified month (1-12): ');
day = input('Enter specified day (1-31): ');
year = input('Enter specified year (yyyy): ');
% check for leap year, and add extra day if necessary
if mod(year,400) == 0
leap_day = 1; % years divisible by 400 are leap years
elseif mod(year,100) == 0
leap_day = 0; % other centuries are not leap years
elseif mod(year,4) == 0
leap_day = 1; % otherwise every 4th year is a leap day
else
leap_day = 0; % other years are not leap years
end
% calculate day of year by adding current day to the
% days in previous months.
day_of_year = day;
for ii = 1:month-1
% add days in months from January to last month
switch (ii)
case{1,3,5,7,8,10,12},
day_of_year = day_of_year + 31;
case{4,6,9,11},
day_of_year = day_of_year + 30;
case 2,
day_of_year = day_of_year + 28 +leap_day;
end
end
% tell user
fprintf('The date %2d/%2d/%4d is day of year %d.\n', ...
month,day,year,day_of_year);
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.190.58
1F:→ ejialan:在input之後用if檢查輸入是否合理 不合理用error指令警告 11/07 08:37
2F:→ carmelono15:我又遇到問題了 我用IF ERROR 寫了幾道指令 但是我發 11/07 10:40
3F:→ carmelono15:現 這幾道指令沒辦法分辨大小月 還有閏年 比如說 11/07 10:40
4F:→ carmelono15:我輸入11/31 這樣還是跑得出來 12/32已經成功警告 11/07 10:41
5F:→ ejialan:大小月的判斷也是要自己加在if裡 可以參考後面用switch 11/07 10:51