Algorithme de maurice kraitchik (1882�1957)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 036 fois - Téléchargée 19 fois

Contenu du snippet

Petit programme permettant la détermination du jour de la semaine d'aprés l'Algorithme de "Maurice Kraitchik" en réponse à la demande d' Amiira.

Source / Exemple :


/* =============================================================================

   OBJET            : Programme permettant la détermination du jour de la semaine
                      d'aprés l'Algorithme de "Maurice Kraitchik".
   --------------------------------------------------------------------------------
   DATE DE CREATION : 30/04/2010
   AUTEUR           : Thebroyeur
   --------------------------------------------------------------------------------
   MODIFICATIONS (   n) date - auteur - description )
   ============================================================================= */

#include <stdio.h>

/*=================================
     FONCTION main
=================================*/
/*===============================*/

int main()
{
    int a;  /* l'année, ie. 2004. */
    int m;  /*  le rang du mois de l'année; sauf pour janvier et février qui sont considérés respectivement comme les 13e et 14e mois de l'année précédente. */
    int q ; /* le quantième du mois (1 à 31).*/
    int j;  /* le rang du jour de la semaine, avec par convention 0=Sam., 1=Dim., 2=Lun., ..., 6=Ven*/
/* Modif : Commentaire de Menuki*/
    static const char * s_jours[]={"samedi","dimanche","lundi","mardi","mercredi","jeudi","vendredi"};
    printf("Entrez une date sous la forme JJ MM AAAA : ");
    scanf("%d %d %d",&q,&m,&a);

/* Modif suite au commentaire de LeFauve42 */
    if (m <= 2) {a--;m+=12;}

    j=(q + 2*m + ((3*(m + 1))/5) + a + (a/4) - (a/100) + (a/400) + 2) % 7;

    /* Modif commentaire de ghuysmans99 */
    printf("\nLe jour de la semaine correspondant au %02d/%02d/%02d est %s.",q,m,a,s_jours[j]);

    return 0;
}

Conclusion :


Voila. Merci à tous pour vos commentaires
Thebroyeur
Ajouter un commentaire Commentaires
Messages postés
4
Date d'inscription
mercredi 21 octobre 2009
Statut
Membre
Dernière intervention
3 septembre 2012

je v modifié le code dans un petit temp
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
@thebroyeur : si tu pouvais regarder ...

J'ai fait de nouvelles modifs. Au programme : ajout du support de l'Unicode et purification du code. Pour ce petit nettoyage de code, j'ai viré les commentaires différentiels qui ne facilitaient pas la lecture (et pis pour les modifs c'est décrit ici).

Le code est disponible à cette adresse : http://pastebin.com/Zh0WpWmp
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Oui, pas faux. Mais quand on modifie un programme en C, il n'est pas interdit de réfléchir à ce qu'on fait. Un oubli pareil ne peut passer inaperçu si l'on teste ses fonctions une fois qu'on les a modifiées. Perso je fais ça à chaque fois et je n'ai pas de problèmes (en même temps je n'ai jamais travaillé sur de gros projets en C). Cela doit néanmoins devenir un réflexe de procéder comme ça (énorme gain de temps au debugging).
Messages postés
13
Date d'inscription
lundi 10 octobre 2005
Statut
Membre
Dernière intervention
11 août 2008

Tout à fait, je comprends très bien que ça ne sert à rien dans ce cas-ci (et dans beaucoup d'autres).

Le problème est que, si tu tolères des exceptions, tu trouveras toujours quelques "tout-fous" pour réclamer d'autres passe-droits.
Au final, tes règles de bonne conduite, censées être établies pour permettre un meilleur échange dans le groupe, ne seront qu'un ramassis de bonnes paroles.

Non, chez nous, cela fait partie de la discipline à laquelle tout le monde s'astreint (volontairement, je précise). Il est vrai que c'est un peu déroutant au début. Un oeil non habitué peut trouver cela moins lisible. Mais après peu de temps, c'est l'inverse qui se produit. Si on ne voit pas les accolades après le if, on est choqué.

Et puis, laisse-moi te raconter une histoire. Un gars de chez nous faisait la forte tête. "Je n'ai qu'une instruction, je ne mets pas d'accolade!". Un jour, il a dû rajouter une deuxième instruction à son if et... il a oublié de rajouter les accolades!
C'est moi qui ait trouvé le bug, pas lui. Comme j'étais choqué à chaque if, ça m'a sauté aux yeux.

Je pense que chez certains, c'est l'orgueil qui parle plus qu'autres choses. Ils pensent prouver leur maîtrise en utilisant toutes les subtilités du langage.
Je ne parle pas de toi. Je ne te connais pas, je ne me permettrais donc pas de te juger.
Certes, c'est bien de savoir ces choses mais si tu les appliques pour qu'au final, ça te complique la vie...

Pour ma part, je suis capable d'écrire du code ultra-condensé mais l'expérience m'a montré que 6 mois plus tard, ce qui était si clair et évident le devient beaucoup moins...
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Sorry j'avais pas présenté la 2ème alternative :
# if (*mois > 12 || *mois < 1)
# break;
Beaucoup plus lisible du coup. Mais quand c'est comme ici une série de if avec toujours la même chose dedans, tu peux bien comprendre que ça ne serve à rien dans ce cas-ci.
Afficher les 33 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.