编写一个名为valid_date的函数,它接受年、月、日三个正整数标量输入。如果这三个表示有效日期,则返回逻辑真值,否则返回假值。输出参数的名称是有效的。

445次观看(过去30天)
嗨,伙计们,
我试过了,但都失败了。例如(valid_date(2018, 4,1) failed,每个月的最后一天
变量valid的值不正确。Valid_date(2000, 1,31)失败…,随机闰年
变量valid的值不正确。Valid_date(1624, 2,29)失败…,随机约会
变量valid的值不正确。Valid_date(1433, 6,28)失败…)
请指出我所犯的错误!
函数Valid = valid_date(年,月,日)
如果(输入参数个数= = 3)
如果(修复(valid_date) &&isscalar (valid_date))
如果((rem (, 4) = = 0 | | rem(400年)= = 0)& & rem(100年)~ = 0)
如果((月==1||3||5||7||9||11)&& 0<天<32)
有效= true;
elseif(月==2 && 0<天<30)
有效= true;
elseif((月==4||6||8||10||12)&& 0<天<31)
有效= true;
其他的
有效= false;
结束
其他的
如果((月==1||3||5||7||9||11)&& 0<天<32)
有效= true;
elseif((月==4||6||8||10||12)&& 0<天<31)
有效= true;
elseif(月==2 && 0<天<29)
有效= true;
其他的
有效= false;
结束
结束
其他的
有效= false;
结束
其他的
有效= false;
结束
4评论
詹姆斯
詹姆斯 2022年10月18日
如果~(isscalar(y) && isscalar(m) && isscalar(d))) isvalid = false;%检查输入是否为正elseif ~all([y, m, d] > 0) isvalid = false;%检查输入是否是整数(不是数据类型)elseif any(rem([y, m, d], 1)) isvalid = false;%检查m和d低于最大可能的elseif (m > 12) || (d > 31) isvalid = false;%输入可能是一个有效的日期,让我们看看它们是否真的是其他的%每个月的天数的向量daysInMonth = [31 28 31 30 31 30 31 31 31 30 31 30 31 31 31 31 30 31 31];%如果是闰年,在2月改变天数If isequal(rem(y, 4), 0) && (~isequal(rem(y, 100), 0) || isequal(rem(y, 400), 0)) daysInMonth(2) = 29;end maxDay = daysInMonth(m);if d > maxDay有效= false;Else是有效的= true;结束结束结束

登录发表评论。

接受的答案

詹姆斯Tursa
詹姆斯Tursa 2019年6月27日
看来你和拉胡尔上同一门课了。我不想在这里重复我的答案,我将简单地引导你到链接:
3评论
Divyanshu古普塔
Divyanshu古普塔 2022年7月3日
你好,我尝试流代码,但它不工作,谁能告诉为什么?
函数Valid = valid_date(年,月,日)
如果Isinteger (year) && year>0 && Isinteger (month) && month==1||month==3||month==5||month==7||month==8||month==10||month==12 && day < 32 && Isinteger (day) && day>0
Valid = true;
elseifIsinteger (year) && year>0 && Isinteger (month) && month==4||month==6||month==9||month==11 && day <31 && Isinteger (day) && day>0
Valid = true;
elseifIsinteger (year) && year>0 && Isinteger (year/4) && Isinteger (year/400) && Isinteger (month) && month == 2 && Isinteger (day) && day>0 && day < 30
Valid = true;
elseifIsinteger (year) && year>0 && ~ Isinteger (year/4) && Isinteger (month) && month == 2 && Isinteger (day) && day>0 && day < 29
Valid = true;
其他的
Valid = false;
结束

登录发表评论。

更多答案(12)

Martín阿瓦洛斯·波斯蒂戈
函数Valid = valid_date(年,月,日)
如果总和(rem((年、月、日),1))= = 0 & &和((年、月、日)> 0)= = 3
如果Ismember (month,[1,3,5,7,8,10,12]) && day<32
有效= true;
elseifIsmember(月,[4,6,9,11])&& day<31
有效= true;
elseif月= = 2 & & ismember(总和(rem(一年,[4100400])= = 0),[1,3])& & < 30天
有效= true;
elseif月= = 2 & & ismember(总和(rem(一年,[4100400])= = 0),[0,2)& & < 29天
有效= true;
其他的
有效= false;
结束
其他的
有效= false;
结束
3评论
沃尔特·罗伯森
沃尔特·罗伯森 2022年8月4日
如果项是整数,则Rem()为0;如果项是分数,则Rem()为非零。所以rem([year,month,day],1)为年,月,日创建了一个分数向量(可能是0)。这些分数相加,和与0比较。假设是,如果所有分数都是0,那么所有分数的和都是0,如果任何一个分数是非零的,那么所有分数的和都是非零的。
然而,代码有一个错误:
总和(rem ([-3.2, 4.2, 5], 1))
Ans = 0
比较
总和(mod ([-3.2, 4.2, 5], 1))
Ans = 1

登录发表评论。


阿Gadge
阿Gadge 2022年7月31日
编辑:阿Gadge 2022年7月31日
%适用于所有情况
函数有效= valid_date (y, m, d)
28天=[31日,31日,30日,31日,30日,31日,31日,30日,31日,30日,31日)
如果(mod(y,4)==0 & mod(y,100) ~=0) | mod(y,400)==0
天(2)= 29
结束
如果(isscalar (y) & isscalar (m) & isscalar (d)) & y > 1 & (m > = 1 & m < = 12) & (d > = 1 & d < =天(m))
有效= true
其他的
有效= false
结束
结束

Jatan沙
Jatan沙 2021年8月5日
编辑:沃尔特·罗伯森 2022年8月4日
函数Valid = valid_date(年,月,日)
如果输入参数个数< 3
Valid = false;
elseif~isscalar(year) || year<1 || year~=fix(year)
Valid = false;
elseif~isscalar(month) || month<1 || month~=fix(month) || month>
Valid = false;
elseif~ isscalar(天)| | 1 >天| |天~ =修复(天)| | > 31天
Valid = false;
elseif(4月= = | | 6月= = | | 9月= = | |月= = 11)& & > 30天
Valid = false;
elseif月==2 &&天>
Valid = false;
elseif月==2 &&日>28 &&(年/4)~=固定(年/4)
Valid = false;
elseif(年/ 100)= =修复(年/ 100)& &(年/ 400)~ =修复(年/ 400)
Valid = false;
其他的
Valid = true;
结束

年代HARIPRAKASH
年代HARIPRAKASH 2021年8月25日
是否有效日期
函数有效= valid_date(年、月、日)
%检查给定的输入是否为标量正整数
% 1 < = < = 31天
% 1 < < = =月12
如果((~ isscalar(年))| | (~ isscalar(月))| | (~ isscalar(天))| |(年< = 0)| |(月< = 0)| |(天< = 0)| |(月> 12)| |(天> 31)| |(~(= =修复(年)))| |(~(月= =修复(月)))| |(~(天= =修复(天))))
有效= false;
返回
结束
闰年二月有29天,非闰年二月有28天
如果(月= = 2)
如果((mod(, 4) = = 0 & &国防部(100年)~ = 0)| | (mod(400年)= = 0))
如果< 30天
有效= true;
返回
其他的
有效= false;
返回
结束
其他的
如果天< 29
有效= true;返回
其他的
有效= false;返回
结束
结束
%检查给定的天数是否在特定月份的天数限制内。
其他的
month_days =[31日31日31日,28日,30日,30日,31日,31日,30日,31日,30日,31);
如果天< = month_days(月)
有效= true;
返回
其他的
有效= false;
返回
结束
结束
结束

Vignesh b s
Vignesh b s 2021年10月13日
函数[valid] = valid_date(年,月,日)
输入= 0;
如果Isscalar (year) == 0
有效=逻辑(0);
输入= 1;
elseifIsscalar (month) == 0
有效=逻辑(0);
输入= 1;
elseifIsscalar (day) == 0
有效=逻辑(0);
输入= 1;
结束
如果<= 0年
有效=逻辑(0);
输入= 1;
elseif月<= 0
有效=逻辑(0);
输入= 1;
elseif<= 0
有效=逻辑(0);
输入= 1;
结束
Leap_year = 0;
如果(mod(year,4) == 0)
Leap_year = 1;
如果Mod (year,100) == 0
如果Mod (year,400) == 0
Leap_year = 1;
其他的
Leap_year = 0;
结束
结束
结束
如果[leap_year,month,day] == [0,2,29]
有效=逻辑(0);
输入= 1;
结束
如果[leap_year,month,day] == [1,2,29]
有效=逻辑的(1);
结束
如果月== 1
如果第>天= 32
有效= (0>1);
输入= 1;
结束
elseif月== 10
如果第>天= 32
有效= (0>1);
输入= 1;
结束
elseif月== 8
如果第>天= 32
有效= (0>1);
输入= 1;
结束
elseif月== 7
如果第>天= 32
有效= (0>1);
输入= 1;
结束
elseif月== 5
如果第>天= 32
有效= (0>1);
输入= 1;
结束
elseif月== 3
如果第>天= 32
有效= (0>1);
输入= 1;
结束
elseif月== 12
如果第>天= 32
有效= (0>1);
输入= 1;
结束
elseif月== 4
如果第>天= 31
有效=逻辑(0);
输入= 1;
结束
elseif月== 9
如果第>天= 31
有效=逻辑(0);
输入= 1;
结束
elseif月== 6
如果第>天= 31
有效=逻辑(0);
输入= 1;
结束
elseif月== 11
如果第>天= 31
有效=逻辑(0);
输入= 1;
结束
结束
如果月== 2
如果第>天= 30
输入= 1;
有效=逻辑(0);
结束
结束
如果月>= 13
输入= 1;
有效=逻辑(0);
结束
如果输入== 0
有效=逻辑的(1);
结束
结束
该死的代码行!!!!!!!但是成功了!!

Karnajit Banik
Karnajit Banik 2022年1月10日
如果~(isscalar(y) && isscalar(m) && isscalar(d))) isvalid = false;%检查输入是否为正elseif ~all([y, m, d] > 0) isvalid = false;%检查输入是否是整数(不是数据类型)elseif any(rem([y, m, d], 1)) isvalid = false;%检查m和d低于最大可能的elseif (m > 12) || (d > 31) isvalid = false;%输入可能是一个有效的日期,让我们看看它们是否真的是其他的%每个月的天数的向量daysInMonth = [31 28 31 30 31 30 31 31 31 30 31 30 31 31 31 31 30 31 31];%如果是闰年,在2月改变天数If isequal(rem(y, 4), 0) && (~isequal(rem(y, 100), 0) || isequal(rem(y, 400), 0)) daysInMonth(2) = 29;end maxDay = daysInMonth(m);if d > maxDay有效= false;Else是有效的= true;结束结束结束

法侯赛因
法侯赛因 2022年1月19日
函数isvalid = valid_date(y, m, d)
检查输入是否有效
检查它们是否是标量
If ~(isscalar(y) && isscalar(m) && isscalar(d))
Isvalid = false;
检查输入是否为正
([y, m, d] > 0)
Isvalid = false;
%检查输入是否为整数(不是数据类型)
else (rem([y, m, d], 1))
Isvalid = false;
检查m和d是否小于最大可能值
Elseif (m >) || (d > 31)
Isvalid = false;
输入可能是有效的日期,让我们看看它们是否真的有效。
其他的
%每个月的天数的向量
daysInMonth = [31 28 31 30 31 30 31 31 31 31 30 30 30 31 30 30 30];
如果闰年,改天在二月。
如果isequal (rem (y, 4), 0) & & (~ isequal (rem (y, 100), 0) | | isequal (rem (y, 400), 0))
daysInMonth(2) = 29;
结束
maxDay = daysInMonth(m);
if d > maxDay
Isvalid = false;
其他的
Isvalid = true;
结束
结束
结束

埃里克·安德森·科尔特斯·贝尼特斯
函数Valid = valid_date(年,月,日)
如果Isscalar(年)&& Isscalar(月)&& Isscalar(日)
如果月< 1 || Month > 12
Valid = false;
其他的
如果月== 2 &&是闰年(年)
有效=天<= 29 &&天>0;
elseifSum (month == [1,3,5,7,8,10,12])
有效=天<= 31 &&天>0;
其他的
有效=天<= 30 &&天>0;
结束
结束
其他的
Valid = false;
结束
函数Re = isleapyear(年)
如果Mod (year,400) == 0
Re = 1;
elseif(mod(year,4) == 0) && (mod(year,100)) ~= 0
Re = 1;
其他的
Re = 0;
结束

Ravleen考尔
Ravleen考尔 2022年5月19日
函数Valid = valid_date(年,月,日)
如果(isscalar(年)& &(> = 1)& &年= =修复(年))& & (isscalar(月)& &((1 < < = 12)=月)& &(月)& &(月= =修复(月)))& & (isscalar(天)& &((1 < =))& &(天= =修复(天)))
如果(月== 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) &&日<32
Valid = true;
elseif(月== 4 || month == 6 || month == 7 || month == 9 || month == 11) &&天<31
Valid = true;
其他的
Valid = false;
结束
如果(月== 2)
如果天< 29
Valid = true;返回
elseif天< 30 & & rem (, 4) = = 0 & & rem(100年)~ = 0 | | rem(400年)= = 0
Valid = true;返回
其他的
Valid = false;返回
结束
结束
其他的
Valid = false;返回
结束

大卫·吴
大卫·吴 2022年6月20日
函数Valid = valid_date(年,月,日)
如果Isscalar (year) == 1 && Isscalar (month) == 1 && Isscalar (day) == 1 && year > 0 && month > 0 && day > 0
如果月<= 12
如果(月== 1 || month == 3 b| month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
如果<= 31天
Valid = true;
其他的
Valid = false;
结束
elseif月== 2
如果(rem (, 4) = = 0 | | rem(400年)= = 0)& & (rem(400年)~ = 100 & & rem(400年)~ = 200 & & rem(400年)~ = 300)
如果<= 29
Valid = true;
其他的
Valid = false;
结束
其他的
如果<= 28天
Valid = true;
其他的
Valid = false;
结束
结束
其他的
如果<= 30天
Valid = true;
其他的
Valid = false;
结束
结束
其他的
Valid = false;
结束
其他的
Valid = false;
结束

默罕默德
默罕默德 2022年7月25日
函数有效= valid_date(年、月、日)
如果isscalar(年)&&isscalar(月)&&isscalar(天)& & (isinteger((年/ 4)= = 0)| | ~ isinteger((年/ 400 = = 0)))& &((月= = 1)| |(月= = 3)| |(月= = 5)| |(月= = 7)| |(月= = 8)| |(月= = 10)| | = = 12(月)& &(> = 1 & &天< = 31)
有效= true;
elseifisscalar(年)&&isscalar(月)&&isscalar(天)& & (isinteger((年/ 4)= = 0)| | ~ isinteger((年/ 400 = = 0)))& &((月= = 4)| |(月= = 6)| |(月= = 9)| | = = 11)(月)& &(> = 1 & &天< = 30)
有效= true;
elseifisscalar(年)&&isscalar(月)&&isscalar(天)& & (mod(, 4) = = 0) & &国防部(100年)~ = 0 = = 2 & & & &月(天> = 1 & & < = 29)
有效= true;
elseifisscalar(年)&&isscalar(月)&&isscalar(天)& & (mod(400年)= = 0)& &(月= = 2)& &(> = 1 & &天< = 29)
有效= true;
elseifisscalar(年)&&isscalar(月)&&isscalar(天)& & (mod(400年)~ = 0)= = 2 & & & &月(天> = 1 & & < = 28)
有效= true;
elseifisscalar(年)&&isscalar(月)&&isscalar(天)& & (mod(, 4) ~ = 0) = = 2 & & & &月(天> = 1 & & < = 28)
有效= true;
其他的
有效= false;
结束
2的评论

登录发表评论。


ARYA
ARYA 2022年10月18日
函数有效= valid_date(年、月、日)
国旗= 0;
如果12月(月< = 0 | | > | |天< = 0 | |天> 31)
国旗= 0;
其他的
如果(4月= = | | 6月= = | | 9月= = | | 11月= =)
如果< = 30天
标志= 1;
其他的
国旗= 0;
结束
elseif月= = 2
如果(mod(, 4) = = 0国防部(100年)~ = 0)| | (mod(400年)= = 0)& & < = 29天
标志= 1;
elseif(< = 28天)
标志= 1;
其他的
国旗= 0;
结束
其他的
如果天< = 31
标志= 1;
其他的
国旗= 0;
结束
结束
结束
如果(~ isscalar(年)| | ~ isscalar(月)| | ~ isscalar(天)
国旗= 0;
结束
如果(标志= = 0)
有效= false;
其他的
有效= true;
结束

社区寻宝

在MATLAB中央找到宝藏,并发现社区可以如何帮助你!

开始狩猎!