IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Formule de zeller invalidée ?


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 185
    Par défaut Formule de zeller invalidée ?
    Bonjour à tous j'aimerai avoir une réponse à ma question...

    j'utilise une formule mathématique dite de Zeller (du nom de son inventeur) qui permet de calculer le jour de la semaine en fonction de la date.

    Cette fonction tournai sans probleme jusqu'au jour fatidique du 01/05/2008

    en effet avant cette date la formule détermine bien le jour de la semaine sans se tromper

    mais passé le 30/04/2008 la formule semble éronnée... il y à un jour de décallage

    il semblerai que la formule tiens compte du fait qu'il existe un 31/04/2008

    je vous passe le code (en JAVA) :

    Code java : 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
     
    public class zeller
    {
     
    	public static void main(String args[])
    	{
    		zeller z = new zeller();
    		int jour = z.zellerFormula(Integer.parseInt(args[0]),Integer.parseInt(args[1]),Integer.parseInt(args[2]));
    		switch(jour)
    		{
    			case 0:
    				System.out.println("Samedi\n");
    				break;
    			case 1:
    				System.out.println("Dimanche\n");
    				break;
    			case 2:
    				System.out.println("Lundi\n");
    				break;
    			case 3:
    				System.out.println("Mardi\n");
    				break;
    			case 4:
    				System.out.println("Mercredi\n");
    				break;
    			case 5:
    				System.out.println("Jeudi\n");
    				break;
    			case 6:
    				System.out.println(" Vendredi\n");
    				break;
    		}
    	}
     
    	public zeller()
    	{
    	}
     
    	public static int zellerFormula (int dd, int mm, int yyyy) 
    	{
    		if (mm == 1 || mm == 2) 
    		{
    			mm += 12;
    			yyyy--;
    		}
     
    		int cc = yyyy/100;
    		int yy = yyyy%100;
     
    		int k = (int)(dd + Math.round(2.6d*(mm + 1)) + Math.round(cc/4) - 2*cc + yy + Math.round(yy/4));
     
    		if (k<0) 
    		{
    			k = (-k)%7;
    			k = 7 - k;
    		}
    		//return days [k%7];
    		return (k%7);
    	}
     
    }

    faites des tests svp et dites moi si vous obtenez comme moi ?

    existe-t-il d'autres algorithmes permettant de faire ce prodige ? lol

  2. #2
    alex_pi
    Invité(e)
    Par défaut
    Citation Envoyé par MortDansLAme Voir le message
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    		if (k<0) 
    		{
    			k = (-k)%7;
    			k = 7 - k;
    		}
    Tu es sûr de ça ? Ca ne correspond pas à ce que je lis sur le net concernant la formule de Zeller. Et d'ailleurs, en faisant le test, avec les formules donnée, je tombe bien sur 3 pour aujourd'hui, soit le mardi. Le soucis vient donc de ton implémentation

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 185
    Par défaut
    oui effectivement c'était faux

    donc avec ce code ca fonctionne :

    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
     
    public static int zellerFormula (int day, int month, int year) 
    	{
    		//On utilise la congruence de Zeller
        if (month <= 2)
        {
            month += 12; //pour janvier = 13, février = 14
            year --;
        }
        int K = year % 100;
        int J = year / 100;
     
        //calcul via la congruence de Zeller
        int h = (day + (26*(month + 1))/10 + K + K/4 + J/4 + 5*J) % 7;
     
     
        return h%7;
    	}

  4. #4
    alex_pi
    Invité(e)
    Par défaut
    J'espère que ça t'apprendra à ne pas repomper du code sans le comprendre...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 185
    Par défaut
    je l'avai bien compris mais n'étant pas mathématicien je ne pouvai pas vérifier l'exactitude de la fonction mathématique...

    et puis je croyai être sur un forum d'entraide et non sur un forum pour prendre les autres de haut...

  6. #6
    alex_pi
    Invité(e)
    Par défaut
    Jusqu'à nouvel ordre, pour comprendre ce qu'est une oppération modulo, et donc savoir que k mod n n'est pas égal à -k mod n, il ne faut pas être "mathématicien". Si tu ne comprend pas ça, ça ne sert à rien de vouloir faire de l'informatique, désolé.

    De plus, "aider", ce n'est pas juste corriger les erreurs, mais aussi inciter la personne à ne pas les reproduire. Repomper du code sans le vérifier est une erreur, je la souligne, et t'incite à ne pas la reproduire. Ce n'est pas te prendre de haut. Et tu auras j'espère remarqué que j'avais commencé par te dire où se situait l'erreur d'implémentation.

    Maintenant si tu veux rester dans cette magnifique mouvance de la googlisation du code, fais toi plaisir, mais ne t'étonnes pas le jour où ton patron te virera pour faute professionelle grave.

    Bonne continuation

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/03/2013, 20h04
  2. [Crystal] Formules ...
    Par Antichoc dans le forum Formules
    Réponses: 3
    Dernier message: 25/11/2003, 10h52
  3. [XMLRAD] invalid character type
    Par Sylvain James dans le forum XMLRAD
    Réponses: 4
    Dernier message: 10/12/2002, 07h47
  4. [Formule] Lever et coucher du soleil
    Par psl dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 21/10/2002, 16h37
  5. [reseaux] Comment creer un compte user à partir d'un formul avec perl
    Par oulai_evado dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 01/10/2002, 19h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo