MATLAB: If else problem for year

homeworkif statement

Write a function called valid_date that takes three positive integer scalar inputs year, month, day. If these three represent a valid date, return a logical true, otherwise false. The name of the output argument is valid. If any of the inputs is not a positive integer scalar, return false as well. Note that every year that is exactly divisible by 4 is a leap year, except for years that are exactly divisible by 100. However, years that are exactly divisible by 400 are also leap years. For example, the year 1900 was not leap year, but the year 2000 was.
valid = valid_date(2018,4,1)
valid = valid_date(2018,4,31)

Best Answer

All of those if-elseif blocks make the code difficult to read, and difficult to debug as well. I would advise against that approach, and instead tackle each issue one at a time and code only for that issue. That makes the logic of each test much easier to read and to debug. For example, here is an outline of what the code could do using words:
function valid = valid_date(year,month,day)
valid = false; % Set a default return value
% Check for positive integer scalar inputs
if( the year is not a positive integer scalar )
return;
end
if( the month is not a positive integer scalar )
return;
end
if( the day is not a positive integer scalar )
return;
end
% Check for proper month
if( the month is not between 1 and 12 inclusive )
return;
end
% Construct an array of the number of days in each month
days_in_month = a 12-element array of the number of days in each month;
% Check to see if this is a leap year
is_leap_year = (you put some code here to determine if the year is a leap year)
% If it is a leap year, change February number of days to 29
if( is_leap_year )
Change the days_in_month value for February to 29
end
% Check to see if the day number is valid
if( the day is greater than the number of days in the month )
return;
end
% Passed all of our checks, so the date must be valid
valid = true;
return;
end
Once you are satisfied that the words do what you want (you should check this yourself ... maybe I missed something that needs to be checked), then you need to write actual code for all of the worded places. The code you write for this outline will in many places be pieces of the code you have already written in your if-elseif blocks above.
Related Question