Cuando aprendemos a calcular, siempre empezamos por la suma. En efecto, es la operación más elemental. Nos sirve para representar los números naturales: 4 es 3 + 1, 2 + 1 + 1 o 1 + 1 + 1 + 1. Precisamente esta representación nos permite comprender el primer método de suma que se aprende en la escuela. Así, para sumar dos números naturales A y B, basta con tomar A y sumarle B veces el número 1. Es el método que se utiliza cuando «contamos con los dedos». Cuando empezamos a concebir números mayores, resulta difícil utilizar este método, por lo que aprendemos un segundo. Para sumar dos números naturales grandes A y B, primero sumamos las cifras de las unidades, después las de las decenas, etc., utilizando una «llevada» cuando el resultado tiene más de dos cifras. En realidad, aquí usamos las propiedades asociativa y conmutativa de la suma, así como la descomposición de un número en potencias de 10. Por ejemplo, 59 + 125 = (5 × 10 + 9 × 1) + (1 × 100 + 2 × 10 + 5 × 1) = (9 × 1 + 5 × 1) + (5 × 10 + 2 × 10) + 1 × 100. Pero no enunciaremos estas propiedades formales para explicar a un niño cómo colocar una suma.
Dos métodos a prueba -----------------------------
Si le pides a un amigo que haga el cálculo 23 + 126, puedes estar seguro de que planteará la suma y no utilizará el primer método. Está claro que, si a y b son «suficientemente grandes», el segundo método será mucho más rápido que el primero. Pero ¿qué ocurre con una máquina, un ordenador o una calculadora? Te proponemos comprobar que sigue siendo así programando estos dos métodos en lenguaje Python con la calculadora Graph 90+E. En lo que sigue, consideraremos por tanto dos números naturales A y B tales que A ≤ B.
**La calculadora Graph 90+E. Desde el 31 de agosto de 2018, una actualización disponible gratuitamente en el sitio www.casio-education.fr permite incorporar el nuevo menú de programación en lenguaje Python.**
Primer método: suma por iteración de la unidad.
Para sumar nuestros dos números, tomamos el mayor de los dos, aquí B, y le sumamos el número entero 1, A veces, para realizar el menor número posible de iteraciones. Para calcular 3 + 12, calculamos sucesivamente 12 + 1 = 13, 13 + 1 = 14, 14 + 1 = 15. Por tanto, 3 + 12 = 15. En Python queda así:
Segundo método: suma con llevadas.
Como lector de Tangente, por supuesto sabes plantear una suma con llevadas sin dificultad. Pero, si te pidieran explicar a un niño cómo hacerlo, ¿cómo procederías? Empecemos con un ejemplo. Para calcular 127 + 59, el detalle es el siguiente:
Aquí ya no consideramos las cifras como números, sino como símbolos, y aplicamos el método siguiente: Para sumar A y B, empezamos añadiendo a A tantos 0 como sean necesarios para que ambos números tengan «el mismo tamaño», es decir, el mismo número de cifras; A continuación, sumamos por parejas las cifras de ambos números, empezando por la derecha —mediante el método 1—, y añadimos la llevada si la hay; Colocamos la cifra situada más a la derecha del resultado; Si el resultado tiene más de dos cifras, anotamos una nueva llevada; Por último, pasamos a las cifras contiguas; Cuando ya no quedan cifras, comprobamos si todavía hay una llevada. Si es así, colocamos 1 delante del resultado; en caso contrario, no hacemos nada; Así obtenemos el resultado final.
Tratemos de formalizar este segundo método. Consideremos A = an…a1a0 e
B = bm…b1b0 en forma decimal; es decir, a0, a1… an, y b0, b1… bm son, respectivamente, las cifras, comprendidas entre 0 y 9, de A y B. Por hipótesis, A no tiene más cifras que B. Empezamos añadiendo 0 a la izquierda de A para que ambos números tengan la misma cantidad de cifras; A pasa a ser 00…0an…a1a0. Para cada i entre 0 y m, llamamos di a la cifra de las unidades de la suma *ai + b*i (es decir, el resto de la división euclídea de ai + bi entre 10). Entonces C = cm+1cm…c0 es la suma de A y B, donde: •c0 = d0; • ci = di + r para i entre 0 y m, siendo r la llevada de la operación anterior (el cociente de la división euclídea de ai–1 + bi–1 entre 10); • cm+1 = r es la última llevada.
Para este segundo método, intentaremos codificar la suma tal como se enseñaría a un niño, sin utilizar la división euclídea. Para escribir el programa correspondiente, empezamos transformando nuestros números en cadenas de caracteres (string) mediante la instrucción str. Inicializamos la llevada en 0 y creamos una cadena de caracteres vacía C. Con un primer bucle for, añadimos al principio del número que tiene menos cifras, aquí A, el número de 0 necesario para que ambos enteros tengan el mismo tamaño m. El bucle que recorre A[–j–1] y B[–j–1] nos permite recorrer ambos números de derecha a izquierda (nom\_cadena[–1] devuelve el último carácter de la cadena). Sumamos por parejas las cifras de cada entero utilizando el método anterior. Pero antes debemos volver a considerarlas números y no caracteres. Para ello usamos la función int. A este resultado le sumamos la llevada anterior. Comprobamos si el resultado se escribe con más de dos cifras. Si es así, anotamos una llevada. Después concatenamos este nuevo resultado a la izquierda de C. Por último, concatenamos la última llevada a la cadena C y transformamos esta cadena en un número mediante la instrucción int. En lenguaje Python, queda así:
¿La liebre y la tortuga? -------------------------
¡Ya solo queda probar la velocidad de cálculo con los dos métodos presentados! Para ello, definimos una función test que, dada una función fct de dos argumentos A y B, calcula n veces la cantidad fct(A, B), donde n es un número entero suficientemente grande —aquí, n = 1 000— para que se ponga de manifiesto un fenómeno. En Python, queda así:
¡Ahora te toca realizar algunas pruebas descargando el programa «Velocidad de cálculo» del sitio de recursos de CASIO www.casio-education.fr/! Por ejemplo, puedes realizar los siguientes experimentos con la Graph 90+E o con tu entorno de desarrollo Python preferido: test(add1, 919, 223, 1000) ; test(add2, 919, 223, 1000); test(add1, 23, 126, 1000) ; test(add2, 23, 126, 1000). ¡Puede que te lleves algunas sorpresas!