TP02 D 2014
Facultad Regional Tucumán Departamento:
SISTEMAS
Cátedra: Algoritmos y Estructura de Datos
Ciclo 2014 / 2015
TRABAJO PRÁCTICO
Nº 02
D
DATOS DEL GRUPO DE ALUMNOS
División:
Profesor:
Auxiliar o JTP:
Legajo o DNI
Fecha de Entrega
_/
/
Apellido y Nombre
UNIDAD Nº 2: Cuarta Parte, Manejo de Archivos Binarios.
Problema Resuelto
01) Crear un archivo binario(Multiplo.Dat) e ingresar una serie indeterminada de números
entero, guardando en el archivo, solo aquellos valores que sean múltiplos de 3. Se deberá
mostrar, luego del ingreso, los valores guardados y cantidad de valores que no se
guardaron.
Resolución:
#include
#include
main()
{
//Defines e inicializalas variables a utilizar.
FILE *ArchMultiplo;
//Declara una Variable puntero tipo archivo.
int NroIng = 0;
int CantNumNoGuardado = 0; //Contador para la cantidad de valores que no se guardaron.
char OpcSalida = 'N';
//Variable para controlar el ingreso de datos.
//Crea un archivo binario, si existe el archivo borrara su contenido.
ArchMultiplo = fopen("multiplo.dat", "w+b"); //Crea el archivo, olimpia el archivo.
//Valida la creación del archivo, si no se creó correctamente se aborta el programa.
if (ArchMultiplo == NULL)
{
printf("\n SE PRODUJO UN ERROR AL INTENTAR CREAR EL ARCHIVO");
exit(1);
//Aborta la ejecución del programa, termina. Devuelve 1 indicando que se produjo un error
}
do
{
printf("\nIngrese un Nro : ");
scanf("%d",&NroIng);
/*Verifica si el valor ingresado es múltiplode 3.*/
if ( NroIng%3 == 0)
fwrite(&NroIng, sizeof(NroIng), 1, ArchMultiplo); //Graba en el archivo el Valor Ingresado por ser múltiplo de 3.
else
CantNumNoGuardado = CantNumNoGuardado + 1; //Contabiliza los valores no guardado.
//Consulta al operador para continuar o no con el ingreso.
printf("\n\t Continua: (S)i - (N)o, Ingrese Opcion: ");
_flushall();
scanf("%c",&OpcSalida);
}while((OpcSalida == 'S') || (OpcSalida == 's')); //Fin de la carga de valores.
system("CLS"); //Limpia la pantalla
printf("\n\n\t\t\t LISTADO DEL ARCHIVO\n\n");
rewind(ArchMultiplo); //Posiciona el puntero del archivo en el primer valor del archivo.
fread(&NroIng, sizeof(NroIng), 1, ArchMultiplo); //lee el primer valor del archivo.
/*Lista el archivo utilizando otra estructura repetitiva, la misma controla elfinal del archivo.*/
while ( !feof(ArchMultiplo) ) //Determina si no hay fin de archivo.
{
printf("%d - ", NroIng);
fread(&NroIng,sizeof(NroIng), 1 , ArchMultiplo);
} //Fin del listado.
//Al completarse el procesamiento del archivo se lo cierra.
fclose(ArchMultiplo);
//Muestra la cantidad de valores no Guardados.
printf("\n\n\nLa cantidad de valores no Guardados es: %d \n",CantNumNoGuardado);//El sistema espera que se pulse una tecla, antes de salir.
system("pause");
} //Fin del programa.
02) Se Leen N pares de valores positivos de tipo entero, Por cada par ingresado, se desea
guardar la suma de los valores en un archivo binario (suma.dat) y en otro archivo
(cociente.dat) la división del segundo valor en el primer valor. Tener en cuenta que no
puede haber división en cero, en caso deexistir mostrar una mensaje aclaratorio. Terminado
el ingreso hacer un listado por pantalla de los dos archivos. Se deberá crear un menú
indicando la acción a realizar.
#include
#include
main()
{
//Defines e inicializa las variables a utilizar
FILE *ArchSuma;
//Define una Variable puntero de tipo archivo.
FILE *ArchCociente;//Define una Variable puntero de tipo archivo.
int ParesValores = 0, Suma=0;
float Cociente=0.0;
int OpcMenu = 0, ContPares;
int Valor1 = 0, Valor2 = 0; //Para almacenar los valores de entrada.
//Crea el archivo binario para almacenar la Suma.
ArchSuma = fopen("suma.dat", "w+b");
if (ArchSuma == NULL){
printf("\n SE PRODUJO UN ERROR AL INTENTAR CREAR EL ARCHIVO SUMA");
exit(1);
}
//Crea el...
Regístrate para leer el documento completo.