1

Qqqn connaitrait un bon site expliquant l algo pour generer un calendrier?
merci

2

Flanker m'avait passé un programme TI-BASIC qui donne le jour de la semaine. J'ai aussi sa traduction en C _quelque part_, je ne sais plus où exactement...
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

3

http://perso.ens-lyon.fr/matthieu.gallet/index.php?a=327680
int dayOfWk(int jour, int mois, int annee)
{
   char tab1[12] = {6,2,3,6,1,4,6,2,5,7,3,5};
   char tab2[7] = {6,1,3,5,4,5,6};
   int siecle = annee / 100;
   int decennie = annee % 100;
   int temp;
   if ((mois > 12) | (mois < 1)) return -1; //il ne faudrait pas faire planter le programme pour cause d'arguments invalides

   int z = tab1[mois-1];
   if ((mois <=2) && (annee % 400 != 0) && ((decennie == 0) | (annee % 4 != 0))) z++;//pour voir si l'année est bissextile

   if (siecle > 15) temp = -tab2[(siecle+3 *(siecle/4)) % 7];//il y a 2 cas suivant qu'on est dans le grégorien ou dans le julien
   else temp = -(siecle % 7)-1;
   if ((annee == 1582) && ((mois > 10) | ((mois == 10) && (jour >= 15)))) temp = -5;
 
   return (((temp + decennie + (decennie / 4) + z + jour - 3) % 7) + 1);
}


(PS pour Flanker : l'an 0000 existe pas trinon </10%-troll> )


EDIT : en fermant le tab du site de flanker je me suis rendu compte que la fonction est buggée : en C (x-7)%7 n'est pas forcément égal à x%7 ... on pourrait faire genre :
int dayOfWk(int jour, int mois, int annee)
{
   char tab1[12] = {6+4,2+4,3+4,6+4,1+4,4+4,6+4,2+4,5+4,7+4,3+4,5+4};
   char tab2[7] = {7-6,7-1,7-3,7-5,7-4,7-5,7-6};
   int siecle = annee / 100;
   int decennie = annee % 100;
   int temp;
   if ((mois > 12) || (mois <= 0)) return -1; //il ne faudrait pas faire planter le programme pour cause d'arguments invalides

   if (siecle > 15) temp = tab2[(siecle+3 *(siecle/4)) % 7];//il y a 2 cas suivant qu'on est dans le grégorien ou dans le julien
   else temp = 20-siecle;
   if ((annee == 1582) && ((mois > 10) || ((mois == 10) && (jour >= 15)))) temp = 2;
 
   temp += tab1[mois-1];
   if ((mois <=2) && (annee % 400 != 0) && ((decennie == 0) || (annee % 4 != 0))) temp++;//pour voir si l'année est bissextile

   return (((temp + decennie + (decennie / 4) + jour) % 7) + 1);
}

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

4

oui, mais j ai pas bcp d explication sur le fonctionne sad

5

c'est clair qu'avec des noms de variables plus corrects, ça irait mieux !
z a l'air d'être un indicateur selon le mois, mais je ne vois pas encore ce qu'il pourrait indiquer...
L'indicateur temp a l'air d'être le siècle relatif dans lequel on se trouve - par rapport au 20ème siècle -. Il y a beaucoup de travail qui est dû à la date avant le 15ème siècle, donc si tu n'es pas dans ce cas, tu peux faire sauter toutes les références à tab2 et les 2 tests centraux.

6

J'ai fait datelib, les sources basic sont disponible ainsi que celle de l'ancienne version C.
avatar