IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Calcul de dates


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2012
    Messages : 17
    Points : 0
    Points
    0
    Par défaut Calcul de dates
    Bonsoir,

    J'ai un problème avec le langage C et plus exactement avec la date prochaine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     #include<stdio.h>
    int main ()
     
    {
    int jr , nbj , mo , an,nbjm   ;
     
    printf("  La date prochaine :\n ");
    printf("====================\n\n");
     
    printf("Donner la date de debut :\n\n");
     
    printf(" Jour :");
    scanf("%d",&jr);
    printf("\n\n");     
     
    printf(" Mois :");
    scanf("%d",&mo);
    printf("\n\n");   
     
    printf(" Annee:");
    scanf("%d",&an); 
    printf("\n\n");   
     
    printf("Donner le nombre de jour a ajouter   :"); 
    scanf("%d",&nbj);
    printf("\n\n"); 
     
        switch(mo)
        {      
         case 4 :   case 6 : case 9  :  case 11 :
              nbjm =30 ;break ;
         case 2 : 
              if (an % 4 ==0)
               {    
              nbjm = 29 ;break ;
              } 
              else
     
              nbjm = 28 ;break ; 
     
         default : nbjm = 31 ;break ;
     
     
         } 
     
     jr = jr + nbj;
     
     
    if( jr > nbjm ) 
     
     
        do
    {
      {
     
     
     
          jr =  jr-nbjm ;
         mo = mo + 1   ;
     
       if(mo > 12 )
     
         {         
     
             mo = 1 ;
             an = an + 1 ;
          }   
       }       
     
      }  
     
    while(jr>nbjm);          
     
     
     
     
     
     
     
     
    printf ("La date est : %d/%d/%d\n\n",jr,mo,an);
     
         system("pause");
     
     
    }
    Le problème : quand j'ajoute 60 j à 27/02/2000, il m'a donne 29/4/2000

    Il m'a donné deux jours de plus
    Y a-t-il une solution ?

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 178
    Points : 451
    Points
    451
    Par défaut
    Après un (très) rapide coup d’œil (les années bissextiles c'est pas tout à fait ça mais passons), j'ai juste une petite question : tu ne réactualises pas nbjm quand tu passes au mois suivant?

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2012
    Messages : 17
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par pythéas Voir le message
    Après un (très) rapide coup d’œil (les années bissextiles c'est pas tout à fait ça mais passons), j'ai juste une petite question : tu ne réactualises pas nbjm quand tu passes au mois suivant?
    J'ai mis tous les cas possibles pour l'année .. l'année n'est pas un obstacle
    et pou nbjm sa ve dire nombre de jour de mois

  4. #4
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 190
    Points : 380
    Points
    380
    Par défaut
    salut !

    puisque ton algorithme est faux, tu devrais chercher l'erreur en écrivant celui (un peu plus simple) qui donne la date du lendemain.
    en essayant quelques dates de changement de mois et d'année, tu devrais trouver rapidement ton erreur, et même, si tu es flemmard, une boucle (60 fois) te donnera le résultat ;-)

    A+
    Don't want money. Got money. Want admiration.
    (A tribute to SSG)

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par peacee Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     if( jr > nbjm ) 
           
        do
    {
      {
        
          
                
         jr =  jr-nbjm ;
         mo = mo + 1   ;
              
       if(mo > 12 )
             
         {         
     
             mo = 1 ;
             an = an + 1 ;
          }   
       }       
            
      }  
          
    while(jr>nbjm);  
    Le problème : quand j'ajoute 60 j à 27/02/2000, il m'a donne 29/4/2000

    Il m'a donné deux jours de plus
    Y a-t-il une solution ?
    Citation Envoyé par pythéas Voir le message
    Après un (très) rapide coup d’œil (les années bissextiles c'est pas tout à fait ça mais passons), j'ai juste une petite question : tu ne réactualises pas nbjm quand tu passes au mois suivant?

    Citation Envoyé par peacee Voir le message
    et pou nbjm sa ve dire nombre de jour de mois
    Ouais super.
    Donc déjà tu n'as même pas l'idée d'afficher tes variables pour voir ce qui se passe et tu préfères venir pleurer dans les forums en attendant qu'on les affiche pour toi. Et en plus tu ne fais même pas l'effort de lire les réponses !!!

    Tu as m=2 donc nbjm=29 et ne varie plus donc dans ta boucle tu enlèves toujours 29 à jr alors qu'il aurait fallu enlever à un moment donné 31 puisque tu es passé sur mars !!!

    Citation Envoyé par peacee Voir le message
    J'ai mis tous les cas possibles pour l'année .. l'année n'est pas un obstacle
    Oui bien sûr. T'as qu'à essayer de rajouter 3 à 27/02/2100 voir si tu tombes sur 2/3/2100...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2012
    Messages : 17
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ouais super.
    Donc déjà tu n'as même pas l'idée d'afficher tes variables pour voir ce qui se passe et tu préfères venir pleurer dans les forums en attendant qu'on les affiche pour toi. Et en plus tu ne fais même pas l'effort de lire les réponses !!!

    Tu as m=2 donc nbjm=29 et ne varie plus donc dans ta boucle tu enlèves toujours 29 à jr alors qu'il aurait fallu enlever à un moment donné 31 puisque tu es passé sur mars !!!
    Merci pour votre réponse polie...
    dans l'ensemble je ne viens pas ici pour pleurer, un peu de respect s'il vous plaît
    j ai soulevé le problème parce que je n'ai pas trouvé sa solution
    en tout cas merci encore une fois, parce que j'ai trouvé la solution

    Citation Envoyé par Sve@r Voir le message
    Oui bien sûr. T'as qu'à essayer de rajouter 3 à 27/02/2100 voir si tu tombes sur 2/3/2100...
    non dsl il ma donner 01/03/2100

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par peacee Voir le message
    Merci pour votre réponse polie...
    Elle correspond à ce que je ressens quand je vois quelqu'un ne faisant même pas l'effort de lire (sous-entendu avec attention) les réponses qu'on lui fait.

    Citation Envoyé par peacee Voir le message
    dans l'ensemble je ne viens pas ici pour pleurer, un peu de respect s'il vous plaît
    j ai soulevé le problème parce que je n'ai pas trouvé sa solution
    Oui mais sans vraiment chercher non plus...

    Citation Envoyé par peacee Voir le message
    non dsl il ma donner 01/03/2100
    C'est bien ce que dit pythéas: tu gères mal les années bissextiles (pour info, 2100 n'est pas bissextile, ni 2200 ni 2300...)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [Calendar]Problème de calcul de date
    Par valerie90 dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 08/12/2004, 12h13
  2. COUNT + Calcul de DATE
    Par cassi2 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/10/2004, 16h35
  3. Resutlat de calcul sur date formaté
    Par neness dans le forum SQL
    Réponses: 6
    Dernier message: 16/06/2004, 15h34
  4. SCRIPT CALCULANT LA DATE
    Par Redouane dans le forum ASP
    Réponses: 3
    Dernier message: 17/03/2004, 09h10
  5. Calcul sur date
    Par Thomad dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/09/2003, 08h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo