我怎样才能解决这个问题,谁能提供给我代码?我的代码有什么问题吗?

79(30天)
编写一个函数 valid_date 这需要三个正整数输入标量 一年 , , 一天 。如果这三个代表一个有效的日期,返回一个逻辑 真正的 ,否则 。输出参数的名称 有效的 。如果输入不是一个正整数标量,回报 。注意,是完全能被4整除的每年是闰年,多年来除了是完全能被100整除。然而,多年来,正是被400整除也闰年。例如,1900年不是闰年,但2000年。请注意,您的解决方案不能包含任何内置的MATLAB函数相关的日期。
函数(有效的)= valid_date(年、月、日)
如果isscalar(年)& &年> 0 ~ = 0 & & & &年isscalar(月)& &月> 0 ~ = 0 & & & &月isscalar(天)& & & & ar天> 0
如果国防部(,4)= = 0 & &国防部(100年)~ = 0 | |国防部(400年)= = 0 = = 2 & & & &月天< = 29
% 2月
有效= true;
其他的
有效= false;
结束
%对剩下的几个月
如果4月= = | | 6月= = | | 9月= = | | 11月= = & & < = 30天
有效= true;
elseif1月= = | | 3月= = | | 5月= = | | 7月= = | | 8月= = | | 10月= = | | = = 12月& & < = 31天
有效= true;
其他的
有效= false;
结束
%不是闰年
如果2月= = & & > 28天
有效= false;
结束
%的月
如果4月= = | | 6月= = | | 9月= = | | 11月= = & & < = 30天
有效= true;
elseif1月= = | | 3月= = | | 5月= = | | 7月= = | | 8月= = | | 10月= = | | = = 12月& & < = 31天
有效= true;
其他的
有效= false;
结束
其他的
有效= false;
结束
21日的评论
1月”class=
1月 2020年7月29日
编辑:1月 2020年7月29日
@Husein Mammadli:得到错误消息呢?这个消息通常揭示了问题。
代码不检查是否输入标量或正整数的值。Frebrurary代码区分两种情况:
  1. ((mod(100年)= = 0)& & (mod(400年)~ = 0))
  2. (mod (, 4) = = 0)
这不是有用的。你只需要检测闰年:
~国防部(,4)& &国防部(100年)| | ~国防部(400年)
可以简化代码:
函数有效= valid_date(年、月、日)
如果月= = 2%月2
如果国防部(,4)= = 0 & &国防部(100年)| | ~国防部(400年)%闰年
有效=(天< 30);
其他的%不是闰年
有效=(天< 29);
结束
elseif任何(一个月= (1、3、5、7、8、10、12])%月有31天
有效=(天< 32);
其他的%月有30天
有效=(天< 31);
结束
结束
但输入的错误检查仍下落不明。

登录置评。

答案(19)

1月”class=
1月 2019年3月30日
编辑:1月 2019年9月6日
函数有效= valid_date(年、月、日)
%标量正整数限制
如果isscalar(年)> 0 & & & &年修复(年)= = & &
isscalar(月)> 0 & & & &月修复(月)= = & &月< = 12 & &
isscalar(天)> 0 & & & &天修复(天)= =
%闰年:4的倍数,但并不是100年或者400年:
isLeap =(~国防部(,4)& &国防部(100年)| | ~国防部(400年));
%有效:
% *月是4、6、9、11天< = 30,
% *月< = 2和天28或29个闰年
% *其他月和天< = 31
有效=(任何(月= = [4、6、9、11])& & < = 30)| |
(任何(月= =(1、3、5、7、8、10、12])& & < = 31天)| |
(月= = 2 & &日< = 28 + isLeap);
其他的
有效= false;
结束
结束
或者:
函数有效= valid_date(年、月、日)
%匿名函数来检查正整数标量值:
好吧= @ (x) isscalar (x) x > 0 & & & &修复(x) = = x;
有效= false;%的默认的答案
%检查所有输入是否清洁:
如果ok(年)& & ok(月)< = 12 & & & &月好(天)
%检查如果是闰年:
isLeap =(~国防部(,4)& &国防部(100年)| | ~国防部(400年));
%每月的天数,考虑闰年二月份:额
28 + isLeap d =[31日,31日,30日,31日,30日,31日,31日,30日,31日,30日,31);
%实际的比较:
有效=(天< = d(月));
结束
19日的评论

登录置评。


Oleksandr Koreiba”class=
Oleksandr Koreiba 2019年3月30日
函数有效= valid_date(年、月、日)
如果isscalar(年)= = true > 0 & & & &年isscalar(月)= = true & &月> 0 & & & & isscalar > = 12个月(天)= = true & &天> 0%检查输入是否正确
如果(mod(, 4) = = 0 & &国防部(100年)~ = 0 | |国防部(400年)= = 0)%检查如果是飞跃
isleap = true;
其他的
isleap = false;
结束
如果任何(月= =[4、6、9、11])& & < = 30天| |任何(月= =(1、3、5、7、8、10、12])& & < = 31天
有效= true;
elseifisleap = = true = = 2 & & & &月29天< = | | isleap = = = = false & &月2 & & < = 28天
有效= true;
其他的
有效= false;
结束
其他的
有效= false;
结束
结束
只是初学者与matlab, strugle相同。但这里的帮助下设法解决它。也许会有帮助
9日评论
沃尔特·罗伯森”class=
沃尔特·罗伯森 2020年5月12日
如果你的第一次 如果 然后你不设置失败 有效的
注意:isscalar()已经返回真或假;没有必要比较结果为true。
如果isscalar(年)& & isscalar(月)

登录置评。


1月”class=
1月 2019年3月28日
编辑:1月 2019年3月28日
在第二行代码失败,结尾:
isscalar(天)& & & & ar天> 0
“基于“增大化现实”技术”的含义是什么?
在检查 月> 0 不需要检查 月~ = 0 因为这是排除了。但这不是一个错误。
一个问题是,你检查一个闰年:
如果国防部(,4)= = 0 & &国防部(100年)~ = 0 | |
国防部(400年)= = 0 = = 2 & & & &月天< = 29
% 2月
有效= true;
其他的
有效= false;
结束
但后来这段代码运行也:
%不是闰年
如果2月= = & & > 28天
有效= false;
结束
这对于闰年运行也和前的价值 有效的 是覆盖。
请记住, 运算符优先级 & &(链接)是高于| |。然后测试相当于:
如果(mod(, 4) = = 0 & &国防部(100年)~ = 0)| |
(mod(400年)= = 0 = = 2 & & & &月天< = 29)
% 2月
有效= true;
其他的
有效= false;
结束
这集 有效的 真正的 输入:
年= 2004;
月= 2;
天= 30;
因为 国防部(,4)= = 0 & &国防部(100年)~ = 0 真正的 了。您需要显式地设置括号:
如果(mod(, 4) = = 0 & &国防部(100年)~ = 0 | |国防部(400年)= = 0)
< = = = 2 & & & &月天29
我建议重写代码。确定这是一个闰年:
isleap = (mod(, 4) = = 0 & &国防部(100年)~ = 0 | |国防部(400年)= = 0);
然后检查te月的有效性:
如果任何(月= = (4、6、9、11))%更好…
有效=(天< = 30);
elseif……
然后考虑闰年二月份只有额。
28日评论