Благодаря @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 нулей.
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 (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
Я очень новичок в Matlab, не редактируя код для меня, пожалуйста. –
и будет ли он проверять годы> 2016? –
Ну, нет, но вы можете развернуть это до произвольной даты. Вы можете установить его между -2000 и +6000, если хотите. Я добавлю, как удалить millenia таким образом – Adriaan