2012-09-23 35 views
14

Digamos que necesito formatear la salida de una matriz para mostrar una cantidad fija de elementos por línea. ¿Cómo hago eso usando la operación de módulo?¿Cómo funciona el operador de módulo?

Usando C++, el siguiente código funciona para mostrar 6 elementos por línea, pero no tengo ni idea de cómo y por qué funciona.

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

¿Qué sucede si quiero mostrar 5 elementos por línea? ¿Cómo encuentro la expresión exacta necesaria?

Respuesta

1

Le da el resto de una división.

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

Se puede pensar en el operador de módulo como que le da un residuo. count% 6 divide 6 veces del conteo tantas veces como sea posible y te da un resto de 0 a 5 (Estos son todos los posibles residuos porque ya dividiste 6 tantas veces como puedas). Los elementos de la matriz se imprimen todos en el ciclo for, pero cada vez que el resto es 5 (cada 6º elemento), emite un carácter de nueva línea. Esto le da 6 elementos por línea. Para 5 elementos por línea, utilice

si (count% 5 == 4)

23

en C++ expresión a % b rendimientos resto de la división de un por b (si son positivos. Para la muestra números negativos del resultado es la implementación definida). Por ejemplo:

5 % 2 = 1 
13 % 5 = 3 

Con este conocimiento podemos intentar entender su código. Condición count % 6 == 5 significa que la nueva línea se escribirá cuando el resto del conteo de división por 6 sea cinco. ¿Con qué frecuencia ocurre esto? Exactamente 6 líneas separadas (ejercicio: escriba los números 1.30 y resalte los que satisfacen esta condición), comenzando en la 6ª línea (recuento = 5).

Para obtener el comportamiento deseado de su código, debe cambiar la condición a count % 5 == 4, lo que le dará línea nueva cada 5 líneas, comenzando en la línea 5-th (count = 4).

+3

"Para números negativos sig n de resultado es implementación definida "Esto no es cierto en C++ 11 - ver ISO14882: 2011 (e) 5.6-4 o https://stackoverflow.com/questions/7594508. –

1

este proyecto puede jsFiddle le ayuda a comprender cómo el trabajo de módulo: http://jsfiddle.net/elazar170/7hhnagrj

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

módulo Básicamente operador le da resto Ejemplo simple en las matemáticas lo que queda/resto de 11 dividido por 3? respuesta es 2

para la misma cosa C++ tiene operador módulo ('%')

código básico para la explicación

#include <iostream> 
using namespace std; 


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

    return 0; 
} 

que mostrará

resto es 2

Cuestiones relacionadas