Il giorno della settimana in C

Ecco un’altra utility che non può mancare alle funzioni di base.

Data una data qualsiasi in formato giorno, mese ed anno, calcolare il giorno della settimana corrispondente.

Esiste una funzione matematica che ci riporta esattamente quella data in un range [0-6] corrispondente all’esatto giorno della settimana.

Grazie alla potenza del linguaggio C, questa si riduce ad un unica istruzione… di seguito il codice scaricabile dalla sezione Solo Codice del blog.

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/*
* GiornoSettimana
* ---------------
* Questa funzione calcola il giorno della settimana della data indicata
*
*
* PARAMETRI:
* gg = giorno (gg)
* mm = mese (mm)
* aaaa = anno (aaaa)
*
* RITORNO:
* 0 = domenica
* 1 = lunedì
* 6 = sabato
*
*/


int GiornoSettimana(short gg, short mm, short aaaa)
{

return (gg += mm<3?aaaa--:aaaa-2, 23*mm/9+ gg+4+aaaa/4-aaaa/100+aaaa/400)%7;

}

// esempio di uso della funzione GiornoSettimana
int main (int argc, char **argv)
{

char nome_giorno[10] = "\0";
short giorno = 28;
short mese = 1;
short anno = 1972;

int giorno_settimana = GiornoSettimana(giorno, mese, anno);

switch(giorno_settimana)
{
case 0:
sprintf(nome_giorno, "%s\0", "Domenica");
break;
case 1:
sprintf(nome_giorno, "%s\0", "Lunedi");
break;
case 2:
sprintf(nome_giorno, "%s\0", "Martedi");
break;
case 3:
sprintf(nome_giorno, "%s\0", "Mercoledi");
break;
case 4:
sprintf(nome_giorno, "%s\0", "Giovedi");
break;
case 5:
sprintf(nome_giorno, "%s\0", "Venerdi");
break;
case 6:
sprintf(nome_giorno, "%s\0", "Sabato");
break;
}

printf("Il %u-%u-%04u era %s\n", giorno, mese, anno, nome_giorno);

return 0;

}

 

Come si nota chiaramente, la funzione “GiornoSettimana” è composta da un unica istruzione che, presi i parametri in input, ritorna un intero nel range [0-6] corrispondente ai giorni 0 = domenica, 1 = lunedì, 6 = sabato;

Per qualsiasi domanda siamo a vostra completa disposizione.

buon lavoro

Share Button
Pin It

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *