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:

  1. Månedsnavn og årstall. Første rad.
  2. Dagsnavn. Andre rad.
  3. 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. 

Iterasjonweekdaydate

1
2
...
12 

1
...
...
... 
1
...
...
... 
0
...
...
...