首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >旧函数- Matlab Coursera课程

旧函数- Matlab Coursera课程
EN

Stack Overflow用户
提问于 2015-08-11 19:07:41
回答 3查看 605关注 0票数 0

我正在研究以下问题:

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

代码语言:javascript
复制
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

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

EN

回答 3

Stack Overflow用户

发布于 2015-08-11 19:17:17

你在你的代码中遗漏了几个案例。一个可能的例子是,如果person 1出生于20/07/2010,person 2出生于23/05/2011。这里,人员1的daysyears都大于人员2的,但月份小于。你的代码会说他们同龄,但事实并非如此,person 1比你大。

解决这个问题的最简单方法是首先检查年份。如果它们不同,我们可以返回。如果年份相同,那么我们需要检查月份,如果它们不同,我们可以返回,但如果它们不同,我们必须对日期执行相同的检查。

值得注意的是,如果person 1的年份大于person 2的年份,则person 2的年龄更大。您在您的解决方案中混淆了这一点(我在第一次尝试时也是如此)。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2015-08-11 23:01:56

正如Kavanai4所说的,有几个案例你已经漏掉了。您可以根据他们的解决方案直接说明所有这些问题,或者您也可以尝试重新处理问题,以减少if-else情况。一些人发现,这使得逻辑不那么棘手。

这是解决这个问题的另一种方法。您可能必须将uint8转换为double以保持在范围内,但除此之外,这应该可以工作。这将把if-else的用例降到最低。

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2015-08-11 19:18:51

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

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31940123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档