Inoltre tutti quegli switch possono essere ottimizzati:
codice:
// calcola il numero del giorno dal 1/1
int GIORNO::calcola_giorno_anno(int giorno,int mese,int anno)
{
const static int giorniMese[]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int n=0;
if (mese<1 || mese>12)
{
// argomento non valido, gestisci l'errore
// (puoi ad esempio sollevare un'eccezione std::out_of_range o restituire un valore negativo)
}
mese-=2;
for (;mese>=0;mese--)
{
n+=giorniMese[mese];
if (mese==1 && anno%4==0 && (anno%100!=0 || anno%400==0))
n++;
}
return n+giorno;
}
// calcola il giorno della settimana in base ai valori di giorno, mese e anno
// è valido solo dalla riforma gregoriana in avanti! per il calendario giuliano c'è un'altra formula più semplice
int GIORNO::calcola_giorno_set(int giorno,int mese,int anno)
{
return ((anno+(anno-1)/4-(anno-1)/100+(anno-1)/400+calcola_giorno_anno(giorno, mese, anno))-2)%7+1;
}