Ritorna alla pagina del corso.

Questa pagina contiene gli esercizi proposti in laboratorio e -alcune- delle soluzioni proposte.
Si suggerisce di provare a risolvere gli esercizi e solo in un secondo tempo di confrontare quanto fatto con le soluzioni proposte.

01: /*
02: 6. scrivere una funzione "num_giorno" che restituisce, dopo aver preso
03:    in ingresso una data come giorno mese e anno, quanti giorni sono
04:    passati dall'inizio dell'anno fino a quella data
05: */
06: 
07: #include<stdio.h>
08: #include<stdlib.h>
09: 
10: int bisestile(int year)
11: {
12:   // non e' bisestile quando
13:   // NON divisibile per 4
14:   // O
15:   // divisibile per 100 MA NON per 400
16:   
17:   return !( (year%4) || ( !(year%100) && (year%400) ) );
18: }
19: 
20: int num_giorno(int d, int m, int y)
21: {
22:   // uso i dati per semplificare il codice
23:   int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
24: 
25:   // correggo  febbraio
26:   if(m >= 2 && bisestile(y))
27:     days[1]  = 29;
28: 
29:   int num_giorni = 0;
30: 
31:   // accumulo prima i giorni di ciascun mese escluso quello della data
32:   for(int mi = 0; mi < (m - 1); ++mi)
33:     num_giorni += days[mi];
34: 
35:   // aggiungo anche i giorni del mese corrente
36:   num_giorni += d;
37: 
38:   return num_giorni;
39: }
40: 
41:   
42: 
43: int main(int argc, char **argv){
44: 
45:   int g, m, a;
46:   printf("Inserisci giorno, mese e anno: ");
47:   scanf("%d%d%d", &g, &m, &a);
48: 
49:   printf("num_giorno(%d, %d, %d) mi restituisce %d\n", g, m, a, num_giorno(g, m, a) );
50: 
51:   return 0;
52: }
53: 
54: