Incrementation +4

Incrementation +4 - C - Programmation

Marsh Posté le 17-01-2007 à 14:25:56    

Bonour, je doit ecrire un programme pour calculer le nombre de jours entre 2 dates et je n'en suis encore qu'au debut.
J'utilise une fonction scanf pour entrer une date (JJ MM AAAA) et j'aimerais que le programme s'arrete si la date indiquee n'existe pas.
C'est chose faite si MM>12 mais commes chaque mois a un nombre de jours qui varie je me demandais s'il etait possible d'ecrire
une condition reprenant tout les mois qui comptent 31 jours et une autre comprenant tout les mois qui comptent 30 jours avec une condition speciale pour fevrier.
 
Est ce que  
if (MM=1, MM=3, MM=5, MM=7, MM=8, MM=10, MM=12) est juste
 
 
Excusez moi pour le peu de clarter dans ce message mais j'ai encore beaucoup de mal a m'exprimer en langage C

Reply

Marsh Posté le 17-01-2007 à 14:25:56   

Reply

Marsh Posté le 17-01-2007 à 14:33:35    

Salut!
 
une solution simple serait de faire un tableau contenant le nombre de jour de chaque mois, et ensuite de vérifier si JJ est inférieur ou égale à Tableau[MM].
 
EDIT : attention toutefois aux années bissextiles  :D


Message édité par TheFox37 le 17-01-2007 à 14:35:36

---------------
Mon FeedBack Ebay
Reply

Marsh Posté le 17-01-2007 à 17:33:39    

C'est possible

 
Code :
  1. int JJ; // jour
  2. int MM; // mois
  3. int AAAA; // année
  4. int J; // Jour max pour le mois ( voir code suivant )
  5. switch (MM) {
  6. case 1: case 3: case 5: case 7: case 8: case 10: case 12:
  7.    J=31;
  8.    break;
  9. case 4: case 6: case 9: case 11:
  10.    J=30;
  11.    break;
  12. case 2:
  13.   J=((AAAA%4 == 0 && AAAA%100 != 0) || AAAA%400 == 0) ?29 :28;
  14.    break;
  15. default:
  16.    // ne devrait pas arriver
  17. }
  18. if (JJ>J) printf("Erreur, jour incorrect" );

Message cité 1 fois
Message édité par -ThX- le 17-01-2007 à 23:47:41
Reply

Marsh Posté le 17-01-2007 à 23:39:41    

Si tu tiens à garder ton test IF (bien que le switch soit efficace ici) tu peux ajouter des conditions OU ||
 
if(truc || bidulle || machin)...

Reply

Marsh Posté le 17-01-2007 à 23:45:00    

-ThX- a écrit :

Code :
  1. J=(AAAA%4 == 0 && AAAA%400 != 0) ?29 :28;



Petite erreur, une année bissextile est (divisible par 4 et non divisible par 100) ou divisible par 400 (1900 n'était pas bissextile, 2000 l'a été)
Ton test donne comme bissextile une année divisible par 4 et pas par 400 (il donne 1900 comme bissextile et pas 2000)
 

Code :
  1. J=((AAAA%4 == 0 && AAAA%100 != 0) || AAAA%400 == 0) ?29 :28;



---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 17-01-2007 à 23:47:54    

Corrigé, merci sve@r

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed