CONGRUENCE DE ZELLER

florianpoi1 Messages postés 71 Date d'inscription lundi 28 juillet 2008 Statut Membre Dernière intervention 2 mars 2009 - 2 févr. 2009 à 17:44
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 2 févr. 2009 à 17:50
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/49153-congruence-de-zeller

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 févr. 2009 à 17:50
C'est quoi ce souk d'une tonne de variables pour un si petit calcul ???
Pire de tout, c'est d'utiliser des flottants là où il faut des entiers.
Un développeur ne doit pas amuser le CPU, il doit aller au résultat juste par le plus court chemin.

// ON METTRA LA DATE EN STRUCT POUR NE PASSER QU'1 SEUL PARAM
typedef struct _BNDATE {
BYTE j;
BYTE m;
WORD y;
} BNDATE, *LPBNDATE;

char szappname[] = "JourSem";
char *szJOURS[7] = {"samedi", "dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi"};

DWORD bnJourSemaine(LPBNDATE pdt)
{
DWORD j, m, a, t;
a = pdt->y;
m = pdt->m;
if(m && (m < 3)) {m += 12; a--;}
j = a / 100;
t = a % 100;
m++;
m *= 26;
m /= 10;
t += (t / 4);
t += (DWORD) pdt->j;
t += (j / 4);
t += (j * 5);
t += m;
m = (t / 7) * 7;
t -= m;
return t;
}

void TestJourSem(VOID)
{
BNDATE bnd;
DWORD r;

bnd.j = 29;
bnd.m = 2;
bnd.y = 2008;
r = bnJourSemaine(&bnd);
MessageBox(0, szJOURS[r], szappname, 0);

bnd.j = 34; // MEME ICI LE RESULTAT EST COHERENT !!!
bnd.m = 2;
bnd.y = 2008;
r = bnJourSemaine(&bnd);
MessageBox(0, szJOURS[r], szappname, 0);
}

CETTE SOURCE NE SERA PAS CONSERVEE.
florianpoi1 Messages postés 71 Date d'inscription lundi 28 juillet 2008 Statut Membre Dernière intervention 2 mars 2009
2 févr. 2009 à 17:44
Je le trouve très bien commenté :)
Rejoignez-nous