感谢@gregswiss 指出我在闰年计算中的错误。这直接将检查合并到代码中,因此您不必包含闰年的先验列表:
if (mod(year,4) == 0 && mod(year,100) ~= 0) || mod(year,400) == 0
disp('Leap year');
else
disp('Non-leap year');
end
只需将其包含在您的if
声明中,就像检查您的月份一样。然后,如果您的年份中有相应的条目,LeapYear
则为闰年:
if sum(year==LeapYear)
disp('This is a leap year')
end
求和的原因是这year==LeapYear
将是一个包含 30 个值的逻辑数组,其中 29 个零和 1 个如果您year
确实是闰年,或者它将包含 30 个零。我最近发现了一个更晦涩的函数:eomday
它告诉你一个月的最后一天,所以一个简单eomday(year,month)==29
的就足以告诉你它是否是闰年。(也有 [ leapyear
][2],但这是在航空航天工具箱中)
date = input('Please enter a date in the DD/MM/YYYY format ','s')
display('hello')
tmp=strsplit(date,'/');
a(1) = str2num(tmp{1}); % Create an array out of your string
a(2) = str2num(tmp{2});
a(3) = str2num(tmp{3});
day = a(1);
display(day);
month = a(2);
display(month);
year = a(3);
display(year);
if eomday(year,month)==29
disp('Leap year');
else
disp('Non-leap year');
end
%if (mod(year,4) == 0 & mod(year,100) ~= 0) | mod(year,400) == 0
% disp('Leap year');
%else
% disp('Non-leap year');
%end
if (month==1||month==3||month==5||month==7||month==8||month==10||month==12)
if (day>=1&&day<=31)
display(' It is a valid date')
else
display(' It is NOT a valid date')
end
end