2010-09-21 8 views
1

J'ai des destinataires sur lesquels j'ai travaillé et je suis bloqué sur la dernière fonction.Comment incrémenter des objets Date en C++

utiliser le vide fonction Increment (int NUMDAYS = 1)

Cette fonction doit se déplacer en avant la date par le nombre de jours de calendrier donné dans l'argument. La valeur par défaut du paramètre est 1 jour. Exemples:

Date d1(10, 31, 1998); // Oct 31, 1998 
Date d2(6, 29, 1950); // June 29, 1950 

d1.Increment(); // d1 is now Nov 1, 1998 
d2.Increment(5); // d2 is now July 4, 1950 

Je ne comprends pas comment faire cela.

void Date::Increment(int numDays = 1) 

Je suis coincé, je sais comment dire la fonction d'incrémenter, par l'opérateur ++ mais je reçois confondre quand je dois obtenir la fonction d'incrémenter le dernier jour du mois au poing , ou se terminer à la dernière date de ce mois par exemple. Du 31 octobre au 1er novembre, ou du 29 juin au 4 juillet. Je peux faire du 5 juillet au 8 juillet mais les mois changeants me confondent

+2

... quelle langue? –

+0

en langage C++ –

+2

est-ce pour les devoirs? Dans le cas contraire, il vaut mieux utiliser la bibliothèque d'heures de mise à jour – Anycorn

Répondre

0

30 jours a septembre, avril, juin et novembre. Le reste a 31 jours, sauf pour février, qui a 28 jours sauf pour une année bissextile (tous les 4 ans, et 2008 était le dernier) quand il a 29 jours.

Cela devrait être beaucoup pour vous aider à démarrer.

1

Vous aurez besoin de stocker une liste (ou tableau) du nombre de jours dans chaque mois. Si vous ajoutez numDays à la date actuelle et qu'elle devient plus grande, vous devez également incrémenter le mois. Par exemple, nous avons un objet date représentant le 29 mars 2010. Nous appelons le Increment(4) et ajoutons 4 à la variable du jour, se terminant au 33 mars 2010. Nous vérifions maintenant le nombre de jours que le mois de mars a et nous savons qu'il est 31 (par ex. daysInMonth[3] == 31). Puisque 33 est supérieur à 31, il faut soustraire 31 de 33 et augmenter le mois pour terminer le 2 avril 2010.

Vous aurez besoin d'une manipulation spéciale pour février dans les années bissextiles (toute année divisible par 4 et non divisible par 100 sauf s'il est également divisible par 400) et pour s'être incrémenté après la fin de décembre.

0

D'abord, construire une fonction comme

int numDaysSinceBeginning(Date); 

qui compte le nombre de jours écoulés depuis une date bien connue (par exemple 1 janvier 1900) à la date spécifique.

Ensuite, construire une autre fonction qui convertit ce delta jour à ce jour

Date createDateWithDelta(int); 

De votre exemple,

Date d2(6, 29, 1950); // June 29, 1950 

int d2Delta = numDaysSinceBeginnning(d2); 

Date d2Incremented = createDateWithDelta(d2Delta + 5); // d2Incremented is July 4, 1950 
Questions connexes