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: