MATLAB:如何为非标量返回值-1
编写一个名为day_diff的函数,它接受四个标量正整数输入:month1、day1、month2、day2。这是2015年出生的两个孩子的生日。该函数返回一个正整数标量,该标量等于两个孩子的年龄之差(以天为单位)。确保检查输入值的类型正确,并且它们表示有效日期。如果错误,则返回-1。对该函数的调用示例如下:MATLAB:如何为非标量返回值-1,matlab,Matlab,编写一个名为day_diff的函数,它接受四个标量正整数输入:month1、day1、month2、day2。这是2015年出生的两个孩子的生日。该函数返回一个正整数标量,该标量等于两个孩子的年龄之差(以天为单位)。确保检查输入值的类型正确,并且它们表示有效日期。如果错误,则返回-1。对该函数的调用示例如下: dd = day_diff(1,30,2,1); 这将使dd等于2。不允许使用内置函数datenum或datetime function dd = day_diff(month1, da
dd = day_diff(1,30,2,1);
这将使dd等于2。不允许使用内置函数datenum
或datetime
function dd = day_diff(month1, day1, month2, day2)
if (month1 && month2 > 0) || (month1 && month2 <= 12)
if month1 == 1 && month2 == 1
if day1 == day2
total1 = day1;
total2 = day2;
elseif day1 ~= day2
total1 = max(day1,day2);
total2 = min(day1,day2);
end
elseif month1 == 1 && month2 == 2
total1 = day1;
total2 = day2 + 31;
elseif (month1 == 2 && day1 <= 28) && month2 == 1
total1 = day1 + 31;
total2 = day2;
elseif month1 == 1 && month2 == 12
total1 = day1;
total2 = day2 + 334;
elseif month1 == 2 && month2 == 3
total1 = day1 + 31;
total2 = day2 + 59;
elseif month1 == 7 && month2 == 9
total1 = day1 + 181;
total2 = day2 + 243;
elseif month1 == 1 && month2 == 4
total1 = day1;
total2 = day2 + 90;
else
dd = -1;
return
end
end
if (day1<1 || day1>31) || (month1<1 || month1>12)
dd = -1;
return
elseif day2<1 || day2>31 || (month2<1 || month2>12)
dd = -1;
return
else
dd = (max(total1,total2)) - (min(total1,total2));
end
function dd=day_diff(month1、day1、month2、day2)
如果(month1&&month2>0)| |(month1&&month2要检查任何输入是否不是数组,可以执行以下操作:
if any([length(month1)~=1, length(month2)~=1, length(day1)~=1, length(day2)~=1;])
dd=-1;
return;
end
我会这样做:
function dd = day_diff(varargin)
if nargin~= 4 || any(~cellfun(@isscalar,varargin))
dd = -1; return;
end
month1 = varargin{1};
day1 = varargin{2};
month2 = varargin{3};
day2 = varargin{4};
... rest of your code
解决方案不正确。例如,如果您将使用(8,29,8 25),您必须有4天的时间,但在您的程序中您将有-1。所有程序都是用大量错误代码编写的