<< Suma de enteros largos >> |
Lecciones anteriores: ninguna |
|
No es posible representar cualquier número dentro de la computadora, debido a que ello utilizaría demasiada memoria y tiempo para realizar las operaciones. Por ello se los dividen en diferentes tipos según el lenguaje, pero hay una gran división:
Estas aproximaciones hacen que a veces una cuenta no de el resultado esperado, o que dos expresiones aparentemente iguales den resultados distintos, por ejemplo:
Otro caso que es más frecuente en la vida real es al tratar de ver si un número es par, una forma de verlo es simplemente dividirlo por dos y ver si el resultado es entero, pero si el número original era muy grande entonces las últimas cifras se perdieron en los cálculos previos y por ello este método falla.
No siempre es necesario conocer todas las cifras, a veces alcanza con la última, como en el ejemplo anterior, y en otros casos alcanza con las primera (por ejemplo para aproximar la superficie de la tierra conociendo su radio). Si realmente quisiéramos operar con números muy largos conservando todas sus cifras, tenemos que realizar las operaciones "a mano", o sea hacer un programa que maneje los números de la misma manera que uno lo hace en lápiz y papel. En esta lección vamos a ver como sumar y restar (que es muy parecido). El producto y la división los vamos a dejar para más adelante. Para hacer esto tenemos que almacenar las cifras en algún lado. Las dos formas más fáciles son usar un vector (array), o usar una cadena de texto. Para hacer más fácil el programa vamos a utilizar un vector de largo fijo e igual para todos los números, por ejemplo 100. Las cifras van a estar ordenadas de atrás para adelante, o sea en la posición 1 van a estar las unidades, en la 2 las decenas, en la 3 las centenas y así siguiendo (En la posición vamos a poner el signo, así que por ahora no la usamos) Entonces podemos escribir una función con tres parámetros, los dos primeros son los números a sumar y el último es donde almacenar el resultado.
En este ejemplo se utiliza esta función para calcular 2^50+5^35. En este caso también se da una idea de como usar esta función para multiplicar, pero no es muy eficiente. |
Al
restar aparece el problema de que el resultado puede ser
negativo. Una solución fácil es generar un mensaje de
error y listo. Pero queremos trabajar con todos los
enteros positivos y negativos, para ello agregamos el
signo del número que guardaremos en posición 0 del
vector. Si el número es positivo ponemos un 1, si es negativo un -1 y si es cero... realmente no importa, pero para evitar problemas pongamos un 0. Modificando el programa anterior se puede lograr hacer una subrutina que reste dos números positivos o cero si el primero (a) es mayor o igual que el otro (b), llamamos a esta subrutina restarpositivos (queda como ejercicio). También podemos hacer una función que compare dos números positivos o cero y devuelva 1 si el primero es mayor, -1 si es menor y 0 si son iguales; a esta función la llamamos compararpositivos (también queda como ejercicio). Utilizando estas funciones podemos crear otras dos nuevas que permitan sumar y restar:
Para restar lo que hacemos es cambiarle el signo al segundo número y luego sumarlo al primero usando la subrutina anterior.
También se puede hacer todo esto sin usar tantas funciones separadas aunque hay que tener más cuidado con los signos. También es interesante modificar estos programas de manera que los números puedan tener distinta cantidad de cifras. Ejercicios:
Ejercicios extra :
Lecciones siguientes: Pendiente: Producto de enteros largos |
La idea es que hagan los ejercicios y piensen que otras cosas interesantes se pueden hacer relacionadas con estos temas. Cuéntennos lo que consiguieron y pregunten lo que no les salió. Envíen sus preguntas, dudas, sugerencias, experiencias y propuestas. Nuestra dirección es cym98@oma.org.ar .
También nos gustaría saber tu opinión sobre esta clase. Les pedimos que se tomen unos instantes y contesten estas preguntas. Con tu ayuda podremos hacer un curso cada vez mejor.
OmaNet Curso CyM98 | OmaNet - Educación Interactiva www.oma.org.ar/omanet | omanet@oma.org.ar |
mensajes: webmaster@oma.org.ar |