Algorithme Zeller

Résolu/Fermé
ikam - Modifié par Chris 94 le 31/10/2015 à 18:21
 ikam - 1 nov. 2015 à 19:37
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

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
31 oct. 2015 à 19:35
Une petite erreur de code :

}while ((j<=1)&&(j>=31));
Ce n'est pas un && qu'il faut mettre mais un ||.
Je te laisse corriger les autres while.

N'oublie pas d'afficher un '\n' avant la fin de ton programme pour forcer l'affichage.

Sinon au niveau de l'algorithme, il est correct. Juste que la convention est :
Mars=1, ..., Janvier=11, Février=12.

Cdlt,
0
#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;
}

encore un probléme j lai affiché deja le f pour e tester il é d trés grand valeur comme 136 :/ et resultat est fausse de mm
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 931
1 nov. 2015 à 01:14
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ICI

Merci d'y penser dans tes prochains messages.
0