Algoritmo de la división
Publicado el

Algoritmo de la división

La división es una operación matemática básica que utilizamos a menudo en nuestro día a día. Aunque podemos realizar divisiones de manera sencilla utilizando funciones o librerías predefinidas, es importante conocer cómo funciona un algoritmo de división y cómo implementarlo por nuestra cuenta.

En matemáticas el algoritmo de la division es enunciado como sigue:

Teorema. Algoritmo de la división

Dados dos números enteros aa y bb, con b0b\neq 0, se puede encontrar un número entero qq y un número entero rr tales que a=bq+ra = bq + r y 0r<b0 \leq r <|b|. El entero qq se llama cociente y el entero rr se llama resto de la division de aa por bb. En el caso de que bb sea negativo, el cociente qq es negativo y el resto rr es positivo.

El teorema anterior define una forma de calcular el cociente y el resto de una división, pero no parece ser un algoritmo en sí mismo. Sin embargo, su enfoque matemático puede ser útil para desarrollar un algoritmo eficiente de división. La idea es aplicar los conceptos del teorema para crear un proceso sistemático y repetitivo que permita dividir dos números y obtener el resultado deseado. De esta manera, podemos utilizar la lógica y las matemáticas para resolver problemas prácticos y aplicar la teoría en la práctica.

Explicación del algoritmo de división para enteros

Antes de implementar el algoritmo, veamos cómo se realiza una división a mano, considerando también los números negativos. Tomaremos como ejemplo la división de 17 entre 5, y luego explicaremos cómo manejar los casos negativos.

  1. Inicialización: Iniciamos dividendo con 17, el divisor con 5, el cociente en 0 y el resto igual al dividendo.

  2. Bucle principal: Mientras el valor absoluto del resto sea mayor o igual al valor absoluto del divisor, realizamos las siguientes acciones: restamos el valor absoluto del divisor del valor absoluto del resto e incrementamos el valor absoluto del cociente en uno. En nuestro ejemplo, dado que 175|17| \geq |5|, restamos el valor absoluto del divisor del valor absoluto del resto: 17 - 5 = 12. Luego, aumentamos el valor del cociente en 1: 0 + 1 = 1. Repetimos el bucle hasta que la condición deje de cumplirse. La secuencia de estos pasos se muestra en la siguiente table de iteraciones:

    IteraciónDividendoDivisorCocienteResto
    1175017
    2175112
    317527
    417532
  3. Al finalizar, el valor absoluto del cociente es 3 y el del resto es 2.

Manejo de números negativos en la división

Cuando realizamos divisiones con números negativos, es importante tener en cuenta algunas reglas adicionales para determinar correctamente el signo del cociente y cómo manejar el resto. El primer paso es determinar el signo del resultado: si el dividendo y el divisor tienen el mismo signo, ya sea ambos positivos o ambos negativos, el cociente será positivo. En cambio, si los signos son diferentes, el cociente será negativo. Esta regla se aplica siempre, sin importar los valores específicos de los números involucrados.

Una vez que se ha determinado el signo del cociente, el siguiente paso es trabajar únicamente con los valores absolutos de los números. De esta forma, nos centramos en la magnitud de los números sin preocuparnos temporalmente por el signo. El proceso de división, es decir, restar repetidamente el divisor del dividendo y contar cuántas veces se puede hacer, sigue siendo exactamente el mismo que en el caso de los números positivos.

Al finalizar la división, ajustamos el signo del cociente según lo determinado al principio. Sin embargo, el resto siempre conservará el mismo signo que el dividendo original. Esto es importante, ya que el cociente puede cambiar de signo según los valores absolutos, pero el resto debe reflejar el signo del número que estamos dividiendo.

Ejemplo de divisiones con números negativos

Veamos cómo se aplica este proceso en algunos ejemplos concretos. Tomemos primero el caso de -17 dividido por 5. Como el dividendo es negativo y el divisor es positivo, el cociente será negativo. Trabajamos con los valores absolutos, dividiendo 17 entre 5 de la manera usual. Esto nos da un cociente de 3 y un resto de 2, pero como habíamos determinado al principio que el cociente debe ser negativo, el resultado final es: cociente = -3, resto = -2.

Ahora consideremos el caso inverso, 17 dividido por -5. Aquí, el dividendo es positivo y el divisor es negativo, lo que nuevamente nos indica que el cociente será negativo. Siguiendo el mismo proceso, obtenemos un cociente de 3 y un resto de 2, pero ajustamos el signo del cociente para obtener: cociente = -3, resto = 2.

Finalmente, tomemos el caso de -17 dividido por -5. Como ambos números son negativos, el cociente será positivo. Después de realizar la división con los valores absolutos, obtenemos un cociente de 3 y un resto de 2, y dado que el cociente debe ser positivo, el resultado es: cociente = 3, resto = -2.

Caso especial: Dividendo mejor que el divisor

Un caso especial ocurre cuando el valor absoluto del dividendo es menor que el del divisor. En este escenario, el cociente es siempre 0, ya que no se puede restar el divisor del dividendo ni una sola vez. El resto será simplemente el mismo valor que el dividendo, ya que no hay una división completa. Por ejemplo, al dividir 3 entre 5, el cociente es 0 y el resto es 3. Lo mismo ocurre si el dividendo es negativo: -3 dividido por 5 da un cociente de 0 y un resto de -3. Si el divisor también es negativo, como en 3 dividido por -5, el cociente sigue siendo 0, pero el resto se mantiene positivo, es decir, 3. Finalmente, en -3 dividido por -5, el cociente es 0 y el resto es -3, siguiendo la misma lógica.

Implementación del algoritmo de división en Python

A continuación, presentamos un pseudocódigo que describe el algoritmo de división para enteros, incluyendo el manejo de números negativos.

Algoritmo 1. División de Enteros

Funcioˊn:\text{\textbf{Función:}} divisioˊn(a,b)\text{división}(a, b)

Entrada:\text{\textbf{Entrada:}} a,bZ,b0a, b \in \mathbb{Z}, b \neq 0

1.

Si b=0 entonces\text{\textbf{Si} } b = 0 \text{ \textbf{entonces}}

2.

Lanzar error: "El divisor no puede ser cero"\text{Lanzar error: "El divisor no puede ser cero"}

3.

Si (a0 y b>0) o (a0 y b<0) entonces\text{\textbf{Si} } (a \geq 0 \text{ \textbf{y} } b > 0) \text{ \textbf{o} } (a \leq 0 \text{ \textbf{y} } b < 0) \text{ \textbf{entonces}}

4.

signo1\text{signo} \leftarrow 1

5.

Si no\text{\textbf{Si no}}

6.

signo1\text{signo} \leftarrow -1

7.

aaa \leftarrow |a|

8.

bbb \leftarrow |b|

9.

cociente0\text{cociente} \leftarrow 0

10.

residuoa\text{residuo} \leftarrow a

11.

Mientras residuob hacer\text{\textbf{Mientras} } \text{residuo} \geq b \text{ \textbf{hacer}}

12.

residuoresiduob\text{residuo} \leftarrow \text{residuo} - b

13.

cocientecociente+1\text{cociente} \leftarrow \text{cociente} + 1

14.

cocientecociente×signo\text{cociente} \leftarrow \text{cociente} \times \text{signo}

15.

Si a<0 entonces\text{\textbf{Si} } a < 0 \text{ \textbf{entonces}}

16.

residuoresiduo×(1)\text{residuo} \leftarrow \text{residuo} \times (-1)

Salida: (cociente,residuo)\text{\textbf{Salida:} } (\text{cociente}, \text{residuo})

Un ejemplo de código en Python que implementa el anterior proceso es el siguiente:

def division(dividend, divisor):
    if divisor == 0:
        raise ValueError("Divisor cannot be zero")

    # Determine the sign of the result more explicitly
    if (dividend >= 0 and divisor > 0) or (dividend <= 0 and divisor < 0):
        sign = 1
    else:
        sign = -1

    # Work with absolute values
    dividend = abs(dividend)
    divisor = abs(divisor)

    quotient = 0
    remainder = dividend

    while remainder >= divisor:
        remainder -= divisor
        quotient += 1

    # Adjust the sign of the quotient and remainder
    quotient *= sign
    remainder *= -1 if dividend < 0 else 1

    return quotient, remainder

# Test the algorithm
dividend = int(input("Enter the dividend: "))
divisor = int(input("Enter the divisor: "))
quotient, remainder = division(dividend, divisor)
print("Quotient:", quotient)
print("Remainder:", remainder)

Este código realiza la división de dos números introducidos por el usuario. En primer lugar, se definen las variables quotient (cociente) y remainder (resto), y se asigna el valor del dividend (dividendo) a remainder. Luego, se utiliza un bucle while que se ejecuta mientras remainder sea mayor o igual que divisor. En cada iteración, se resta divisor a remainder y se aumenta en uno el valor de quotient. Finalmente, se retornan los valores de quotient y remainder como resultado de la función division().

Al ejecutar este código y proporcionar dos números como entrada, obtendremos el cociente y el resto de la división. Por ejemplo, si dividimos 1515 por 33, el resultado sería un cociente de 55 y un resto de 00. Si dividimos 1717 por 33, el resultado sería un cociente de 55 y un resto de 22.

Es importante destacar que el algoritmo de división que hemos implementado es una forma básica y efectiva de realizar divisiones, pero existen otras formas más avanzadas y eficientes. Sin embargo, este ejemplo es útil para entender los conceptos básicos detrás de la división y cómo aplicarlos en la práctica con un lenguaje de programación.

Espero que esto te ayude a entender cómo funciona un algoritmo de división y cómo implementarlo en Python sin utilizar librerías. Si tienes alguna pregunta adicional, no dudes en hacerla.

Referencias