Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
126 | Capítulo 4: Entrada de datos al programa y el proceso de diseño de software Ése no es un número de parte válido. Los números de parte no deben ser de más de cuatro dígitos de largo. Por favor vuelva a introducir el número en forma apropiada. En el capítulo 5 se mencionan sentencias que permiten probar datos erróneos. 4.3 Entrada/salida no interactiva Aunque en este texto se tiende a usar ejemplos de entradas y salidas (I/O) interactivas, muchos pro- gramas se escriben con I/O no interactivas. Un ejemplo común de I/O no interactiva en sistemas computarizados grandes es el procesamiento por lotes (véase el capítulo 1). Recuerde que en el pro- cesamiento por lotes el usuario y la computadora no interactúan mientras el programa está en ejecu- ción. Este método es más efectivo cuando un programa va a introducir o a producir grandes cantida- des de datos. Un ejemplo de procesamiento por lotes es un programa que introduce un archivo que contiene califi caciones semestrales para miles de alumnos e imprime informes de califi caciones que serán enviados por correo. Cuando un programa debe leer muchos valores de datos, la práctica habitual es prepararlos con anticipación y archivarlos en un disco. Esto permite al usuario volver y hacer cambios o correcciones a los datos según sea necesario antes de ejecutar el programa. Cuando se diseña un programa para imprimir muchos datos, el resultado se puede enviar a una impresora de alta velocidad u otro archivo de disco. Después de que el programa ha ejecutado, el usuario puede examinar los datos cuando sea más conveniente. En la siguiente sección se analizan la entrada y salida con archivos de disco. Los programas diseñados para I/O no interactiva no imprimen mensajes de indicación para in- greso. Sin embargo, es una buena idea imprimir por eco cada valor de datos que se lea. La impresión por eco permite que la persona lea el resultado para comprobar que los valores de entrada se prepa- raron de manera correcta. Debido a que los programas no interactivos tienden a imprimir grandes cantidades de datos, su resultado es con frecuencia en la forma de una tabla; esto es, columnas con encabezados descriptivos. La mayoría de los programas C++ se escriben para uso interactivo. Pero la fl exibilidad del lengua- je permite escribir también programas no interactivos. La gran diferencia reside en los requerimientos de entrada o salida. Los programas no interactivos son en general más rígidos respecto a la organiza- ción y formato de los datos de entrada y salida. 4.4 Ingreso y salida de archivos En todo lo que se ha visto hasta aquí, se ha supuesto que el ingreso de datos para los programas viene del teclado y que el resultado va a la pantalla. Ahora se examina la introducción y salida de datos hacia y desde archivos. Archivos Antes se defi nió un archivo como un área nombrada en el almacenamiento secundario que contiene una colección de información (por ejemplo, el código de programa que se ha tecleado en el editor). La información en un archivo se guarda en un dispositivo de almacenamiento auxiliar, como un disco. Los programas pueden leer datos de un archivo de la misma forma que leen datos desde el teclado, y pueden escribir el resultado en un archivo de disco del mismo modo que lo escriben en pantalla. ¿Por qué se querría que un programa leyera datos de un archivo en lugar de hacerlo desde el teclado? Si un programa va a leer una gran cantidad de datos, es más fácil introducirlos en un archi- vo con un editor que hacerlo mientras el programa está en ejecución. Con el editor, se puede volver y corregir errores. Asimismo, no es necesario meter todos los datos a la vez; se puede interrumpir la tarea y volver después. Y si se quiere volver a ejecutar el programa, tener almacenados los datos en un archivo permite hacerlo sin volver a teclear los datos. www.FreeLibros.me ¿Por qué se desearía escribir el resultado de un programa en un archivo de disco? El contenido de un archivo se puede mostrar en una pantalla o imprimir. Esto da la opción de examinar el resul- tado una y otra vez sin volver a ejecutar el programa. También, el resultado almacenado en un ar- chivo se puede leer en otro programa como entrada. Uso de archivos Si se quiere que un programa use el archivo I/O, se tienen que hacer cuatro cosas: 1. Solicitar al preprocesador que incluya el archivo de encabezado fstream. 2. Usar las sentencias de declaración para declarar los fl ujos de archivo que se van a usar. 3. Preparar cada archivo para lectura o escritura al usar una función llamada open. 4. Especifi car el nombre del fl ujo de archivo en cada sentencia de entrada o salida. Incluir el archivo de encabezado fstream Suponga que se desea que el programa Hipoteca del ca- pítulo 3 (p. 108) lea los datos de un archivo y escriba su resultado en un archivo. Lo primero que se debe hacer es usar la directiva de preprocesador #include <fstream> Por medio del archivo de encabezado fstream, la biblioteca estándar de C++ defi ne dos tipos de datos, ifstream y ofstream (que signifi can fl ujo de archivos de entrada y fl ujo de archivos de sa- lida). Congruente con la idea general de fl ujos en C++, el tipo de datos ifstream representa un fl ujo de caracteres proveniente de un archivo de entrada, y ofstream representa un fl ujo de carac- teres que van a un archivo de salida. Todas las operaciones istream que ha aprendido —el operador de extracción (>>), la función get y la función ignore— son válidas también para el tipo ifstream. Y todas las operaciones ostream, como el operador de inserción (<<) y los manipuladores endl, setw y setprecision, se aplican también al tipo ofstream. A estas operaciones básicas, los tipos ifstream y ofstream agregan algunas operaciones más, diseñadas específi camente para ingreso o salida de archivos. Declarar fl ujos de archivos En un programa, las variables de fl ujo se declaran de la misma forma que cualquier variable, se especifi ca el tipo de datos y luego el nombre de la variable: int someInt; fl oat someFloat; ifstream inFile; ofstream outFile; (Las variables de fl ujo cin y cout no se tienen que declarar. El encabezado de archivo iostream lo hace por usted.) Para el programa Hipoteca, se nombrarán los fl ujos de archivo de entrada y salida inData y outData. Se declaran de esta manera: ifstream inData; // Contiene la cantidad prestada, el interés y la longitud ofstream outData; // Contiene valores de entrada y pagos mensuales Observe que el tipo ifstream es sólo para archivos de entrada y el tipo ofstream es sólo para archivos de salida. Con estos tipos de datos, no se puede escribir y leer del mismo archivo. Apertura de archivos La tercera cosa que se tiene que hacer es preparar cada archivo para lectura o escritura, un acto denominado apertura de archivo. Abrir un archivo ocasiona que el sistema opera- tivo de la computadora lleve a cabo ciertas acciones que permiten proceder con la entrada o salida de archivos. 4.4 Ingreso y salida de archivos | 127 www.FreeLibros.me 128 | Capítulo 4: Entrada de datos al programa y el proceso de diseño de software En el ejemplo, se quiere leer del fl ujo de archivos inData y escribir al fl ujo de archivos outDa- ta. Los archivos importantes se abren por medio de estas sentencias: inData.open("loan.in"); outData.open("loan.out"); Ambas sentencias son llamadas de función (observe los argumentos delatores, la marca de una fun- ción). En cada llamada de función, el argumento es una cadena literal entre comillas. La prime- ra sentencia es una llamada a una función denominada open, que se relaciona con el tipo de datos ifstream. La segunda es una llamada a otra función (denominada también open) relacionada con el tipo de datos ofstream. Como se ha visto antes, se emplea la notación de punto (como en inData. open) para llamar ciertas funciones de biblioteca estrechamente relacionadas con tipos de datos. ¿Exactamente qué hace una funciónopen? Primero, relaciona una variable de fl ujo empleada en su programa con un archivo físico en disco. La primera llamada de función crea una conexión entre la variable de fl ujo inData y el archivo de disco real, nombrado loan.in. (Los nombres de fl ujos de archivo deben ser identifi cadores; son variables en su programa. Pero algunos sistemas computariza- dos no usan esta sintaxis para nombres de archivo en disco. Por ejemplo, muchos sistemas permiten o incluso requieren un punto dentro de un nombre de archivo.) De manera similar, la segunda llama- da de función relaciona también la variable de fl ujo outData con el archivo de disco loan.out. Asociar un nombre de programa para un archivo (outData) con el nombre real para el archivo (loan.out) es casi lo mismo que asociar el nombre de un programa para el dispositivo de salida estándar (cout) con el dispositivo real (la pantalla). La tarea siguiente que realiza la función open depende de si el archivo es de entrada o de salida. Con un archivo de entrada, la función open fi ja el marcador de lectura del archivo a la primera pie- za de datos en el archivo. (Cada archivo de entrada tiene su propio marcador de lectura.) Con un archivo de salida, la función open comprueba si ya existe el archivo. Si no existe, open crea para usted un nuevo archivo vacío. Si el archivo ya existe, open borra el contenido anterior del archivo. Luego, el marcador de escritura se fi ja al comienzo del archivo vacío (véase la fi gura 4-2). Conforme procede la salida, cada operación de salida sucesiva hace avanzar el marcador de escritura para añadir datos al fi nal del archivo. Debido a que la razón para abrir archivos es prepararlos para lectura o escritura, se deben abrir los archivos antes de usar cualquier sentencia de entrada o salida que se refi era a los archivos. En un programa, es una buena idea abrir de inmediato los archivos para asegurarse de que están preparados antes de que el programa intente cualquier ingreso o salida de archivos. M int main() { M } Declaraciones // Abrir los archivos Figura 4-2 Efecto de abrir un archivo Marcador de lectura Marcador de escritura inData outData ARCHIVO inData DESPUÉS DE LA APERTURA ARCHIVO outData DESPUÉS DE LA APERTURA www.FreeLibros.me
Compartir