6.3. Lectura y escritura.

Una vez que escogimos la forma de manejar los números, tenemos que ver la forma de poder utilizarlos. Pero antes de poder hacer operaciones con estos números nos interesa poder efectuar la lectura y escritura de los mismos.

Para poder leer un número lo que hacemos es guardar toda la entrada en una cadena. Dependiendo de la entrada que estemos manejando, es probable que convenga revisar que la cadena no contenga caracteres inválidos como espacios. Ya que tenemos la cadena lista, limpiamos la variable en la que vamos a guardar el número y nos colocamos en el primer bloque. Recorremos el arreglo del final hacia al inicio, juntamos los dígitos suficientes (en nuestro caso 9), los cambiamos a número y pasamos al siguiente bloque. Esto lo repetimos hasta llegar al inicio de la cadena.

La escritura de los números grandes es tan directa como la lectura, sólo hay que cuidar que la cantidad de dígitos sea la correcta. Lo único que debemos hacer es recorrer todos los bloques, del más significativo al menor, e irlos escribiendo. El primer bloque lo escribimos tal como está guardado, pero para los demás debemos revisar que el número en el bloque cuente con 9 dígitos. En caso que no los tenga, debemos rellenar con ceros a la izquierda hasta completar.


El procedimiento lee (líneas 1 a 18) nos ayuda a capturar un número grande desde texto. La forma en que lo vamos a leer es a través de la cadena s, para después meterlo dígito por dígito en el bloque que le corresponde. Es común que en los problemas se presente un número grande por línea, por esto leemos la cadena con readln en la línea 7.

Para asignarle a x (el parámetro) el valor de la cadena, primero nos aseguramos de inicializar el número a cero (línea 83). Lo que hacemos es pasar el caracter a entero, sabiendo que el valor ASCII del cero es 48 y que los siguientes dígitos están ordenados después del cero. Cada dígito que leemos lo desplazamos un lugar a la izquierda (en base 10) mediante pot. Cuando el desplazamiento es igual al tamaño de la base, pasamos al siguiente bloque.

Hay varias modificaciones que podemos hacer al procedimiento de la lectura de números. La primera de ellas es en lugar de pasar dígito por dígito el número, podemos cortar una cadena de tamaño lon, cambiarla a número y asignar este último al bloque correspondiente. Otra modificación es que la lectura de los números no siempre la vamos a realizar de la misma forma, por lo que podríamos cambiarlo de un procedimiento que lee un número grande a una función que acepta como parámetro la cadena y regresa el número. De esta forma la función sería independiente de la metodología para leer la cadena. Estos cambios no son significativos y dependen de las preferencias de quien codifique.

La siguiente función (líneas 20 a 33) es donde escribimos los números grandes, que en este caso sería el resultado. Como mandar a escribir a archivo muchas veces es un proceso lento, primero guardamos el número dentro de una cadena y así poder escribir una sola ocasión. Lo que hacemos para pasar el número a la cadena es utilizar otra cadena en la que guardamos el bloque con el ancho requerido (lon) y después concatenamos esta cadena auxiliar a la cadena principal. Como el ancho se ajusta con espacios, al final cambiamos estos por ceros.


Código en C






© Pier Paolo Guillen Hernandez
World of πer