24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1099  |  回复: 3

轻描淡写01

新虫 (小有名气)

[求助] Matlab题目 求解 明天就交作业了~~~~~~~已有1人参与

例3:编写一个程序,输入年,月,日,输出这一年到该日期为止已经逝去的天数(包括当天)
• 程序需要计算先前月份的天数之后,然后再计算当月已经过去了多少天,在求和的过程中将会用到for循环。
• 每一个月的天数不尽相同,我们用switch结构来确定每一个月的正确天数。
• 涉及闰年,在公历中,闰年是这样规定的
1. 能被400整除的年为闰年
2. 不能被400整除但能被100整除的年不为闰年
3. 不能被100整除但能被4整除的年为闰年
4. 其余的年份不为闰年
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mygt_hit

专家顾问 (职业作家)

【答案】应助回帖

感谢参与,应助指数 +1
CODE:
function [TotalDays, Flag_Leap_Year] = MyTotalDays(yyyy,mm,dd)
% 计算当年逝去天数
% 也可用Matlab库函数daysdif计算:daysdif('01/01/2015','11/04/2015',0)
% datenum也可。
Year = yyyy;
Month = mm;
Day = dd;
% 建议增加年月日数据合法性判断
% 判断是否为闰年
% 1. 能被400整除的年为闰年
% 2. 不能被400整除但能被100整除的年不为闰年
% 3. 不能被100整除但能被4整除的年为闰年
% 4. 其余的年份不为闰年
Flag_Leap_Year = 0;
if rem(Year,400) == 0
    Flag_Leap_Year = 1;
elseif rem(Year,400) ~= 0 && rem(Year,100) == 0
    Flag_Leap_Year = 0;
elseif rem(Year,100) ~= 0 && rem(Year,4) == 0
    Flag_Leap_Year = 1;
else
    Flag_Leap_Year = 0;
end
TotalDays = 0;
for i = 1:mm-1
    TotalDays = TotalDays + MyMonth(i, Flag_Leap_Year);
end
TotalDays = TotalDays + Day;

end

function Days = MyMonth(Month,IsLeapYear)
% 计算给定月份天数
Days = 0;
if Month == 2
    Days = 28*(~IsLeapYear) + 29*IsLeapYear;
elseif Month == 4 || Month == 6 || Month == 9 || Month == 11
    Days = 30;
else
    Days = 31;
end
end

用法示例
[D,F] = MyTotalDays(2015,11,04)
D =
   308
F =
     0
返回D:天数;F:是否为闰年。
知其然,知其所以然。
2楼2015-11-04 23:48:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

轻描淡写01

新虫 (小有名气)

引用回帖:
2楼: Originally posted by mygt_hit at 2015-11-04 23:48:48
function  = MyTotalDays(yyyy,mm,dd)
% 计算当年逝去天数
% 也可用Matlab库函数daysdif计算:daysdif('01/01/2015','11/04/2015',0)
% datenum也可。
Year = yyyy;
Month = mm;
Day = dd;
% 建议增加年月日 ...

谢谢啦  ~~~  已经解决了
3楼2015-11-05 10:14:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

shenyxtata

金虫 (正式写手)

2楼给个完整程序才赏1个金币
4楼2015-11-05 10:20:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 轻描淡写01 的主题更新
信息提示
请填处理意见