Logo Studenta

programacion c ejercicios resueltos-52

¡Estudia con miles de materiales!

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

Continuar navegando