Algorithme Zeller

Résolu
ikam -  
 ikam -
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   Statut Contributeur Dernière intervention   1 846
 
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
ikam
 
#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
Utilisateur anonyme
 
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ICI

Merci d'y penser dans tes prochains messages.
0