Bien le bonjour,

Je vous écris car j'ai un soucis avec un petit programme que je développe, il consiste comme suit :

Le programme me demande d'entrer une date sous forme jj,mm,aaa et me retourne le jour de la semaine du premier janvier de l'année concernée ainsi que le jour de la semaine de la dite-date donnée, le programme doit fonctionner pour toutes les dates après le 1er janvier 1900.

Petit hic : J'ai des gros décallages, je pense donc que j'ai du faire une erreur dans mon programme, certainement au niveau des calculs mais je me casse les dents dessus depuis hier matin en vain...

Si une âme charitable pouvait m'éclairer, merci d'avance

Je vous poste le code afin que vous puissiez voir ça

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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
 
 
#include <iostream>
#include <math.h>
#include <string.h>
 
using namespace std;
 
 int annee, mois, jour;
 int jr, bissextile, difference, decalage, choix;
 int somme = 0, total = 0;
 int nom_jr, position, position2;
 char day[2]; 
 char month[2]; 
 char year[4];
 char date[11];
 int tab_aux[12];
 int tab_duree[12]={31,28,31,30,31,30,31,31,30,31,30,31};
 char calendrier[13][10]={"janvier","fevrier","mars","avril","mai","juin",
                                   "juillet","aout","septembre","octobre","novembre","decembre"};
 char semaine[8][10]={"lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"};
 
int main()
{ 
   cout << "Entrez une date après le premier janvier 1900 sous la forme jj,mm,aaaa" << endl;
   cin >> date;
 
   for(int i = 0; i <= strlen(date); i++)
   {
           if(date[i] == 44) /* ... 44 est le code ASCII de la virgule ',' ... */
                      position = i; /* ... On mémorise l'emplacement de la première virugle ',' ... */
           for(int j = position; j <= strlen(date); j++)
           {
                 if(date[i] == 44) /* ... 44 est le code ASCII de la virgule ',' ... */
                            position2 = i; /* ... On mémorise l'emplacement de la seconde virugle ',' ... */
           }
   }
 
   /* ... On sépare la chaîne de caractères en jour, mois année dans 3 chaînes distinctes ... */
 
   for (int k = 0; k < position; k++)
   {
       day[k] = date[k];
   }
 
   for(int l = position; l < position2; l++)
   {
           month[l-position] = date[l+1];
   }
 
   for(int m = position2; m <= strlen(date); m++)
   {
          year[m-position2] = date[m+1];
   }
 
   /* ... On convertit les chaînes de caractères en entiers ... */
 
   jour = atoi(day);
   mois = atoi(month);
   annee = atoi(year);     
 
/* ... Savoir si l'annee est bissextile ... */
 
    if((annee - 1900) % 4 == 0) 
           bissextile = 1;
    else
           bissextile = 0;
 
 tab_duree[1] = 28 + bissextile;
 
/* ... ... */
 
/* ...  
Référence choisie : l'année 2000 qui est bissextile et dont le premier 
                  janvier tombait un samedi. 
... */
 
 
/* ...
Déterminer le jour de la semaine correspondant au premier janvier d'une
           année quelconque après le premier janvier 1900
... */
 
  difference = annee - 1900;
  decalage = difference + (difference / 4);      /* ... On tient compte du nombre d'années bissextiles ... */
  jr = (decalage % 7) - 1;                              /* ... Lundi = 1, mardi = 2, etc... Ici le premier janvier 2000 était un samedi donc 6 ... */
  if(jr == 0)
        jr = 7;
  cout << "Le premier janvier de l'annee choisie est un: " << semaine[jr-1] << endl;
 
 
/* ... 
Dans la date entrée, compter le nombre de jours écoulés du premier janvier jusqu'au jour 
            de l'année voulu et en déduire alors le jour de la semaine correspondant.   
... */
 
 for(int n = 0; n < 12; n++)
   { 
     if(n < mois - 1)
          tab_aux[n] = 1;
     else 
          tab_aux[n] = 0;
   }
 for(int o = 0; o < 12; o++)
         somme = somme + tab_duree[o] * tab_aux[o];    /* ... mois entiers précédant le mois choisi ... */
 
 total = somme + jour - 1;                       
 jr = jr + total % 7;                       
 
 nom_jr = jr % 7;
 
 if(nom_jr == 0)
                nom_jr = 7;
 
 cout << "La date choisie etait un : " << semaine[nom_jr - 1] << endl;
 
 
 cout << "Voulez-vous continuer sur ce programme ?" << endl << "Si oui tapez 1" << endl << "Si non tapez 0" << endl << endl;
 
 cin >> choix;
 
 switch(choix)
 {
                 case 0:
                      break;
                 case 1:
                      main();
                      break;
 }
 
 
 //system("PAUSE");
 
 
}


Merci d'avance à toutes les personnes qui tenteront de me décoincer !