How to request additional data from the user in a function

Hi, Thanks for reading this.
I have to call a function, then it appears I need to request more data from within the function. Data the user is supposed to type on the screen. How do I do this? The problem is stated as:
I have to admit I'm a little unclear with regard to what the problem statement is requesting.

11 件のコメント

Jiro Doke
Jiro Doke 2016 年 12 月 7 日
編集済み: Jiro Doke 2016 年 12 月 7 日
Take a look at this example:
The output to your problem would be something similar to "patient array" in the above example, where there will be N elements based on the input you provide. For example, if the input is 2 (February), there are 29 days in Feb 2016, so the struct array will have 29 elements, where each element corresponds to each day of the month.
This should be enough to get you started.
BTW, the question doesn't seem to state that you need to request additional data from within the function. The function simply takes in one input argument, and that's it.
DJ V
DJ V 2016 年 12 月 7 日
THe issue of data accepted is the confusing part. IF the Matlab function only takes in a single digit indicating the month, how do I get the day of the month desired? It appears to require a second query within the function.
Stephen23
Stephen23 2016 年 12 月 7 日
編集済み: Stephen23 2016 年 12 月 7 日
" It appears to require a second query within the function."
No, have a look at the example that you have been given. Selecting the day occurs by indexing into the output variable m, not by an input argument to the function. The output variable needs to contain all days for the selected month.
DJ V
DJ V 2016 年 12 月 7 日
I'm getting an error in the following code:
The error is:
In an assignment A(:) = B, the number of elements in A and B must be the same.
It occurs when I start assigning dayvalues to dates in the loop for "1" or January for 2016, using "m = year2016(1)" as my function call. Why is this happening? How do I fix it?
function S = year2016( i)
%YEAR2016 Summary of this function goes here
% Detailed explanation goes here
cest=true;
for month = 1:12
if i == month
cest = false;
end
if month ==12 && cest == true
S = [];
break;
end
end
dayvalue=(31);
if i ==4 || i == 9 ||i == 11 || i ==6
if i ==4
monthvalue ='April';
for n = 1 to 30
datevalue(n) =n;
end
dayvalue(1)='Fri';
dayvalue(2)='Sat';
dayvalue(3)='Sun';
dayvalue(4)='Mon';
dayvalue(5)='Tue';
dayvalue(6)='Wed';
dayvalue(7)='Thu';
dayvalue(8)='Fri';
dayvalue(9)='Sat';
dayvalue(10)='Sun';
dayvalue(11)='Mon';
dayvalue(12)='Tue';
dayvalue(13)='Wed';
dayvalue(14)='Thu';
dayvalue(15)= 'Fri';
dayvalue(16)='Sat';
dayvalue(17)='Sun';
dayvalue(18)='Mon';
dayvalue(19)='Tue';
dayvalue(20)='Wed';
dayvalue(21)='Thu';
dayvalue(22)='Fri';
dayvalue(23)='Sat';
dayvalue(24)='Sun';
dayvalue(25)='Mon';
dayvalue(26)='Tue';
dayvalue(27)='Wed';
dayvalue(28)='Thu';
dayvalue(29)='Fri';
dayvalue(30)='Sat';
end
if i == 6
monthvalue ='June';
for n = 1 to 30
datevalue(n) =n;
end
dayvalue(1)='Wed';
dayvalue(2)='Thu';
dayvalue(3)='Fri';
dayvalue(4)='Sat';
dayvalue(5)='Sun';
dayvalue(6)='Mon';
dayvalue(7)='Tue';
dayvalue(8)='Wed';
dayvalue(9)='Thu';
dayvalue(10)= 'Fri';
dayvalue(11)='Sat';
dayvalue(12)='Sun';
dayvalue(13)='Mon';
dayvalue(14)='Tue';
dayvalue(15)='Wed';
dayvalue(16)='Thu';
dayvalue(17)='Fri';
dayvalue(18)='Sat';
dayvalue(19)='Sun';
dayvalue(20)='Mon';
dayvalue(21)='Tue';
dayvalue(22)='Wed';
dayvalue(23)='Thu';
dayvalue(24)='Fri';
dayvalue(25)='Sat';
dayvalue(26)='Sun';
dayvalue(27)='Mon';
dayvalue(28)='Tue';
dayvalue(29)='Wed';
dayvalue(30)='Thu';
end
if i == 9
monthvalue =' September';
for n = 1 to 30
datevalue(n) =n;
end
dayvalue(1)='Thu';
dayvalue(2)='Fri';
dayvalue(3)='Sat';
dayvalue(4)='Sun';
dayvalue(5)='Mon';
dayvalue(6)='Tue';
dayvalue(7)='Wed';
dayvalue(8)='Thu';
dayvalue(9)= 'Fri';
dayvalue(10)='Sat';
dayvalue(11)='Sun';
dayvalue(12)='Mon';
dayvalue(13)='Tue';
dayvalue(14)='Wed';
dayvalue(15)='Thu';
dayvalue(16)='Fri';
dayvalue(17)='Sat';
dayvalue(18)='Sun';
dayvalue(19)='Mon';
dayvalue(20)='Tue';
dayvalue(21)='Wed';
dayvalue(22)='Thu';
dayvalue(23)='Fri';
dayvalue(24)='Sat';
dayvalue(25)='Sun';
dayvalue(26)='Mon';
dayvalue(27)='Tue';
dayvalue(28)='Wed';
dayvalue(29)='Thu';
dayvalue(30)='Fri';
end
if i == 11
monthvalue = 'November';
for n = 1 to 30
datevalue(n) =n;
end
dayvalue(1)='Tue';
dayvalue(2)='Wed';
dayvalue(3)='Thu';
dayvalue(4)='Fri';
dayvalue(5)='Sat';
dayvalue(6)='Sun';
dayvalue(7)='Mon';
dayvalue(8)='Tue';
dayvalue(9)='Wed';
dayvalue(10)='Thu';
dayvalue(11)= 'Fri';
dayvalue(12)='Sat';
dayvalue(13)='Sun';
dayvalue(14)='Mon';
dayvalue(15)='Tue';
dayvalue(16)='Wed';
dayvalue(17)='Thu';
dayvalue(18)='Fri';
dayvalue(19)='Sat';
dayvalue(20)='Sun';
dayvalue(21)='Mon';
dayvalue(22)='Tue';
dayvalue(23)='Wed';
dayvalue(24)='Thu';
dayvalue(25)='Fri';
dayvalue(26)='Sat';
dayvalue(27)='Sun';
dayvalue(28)='Mon';
dayvalue(29)='Tue';
dayvalue(30)='Wed';
end
if i ==2
monthvalue = 'February';
for n = 1 to 28
datevalue(n) = n
end
dayvalue(1)='Mon';
dayvalue(2)='Tue';
dayvalue(3)='Wed';
dayvalue(4)='Thu';
dayvalue(5)='Fri';
dayvalue(6)='Sat';
dayvalue(7)='Sun';
dayvalue(8)='Mon';
dayvalue(9)='Tue';
dayvalue(10)='Wed';
dayvalue(11)='Thu';
dayvalue(12)='Fri';
dayvalue(13)='Sat';
dayvalue(14)='Sun';
dayvalue(15)='Mon';
dayvalue(16)='Tue';
dayvalue(17)='Wed';
dayvalue(18)='Thu';
dayvalue(19)='Fri';
dayvalue(20)='Sat';
dayvalue(21)='Sun';
dayvalue(22)='Mon';
dayvalue(23)='Tue';
dayvalue(24)='Wed';
dayvalue(25)='Thu';
dayvalue(26)='Fri';
dayvalue(27)='Sat';
dayvalue(28)='Sun';
dayvalue(29)='Mon';
end
end
if i==1||i ==3||i==5||i == 7||i==8||i ==10||i ==12
if i == 1
for n = 1:31
datevalue(n) =n;
end
dayvalue(1)='Fri';
dayvalue(2)='Sat';
dayvalue(3)='Sun';
dayvelue(4)='Mon';
dayvalue(5)='Tue';
dayvalue(6)='Wed';
dayvalue(7)='Thu';
dayvalue(8)='Fri';
dayvalue(9)='Sat';
dayvalue(10)='Sun';
dayvalue(11)='Mon';
dayvalue(12)='Tue';
dayvalue(13)='Wed';
dayvalue(14)='Thu';
dayvalue(15)= 'Fri';
dayvalue(16)='Sat';
dayvalue(17)='Sun';
dayvalue(18)='Mon';
dayvalue(19)='Tue';
dayvalue(20)='Wed';
dayvalue(21)='Thu';
dayvalue(22)='Fri';
dayvalue(23)='Sat';
dayvalue(24)='Sun';
dayvalue(25)='Mon';
dayvalue(26)='Tue';
dayvalue(27)='Wed';
dayvalue(28)='Thu';
dayvalue(29)='Fri';
dayvalue(30)='Sat';
dayvalue(31)='Sun';
end
if i == 3
for n = 1: 31
datevalue(n) =n;
end
dayvalue(1)='Tue';
dayvalue(2)='Wed';
dayvalue(3)='Thu';
dayvalue(4)='Fri';
dayvalue(5)='Sat';
dayvalue(6)='Sun';
dayvalue(7)='Mon';
dayvalue(8)='Tue';
dayvalue(9)='Wed';
dayvalue(10)='Thu';
dayvalue(11)= 'Fri';
dayvalue(12)='Sat';
dayvalue(13)='Sun';
dayvalue(14)='Mon';
dayvalue(15)='Tue';
dayvalue(16)='Wed';
dayvalue(17)='Thu';
dayvalue(18)='Fri';
dayvalue(19)='Sat';
dayvalue(20)='Sun';
dayvalue(21)='Mon';
dayvalue(22)='Tue';
dayvalue(23)='Wed';
dayvalue(24)='Thu';
dayvalue(25)='Fri';
dayvalue(26)='Sat';
dayvalue(27)='Sun';
dayvalue(28)='Mon';
dayvalue(29)='Tue';
dayvalue(30)='Wed';
dayvalue(31)='Thu';
end
if i == 5
for n = 1 :31
datevalue(n) =n;
end
dayvalue(1)='Sun';
dayvalue(2)='Mon';
dayvalue(3)='Tue';
dayvalue(4)='Wed';
dayvalue(5)='Thu';
dayvalue(6)= 'Fri';
dayvalue(7)='Sat';
dayvalue(8)='Sun';
dayvalue(9)='Mon';
dayvalue(10)='Tue';
dayvalue(11)='Wed';
dayvalue(12)='Thu';
dayvalue(13)='Fri';
dayvalue(14)='Sat';
dayvalue(15)='Sun';
dayvalue(16)='Mon';
dayvalue(17)='Tue';
dayvalue(18)='Wed';
dayvalue(19)='Thu';
dayvalue(20)='Fri';
dayvalue(21)='Sat';
dayvalue(22)='Sun';
dayvalue(23)='Mon';
dayvalue(24)='Tue';
dayvalue(25)='Wed';
dayvalue(26)='Thu';
dayvalue(27)='Fri';
dayvalue(28)='Sat';
dayvalue(29)='Sun';
dayvalue(30)='Mon';
dayvalue(31)='Tue';
end
if i == 7
for n = 1:31
datevalue(n) =n;
end
dayvalue(1)='Fri';
dayvalue(2)='Sat';
dayvalue(3)='Sun';
dayvelue(4)='Mon';
dayvalue(5)='Tue';
dayvalue(6)='Wed';
dayvalue(7)='Thu';
dayvalue(8)='Fri';
dayvalue(9)='Sat';
dayvalue(10)='Sun';
dayvalue(11)='Mon';
dayvalue(12)='Tue';
dayvalue(13)='Wed';
dayvalue(14)='Thu';
dayvalue(15)= 'Fri';
dayvalue(16)='Sat';
dayvalue(17)='Sun';
dayvalue(18)='Mon';
dayvalue(19)='Tue';
dayvalue(20)='Wed';
dayvalue(21)='Thu';
dayvalue(22)='Fri';
dayvalue(23)='Sat';
dayvalue(24)='Sun';
dayvalue(25)='Mon';
dayvalue(26)='Tue';
dayvalue(27)='Wed';
dayvalue(28)='Thu';
dayvalue(29)='Fri';
dayvalue(30)='Sat';
dayvalue(31)='Sun';
end
if i == 8
for n = 1 :31
datevalue(n) =n;
end
dayvalue(1)='Mon';
dayvalue(2)='Tue';
dayvalue(3)='Wed';
dayvalue(4)='Thu';
dayvalue(5)='Fri';
dayvalue(6)='Sat';
dayvalue(7)='Sun';
dayvalue(8)='Mon';
dayvalue(9)='Tue';
dayvalue(10)='Wed';
dayvalue(11)='Thu';
dayvalue(12)='Fri';
dayvalue(13)='Sat';
dayvalue(14)='Sun';
dayvalue(15)='Mon';
dayvalue(16)='Tue';
dayvalue(17)='Wed';
dayvalue(18)='Thu';
dayvalue(19)='Fri';
dayvalue(20)='Sat';
dayvalue(21)='Sun';
dayvalue(22)='Mon';
dayvalue(23)='Tue';
dayvalue(24)='Wed';
dayvalue(25)='Thu';
dayvalue(26)='Fri';
dayvalue(27)='Sat';
dayvalue(28)='Sun';
dayvalue(29)='Mon';
dayvalue(30)='Tue';
dayvalue(31)='Wed';
end
if i == 10
for n = 1: 31
datevalue(n) =n;
end
dayvalue(1)='Sat';
dayvalue(2)='Sun';
dayvalue(3)='Mon';
dayvalue(4)='Tue';
dayvalue(5)='Wed';
dayvalue(6)='Thu';
dayvalue(7)= 'Fri';
dayvalue(8)='Sat';
dayvalue(9)='Sun';
dayvalue(10)='Mon';
dayvalue(11)='Tue';
dayvalue(12)='Wed';
dayvalue(13)='Thu';
dayvalue(14)='Fri';
dayvalue(15)='Sat';
dayvalue(16)='Sun';
dayvalue(17)='Mon';
dayvalue(18)='Tue';
dayvalue(19)='Wed';
dayvalue(20)='Thu';
dayvalue(21)='Fri';
dayvalue(22)='Sat';
dayvalue(23)='Sun';
dayvalue(24)='Mon';
dayvalue(25)='Tue';
dayvalue(26)='Wed';
dayvalue(27)='Thu';
dayvalue(28)='Fri';
dayvalue(29)='Sat';
dayvalue(30)='Sun';
dayvalue(31)='Mon';
end
if i == 12
for n = 1: 31
datevalue(n) =n;
end
dayvalue(1)='Thu';
dayvalue(2)='Fri';
dayvalue(3)='Sat';
dayvalue(4)='Sun';
dayvalue(5)='Mon';
dayvalue(6)='Tue';
dayvalue(7)='Wed';
dayvalue(8)='Thu';
dayvalue(9)= 'Fri';
dayvalue(10)='Sat';
dayvalue(11)='Sun';
dayvalue(12)='Mon';
dayvalue(13)='Tue';
dayvalue(14)='Wed';
dayvalue(15)='Thu';
dayvalue(16)='Fri';
dayvalue(17)='Sat';
dayvalue(18)='Sun';
dayvalue(19)='Mon';
dayvalue(20)='Tue';
dayvalue(21)='Wed';
dayvalue(22)='Thu';
dayvalue(23)='Fri';
dayvalue(24)='Sat';
dayvalue(25)='Sun';
dayvalue(26)='Mon';
dayvalue(27)='Tue';
dayvalue(28)='Wed';
dayvalue(29)='Thu';
dayvalue(30)='Fri';
dayvalue(31)='Sat';
Cancel end struct S(month, monthvalue, date,datevalue, day,dayvalue);
end
Geoff Hayes
Geoff Hayes 2016 年 12 月 7 日
That's a lot of code and a lot more than necessary for this homework assignment. Start with a simple example starting with January. All you should need is to know how many days there are in each month (for 2016) and which day was January 1rst, 2016 (it was a Friday).
As for your error, put a breakpoint at the line that is throwing the error and then run your code. When the debugger pauses at this line, what can you say about dayvalue? Does your assignment make sense given how it has been initialized? Look closely at the line
dayvalue=(31);
What does this mean to you? All that you are doing is assigning 31 to this variable. I suspect that you are trying to create an array of 31 elements but this is not the way to do so. If you know how many days are in the month, then initialize your structure array as
numDaysInMonth = 31;
S(numDaysInMonth) = struct('month','','date',0,'day','');
Now iterate over each element in the array and update the month, date, and day fields.
DJ V
DJ V 2016 年 12 月 7 日
編集済み: Stephen23 2017 年 4 月 10 日
I don't understand what you mean by stopping the code at the line where it faces the error. All I get out of that is an error message. I've altered my code to conform to your instructions, but somehow it still isn't working.It takes the code for the date(n) as a number, but it won't take a string when it corresponds to a date.
Geoff Hayes
Geoff Hayes 2016 年 12 月 8 日
Ummm...did we just do DJ's homework (again)?
Lauren Jablonowski
Lauren Jablonowski 2018 年 5 月 10 日
編集済み: Lauren Jablonowski 2018 年 5 月 10 日
I'm having an issue where I'm getting an error message when the tested input is zero. It is supposed to return an empty struct in this case, but I cannot get an if statement to work within this construct. Thanks! My code is below:
function MDD = year2016(m)
for m = 1:12
VN = datenum([2016,m,1]):datenum([2016,m+1,1])-1;
DN = 1+mod(VN-3,7);
MC = {'January';'February';'March';'April';'May';'June';'July';'August';'September';'October';'November';'December'};
DC = {'Mon','Tue','Wed','Thu','Fri','Sat','Sun'};
MDD = struct('day',DC(DN),'date',num2cell(1:numel(VN)));
[MDD(:).month] = deal(MC{m});
end
for m = 0
MDD = struct();
end
end
Stephen23
Stephen23 2018 年 5 月 10 日
@Lauren Jablonowski: none of your for loops make any sense. Get rid of them. Use one if statement.
Lauren Jablonowski
Lauren Jablonowski 2018 年 5 月 18 日
@Stephen Cobeldick: thanks! with the if statement and isscalar function I was able to fully solve this.

サインインしてコメントする。

 採用された回答

Stephen23
Stephen23 2016 年 12 月 8 日
編集済み: Stephen23 2016 年 12 月 8 日

0 投票

Something like this:
function out = year2016(m)
VN = datenum([2016,m,1]):datenum([2016,m+1,1])-1;
DN = 1+mod(VN-3,7);
MC = {'January';'February';'March';'April';'May';'June';'July';'August';'September';'October';'November';'December'};
DC = {'Mon','Tue','Wed','Thu','Fri','Sat','Sun'};
out = struct('day',DC(DN),'date',num2cell(1:numel(VN)));
[out(:).month] = deal(MC{m});
end
And tested:
>> m = year2016(12); m(8)
ans =
day = Thu
date = 8
month = December
>> m = year2016(1); m(1)
ans =
day = Fri
date = 1
month = January
>> m = year2016(2); m(29)
ans =
day = Mon
date = 29
month = February

3 件のコメント

DJ V
DJ V 2016 年 12 月 8 日
I don't see how this will make the days of the month correspond to the dates.
Stephen23
Stephen23 2016 年 12 月 8 日
編集済み: Stephen23 2016 年 12 月 8 日
@DJ V: I used datenum and colon notation to generate a vector of all serial date numbers for the selected month. Then mod to determine the day of the week as an index from 1 to 7. The day field is generated using this index to select the day of the week from a cell array of strings. The date field is generated by simply generating a vector of numbers from 1 to the length of the day field. The month field is simply filled in by using the input month to select the month string from a cell array of strings.
Here are the first two critical lines:
>> m = 2; % feb
>> VN = datenum([2016,m,1]):datenum([2016,m+1,1])-1
VN =
736361 736362 736363 736364 736365 736366 736367 736368 736369 736370 736371 736372 736373 736374 736375 736376 736377 736378 736379 736380 736381 736382 736383 736384 736385 736386 736387 736388 736389
>> DN = 1+mod(VN-3,7)
DN =
1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1
DN is a vector of all days of the week for the month. Check it yourself if you do not believe me (Hint: the first and last days of February 2016 were both Mondays, which is what my code shows above). This vector DN is simply used as an index to give the days corresponding to the dates, exactly as requested. The dates is a simple vector from 1 to numel(..) because where I come from the first day of the month is the 1st.
"I don't see how this will make the days of the month correspond to the dates"
That is okay. Use MATLAB's documentation to help you understand how the functions I used work. Try them out yourself: play around with them, try different values. When you do this you might learn some much better ways to write code than relying on if's and copy-and-pasting hundreds of lines of text.
DJ V
DJ V 2016 年 12 月 8 日
It works, thanks!

サインインしてコメントする。

その他の回答 (3 件)

Geoff Hayes
Geoff Hayes 2016 年 12 月 7 日

1 投票

DJ - the function returns an array of structs where each element corresponds to a day of the month. So if the user passes in an integer that is outside of the interval [1,12], then an empty array is returned. If the integer is within this interval, then the array has that many structs as days in the month. For example, if 1 is the passed in integer, then the output is an array of 31 elements where m(1) corresponds to January 1rst, m(2) corresponds to January 2nd, etc.

1 件のコメント

DJ V
DJ V 2016 年 12 月 7 日
Thanks, I read it over again and saw that.

サインインしてコメントする。

Walter Roberson
Walter Roberson 2016 年 12 月 7 日

1 投票

Your code uses (for example)
for n = 1 :31
datevalue(n) =n;
monthvalue(n)='August';
end
assigns numeric values to datevalue, so datevalue(1) is a numeric scalar.
Then after that you
dayvalue(1)='Mon';
or similar. That attempts to assign the 3-element character vector ['M', 'o', 'n'] to the single numeric scalar position dayvalue(1)
In order to be able to make the assignment
dayvalue(1)='Mon';
you would need to modify your initialization loop to
for n = 1 :31
datevalue(n) = strings(1);
monthvalue(n)='August';
end
(there are other better ways, but this is the minimum change.)
You will need to be using R2016b to do this. If you are using any earlier release then it is not possible to do
dayvalue(1)='Mon';
and you would need to switch to cell arrays such as
dayvalue{1}='Mon';
after having change the initialization to
for n = 1 :31
datevalue(n) = cell(1);
monthvalue(n)='August';
end
(again, there are better ways.)

6 件のコメント

DJ V
DJ V 2016 年 12 月 8 日
編集済み: Walter Roberson 2016 年 12 月 8 日
believe there is an error in your code, you are assigning datevalue(n) to strings, but I want to assign dayvalue(n) to strings.
DJ V
DJ V 2016 年 12 月 8 日
編集済み: DJ V 2016 年 12 月 8 日
Okay, it runs, but I'm getting empty array elements back rather than array elements filled with data when I enter m(7), this is with:
if i == 1
numDaysInMonth = 31;
S(numDaysInMonth) = struct('month','January','date',0,'day','');
for n = 1:31
datevalue(n) =n;
month='January';
dayvalue(n)=strings(1);
end
dayvalue(1)='Fri';
dayvalue(2)='Sat';
Walter Roberson
Walter Roberson 2016 年 12 月 8 日
You are not storing anything into m with that code. You have no variable named m anywhere in your posted code.
DJ V
DJ V 2016 年 12 月 8 日
Okay, this appears to work, but the grader software doesn't like the answer, although it appears to be correct, the only thing I notice is that the example has day: 'Sun' in single quote marks, and I have day: "Sun" in double quote marks.
and my code produced day: "Sun", which suggests I have a different type than the grader program wants.
function S = year2016( i)
%YEAR2016 Summary of this function goes here
% Detailed explanation goes here
cest=true;
for month = 1:12
if i == month
cest = false;
end
if month ==12 && cest == true
S = [];
break;
end
end
if i ==4 || i == 9 ||i == 11 || i ==6 || i == 2
if i ==4
monthval = 'April';
daycount = 30;
for n = 1:30
datevalue(n) =n;
dayvalue(n)=strings(1);
end
dayvalue(1)='Fri';
dayvalue(2)='Sat';
dayvalue(3)='Sun';
dayvalue(4)='Mon';
dayvalue(5)='Tue';
dayvalue(6)='Wed';
dayvalue(7)='Thu';
dayvalue(8)='Fri';
dayvalue(9)='Sat';
dayvalue(10)='Sun';
dayvalue(11)='Mon';
dayvalue(12)='Tue';
dayvalue(13)='Wed';
dayvalue(14)='Thu';
dayvalue(15)= 'Fri';
dayvalue(16)='Sat';
dayvalue(17)='Sun';
dayvalue(18)='Mon';
dayvalue(19)='Tue';
dayvalue(20)='Wed';
dayvalue(21)='Thu';
dayvalue(22)='Fri';
dayvalue(23)='Sat';
dayvalue(24)='Sun';
dayvalue(25)='Mon';
dayvalue(26)='Tue';
dayvalue(27)='Wed';
dayvalue(28)='Thu';
dayvalue(29)='Fri';
dayvalue(30)='Sat';
end
if i == 6
monthval = 'June';
daycount = 30;
for n = 1:30
datevalue(n) =n;
dayvalue(n)=strings(1);
end
dayvalue(1)='Wed';
dayvalue(2)='Thu';
dayvalue(3)='Fri';
dayvalue(4)='Sat';
dayvalue(5)='Sun';
dayvalue(6)='Mon';
dayvalue(7)='Tue';
dayvalue(8)='Wed';
dayvalue(9)='Thu';
dayvalue(10)= 'Fri';
dayvalue(11)='Sat';
dayvalue(12)='Sun';
dayvalue(13)='Mon';
dayvalue(14)='Tue';
dayvalue(15)='Wed';
dayvalue(16)='Thu';
dayvalue(17)='Fri';
dayvalue(18)='Sat';
dayvalue(19)='Sun';
dayvalue(20)='Mon';
dayvalue(21)='Tue';
dayvalue(22)='Wed';
dayvalue(23)='Thu';
dayvalue(24)='Fri';
dayvalue(25)='Sat';
dayvalue(26)='Sun';
dayvalue(27)='Mon';
dayvalue(28)='Tue';
dayvalue(29)='Wed';
dayvalue(30)='Thu';
end
if i == 9
monthval = 'September';
daycount = 30;
for n = 1:30
datevalue(n) =n;
dayvalue(n)=strings(1);
end
dayvalue(1)='Thu';
dayvalue(2)='Fri';
dayvalue(3)='Sat';
dayvalue(4)='Sun';
dayvalue(5)='Mon';
dayvalue(6)='Tue';
dayvalue(7)='Wed';
dayvalue(8)='Thu';
dayvalue(9)= 'Fri';
dayvalue(10)='Sat';
dayvalue(11)='Sun';
dayvalue(12)='Mon';
dayvalue(13)='Tue';
dayvalue(14)='Wed';
dayvalue(15)='Thu';
dayvalue(16)='Fri';
dayvalue(17)='Sat';
dayvalue(18)='Sun';
dayvalue(19)='Mon';
dayvalue(20)='Tue';
dayvalue(21)='Wed';
dayvalue(22)='Thu';
dayvalue(23)='Fri';
dayvalue(24)='Sat';
dayvalue(25)='Sun';
dayvalue(26)='Mon';
dayvalue(27)='Tue';
dayvalue(28)='Wed';
dayvalue(29)='Thu';
dayvalue(30)='Fri';
end
if i == 11
monthval = 'November';
daycount = 30;
for n = 1:30
datevalue(n) =n;
dayvalue(n)=strings(1);
end
dayvalue(1)='Tue';
dayvalue(2)='Wed';
dayvalue(3)='Thu';
dayvalue(4)='Fri';
dayvalue(5)='Sat';
dayvalue(6)='Sun';
dayvalue(7)='Mon';
dayvalue(8)='Tue';
dayvalue(9)='Wed';
dayvalue(10)='Thu';
dayvalue(11)= 'Fri';
dayvalue(12)='Sat';
dayvalue(13)='Sun';
dayvalue(14)='Mon';
dayvalue(15)='Tue';
dayvalue(16)='Wed';
dayvalue(17)='Thu';
dayvalue(18)='Fri';
dayvalue(19)='Sat';
dayvalue(20)='Sun';
dayvalue(21)='Mon';
dayvalue(22)='Tue';
dayvalue(23)='Wed';
dayvalue(24)='Thu';
dayvalue(25)='Fri';
dayvalue(26)='Sat';
dayvalue(27)='Sun';
dayvalue(28)='Mon';
dayvalue(29)='Tue';
dayvalue(30)='Wed';
end
if i ==2
monthval = 'February';
daycount = 29;
for n = 1:29
datevalue(n) =n;
dayvalue(n)=strings(1);
end
dayvalue(1)='Mon';
dayvalue(2)='Tue';
dayvalue(3)='Wed';
dayvalue(4)='Thu';
dayvalue(5)='Fri';
dayvalue(6)='Sat';
dayvalue(7)='Sun';
dayvalue(8)='Mon';
dayvalue(9)='Tue';
dayvalue(10)='Wed';
dayvalue(11)='Thu';
dayvalue(12)='Fri';
dayvalue(13)='Sat';
dayvalue(14)='Sun';
dayvalue(15)='Mon';
dayvalue(16)='Tue';
dayvalue(17)='Wed';
dayvalue(18)='Thu';
dayvalue(19)='Fri';
dayvalue(20)='Sat';
dayvalue(21)='Sun';
dayvalue(22)='Mon';
dayvalue(23)='Tue';
dayvalue(24)='Wed';
dayvalue(25)='Thu';
dayvalue(26)='Fri';
dayvalue(27)='Sat';
dayvalue(28)='Sun';
dayvalue(29)='Mon';
end
for n =1:daycount
S(n) = struct('month',monthval,'date',datevalue(n),'day',dayvalue(n));
end
return;
end
if i==1||i ==3||i==5||i == 7||i==8||i ==10||i ==12
if i == 1
monthval = 'January';
daycount = 31;
for n = 1:31
datevalue(n) =n;
dayvalue(n)=strings(1);
end
dayvalue(1)='Fri';
dayvalue(2)='Sat';
dayvalue(3)='Sun';
dayvalue(4)='Mon';
dayvalue(5)='Tue';
dayvalue(6)='Wed';
dayvalue(7)='Thu';
dayvalue(8)='Fri';
dayvalue(9)='Sat';
dayvalue(10)='Sun';
dayvalue(11)='Mon';
dayvalue(12)='Tue';
dayvalue(13)='Wed';
dayvalue(14)='Thu';
dayvalue(15)= 'Fri';
dayvalue(16)='Sat';
dayvalue(17)='Sun';
dayvalue(18)='Mon';
dayvalue(19)='Tue';
dayvalue(20)='Wed';
dayvalue(21)='Thu';
dayvalue(22)='Fri';
dayvalue(23)='Sat';
dayvalue(24)='Sun';
dayvalue(25)='Mon';
dayvalue(26)='Tue';
dayvalue(27)='Wed';
dayvalue(28)='Thu';
dayvalue(29)='Fri';
dayvalue(30)='Sat';
dayvalue(31)='Sun';
end
if i == 3
monthval = 'March';
daycount = 31;
for n = 1:31
datevalue(n) =n;
dayvalue(n)=strings(1);
end
dayvalue(1)='Tue';
dayvalue(2)='Wed';
dayvalue(3)='Thu';
dayvalue(4)='Fri';
dayvalue(5)='Sat';
dayvalue(6)='Sun';
dayvalue(7)='Mon';
dayvalue(8)='Tue';
dayvalue(9)='Wed';
dayvalue(10)='Thu';
dayvalue(11)= 'Fri';
dayvalue(12)='Sat';
dayvalue(13)='Sun';
dayvalue(14)='Mon';
dayvalue(15)='Tue';
dayvalue(16)='Wed';
dayvalue(17)='Thu';
dayvalue(18)='Fri';
dayvalue(19)='Sat';
dayvalue(20)='Sun';
dayvalue(21)='Mon';
dayvalue(22)='Tue';
dayvalue(23)='Wed';
dayvalue(24)='Thu';
dayvalue(25)='Fri';
dayvalue(26)='Sat';
dayvalue(27)='Sun';
dayvalue(28)='Mon';
dayvalue(29)='Tue';
dayvalue(30)='Wed';
dayvalue(31)='Thu';
end
if i == 5
monthval = 'May';
daycount = 31;
for n = 1:31
datevalue(n) =n;
dayvalue(n)=strings(1);
end
dayvalue(1)='Sun';
dayvalue(2)='Mon';
dayvalue(3)='Tue';
dayvalue(4)='Wed';
dayvalue(5)='Thu';
dayvalue(6)= 'Fri';
dayvalue(7)='Sat';
dayvalue(8)='Sun';
dayvalue(9)='Mon';
dayvalue(10)='Tue';
dayvalue(11)='Wed';
dayvalue(12)='Thu';
dayvalue(13)='Fri';
dayvalue(14)='Sat';
dayvalue(15)='Sun';
dayvalue(16)='Mon';
dayvalue(17)='Tue';
dayvalue(18)='Wed';
dayvalue(19)='Thu';
dayvalue(20)='Fri';
dayvalue(21)='Sat';
dayvalue(22)='Sun';
dayvalue(23)='Mon';
dayvalue(24)='Tue';
dayvalue(25)='Wed';
dayvalue(26)='Thu';
dayvalue(27)='Fri';
dayvalue(28)='Sat';
dayvalue(29)='Sun';
dayvalue(30)='Mon';
dayvalue(31)='Tue';
end
if i == 7
monthval = 'July';
daycount = 31;
for n = 1:31
datevalue(n) =n;
dayvalue(n)=strings(1);
end
dayvalue(1)='Fri';
dayvalue(2)='Sat';
dayvalue(3)='Sun';
dayvelue(4)='Mon';
dayvalue(5)='Tue';
dayvalue(6)='Wed';
dayvalue(7)='Thu';
dayvalue(8)='Fri';
dayvalue(9)='Sat';
dayvalue(10)='Sun';
dayvalue(11)='Mon';
dayvalue(12)='Tue';
dayvalue(13)='Wed';
dayvalue(14)='Thu';
dayvalue(15)= 'Fri';
dayvalue(16)='Sat';
dayvalue(17)='Sun';
dayvalue(18)='Mon';
dayvalue(19)='Tue';
dayvalue(20)='Wed';
dayvalue(21)='Thu';
dayvalue(22)='Fri';
dayvalue(23)='Sat';
dayvalue(24)='Sun';
dayvalue(25)='Mon';
dayvalue(26)='Tue';
dayvalue(27)='Wed';
dayvalue(28)='Thu';
dayvalue(29)='Fri';
dayvalue(30)='Sat';
dayvalue(31)='Sun';
end
if i == 8
monthval = 'August';
daycount = 31;
for n = 1:31
datevalue(n) =n;
dayvalue(n)=strings(1);
end
dayvalue(1)='Mon';
dayvalue(2)='Tue';
dayvalue(3)='Wed';
dayvalue(4)='Thu';
dayvalue(5)='Fri';
dayvalue(6)='Sat';
dayvalue(7)='Sun';
dayvalue(8)='Mon';
dayvalue(9)='Tue';
dayvalue(10)='Wed';
dayvalue(11)='Thu';
dayvalue(12)='Fri';
dayvalue(13)='Sat';
dayvalue(14)='Sun';
dayvalue(15)='Mon';
dayvalue(16)='Tue';
dayvalue(17)='Wed';
dayvalue(18)='Thu';
dayvalue(19)='Fri';
dayvalue(20)='Sat';
dayvalue(21)='Sun';
dayvalue(22)='Mon';
dayvalue(23)='Tue';
dayvalue(24)='Wed';
dayvalue(25)='Thu';
dayvalue(26)='Fri';
dayvalue(27)='Sat';
dayvalue(28)='Sun';
dayvalue(29)='Mon';
dayvalue(30)='Tue';
dayvalue(31)='Wed';
end
if i == 10
monthval = 'October';
daycount = 31;
for n = 1:31
datevalue(n) =n;
dayvalue(n)=strings(1);
end
end
dayvalue(1)='Sat';
dayvalue(2)='Sun';
dayvalue(3)='Mon';
dayvalue(4)='Tue';
dayvalue(5)='Wed';
dayvalue(6)='Thu';
dayvalue(7)= 'Fri';
dayvalue(8)='Sat';
dayvalue(9)='Sun';
dayvalue(10)='Mon';
dayvalue(11)='Tue';
dayvalue(12)='Wed';
dayvalue(13)='Thu';
dayvalue(14)='Fri';
dayvalue(15)='Sat';
dayvalue(16)='Sun';
dayvalue(17)='Mon';
dayvalue(18)='Tue';
dayvalue(19)='Wed';
dayvalue(20)='Thu';
dayvalue(21)='Fri';
dayvalue(22)='Sat';
dayvalue(23)='Sun';
dayvalue(24)='Mon';
dayvalue(25)='Tue';
dayvalue(26)='Wed';
dayvalue(27)='Thu';
dayvalue(28)='Fri';
dayvalue(29)='Sat';
dayvalue(30)='Sun';
dayvalue(31)='Mon';
end
if i == 12
monthval = 'December';
daycount = 31;
for n = 1:31
datevalue(n) =n;
dayvalue(n)=strings(1);
end
dayvalue(1)='Thu';
dayvalue(2)='Fri';
dayvalue(3)='Sat';
dayvalue(4)='Sun';
dayvalue(5)='Mon';
dayvalue(6)='Tue';
dayvalue(7)='Wed';
dayvalue(8)='Thu';
dayvalue(9)= 'Fri';
dayvalue(10)='Sat';
dayvalue(11)='Sun';
dayvalue(12)='Mon';
dayvalue(13)='Tue';
dayvalue(14)='Wed';
dayvalue(15)='Thu';
dayvalue(16)='Fri';
dayvalue(17)='Sat';
dayvalue(18)='Sun';
dayvalue(19)='Mon';
dayvalue(20)='Tue';
dayvalue(21)='Wed';
dayvalue(22)='Thu';
dayvalue(23)='Fri';
dayvalue(24)='Sat';
dayvalue(25)='Sun';
dayvalue(26)='Mon';
dayvalue(27)='Tue';
dayvalue(28)='Wed';
dayvalue(29)='Thu';
dayvalue(30)='Fri';
dayvalue(31)='Sat';
end
for n =1:daycount
S(n) = struct('month',monthval,'date',datevalue(n),'day',dayvalue(n));
end
end
DJ V
DJ V 2016 年 12 月 8 日
Okay, what follows works. It isn't graded as right by the software, but it does what its supposed to do. I think the problem is the string declaration instead of using an array of chars for the three letter day of week abbreviations. Any idea how to do that with chars instead of a string?
function S = year2016(i)
%YEAR2016 Summary of this function goes here
% Detailed explanation goes here
cest=true;
for month = 1:12
if i == month
cest = false;
end
if month ==12 && cest == true
S = [];
break;
end
end
if i ==4 || i == 9 ||i == 11 || i ==6 || i == 2
if i ==4
monthval = 'April';
daycount = 30;
for n = 1:30
datevalue(n) =n;
dayvalue(n)=strings(1);
end
dayvalue(1)='Fri';
dayvalue(2)='Sat';
dayvalue(3)='Sun';
dayvalue(4)='Mon';
dayvalue(5)='Tue';
dayvalue(6)='Wed';
dayvalue(7)='Thu';
dayvalue(8)='Fri';
dayvalue(9)='Sat';
dayvalue(10)='Sun';
dayvalue(11)='Mon';
dayvalue(12)='Tue';
dayvalue(13)='Wed';
dayvalue(14)='Thu';
dayvalue(15)= 'Fri';
dayvalue(16)='Sat';
dayvalue(17)='Sun';
dayvalue(18)='Mon';
dayvalue(19)='Tue';
dayvalue(20)='Wed';
dayvalue(21)='Thu';
dayvalue(22)='Fri';
dayvalue(23)='Sat';
dayvalue(24)='Sun';
dayvalue(25)='Mon';
dayvalue(26)='Tue';
dayvalue(27)='Wed';
dayvalue(28)='Thu';
dayvalue(29)='Fri';
dayvalue(30)='Sat';
end
if i == 6
monthval = 'June';
daycount = 30;
for n = 1:30
datevalue(n) =n;
dayvalue(n)=strings(1);
end
dayvalue(1)='Wed';
dayvalue(2)='Thu';
dayvalue(3)='Fri';
dayvalue(4)='Sat';
dayvalue(5)='Sun';
dayvalue(6)='Mon';
dayvalue(7)='Tue';
dayvalue(8)='Wed';
dayvalue(9)='Thu';
dayvalue(10)= 'Fri';
dayvalue(11)='Sat';
dayvalue(12)='Sun';
dayvalue(13)='Mon';
dayvalue(14)='Tue';
dayvalue(15)='Wed';
dayvalue(16)='Thu';
dayvalue(17)='Fri';
dayvalue(18)='Sat';
dayvalue(19)='Sun';
dayvalue(20)='Mon';
dayvalue(21)='Tue';
dayvalue(22)='Wed';
dayvalue(23)='Thu';
dayvalue(24)='Fri';
dayvalue(25)='Sat';
dayvalue(26)='Sun';
dayvalue(27)='Mon';
dayvalue(28)='Tue';
dayvalue(29)='Wed';
dayvalue(30)='Thu';
end
if i == 9
monthval = 'September';
daycount = 30;
for n = 1:30
datevalue(n) =n;
dayvalue(n)=strings(1);
end
dayvalue(1)='Thu';
dayvalue(2)='Fri';
dayvalue(3)='Sat';
dayvalue(4)='Sun';
dayvalue(5)='Mon';
dayvalue(6)='Tue';
dayvalue(7)='Wed';
dayvalue(8)='Thu';
dayvalue(9)= 'Fri';
dayvalue(10)='Sat';
dayvalue(11)='Sun';
dayvalue(12)='Mon';
dayvalue(13)='Tue';
dayvalue(14)='Wed';
dayvalue(15)='Thu';
dayvalue(16)='Fri';
dayvalue(17)='Sat';
dayvalue(18)='Sun';
dayvalue(19)='Mon';
dayvalue(20)='Tue';
dayvalue(21)='Wed';
dayvalue(22)='Thu';
dayvalue(23)='Fri';
dayvalue(24)='Sat';
dayvalue(25)='Sun';
dayvalue(26)='Mon';
dayvalue(27)='Tue';
dayvalue(28)='Wed';
dayvalue(29)='Thu';
dayvalue(30)='Fri';
end
if i == 11
monthval = 'November';
daycount = 30;
for n = 1:30
datevalue(n) =n;
dayvalue(n)=strings(1);
end
dayvalue(1)='Tue';
dayvalue(2)='Wed';
dayvalue(3)='Thu';
dayvalue(4)='Fri';
dayvalue(5)='Sat';
dayvalue(6)='Sun';
dayvalue(7)='Mon';
dayvalue(8)='Tue';
dayvalue(9)='Wed';
dayvalue(10)='Thu';
dayvalue(11)= 'Fri';
dayvalue(12)='Sat';
dayvalue(13)='Sun';
dayvalue(14)='Mon';
dayvalue(15)='Tue';
dayvalue(16)='Wed';
dayvalue(17)='Thu';
dayvalue(18)='Fri';
dayvalue(19)='Sat';
dayvalue(20)='Sun';
dayvalue(21)='Mon';
dayvalue(22)='Tue';
dayvalue(23)='Wed';
dayvalue(24)='Thu';
dayvalue(25)='Fri';
dayvalue(26)='Sat';
dayvalue(27)='Sun';
dayvalue(28)='Mon';
dayvalue(29)='Tue';
dayvalue(30)='Wed';
end
if i ==2
monthval = 'February';
daycount = 29;
dayvalue(1:29)= string(1);
for n = 1:29
datevalue(n) =n;
end
dayvalue(1)='Mon';
dayvalue(2)='Tue';
dayvalue(3)='Wed';
dayvalue(4)='Thu';
dayvalue(5)='Fri';
dayvalue(6)='Sat';
dayvalue(7)='Sun';
dayvalue(8)='Mon';
dayvalue(9)='Tue';
dayvalue(10)='Wed';
dayvalue(11)='Thu';
dayvalue(12)='Fri';
dayvalue(13)='Sat';
dayvalue(14)='Sun';
dayvalue(15)='Mon';
dayvalue(16)='Tue';
dayvalue(17)='Wed';
dayvalue(18)='Thu';
dayvalue(19)='Fri';
dayvalue(20)='Sat';
dayvalue(21)='Sun';
dayvalue(22)='Mon';
dayvalue(23)='Tue';
dayvalue(24)='Wed';
dayvalue(25)='Thu';
dayvalue(26)='Fri';
dayvalue(27)='Sat';
dayvalue(28)='Sun';
dayvalue(29)='Mon';
end
for n =1:daycount
S(n) = struct('month',monthval,'date',datevalue(n),'day',dayvalue(n));
end
return;
end
if i==1||i ==3||i==5||i == 7||i==8||i ==10||i ==12
if i == 1
monthval = 'January';
daycount = 31;
for n = 1:31
datevalue(n) =n;
dayvalue(n)=strings(1);
end
dayvalue(1)='Fri';
dayvalue(2)='Sat';
dayvalue(3)='Sun';
dayvalue(4)='Mon';
dayvalue(5)='Tue';
dayvalue(6)='Wed';
dayvalue(7)='Thu';
dayvalue(8)='Fri';
dayvalue(9)='Sat';
dayvalue(10)='Sun';
dayvalue(11)='Mon';
dayvalue(12)='Tue';
dayvalue(13)='Wed';
dayvalue(14)='Thu';
dayvalue(15)= 'Fri';
dayvalue(16)='Sat';
dayvalue(17)='Sun';
dayvalue(18)='Mon';
dayvalue(19)='Tue';
dayvalue(20)='Wed';
dayvalue(21)='Thu';
dayvalue(22)='Fri';
dayvalue(23)='Sat';
dayvalue(24)='Sun';
dayvalue(25)='Mon';
dayvalue(26)='Tue';
dayvalue(27)='Wed';
dayvalue(28)='Thu';
dayvalue(29)='Fri';
dayvalue(30)='Sat';
dayvalue(31)='Sun';
end
if i == 3
monthval = 'March';
daycount = 31;
for n = 1:31
datevalue(n) =n;
dayvalue(n)=strings(1);
end
dayvalue(1)='Tue';
dayvalue(2)='Wed';
dayvalue(3)='Thu';
dayvalue(4)='Fri';
dayvalue(5)='Sat';
dayvalue(6)='Sun';
dayvalue(7)='Mon';
dayvalue(8)='Tue';
dayvalue(9)='Wed';
dayvalue(10)='Thu';
dayvalue(11)= 'Fri';
dayvalue(12)='Sat';
dayvalue(13)='Sun';
dayvalue(14)='Mon';
dayvalue(15)='Tue';
dayvalue(16)='Wed';
dayvalue(17)='Thu';
dayvalue(18)='Fri';
dayvalue(19)='Sat';
dayvalue(20)='Sun';
dayvalue(21)='Mon';
dayvalue(22)='Tue';
dayvalue(23)='Wed';
dayvalue(24)='Thu';
dayvalue(25)='Fri';
dayvalue(26)='Sat';
dayvalue(27)='Sun';
dayvalue(28)='Mon';
dayvalue(29)='Tue';
dayvalue(30)='Wed';
dayvalue(31)='Thu';
end
if i == 5
monthval = 'May';
daycount = 31;
for n = 1:31
datevalue(n) =n;
dayvalue(n)=strings(1);
end
dayvalue(1)='Sun';
dayvalue(2)='Mon';
dayvalue(3)='Tue';
dayvalue(4)='Wed';
dayvalue(5)='Thu';
dayvalue(6)= 'Fri';
dayvalue(7)='Sat';
dayvalue(8)='Sun';
dayvalue(9)='Mon';
dayvalue(10)='Tue';
dayvalue(11)='Wed';
dayvalue(12)='Thu';
dayvalue(13)='Fri';
dayvalue(14)='Sat';
dayvalue(15)='Sun';
dayvalue(16)='Mon';
dayvalue(17)='Tue';
dayvalue(18)='Wed';
dayvalue(19)='Thu';
dayvalue(20)='Fri';
dayvalue(21)='Sat';
dayvalue(22)='Sun';
dayvalue(23)='Mon';
dayvalue(24)='Tue';
dayvalue(25)='Wed';
dayvalue(26)='Thu';
dayvalue(27)='Fri';
dayvalue(28)='Sat';
dayvalue(29)='Sun';
dayvalue(30)='Mon';
dayvalue(31)='Tue';
end
if i == 7
monthval = 'July';
daycount = 31;
for n = 1:31
datevalue(n) =n;
dayvalue(n)=strings(1);
end
dayvalue(1)='Fri';
dayvalue(2)='Sat';
dayvalue(3)='Sun';
dayvalue(4)='Mon';
dayvalue(5)='Tue';
dayvalue(6)='Wed';
dayvalue(7)='Thu';
dayvalue(8)='Fri';
dayvalue(9)='Sat';
dayvalue(10)='Sun';
dayvalue(11)='Mon';
dayvalue(12)='Tue';
dayvalue(13)='Wed';
dayvalue(14)='Thu';
dayvalue(15)= 'Fri';
dayvalue(16)='Sat';
dayvalue(17)='Sun';
dayvalue(18)='Mon';
dayvalue(19)='Tue';
dayvalue(20)='Wed';
dayvalue(21)='Thu';
dayvalue(22)='Fri';
dayvalue(23)='Sat';
dayvalue(24)='Sun';
dayvalue(25)='Mon';
dayvalue(26)='Tue';
dayvalue(27)='Wed';
dayvalue(28)='Thu';
dayvalue(29)='Fri';
dayvalue(30)='Sat';
dayvalue(31)='Sun';
end
if i == 8
monthval = 'August';
daycount = 31;
for n = 1:31
datevalue(n) =n;
dayvalue(n)=strings(1);
end
dayvalue(1)='Mon';
dayvalue(2)='Tue';
dayvalue(3)='Wed';
dayvalue(4)='Thu';
dayvalue(5)='Fri';
dayvalue(6)='Sat';
dayvalue(7)='Sun';
dayvalue(8)='Mon';
dayvalue(9)='Tue';
dayvalue(10)='Wed';
dayvalue(11)='Thu';
dayvalue(12)='Fri';
dayvalue(13)='Sat';
dayvalue(14)='Sun';
dayvalue(15)='Mon';
dayvalue(16)='Tue';
dayvalue(17)='Wed';
dayvalue(18)='Thu';
dayvalue(19)='Fri';
dayvalue(20)='Sat';
dayvalue(21)='Sun';
dayvalue(22)='Mon';
dayvalue(23)='Tue';
dayvalue(24)='Wed';
dayvalue(25)='Thu';
dayvalue(26)='Fri';
dayvalue(27)='Sat';
dayvalue(28)='Sun';
dayvalue(29)='Mon';
dayvalue(30)='Tue';
dayvalue(31)='Wed';
end
if i == 10
monthval = 'October';
daycount = 31;
for n = 1:31
datevalue(n) =n;
dayvalue(n)=strings(1);
end
dayvalue(1)='Sat';
dayvalue(2)='Sun';
dayvalue(3)='Mon';
dayvalue(4)='Tue';
dayvalue(5)='Wed';
dayvalue(6)='Thu';
dayvalue(7)= 'Fri';
dayvalue(8)='Sat';
dayvalue(9)='Sun';
dayvalue(10)='Mon';
dayvalue(11)='Tue';
dayvalue(12)='Wed';
dayvalue(13)='Thu';
dayvalue(14)='Fri';
dayvalue(15)='Sat';
dayvalue(16)='Sun';
dayvalue(17)='Mon';
dayvalue(18)='Tue';
dayvalue(19)='Wed';
dayvalue(20)='Thu';
dayvalue(21)='Fri';
dayvalue(22)='Sat';
dayvalue(23)='Sun';
dayvalue(24)='Mon';
dayvalue(25)='Tue';
dayvalue(26)='Wed';
dayvalue(27)='Thu';
dayvalue(28)='Fri';
dayvalue(29)='Sat';
dayvalue(30)='Sun';
dayvalue(31)='Mon';
end
if i == 12
monthval = 'December';
daycount = 31;
for n = 1:31
datevalue(n) =n;
dayvalue(n)=strings(1);
end
dayvalue(1)='Thu';
dayvalue(2)='Fri';
dayvalue(3)='Sat';
dayvalue(4)='Sun';
dayvalue(5)='Mon';
dayvalue(6)='Tue';
dayvalue(7)='Wed';
dayvalue(8)='Thu';
dayvalue(9)= 'Fri';
dayvalue(10)='Sat';
dayvalue(11)='Sun';
dayvalue(12)='Mon';
dayvalue(13)='Tue';
dayvalue(14)='Wed';
dayvalue(15)='Thu';
dayvalue(16)='Fri';
dayvalue(17)='Sat';
dayvalue(18)='Sun';
dayvalue(19)='Mon';
dayvalue(20)='Tue';
dayvalue(21)='Wed';
dayvalue(22)='Thu';
dayvalue(23)='Fri';
dayvalue(24)='Sat';
dayvalue(25)='Sun';
dayvalue(26)='Mon';
dayvalue(27)='Tue';
dayvalue(28)='Wed';
dayvalue(29)='Thu';
dayvalue(30)='Fri';
dayvalue(31)='Sat';
end
for n =1:daycount
S(n) = struct('month',monthval,'date',datevalue(n),'day',dayvalue(n));
end
end
Walter Roberson
Walter Roberson 2016 年 12 月 8 日
See what I posted about cell arrays.

サインインしてコメントする。

Radoslav Gagov
Radoslav Gagov 2017 年 4 月 10 日

0 投票

Here is how I dealed with the Problem:
m = year2016(n)
if length(n) ~= 1 || n < 1 || n >12 || n ~= round(n)
year = []; m = year;
else
year = [];
a{1} = 'Mon'; a{2} = 'Tue'; a{3} = 'Wed'; a{4} = 'Thu';
a{5} = 'Fri'; a{6} = 'Sat'; a{7} = 'Sun';a{8} = 'Mon';
a{9} = 'Tue'; a{10} = 'Wed'; a{11} = 'Thu';
a{12} = 'Fri'; a{13} = 'Sat'; a{14} = 'Sun';
if n == 1 || n == 3 || n==5 || n==7 || n==8 || n==10 ||
n==12
for i = 1 : 31
p = mod(i,7) ;
if p == 0
p = 7;
end
year(1).m(i).month = 'January';
year(1).m(i).date = i;
year(1).m(i).day = a{p+4};
year(3).m(i).month = 'March';
year(3).m(i).date = i;
year(3).m(i).day = a{p+1};
year(5).m(i).month = 'May';
year(5).m(i).date = i;
year(5).m(i).day = a{p+6};
year(7).m(i).month = 'July';
year(7).m(i).date = i;
year(7).m(i).day = a{p+4};
year(8).m(i).month = 'August';
year(8).m(i).date = i;
year(8).m(i).day = a{p};
year(10).m(i).month = 'October';
year(10).m(i).date = i;
year(10).m(i).day = a{p+5};
year(12).m(i).month = 'December';
year(12).m(i).date = i;
year(12).m(i).day = a{p+3};
end
end
if n == 4 || n == 6 || n==9 || n==11
for i = 1 : 30
p = mod(i,7) ;
if p == 0
p = 7;
end
year(4).m(i).month = 'April';
year(4).m(i).date = i;
year(4).m(i).day = a{p+4};
year(6).m(i).month = 'June';
year(6).m(i).date = i;
year(6).m(i).day = a{p+2};
year(9).m(i).month = 'September';
year(9).m(i).date = i;
year(9).m(i).day = a{p+3};
year(11).m(i).month = 'November';
year(11).m(i).date = i;
year(11).m(i).day = a{p+1};
end
end
if n == 2
for i = 1 : 29
p = mod(i,7) ;
if p == 0
p = 7;
end
year(2).m(i).month = 'February';
year(2).m(i).date = i;
year(2).m(i).day = a{p};
end
end
m = year(n).m;
end
end

1 件のコメント

Stephen23
Stephen23 2017 年 4 月 10 日
編集済み: Stephen23 2017 年 4 月 10 日
Some observations:
  • This code is much more complicated than it needs to be. More code -> harder to check and more bugs.
  • Do not write code that already exists and does what you need, particularly when it is tested and more optimized than what you can write yourself. The date functions datenum, etc, already convert and give the correct date/day values, so there is no point in replicating this using loops, etc.
  • This code generates multiple months, even though only one of them is output. Not an efficient use of memory.
  • Uses loops, and expands the structures on each loop iteration. Not an efficient use of memory.
  • Uses magic numbers (these are the days per month): code should not use magic numbers without adequate explanation.
  • Defines a in a very strange way. Much simpler: a = {'Mon','Tue',...}.
  • Uses more than fourteen times as many lines of code as my answer.
  • Is nearly thirty times slower than my answer (1000 repetitions):
Elapsed time is 1.26207 seconds. % my answer
Elapsed time is 34.606 seconds. % this answer
Hopefully other beginners will not use this as an example to learn MATLAB from.

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeTime Series Objects についてさらに検索

質問済み:

2016 年 12 月 7 日

コメント済み:

2018 年 5 月 18 日

Community Treasure Hunt

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

Start Hunting!

Translated by