Opération modulaire

Fermé
programmation - Modifié par programmation le 9/03/2016 à 14:06
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 10 mars 2016 à 16:00
Bonjour,

dans mon programme je veux faire une opération modulaire d'un nombre négatif sur un nombre positif mais le résultat toujours fausse .
pouvez vous m'aider s'il vous plait .
merci d'avance .
programme:
printf("entrer un entier a\n",a);
scanf("%d",&a);
printf("entrer un entier b\n",b);
scanf("%d",&b);
z = a % b;
printf("z=%d",z);
par exemple j'ai a=-2 et b=5
donc le résultat juste doit être 3 alors que le programme donne -2

2 réponses

Pierre1310 Messages postés 8564 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 649
9 mars 2016 à 14:11
Salut,

Explique moi comment tu pourrai obtenir 3.
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
10 mars 2016 à 12:14
Bonjour,
Pour l'opérateur modulo, la norme indique que le cas des valeurs négatives ou nulles est dépendant du compilateur.
La définition mathématique n'étant pas claire non plus, il te faut séparer les cas et les gérer individuellement
int modulo( int a , int b ) {
   int m;
   if ( b > 0 ) {
      if ( a >= 0 ) {
         m = a % b;  // les deux sont positifs, aucune ambiguité
      }
      else {  // cas de ton exemple, b positif et a négatif
         m = a % b;
         if ( m < 0 )
            m += b;  // valeur équivalent positive du modulo négatif
      }
   }
   else if ( b < 0 ) {
      if ( a >= 0 ) { // b négatif et a positif
         // TODO
      }
      else {  // les 2 sont négatifs
         // TODO
      }
   }
   else { // le cas où b est nul est lui aussi particulier
      // TODO
   }
   return m;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
10 mars 2016 à 16:00
Et lorsque le monsieur aura fait le TODO, je donnerai 1 solution en 1 ligne :-).
0