Modulo en C

Fermé
rayxx - 11 févr. 2010 à 15:37
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 11 févr. 2010 à 16:11
Bonjour,
je voudrais juste savoir pourquoi, quand je demande de m'afficher (-1) modulo 6 (par exemple) en C, il me met -1, alors que normalement c'est 5.
Merci.

6 réponses

latoopa Messages postés 258 Date d'inscription dimanche 11 octobre 2009 Statut Membre Dernière intervention 5 janvier 2012 32
11 févr. 2010 à 15:41
Je pense que le modulo ne marche pas pour un négatif...

Pour contourner ce problème, essaie :
- modulo de la valeur absolue de ton nombre => |-1|
- tu fais son modulo par rapport à 6 => 1
- tu fais : 6 - (le modulo => 1) = 5 !!

Ca devrait marcher ;)
Aplouch

Toopa
0
merci, mais il y aurait pas une méthode un peu plus simple ? parce que la ça va me faire changer pas mal de truc dans mon programme si je fais comme ça.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
11 févr. 2010 à 15:46
-1%6=-1
-20%6=-2
20%6=2
C'est un peu comme si il factorisait le "-"...
0
latoopa Messages postés 258 Date d'inscription dimanche 11 octobre 2009 Statut Membre Dernière intervention 5 janvier 2012 32
11 févr. 2010 à 15:50
Tu trouves ca compliqué ?

int nouvelleValeur = sqrt( pow(taValeur,2) ) ;  // peut être meme que abs(taValeur) 
int modulo = nouvelleValeur % 6;
int moduloFinal = 6 - modulo;


Ca prend trois lignes :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Je suis d'accord que c'est pas non plus super compliqué, c'est juste que je l'utilise plusieurs fois dans mon programme. Je pourrais rajouter la fonction modulo qui fait ces opérations mais bon, je me disais qu'il y avait peut être une méthode plus directe.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
11 févr. 2010 à 16:11
ou alors, pour prendre en compte tout les cas :
modulo=i>0?i%6:6+i%6;
0