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: 5. scrivere una funzione "check_data" che restituisce vero o falso a
03: seconda che la data passata come argomento (giorno, mese e anno)
04: sia valida o meno. Suggerimento, ricordate la filastrocca sui mesi?
05: "Trenta giorni ha novembre, con april, giugno e settembre..."
06: */
07:
08: #include<stdio.h>
09: #include<stdlib.h>
10:
11: int bisestile(int year)
12: {
13: // non e' bisestile quando
14: // NON divisibile per 4
15: // O
16: // divisibile per 100 MA NON per 400
17:
18: return !( (year%4) || ( !(year%100) && (year%400) ) );
19: }
20:
21: int check_data(int d, int m, int y)
22: {
23: // uso i dati per semplificare il codice
24: int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
25:
26: // correggo febbraio
27: if(m == 2 && bisestile(y))
28: days[1] = 29;
29:
30: return ( (m >= 1 && m <= 12) && (d >= 1 && d <= days[m - 1]) );
31: }
32:
33: int main(int argc, char **argv){
34:
35: int g, m, a;
36: printf("Inserisci giorno, mese e anno: ");
37: scanf("%d%d%d", &g, &m, &a);
38:
39: printf("check_data(%d, %d, %d) mi restituisce %d\n", g, m, a, check_data(g, m, a) );
40:
41: return 0;
42: }
43:
44: