Write a function called day_diff that takes four scalar positive integer inputs, month1, day1, month2, day2. These represents the birthdays of two children who were born in 2015. The function returns a positive integer scalar that is equal to the dif

2 vues (au cours des 30 derniers jours)
I can't deal it anymore. I have trouble to check an integer number or an array number in order to input argument in this problem .
function dd = day_diff(month1, day1, month2, day2)
if (month1 && day1 >0)&&(month1
if true
% code
end <= 12)&&(month2 && day2 >0) && month2 <= 12
if isinteger(month1 &&
if (month1 == 1 && month2 == 1)||(month1 == 3 && month2 == 3)||(month1 == 5 && month2 == 5)||(month1 == 7 && month2 == 7)||(month1 == 8 && month2 == 8)||(month1 == 10 && month2 == 10)||(month1 == 12 && month2 == 12) && day1<=31 && day2<=31
if day1 == day2
total1 = day1;
total2 = day2;
elseif day1 ~= day2
total1 = max(day1,day2);
total2 = min(day1,day2);
end
elseif (month1 == 4 && month2 == 4) ||(month1 == 6 && month2 == 6)||(month1 == 9 && month2 == 9)||(month1 == 11 && month2 == 11) % months have 30 days
if day1 == day2 && day1<=30 && day2<30
total1 = day1;
total2 = day2;
elseif day1 ~= day2 && day1<=30 && day2<30
total1 = max(day1,day2);
total2 = min(day1,day2);
else
dd=-1; return
end
elseif month1 == 1 && month2 ==2
total1 = day1;
total2 = day2+31;
elseif (month1 == 2 && day1<=28) && month2 == 1
total1 = day1 + 31;
total2 = day2;
elseif (month1 == 2 && day1>28) && month2 == 1
dd=-1;
return
elseif month1 == 1 && month2 == 12
total1 = day1;
total2 = day2 + 334;
elseif month1 == 2 && month2 == 3
total1 = day1 + 31;
total2 = day2 + 59;
elseif month1 == 1 && day1<=31&& month2 == 4
total1 = day1;
total2 = day2 + 90;
elseif month1 == 1 && day1>31 && month2 == 4
dd=-1; return
elseif month1 == 11 && day1<=30 && month2 == 12
total1 = day1 ;
total2 = day2 + 30;
elseif month1 == 11 && day1>30 && month2 == 12
dd=-1;
return
elseif month1 == 7 && month2 == 9
total1 = day1 + 181;
total2 = day2 + 243;
elseif month1 == 2 && day1<=28 && month2 == 6 && day2>30
dd=-1; return
elseif month1 == 2 && day1<=28 && month2 == 6 && day2<=30
total1 = day1;
total2 = day2 + 92;
end
dd = (max(total1,total2)) - (min(total1,total2));
else
dd = -1;
return
end
end

Réponses (4)

Image Analyst
Image Analyst le 26 Nov 2016
Why not make your function just be a wrapper for etime()? Did they specifically prohibit using that function?
  4 commentaires
Image Analyst
Image Analyst le 26 Août 2017
Floor rounds down to minus infinity. Fix rounds towards zero. They give different results when operating on negative numbers.

Connectez-vous pour commenter.


Ugur Ulas
Ugur Ulas le 29 Déc 2017
Modifié(e) : Ugur Ulas le 29 Déc 2017
Here there is more basic solution:
function dd = day_diff(m1, d1, m2, d2)
A = [31 28 31 30 31 30 31 31 30 31 30 31]';
day1 = d1 + sum(A(1:(m1-1)));
day2 = d2 + sum(A(1:(m2-1)));
if prod(size(m1)) ~= 1 || prod(size(m2)) ~= 1 || prod(size(d1)) ~= 1 || prod(size(d2)) ~= 1
dd = -1;
elseif m1 < 1 || m2 < 1 || d1 < 1 || d2 < 1 || m1 ~= floor(m1) || m2 ~= floor(m2) || d1 ~= floor(d1) || d2 ~= floor(d2)
dd = -1;
elseif A(m1) < d1 || A(m2) < d2
dd = -1;
else
dd = abs(day2-day1);
end
end
  4 commentaires
Raunil Raj
Raunil Raj le 7 Mar 2018
Thank you for you response but I actually wanted to know the logic behind this:
elseif A(m1) < d1 || A(m2) < d2
dd = -1;
Image Analyst
Image Analyst le 8 Mar 2018
It says to set dd equal to minus one if A is less than d1 at the m1 index, or if A is less than d2 at the m2 index.

Connectez-vous pour commenter.


Vignesh M
Vignesh M le 4 Mai 2018
if true
function [ dd ] = day_diff( m1,d1,m2,d2 )
% Short circuiting!
N = [31,28,31,30,31,30,31,31,30,31,30,31];
if isscalar(m1) && isscalar(d1) && isscalar(m2) && isscalar(d2) && ... m1 == fix(m1) && d1 == fix(d1) && m2 == fix(m2) && d2 == fix(d2) &&... m1 > 0 && m1 <= 12 && m2 > 0 && m2 <= 12 && ... d1 > 0 && d1 <= N(m1) && d2 > 0 && d2 <= N(m2)
day1 = d1 + sum(N(1:1:m1-1));
day2 = d2 + sum(N(1:1:m2-1));
dd = abs(day1-day2)
else
dd = -1
end
end

RAMAKANT SHAKYA
RAMAKANT SHAKYA le 8 Fév 2019
function dd=day_diff(m1,d1,m2,d2)
num_of_days=[31,28,31,30,31,30,31,31,30,31,30,31];
dd=-1;
mmm1=round(m1);mmm2=round(m2);ddd1=round(d1);ddd2=round(d2);
if(isscalar(d1)&&isscalar(d2)&&isscalar(m1)&&isscalar(m2)) % checking for valid input
if(d1-ddd1 || d2-ddd2 || m1-mmm1 || m2-mmm2) % checking for valid input
dd=-1;
else
if (m1<1||m1>12||m2<1||m2>12) %checking months
dd=-1;
else
if(d1>num_of_days(m1) || d2>num_of_days(m2) || d1<1 || d2<1) %validating days of respective month
dd=-1;
else
dd1=sum(num_of_days(1:m1));
dd1=dd1+d1-num_of_days(m1);
dd2=sum(num_of_days(1:m2));
dd2=dd2+d2-num_of_days(m2);
if(dd1>=dd2)
dd=dd1-dd2;
else
dd=dd2-dd1;
end
end
end
end
end

Catégories

En savoir plus sur Just for fun dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by