作者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