Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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.Dagsnavn. Andre rad.: Oktober 2017
  2. Navn på ukedager: (ma ti on to fr lo so)
  3. Datoer for alle dager på riktig plass. Tredje til syvende rad. (Datoene 1 til 31)

Vi skal nå implementere de forskjellige funksjonene som gir oss disse tre delene. Deretter skal alle disse settes sammen til å produsere utskriften som vist over.

 

 

a)  Første funksjon vi skal lage gir oss navnet på en måned, gitt et månedsnummer som vi gir inninput. Hvis funksjonen tar inn tallet 1 skal den returnere 'Januar', hvis den tar inn 2 skal den returnere 'Februar', etc. Lag nå funksjonen getMonthName(monthNumber) som returnerer navnet på måneden gitt månedsnummer som inputparameter. 

...

Når du har lagt inn denne koden, vil ikke denne kjøre med det første, det skal vi se på dette er noe vi skal fikse etterpå. Det eneste du trenger å merke deg nå er utskriften denne funksjonen vil gi ut (til slutt. Denne vil se slik ) skal gi ut:

Code Block
languagenone
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

Her representerer tallet 0 dager som ikke finnes i måneden. Vi ser at dette begynner å ligne på kalenderen som ble vist som eksempel øverst i øvingsoppgaven.

 

b) Du vil nå har sikkert legge lagt merke til at vi bruker noen funksjoner i getCalendar() som vi ikke har laget enda. Din oppgave først nå er å implementere funksjonen daysInMonth(monthNumber, year)Funksjonen skal returnere antall dager i en måned, gitt et månedsnummer av samme type som i oppgave a). Du må også ta hensyn til skuddår.

Expand
titleHint
Her kan du bruke kode du har skrevet i tidligere øvinger dersom du ønsker det.
Code Block
titleEksempel på kjøring
daysInMonth (1, 1999) % skal skrive ut 31
daysInMonth (2, 2001) % skal skrive ut 28
daysInMonth (4, 2017) % skal skrive ut 30
daysInMonth (2, 2004) % skal skrive ut 29

 


c) Du blir nå gitt parametrene startDay = 3 og numDays = 31 i getCalendar-funksjonen over. Gå gjennom funksjonen og skriv ned verdien til variablene week, day og date for hver iterasjon i den indre for-løkken. Du skal med andre ord ikke skrive eller kjøre kode, dette er en øving i å se for seg hvordan koden vil kjøre på forhånd, noe som kreves på eksamen.

...

Du har hittil brutt kalenderen ned i mindre funksjoner. Nå skal de settes sammen og en kalender skal vises. 
disp() er for enkel, derfor må fprintf() benyttes.  Se fprintf for bruk. 

Å vise matrisedelene matrisedelen av kalenderen bør være en egen funksjon.

 

 :


f) Lag funksjonen printDays(month). Den skal ta inn en matrise med datoer som parameter, og skrive ut disse som vist under. Her må vi nå benytte oss av getCalendar()-funksjonen vi la inn tidligere, og du kan se eksempelutskriften fra denne for å se for deg hvordan input vil se ut. printDays() skal ikke returnere noen verdi, men skrive ut en utskrift ved hjelp av fprintf()

...

g) Lag funksjonen printCalendar(year, monthNumber). Parameterene er år og månedsnummer. Funksjonen skal sette sammen alle de tidligere funksjonene. For å gjøre dette må funksjonen benytte seg av getMonthName og getCalendar og lagre resultatene fra å kjøre disse funksjonene, før den til slutt kaller på printDays(). Denne funksjonen skal heller ikke returnere noe, men skal skrive ut utskriften som vist i eksempelet nedenfor.

...

Utvid printCalendar til også å printe ukenummer. For å få til dette, må du også lage nye funksjoner og utvide eksisterende.

 Dette er en veldig vanskelig oppgave.

Code Block
languagenone
 
>> printCalendar(2017, 9)
	September 2017
Uke	ma ti on to fr lo so
35	             1  2  3 
36	 4  5  6  7  8  9 10 
37	11 12 13 14 15 16 17 
38	18 19 20 21 22 23 24 
39	25 26 27 28 29 30    
 
>> printCalendar(2017, 1)
	Januar 2017
Uke	ma ti on to fr lo so
52	                   1 
1	 2  3  4  5  6  7  8 
2	 9 10 11 12 13 14 15 
3	16 17 18 19 20 21 22 
4	23 24 25 26 27 28 29 
5	30 31