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; }

Rispondi quotando