División entera y resto

Para hacer una división y calcular el cociente o el resto, pero sin usar decimales, usamos las operaciones “división entera” y “resto” o “módulo” de nuestro lenguaje de programación preferido. Una discusión más completa está en la página sobre división entera y resto.

Las ventajas de hacer las operaciones puramente en enteros son:

  • Es la cuenta que uno quiere hacer. Si uno quiere calcular, conceptualmente, la división entera, lo mejor es decirle al programa que haga la división entera. Además el código queda más claro y evidencia mejor lo que uno quiere hacer.
  • Consecuencia de lo anterior, evitamos problemas de redondeo. Al calcular con decimales, podríamos obtener algo como 4,99999997 y al tirar los decimales queda 4 en vez de 5…
  • Es más rápido: calcular los decimales y después tirarlos es un derroche. Dependiendo de la computadora, hacer esto puede ser unas 10 veces más lento, aunque en las computadora más nuevas la diferencia es mucho menor, quizás 2 veces.

En cada lenguaje hay que utilizar un símbolo ligeramente diferente para indicar estas operaciones.

Basic (QB)

División normal:

Print 7/3   ' Da 2.33333333333

División entera:

Print 7\3   ' Da 2

Resto de la división entera:

Print 7 mod 3   ' Da 1

Pascal

División normal:

WriteLn(7/3)   { Da 2.33333333333 }

División entera:

WriteLn(7 div 3)  { Da 2 }

Resto de la división entera:

WriteLn(7 mod 3)  { Da 1 }

C/C++

Con C y C++ es un poquito más complicado elegir cómo divide, porque se usa siempre el mismo simbolito: '/'. C realiza una división entera cuando los operandos son enteros, y una división con decimales cuando cualquiera de los dos operadores tiene decimales (float o double). Lo que se puede hacer para forzar una división con decimales es convertir uno de los operandos a número con decimales. Por ejemplo, en vez de escribir a/b escribimos (a+0.0)/b (sumar 0.0 hace que el numero pase a tener decimales). Ojo: tiene que ser 0.0 y no para que funcione.

División normal:

printf("%f", (7 + 0.0)/3);   /* Da 2.33333333333 */

En este caso, en vez del truquito de sumar 0.0, podemos hacer algo un poco más fácil de leer (aunque con el riesgo de pasarlo por alto por ser demasiado sutil):

printf("%f", 7.0/3);   /* Da 2.33333333333 */

División entera:

printf("%d", 7/3);  /* Da 2 */

Resto de la división entera:

printf("%d", 7%3);  /* Da 1 */

(Nota: en C++ es mejor usar cout << que printf.)

Números negativos

Nota 2: en todos los lenguajes hay que tener cuidado cuando alguno de los operandos es un número negativo, porque el resultado podría no ser lo que queremos.

Si no se indica lo contrario, el contenido de esta página se ofrece bajo Creative Commons Attribution-Noncommercial-Share Alike 2.5 License.