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: