Programme jour de naissance

Fermé
Fkugs Messages postés 1 Date d'inscription jeudi 28 novembre 2013 Statut Membre Dernière intervention 28 novembre 2013 - 28 nov. 2013 à 10:50
 Rangoral - 28 nov. 2013 à 13:36
Bonjour,
J'ai fait un programme en algoscript (simplification de javascript pour les étudiants) qui a pour but de donner la jour de la semaine de naissance à l'utilisateur. Le programme fonctionne sauf qu'au fur et à mesure que l'année de naissance s'éloigne, les jours se décalent et donc ne donnent pas le bon résultat. Pour l'année 2013 cela marche mais dès 2012 il devient imprécis. Je vous link le code :

var mois, annee, jour;
jour=SaisieEntier("Votre jour de naissance ?");
mois=SaisieEntier("Votre mois de naissance ?");
annee=SaisieEntier("Votre année de naissance ?");
function JourDeLaSemaine(a,q,n,s,r,mois,bissextile,annee,jour,resultat){
var a;
var q;
var n;
var s;
var r;
var mois;
var bissextile;
var annee;
var jour;
var resultat;
a=(annee-1901);
q=(a%4);
if (annee%4==0 && (annee%100!=0 || annee%400==0)){
bissextile=true
}else{
bissextile=false
}
if (mois == 1){
n = 0
}
if (mois == 2){
n = 31
}

if (bissextile == false && mois == 4){
n = 31+28+31
}
if (bissextile == false && mois == 5) {
n = 30+31+28+31
}
if (bissextile == false && mois == 6) {
n = 31+30+31+28+31
}
if (bissextile == false && mois == 7) {
n = 30+31+30+31+28+31
}
if (bissextile == false && mois == 8){
n = 31+30+31+30+31+28+31
}
if (bissextile == false && mois == 9) {
n = 31+31+30+31+30+31+28+31
}
if (bissextile == false && mois == 10){
n = 30+31+31+30+31+30+31+28+31
}
if (bissextile == false && mois == 11) {
n = 31+30+31+31+30+31+30+31+28+31
}
if (bissextile == false && mois == 12) {
n = 30+31+30+31+31+30+31+30+31+28+31
}

if (bissextile == true && mois == 3) {
n = 29+31
}
if (bissextile == true && mois == 4){
n = 31+29+31
}
if (bissextile == true && mois == 5) {
n = 30+31+29+31
}
if (bissextile == true && mois == 6) {
n = 31+30+31+29+31
}
if (bissextile == true && mois == 7){
n = 30+31+30+31+29+31
}
if (bissextile == true && mois == 8) {
n = 31+30+31+30+31+29+31
}
if (bissextile == true && mois == 9){
n = 31+31+30+31+30+31+29+31
}
if (bissextile == true && mois == 10){
n = 30+31+31+30+31+30+31+29+31
}
if (bissextile == true && mois == 11){
n = 31+30+31+31+30+31+30+31+29+31
}
if (bissextile == true && mois == 12){
n = 30+31+30+31+31+30+31+30+31+29+31
}
s=a+q+n+jour+1;
r=s%7;
if (r==1){
resultat="lundi"
}
if (r==2){
resultat="mardi"
}
if(r==3){
resultat="mercredi"
}
if (r==4){
resultat="jeudi"
}
if(r==5){
resultat="vendredi"
}
if(r==6){
resultat="samedi"
}
if(r==7){
resultat="dimanche"
}
return r;
Ecrire(JourDeLaSemaine(a,q,n,s,r,mois,bissextile,annee,jour,resultat))

Merci d'avance de vos réponses.

A voir également:

1 réponse

Salut,
" Le programme fonctionne sauf " Donc il ne fonctionnes pas.
Le calendrier que nous utilisons est faux, d'où la nécessité de rectification régulières.
Je vous conseille de vous baser sur le temps en secondes Unix:
http://www.unixtimestamp.com/index.php

Qui vous permettra de simplifier les calculs et d'avoir des résultats justes(un nombre de secondes est un nombre de secondes, les années elles ne font pas exactement 365 jours), rectifiez ensuite après en prenant en compte le décalage moyen du calendrier.

En tout cas votre algorithme ne pourra ps fonctionner:
if (bissextile == true && mois == 5) {
n = 30+31+29+31
} puisque il s'appuie sur des séquences logiques et non des valeurs mathématiques, le cycle de la terre autour du soleil étant mathématique c'est cette correction (celle du calendrier)qu'il faut prendre en compte et non le calcul arbitraire des années bisextiles qui est par définition faux.
0