Karkanas
Messages postés2Date d'inscriptionmardi 4 décembre 2012StatutMembreDernière intervention 9 avril 2014 4 déc. 2012 à 15:36
Bonjour,
Je viens tout juste de consulter cet article, et aussi de m'inscrire.
Tout d'abord merci pour le post, je programme en Java mais les formules mathématiques restant bonnes quelque soit le langage, cela m'a bien aidé !!
KHIMI : Une année bissextiles c'est, (une année divisible par 4 ET NON par 100 OU une année divisible par 400).
khimi
Messages postés4Date d'inscriptionsamedi 3 novembre 2007StatutMembreDernière intervention14 mai 2012 14 mai 2012 à 11:24
Je sais que cela fait un moment que ce code a été déposé, cependant je tiens à signaler que l'algorithme de calcul ne fonctionne pas correctement.
Il y un une erreur sur les années bissextiles, précisément sur les dates du 31 Janvier et du 1er Février qui retournent exactement le même numéro de jour.
J'ai testé avec les dates du 31/01/2012 et du 01/02/2012, et le calcul retourne le chiffre 3.
Voici comment j'ai résolu ce problème ( j'ai fait quelques tests afin de vérifier son exactitude, cependant il se peut qu'il soit lui aussi incorrect ) :
// Petite macro permettant de savoir si l'année est bissextile ou non, les années bissextiles doivent être divisibles par 4 et non divisible par 100
#define isLeapYear( year ) ( ( year % 4 == 0 ) && ( year % 100 != 0 ) )
Ensuite il suffit de modifier légèrement la macro g afin quelle prenne en compte les années bissextiles,
pour le mois de février des années bissextiles, il ne faut pas ajouter 13 mais 8 :
#define g( year, month ) ( month < 3 ? ( isLeapYear( year ) && month > 1 ? month + 8 : month + 13 ) : month + 1 )
En espérant vous avoir aidé.
bennoua34
Messages postés1Date d'inscriptionjeudi 29 avril 2010StatutMembreDernière intervention21 mai 2010 21 mai 2010 à 23:25
Super beau travail!
tekila_bandita
Messages postés248Date d'inscriptionmercredi 15 juin 2005StatutMembreDernière intervention15 mars 200733 24 févr. 2006 à 13:04
Eh bien en faite, si on s'y attarde un peu je pense que l'on pourrait reussir a simplifier la formule, mais moi je l'ai trouver en tant qu'exercice d'application dans mon livre sur le C, alors je l'ai appliqué...
Dans l'exercice, il montre une formule que si on l'applique à deux dates et que l'on effectue la différence des resultats obtenus, alors on obtient, d'une maniere simple, le nombre de jours d'ecart entre ces deux dates...
Dans un exercice juste en dessous, il nous dise que si l'on reprend le resultat de ce calcul appliqué à une date, qu'on lui soustrait 621049 et qu'on garde le reste de ce resultat divisé par 7, on obtient un chiffre compris entre 0 et 6 indiquant le jour de la semaine (Le lundi étant le premier jour de la semaine, il se voit donc affecter la valeur 1, donc dimanche et 0 vu qu'il n'y a pas de valeur 7...)...
Je ne peus pas plus vous expliqué, mais si un jour je m'attarde sur cette formule, alors je vous ferait part des details du calcul...
En tout cas, merci pour vos notes ! :D ;)
cs_Joky
Messages postés1787Date d'inscriptionlundi 22 novembre 2004StatutMembreDernière intervention31 janvier 20092 18 févr. 2006 à 15:12
Moi je fais comme ça :
int Julien(int Day, int Month, int Year)
{
int J;
J = 367*Year-7*(Year+(Month+9)/12)/4-3*((Year+(Month-9)/7)/100+1)/4+275*Month/9+Day+1721029;
J++;
return J;
}
int FindDay(char* MyDate)
{
char *Day[] = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};
int J = Julien(MyDate->Day, MyDate->Month, MyDate->Year);
strcpy(MyDate, Day[J%7]);
return J%7;
}
cs_Kmleon
Messages postés2Date d'inscriptionmercredi 28 juillet 2004StatutMembreDernière intervention18 février 2006 18 févr. 2006 à 14:17
Dans un script, j'avais justement besoin de ce genre de formule. Donc merci beaucoup.
Par contre, je ne comprend rien à la formule :-/ Si quelqu'un a petite explication ....
4 déc. 2012 à 15:36
Je viens tout juste de consulter cet article, et aussi de m'inscrire.
Tout d'abord merci pour le post, je programme en Java mais les formules mathématiques restant bonnes quelque soit le langage, cela m'a bien aidé !!
KHIMI : Une année bissextiles c'est, (une année divisible par 4 ET NON par 100 OU une année divisible par 400).
14 mai 2012 à 11:24
Il y un une erreur sur les années bissextiles, précisément sur les dates du 31 Janvier et du 1er Février qui retournent exactement le même numéro de jour.
J'ai testé avec les dates du 31/01/2012 et du 01/02/2012, et le calcul retourne le chiffre 3.
Voici comment j'ai résolu ce problème ( j'ai fait quelques tests afin de vérifier son exactitude, cependant il se peut qu'il soit lui aussi incorrect ) :
// Petite macro permettant de savoir si l'année est bissextile ou non, les années bissextiles doivent être divisibles par 4 et non divisible par 100
#define isLeapYear( year ) ( ( year % 4 == 0 ) && ( year % 100 != 0 ) )
Ensuite il suffit de modifier légèrement la macro g afin quelle prenne en compte les années bissextiles,
pour le mois de février des années bissextiles, il ne faut pas ajouter 13 mais 8 :
#define g( year, month ) ( month < 3 ? ( isLeapYear( year ) && month > 1 ? month + 8 : month + 13 ) : month + 1 )
En espérant vous avoir aidé.
21 mai 2010 à 23:25
24 févr. 2006 à 13:04
Dans l'exercice, il montre une formule que si on l'applique à deux dates et que l'on effectue la différence des resultats obtenus, alors on obtient, d'une maniere simple, le nombre de jours d'ecart entre ces deux dates...
Dans un exercice juste en dessous, il nous dise que si l'on reprend le resultat de ce calcul appliqué à une date, qu'on lui soustrait 621049 et qu'on garde le reste de ce resultat divisé par 7, on obtient un chiffre compris entre 0 et 6 indiquant le jour de la semaine (Le lundi étant le premier jour de la semaine, il se voit donc affecter la valeur 1, donc dimanche et 0 vu qu'il n'y a pas de valeur 7...)...
Je ne peus pas plus vous expliqué, mais si un jour je m'attarde sur cette formule, alors je vous ferait part des details du calcul...
En tout cas, merci pour vos notes ! :D ;)
18 févr. 2006 à 15:12
int Julien(int Day, int Month, int Year)
{
int J;
J = 367*Year-7*(Year+(Month+9)/12)/4-3*((Year+(Month-9)/7)/100+1)/4+275*Month/9+Day+1721029;
J++;
return J;
}
int FindDay(char* MyDate)
{
char *Day[] = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};
int J = Julien(MyDate->Day, MyDate->Month, MyDate->Year);
strcpy(MyDate, Day[J%7]);
return J%7;
}
18 févr. 2006 à 14:17
Par contre, je ne comprend rien à la formule :-/ Si quelqu'un a petite explication ....