MATLAB: How to solve this error

leap year question

Error for the Code is :
Operands to the || and && operators must be convertible to logical scalar values.
Error in valid_date (line 4)
if month==2 & day<=29 || month==[4,6,9,11] & day<=30 || month==[1,3,5,7,8,10,12] & day<=31
Where the Code is :
function valid = valid_date(year,month,day)
if isscalar(year) && year>0 && isscalar(month) && month<=12 && isscalar(day) && day>0
if mod(year,400)==0 || mod(year,100)~=0 && mod(year,4)==0
if month==2 & day<=29 || month==[4,6,9,11] & day<=30 || month==[1,3,5,7,8,10,12] & day<=31
valid = true;
elseif month==2 & day>29 || month==[4,6,9,11] & day>30 || month==[1,3,5,7,8,10,12] & day>31
valid = false;
end
else
valid = false;
end
else
valid = false;
end

Best Answer

You are close, but you forgot that the code below returns an array.
month==[4,6,9,11]
Use parantheses to group your coditions. That should also make it more clear that you don't need that elseif.
Consider create a variable to store the number of days in Feb. Currently your code will reject all non-leap years.
Also, you should replace all & and | by && and || as well.
Related Question