Læringsmål:
- For-løkker
Pensum:
- Kap 5.4
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
Dette problemet må brytes ned i mindre oppgaver. Fra utskriften ser man at den består av tre deler:
- 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:
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:
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 ... ... ... |