Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - domanda su un'implementazione ....
Forum - C/C++ - domanda su un'implementazione ....

Avatar
Birkhoff92 (Normal User)
Rookie


Messaggi: 31
Iscritto: 27/03/2014

Segnala al moderatore
Postato alle 18:31
Venerdì, 14/10/2016
Salve, sto eseguendo un programmino che ho preso sul Deitel&Deitel , e ho un dubbio : qui , perchè definisce quei giorni come un array di 13 con tutti tra 30 e 31 ? non dovrebbero essere 12 ??
Codice sorgente - presumibilmente C++

  1. int Date:: checkDay(int testDay) const {
  2.     static const int daysPerMonth[13]=
  3.     {0,31,28,31,30,31,30,31,31,30,31,30,31};
  4.     if (testDay >0 && testDay <= daysPerMonth[month])
  5.         return testDay;
  6.     if(month ==2 && testDay==29 &&(year %400==0 || (year%4==0 && year&100==0)))
  7.         return testDay;
  8.     cout<<"Invalid day ("<<testDay<<")set to 1.\n";
  9.     return 1;
  10. } //fine funzione checkDay



la funzione checkDay è definita qui invece :
Codice sorgente - presumibilmente C++

  1. #ifndef Date_h
  2. #define Date_h
  3. class Date {
  4. public:
  5.     Date(int = 1, int=1,int=1900);
  6.     void print()const;
  7.     ~Date();
  8. private:
  9.     int month;
  10.     int day;
  11.     int year;
  12.     int checkDay(int) const; // funzione d'utilità per convalidare mese e anno
  13. };
  14.  
  15. #endif /* Date_h */

. Grazie per i chiarimenti :)

PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 0:25
Sabato, 15/10/2016
È solo per convenienza: così al numero di giorni del primo mese (numero 1) si fa daysPerMonth[1]. Se non ci fosse stato lo 0 iniziale e daysPerMonth fosse di 12 elementi, avresti dovuti fare daysPerMonth[0].
Nel codice sarebbe stato daysPerMonth[month-1].

PM Quote
Avatar
Template (Member)
Pro


Messaggi: 177
Iscritto: 09/12/2015

Segnala al moderatore
Postato alle 10:56
Sabato, 15/10/2016
Una delle tantissime idiozie del Deitel: invece di insegnarti a scrivere del codice sensato ("month-1" al posto di "month" non pregiudica la leggibilità di un buon codice, soprattutto se ben commentato) ti insegna ad aggiungere roba inutile...

Ultima modifica effettuata da Template il 15/10/2016 alle 15:55
PM Quote