Convert to a function
14 ビュー (過去 30 日間)
古いコメントを表示
I would like this code to be converted to a function.
% Convert to function
year=input('Enter specified year(yyyy):');
if year>0
if mod(year,400)==0
leap_day=1;
else if mod(year,100)==0
leap_day=0;
else if mod(year,4)==0
leap_day=1;
else
leap_day=0;
end
end
end
end
month =input('Enter specified month(1-12):');
if month>=1 && month <=12
switch (month)
case {1,3,5,7,8,10,12}
max_day=31;
case {4,6,9,11}
max_day=30;
case {2}
max_day=28+leap_day;
end
fprintf('Enter specified day (1-%d):',max_day);
day=input('');
if day>=1 && day <=max_day
day_of_year=day;
for ii=1:month-1
switch(ii)
case {1,3,5,7,8,10,12}
day_of_year=day_of_year+31;
case {4,6,9,11}
day_of_year=day_of_year+30;
case {2}
day_of_year=day_of_year+28+leap_day;
end
end
0 件のコメント
採用された回答
Andrei Bobrov
2017 年 10 月 10 日
編集済み: Andrei Bobrov
2017 年 10 月 10 日
>> calender1 = @(day1,month1,year1)datenum(year1,month1,day1) - datenum(year1 - 1,12,31);
>> calender1(3,1,2017)
ans =
3
>> calender1(3,3,2020)
ans =
63
>> calender1(3,3,2017)
ans =
62
>>
or create m - file: calcDaysOfYear.m
function num_of_day = calcDaysOfYear(day1,month1,year1)
dm = 30*ones(12,1);
x = rem(year1,[4,100,400]);
dm(2) = dm(2) - 1 - (x(:,1) | x(:,2)== 0 & x(:,3));
dm([1:2:7,8:2:end]) = dm([1:2:7,8:2:end]) + 1;
num_of_day = day1 + sum(dm(1:month1-1));
end
use
>>calcDaysOfYear(3,1,2017)
ans =
3
>>calcDaysOfYear(3,3,2016)
ans =
63
>>calcDaysOfYear(3,3,2017)
ans =
62
その他の回答 (1 件)
Jan
2017 年 10 月 10 日
編集済み: Jan
2017 年 10 月 10 日
If you really want to use this code instead of the built-in function of the Matlab toolbx (see Andrei's answer), start with:
function [day] = calender(day,month,year)
Now add the code and remove the fprintf and input lines.
Currently your code checks only if year > 0, but what should happen otherwise? Either add an else or define e.g. day=NaN as default values on top of the code.
Note that there is a function called "calender" already, so it is better to use a unique name.
3 件のコメント
Jan
2017 年 10 月 10 日
編集済み: Jan
2017 年 10 月 10 日
There is no image. If you mention an error, please post a complete copy of it also. It is much easier to fix a problem, than ti guess, what the problem is. Thanks.
Start with:
function day_of_year = calender(day,month,year)
day_of_year = NaN;
to avoid overwriting the input "day".
Care for a proper indentation: Mark all code with Ctrl-A and press Ctrl-I.
It will be nicer to replace the "else if" by "elseif":
if mod(year,400)==0
leap_day=1;
elseif mod(year,100)==0
leap_day=0;
elseif mod(year,4)==0
leap_day=1;
else
leap_day=0;
end
Or shorter:
leap_day = (mod(year,4) == 0 && mod(year,100) ~= 0) || ...
(mod(year,400) == 0);
Remove the "day=input('');" also.
参考
カテゴリ
Help Center および File Exchange で Dates and Time についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!