Algorithme Zeller

Résolu
bonsoir je sais ou est mon probléme ,ca tourne mais ne me donne pas l resultat correcte aparament la formule nai pas correcte donné par lexercice
merciii de m'aiderrr etmerci bk

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int j,m,a,r,q,jo,f;
     do {
        printf("\n donner le nbre de jour svp: \n");
        scanf("%d",&j);

    }while ((j<=1)&&(j>=31));
     do {
        printf("\n donner le mois svp: \n");
        scanf("%d",&m);

    }while ((m<=1)&&(m>=12));
     do {
        printf("\n donner l'annee svp: \n");
        scanf("%d",&a);

    }while (a<=1900);
    if(m>3){
        m=m-2;
}        else
  {
            m=m+10;
        a=a-1;
r=a%100;
q=a/100;
}

  f= ((j + r) - (2*q) + (q/4) + (r/4)) + (((26 * m) - 2) / 10);
   printf("\n%d",f);
   jo=f%7;
   switch (jo){
   case 1:printf(" c est lundi"); break;
   case 2:printf("c est mardi"); break;
   case 3:printf("c est mercredi"); break;
   case 4:printf("c est jeudi"); break;
   case 5:printf("c est vendredi"); break;
   case 6:printf("c est samedi"); break;
   case 7:printf("c est dimanche"); break;
   default :printf("erreur");
   }



    return 0;
}

2 réponses

  1. Contributeur
    }while ((j<=1)||(j>=31));
    Attention, il faut aussi mettre j<1, j>31. Sinon, tu ne pourras pas mettre un jour =1 à =31...
    De même pour les mois et années.

    Concernant, le modulo, tu te trompes...
    f%7 renvoie une valeur valant 0,1,..., 6. C'est mathématique...

    Cdlt,
    1. donc comment je peux corriger pour l f et merci
    2. Contributeur
      Soit, tu fais : f%7+1; soit tu modifies ton switch pour mettre 0, ..., 6.
    3. ok je veux essayer
    4. #include <stdio.h>
      #include <stdlib.h>
      
      int main()
      {
          int j,m,a,r,q,jo,f;
           do {
              printf("\n donner le nbre de jour svp: \n");
              scanf("%d",&j);
      
          }while ((j<1)||(j>31));
           do {
              printf("\n donner le mois svp: \n");
              scanf("%d",&m);
      
          }while ((m<1)||(m>12));
           do {
              printf("\n donner l'annee svp: \n");
              scanf("%d",&a);
      
          }while (a<1900);
          if(m>3){
              m=m-2;
      }        else
        {
                  m=m+10;
              a=a-1;
      r=a%100;
      q=a/100;
      }
      
        f= ((j + r) - (2*q) + (q/4) + (r/4)) + (((26 * m) - 2) / 10);
         printf("\n%d",f);
         jo=f%7;
         switch (jo){
         case 0:printf(" c est lundi"); break;
         case 1:printf("c est mardi"); break;
         case 2:printf("c est mercredi"); break;
         case 3:printf("c est jeudi"); break;
         case 4:printf("c est vendredi"); break;
         case 5:printf("c est samedi"); break;
         case 6:printf("c est dimanche"); break;
         case 7:printf("c est dimanche"); break;
         default :printf("erreur");
         }
      
      
      
          return 0;
      }


      mm probléme :/ voila lenonce d'exercice jai rien ajouter jaiii sui juste lenoncé
      On se propose d'écrire un programme qui demande la date de naissance de
      l'utilisateur et indiqué le jour de la semaine auquel il est né en utilisant la
      formule de Zeller (0 pour dimanche, 1 pour lundi..........).
      Le principe de formule de Zeller est comme suit :
      ? Une date est définie par trois valeurs : j /m/ a
      J valeur de 01..31, m de 01..12 et a entier de quatre chiffres.
      ? Si m>3 remplacer m par m-2, sinon utiliser m+10 au lieu de m et a-1
      au lieu de a.
      ? q et r quotient et reste de la division entière de a par 100.
      ? F = j + r -2q + q/4 + r/4 + (26m-2)/10 (division entières).
      ? Le reste de la division de F par 7 donne le numéro du jour
    5. Contributeur
      Ben tu ne respectes pas l'énoncé...
      (0 pour dimanche, 1 pour lundi..........)
      Il le dit clairement : 0 pour dimanche, 1 pour lundi...
      Donc, ça confirme bien ce qu'on te disait f%7 renvoie bien entre 0 et 6. Donc corrige ça déjà, et ça ira mieux.

      r=a%100;
      q=a/100;

      Ca, ça doit être exécuté tout le temps et pas seulement lorsque m<=3. Il faut donc le mettre à l'extérieur du else.

      Cdlt,