功能较旧 - Matlab Coursera课程

时间:2015-08-11 11:07:41

标签: matlab

我正在处理以下问题:

编写一个名为older的函数,它将六个正标量整数作为其输入参数:y1,m1,d1,y2,m2,d2,依次表示两个人的生日。以y开头的变量代表年份,m代表月份,d代表当天。以1结尾的变量对应于第一人,而以2结尾的变量对应于第二人。如果第一个人年龄较大,则函数返回1;如果年龄相同,则返回0;如果第一个人年龄较小,则返回-1。您无需检查输入是否具有适当的值。例如,您可以假设m1和m2都是小于13的正整数,并且天数与它们的月份相符。

function x = older( y1,m1,d1,y2,m2,d2 )

if d1 > d2 && m1 > m2 && y1 > y2
    x = 1;

elseif d1 < d2 && m1 < m2 && y1 < y2
    x = -1;

else

    x = 0;

end

我无法看到我哪里出错了!任何帮助将不胜感激。 感谢

3 个答案:

答案 0 :(得分:1)

您的代码已经错过了几个案例。一个可能的例子是,如果第1人出生在 20/07/2010 ,而第2人出生于 23/05/2011 。在这里,第1人的 更强比人2 较少。你的代码会说他们年龄相同,但他们不是,第1人年纪大了。

最简单的方法是先查看年份。如果他们不同,我们可以返回。如果年份相同,那么我们需要检查月份,如果它们不同我们可以退货,但如果他们不这样做,我们必须对这些日子进行相同的检查。

值得注意的是,如果 person 1的年份大于 person 2 的年份,则为人2岁以上。你已经在你的解决方案中混淆了这一点(我在第一次尝试时也这样做了。)

function x = older(y1, m1, d1, y2, m2, d2)

if (y1 == y2)
    if (m1 == m2)
        if (d1 == d2)
            x = 0;
        elseif (d1 > d2)
            x = -1;
        else
            x = 1;
        end
    elseif (m1 > m2)
        x = -1;
    else
        x = 1;
    end
elseif (y1 > y2)
    x = -1;
else
    x = 1;
end
end

答案 1 :(得分:0)

正如Kavanai4所述,有几个案例你已经错过了。根据他们的解决方案,您可以直接考虑所有这些问题,或者您可以尝试重新设计问题以减少if-else情况。有些人发现这使逻辑变得不那么棘手。

这是解决问题的另一种方法。您可能必须将uint8转换为double以保持在范围内,否则这应该有效。它会将if-else案件保持在最低限度。

function x = older(y1, m1, d1, y2, m2, d2)
tmp1 = y1*10000+m1*100+d1;
tmp2 = y2*10000+m2*100+d2;
if tmp1>tmp2
    x=-1;
elseif tmp1<tmp2
    x=1;
else
    x=0;
end

答案 2 :(得分:-2)

您可能在end语句的底部缺少另一个if