Læringsmål:
- Kap For-løkker PLACEHOLDER
Pensum:
- Kap 5.4
Implementer funksjonen printCalendar. Den skal vise en gyldig månedskalender gitt månednummer og år som parameter.
Om koden kjøres skal det se omtrent slik ut:
Code Block | ||
---|---|---|
| ||
Oktober 2014 ma ti on to fr lo so 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 |
...
- Månedsnavn og årstall. Første rad.
- Dagsnavn. Andre rad.
- Datoer for alle dager på riktig plass. Tredje til syvende rad.
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 | ||
---|---|---|
| ||
month =
0 0 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 0 0
0 0 0 0 0 0 0 |
Tallet 0 representerer dager som ikke finnes i måneden.
Neste steg er å definere en funksjon som lager denne matrisen. Det gjør følgende funksjon:
Code Block | ||
---|---|---|
| ||
function calendar = getCalendar ( year , month )
startDay = getMonthStartDay ( year , month );
numDays = daysInMonth ( year , month );
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 daysInMonth antall dager i måned, getMonthStartDay returnerer nummeret på den første ukedagen i måneden (1 = Mandag, 2 = Tirsdag, ..., 7 = Søndag). I eksempelet med oktober 2014, returnerer daysInMonth 31 og getMonthStartDay 3.
a)
Gitt startDay = 7 og numDays 30. 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 | 1 ... ... ... | 1 ... ... ... | 0 ... ... ... |
a) Månedsnummer må gjøres om til månedsnavn, se vedlagt fil getMonthName.m . Lag et skript getMonthNameTester.m som tester getMonthName.