web-dev-qa-db-fra.com

Comment fonctionne l'opérateur de module?

Disons que je dois formater la sortie d'un tableau pour afficher un nombre fixe d'éléments par ligne. Comment puis-je faire cela en utilisant l'opération de module?

En utilisant C++, le code ci-dessous fonctionne pour afficher 6 éléments par ligne mais je ne sais pas comment et pourquoi cela fonctionne?

for ( count = 0 ; count < size ; count++)
{
    cout << somearray[count];
    if( count % 6 == 5) cout << endl;
}

Et si je veux afficher 5 éléments par ligne? Comment trouver l'expression exacte nécessaire?

29
Tex Qas

en expression C++ a % b renvoie le reste de la division de a par b (s’ils sont positifs. Pour les nombres négatifs, le signe du résultat est défini par la méthode d’implémentation). Par exemple:

5 % 2 = 1
13 % 5 = 3

Avec cette connaissance, nous pouvons essayer de comprendre votre code. Condition count % 6 == 5 _ signifie que la nouvelle ligne sera écrite lorsque le reste du nombre de divisions par 6 sera égal à cinq. Combien de fois cela arrive-t-il? Exactement 6 lignes (exercice: écrivez les nombres 1..30 et soulignez ceux qui remplissent cette condition), à partir de la 6 ème ligne (compte = 5).

Pour obtenir le comportement souhaité de votre code, vous devez changer la condition en count % 5 == 4, ce qui vous donnera une nouvelle ligne toutes les 5 lignes, à partir de la 5ème ligne (compte = 4).

37
KCH

En gros, module vous donne le reste simple Exemple en maths, que reste-t-il/reste de 11 divisé par 3? la réponse est 2

pour la même chose que C++ a opérateur de module ('%')

Code de base pour l'explication

#include <iostream>
using namespace std;


int main()
{
    int num = 11;
    cout << "remainder is " << (num % 3) << endl;

    return 0;
}

Qui affichera

le reste est 2

6
Atri Dave

Ce projet JSFiddle peut vous aider à comprendre le fonctionnement du module: http://jsfiddle.net/elazar170/7hhnagrj

 function modulus(x,y){
   var m = Math.floor(x / y);
   var r = m * y;
   return x - r;
 }
2
SkySibe

Cela vous donne le reste d'une division.

int c=11, d=5;
cout << (c/d) * d + c % d; // gives you the value of c
2
Gung Foo

Vous pouvez penser à l'opérateur de module comme vous donnant un reste. count% 6 divise 6 autant de fois que vous le pouvez et vous donne un reste de 0 à 5 (ce sont tous les restes possibles car vous en avez déjà divisé 6 autant que vous le pouvez). Les éléments du tableau sont tous imprimés dans la boucle for, mais chaque fois que le reste est égal à 5 ​​(tous les 6 éléments), il génère un caractère de nouvelle ligne. Cela vous donne 6 éléments par ligne. Pour 5 éléments par ligne, utilisez

si (compte% 5 == 4)

2
Andy Harris