Como sacar el residuo de una division en C++

Introducción que es el residuo y como sacarlo en C++

No siempre que realizamos una división esta es exacta, si dividiéramos 3 entre 3 el resultado es uno pero si dividimos ese mismo 3 entre dos, nos damos cuenta que nos va a sobrar un uno que no podemos dividir entre 2 y de intentar hacerlo tendríamos que partir la unidad y nos daría un resultado decimal, en este caso el resultado es 1.5, cuando hablamos de residuo hacemos referencia a esa parte del dividendo que sobra y no puede repartirse entre el divisor porque de hacerlo tendríamos que recurrir a decimales, así podemos decir que el residuo de 14 / 5 es 4.

En ocasiones nos puede interesar conocer dicho residió para esto existe una función en C++ dentro de la librería <cstdlib> llamada div();, tras usar esta función nos devolverá 2 resultados, el primero es la parte entera del resultado de la división y el segundo es el residuo, haciendo uso del ejemplo anterior al dividir 14 entre 5 nos devolverá la parte entera del resultado que es 2 y el residuo que es 4, ambos resultados se almacenaran en una sola variable que en verdad es una estructura de tipo div_t en lugar de ser de tipo int, con el siguiente ejemplo queda más clara su implementación y uso.

#include <cstdlib>
#include <iostream> // Necesaria para ver el resultado en pantalla

using namespace std;

int main()
{
div_t resultado;
resultado = div(14,5); // El primer numero sera dividido entre el segundo

cout << "El resultado es:" << resultado.quot << endl;
cout << "El residuo es:" << resultado.rem << endl;

system("pause");
return 0;
}


Ejemplo compilado usando div para obtener el residuo

Explicando el ejemplo anterior



Bien puede observarse en el ejemplo anterior que para acceder al resultado de la división lo hacemos ingresando al atributo .quot, esta palabra se deriva del inglés quotient que significa cociente, para ingresar al residuo hacemos uso del atributo .rem del inglés remainder y precisamente significa residuo.

Si en lugar de dividir los números directamente preferimos dividir números almacenados en 2 variables podemos hacerlo sin problema, las variables han de ser de tipo int veamos cómo se hace.

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int valor1;
int valor2;

valor1=29;
valor2=5;
div_t resultado;

resultado = div(valor1,valor2);

cout << "El resultado es:" << resultado.quot << endl;
cout << "El residuo es:" << resultado.rem << endl;

system("pause");
return 0;
}


Como puede apreciarse es sencillo realizar esta operación, he implementado las variables porque la mayor parte de las ocasiones lo que queremos es obtener el resultado y el residuo de una división que no conocemos, por ejemplo cuando el usuario ingresa los dos valores a dividir en este caso serán almacenados en la variable. Pese a que esta función se puede usar para muchos proyectos que pueden llegar a ser difíciles quedo atento a cualquier consulta que tengan.

¿Como se utiliza el operador modulo en C++?



Otra forma mucho más sencilla de obtener el residuo en una división si únicamente deseamos dicho residuo es utilizar el operador de modulo, aunque no obtendremos el resultado de la división solo su residuo, este operador es %, se usa igual que los otros operadores (+,-,/...) veamos el ejemplo a continuación:


#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int valor1;
int valor2;
int residuo;
valor1=29;
valor2=5;

residuo = valor1 % valor2; // Aqui la parte importante (lo diferente).

cout << "El resultado es:" << residuo << endl;

system("pause");
return 0;
}


Aunque como bien decíamos con este operador solo obtendremos el residuo y no el resultado en otra variable, hay momentos donde solo necesitamos dicho residuo y por tanto evitar procesamiento innecesario siempre es la mejor opción, en resumen este es el método más sencillo y adecuado si buscamos solo ese valor.
Comentarios y preguntas
Luis:
Por que int main() y no void main()
Codigazo:
Hola Luis!, para la función main cualquier tipo de datos es válido, void básicamente indica que es vacio, int es entero, a diferencia de las variables donde es muy importante el tipo de datos, en el caso de la mayoría de funciones da igual si es int o si es void más aun en el caso de la función main, pero toda función tiene que declararse con un tipo de datos, tanto void main() como int main() son válidos y no significan ninguna limitación, la diferencia es que void tiene cuatro letras e int tiene tres nada más, por eso al momento de crear un proyecto de aplicación en la mayoría de IDE actuales, por ejemplo Codeblocks y DEVc++ automáticamente nos crea el int main().
Matias:
En el caso de que fuera una Tabla como se podría hacer la división por casillas?
Codigazo:
Hola Matias, He elaborado el siguiente código para usted, modificando el articulo donde les compartí como hacer tablas de multiplicar en C++, el código permite obtener el resultado de la división estilo tablas y a su derecha también el residuo, es decir obtenemos la parte divisible dividida y la indivisible como residuo, el código es el siguiente:

#include <iostream>
using namespace std;
int izquierda=10;
int derecha=1;
int main(){
while (izquierda <= 10){
cout << izquierda << "/" << derecha << "=" << izquierda/derecha << " Residuo: " << izquierda%derecha << endl;
/* Con la linea anterior sacamos el resultado y le damos
el formato tipico de las tablas de multiplicar */
if (derecha == 10){
izquierda++; /* Cuando el numero de la derecha llega a diez ya tenemos la primer tabla asi
que pasamos a la siguiente incrementando el numero de la izquierda en uno*/
derecha=0; /* Tras llegar el numero de la derecha a diez lo devolvemos a 1
para que empieze con la siguiente tabla */
}
derecha++; // Tras mostrar el resultado de la primera division pasamos a la siguiente
}
cin.get();
return 0;
}


En la siguiente imagen puede observar el resultado y asi considerar si es de su agrado:

Tablas de dividir en C++