...
- Månedsnavn og årstall. Første rad.
- Dagsnavn. Andre rad.
- Datoer for alle dager på riktig plass. Tredje til syvende rad.
a)
Månedsnummer Månedsnummer må gjøres om til månedsnavn. Lag funksjonen getMonthName(monthNumber)
som returnerer navnet på måneden gitt månedsnr.
Code Block | ||
---|---|---|
| ||
>> getMonthName(7) ans = 'Juli' |
b)
Andre rad er en enkel iterasjon gjennom en liste av navn på dagene. De siste radene er mer bry: Disse utgjør en 6x7 matrise hvor radene er uker og kolonnene er ukedager. Denne matrisen kan se slik ut:
...
Code Block | ||
---|---|---|
| ||
function calendar = getCalendar ( year , month ) startDay = getMonthStartDay ( year , month ); numDays = daysInMonth ( month , year ); calendar = zeros ( 6, 7 ); date = 0; for week = 1:6 for day = 1:7 if ( date == 0 ) if ( week == 1 && day == startDay ) date = 1; end else if ( date < numDays ) date = date + 1; else date = 0; end end calendar (week , day ) = date ; end end end |
...
Her returnerer funksjonen funksjonen daysInMonth
antall antall dager i måned, getMonthStartDay
returnerer nummeret returnerer nummeret på den første ukedagen i måneden (1 = Mandag, 2 = Tirsdag, ..., 7 = Søndag). I eksempelet med oktober 2014, returnerer returnerer daysInMonth
31 og getMonthStartDay
3.b) 31 og getMonthStartDay
3. Disse funksjonene skal du implementere.
Legg inn funksjonen getCalendar
. Her kan du bare kopiere fra koden over.
Gitt startDay = 3 og numDays 31 i getCalendar
-funksjonen over. Gå gjennom funksjonen over og skriv ned verdien til variablene week, day og date for hver iterasjon i den indre for-løkken.
...
Iterasjon | week | day | date |
---|---|---|---|
1 %fyll inn 12 | 1 % 2 | 1 % 5 | 0 % 10 |
Legg inn funksjonen getCalendar
(se over). Denne krever at vi implementerer funksjonene daysInMonth
og getMonthStartDay
.
Du kan bruke filene daysInMonth.m og isLeapYear.m fra tidligere øvinger.
For å kunne definere funksjonen getMonthStartDay
trenger vi først å vite hvilken dag året starter på.
cd)
Lag funksjonen getYearStartDay(year)
. Funksjonen skal ta inn et årstall som parameter og returnere hvilken ukedag året starter på (1 = Mandag, 2 = Tirsdag, ..., 7 = Søndag).
Tips: Året 1900 startet på en mandag. For hvert år flytter startdagen seg med en dag. Det vil si at 1901 startet på en tirsdag. Hvis året er et skuddår, flytter startdagen i neste år seg med to dager.
...
Code Block | ||
---|---|---|
| ||
getYearStartDay (1900) % skal returnere 1 getYearStartDay (1901) % skal returnere 2 getYearStartDay (1902) % skal returnere 3 getYearStartDay (1903) % skal returnere 4 getYearStartDay (1904) % skal returnere 5 getYearStartDay (1905) % skal returnere 7 getYearStartDay (1906) % skal returnere 1 getYearStartDay (2012) % skal returnere 7 |
de)
Lag funksjonen getMonthStartDay(year, monthNumber)
. Den skal ta inn et årstall og et månedsnummer som parameter (1 = Januar, 2 = Februar, ..., 12 = Desember). Funksjonen skal returnere hvilken ukedag måneden starter på (1 = Mandag, 2 = Tirsdag, ..., 7 = Søndag).
...
Å vise matrisedelene av kalenderen bør være en egen funksjon.
ef) Lag funksjonen printDays(month)
. Den skal ta inn en matrise med datoer som parameter, og printe disse ut som vist under. Denne funksjonen skal ikke returnere noen verdi. Funksjonshodet kan dermed se slik ut:
Code Block | ||
---|---|---|
| ||
function printDays ( month ) % Din kode end Eksempel på kjøring: >> printDays(month) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
fg) Lag funksjonen printCalendar(year, monthNumber)
. Parameterene er år og månedsnummer. Den benytter seg av getMonthName og getCalendar og printer ut de to første linjene av kalenderen før den kaller på printDays
. Den skal ikke returnere noe, bare vise utskrift.
...