Está en la página 1de 6

EJERCICIOS TEMA 1

PROBLEMA 1 Una aplicacin dispone de un fichero con el nombre datos.dat donde estn almacenados bloques de datos correspondientes a una estructura de tipo TInfo. La estructura de tipo TInfo tiene la siguiente definicin:
#define MAX 20 typedef struct nodo{ char nombre[MAX]; char apellidos[MAX]; char puesto [MAX]; }TInfo

Algunos de estos bloques de datos no tienen informacin vlida. Se pide: Codificar en C una funcin que pasndole como parmetro el nombre de un fichero, deje en ese mismo fichero slo los bloques de datos con informacin vlida. Se considera un bloque con informacin vlida a aquel cuyo campo nombre sea distinto de cadena vaca. Ejemplo: fichero datos.dat antes de haber eliminado los bloques no vlidos Carlos Xxxxxx Yyyyyyyy Lleno Mara Sssssssss Aaaaaaaa Vaco 44444 Lleno Jos

Lleno

Vaco

Ejemplo: fichero datos.dat despus de haber eliminado los bloques no validos Carlos Xxxxxx yyyyyyyy Mara 44444 Jos

Pgina 1 de 6

PROBLEMA 2 Una aplicacin informtica gestiona la informacin relativa a productos de una empresa. La estructura de datos en C empleada en la aplicacin para describir un producto es la siguiente:
#define LONG_NOMBRE_PRODUCTO 40 // Numero maximo de caracteres del nombre de un producto // Datos de un producto typedef struct { float precio; // Precio del producto char nombre[LONG_NOMBRE_PRODUCTO + 1]; // Nombre del producto } TProducto;

La aplicacin referida, cuando termina su ejecucin, salva los datos de los productos en un fichero (que a partir de ahora se llamar B). El fichero B es binario y cada elemento de dicho fichero es de tipo TProducto. No existe lmite en cuanto al nmero de elementos en el fichero. Se pide: Codificar en C una funcin que copie, en un fichero binario (que a partir de ahora se llamar A) los productos del fichero B cuyo precio es mayor o igual que una cantidad determinada. La funcin tendr las siguientes caractersticas:
/***************************************************************************** FUNCION: salvaProductosSeleccionados DESCRIPCION:Salva en un fichero A los productos almacenados en otro fichero B cuyo precio es mayor o igual que una determinada cantidad PARAMETROS DE ENTRADA: nFProd: Es una cadena de caracteres que contiene el nombre del fichero B nFProdSelect:Es una cadena de caracteres que contiene el nombre del fic.A limite: Es un numero real que fija el precio de los productos que se salvaran en el fichero A. Aquellos productos cuyo precio sea mayor o igual que limite, seran salvados en el fichero RESULTADO: Un numero entero. El valor devuelto puede ser alguna de las siguientes constantes, definidas en el algoritmo llamante: NO_ERROR: No se detectaron errores ERROR_AL_ABRIR_FICHERO:No se pudo abrir alguno de los dos fich. ERROR_FICHERO:Se detecto algun error *****************************************************************************/ int salvaProductosSeleccionados (nFProd, nFProdSelect, limite);

Ejemplo:
FICHERO B
3500 Pasta
8601,3 Arroz

FICHERO A

1523,6 Cerillas

Se desconoce el contenido inicial del fichero A.

110,5 Boli

Q?

A) Contenido de los ficheros antes de ejecutarse la funcin.

FICHERO B
3500 Pasta
8601,3 Arroz

FICHERO A
3500 Pasta

1523,6 Cerillas

8601,3 Arroz

110,5 Boli

B) Contenido de los ficheros despus de ejecutarse la funcin, suponiendo que el parmetro limite vale 3467,9.

Pgina 2 de 6

PROBLEMA 3 Una aplicacin informtica mantiene informacin relacionada con personas. Unas de las estructuras de datos en C empleadas en la aplicacin para almacenar informacin relacionada con una persona es la mostrada seguidamente:
#define LONG 20 #define OK 1 #define ERROR_FICHERO 2 typedef struct{ int dia; int mes; int anio; }Tfecha; typedef struct { int IDPersona; char nombre [LONG]; char apellidos [LONG]; Tfecha fechaNacimiento; }TPersona;

// // // // // //

clave que identifica a la persona en el sistema. No puede haber dos personas con el mismo IDPersona. Nombre de la persona Apellidos de la persona Fecha de nacimiento

La aplicacin referida, cuando termina su ejecucin, salva los datos en un fichero binario llamado candidatos.dat. Se pide: Codificar en C una funcin que lea de un fichero de tipo binario todos los registros, que sern de tipo TPersona, y escriba en un fichero destino de tipo texto los datos de aquellas personas cuyo ao de nacimiento sea inferior a uno dado llamado anioLimite. En el fichero de texto se grabar una lnea por cada una de las personas que cumplan la condicin anterior, segn el siguiente formato: Apellidos;Nombre;dia;mes;anio Donde todos los campos estn separados por punto y coma (;) y el prototipo de la funcin pedida es el siguiente:
int seleccionarCandidatos ( char nomFich[], int anioLimite);

La funcin tiene dos parmetros, nomFich contiene el nombre del fichero destino anioLimite contiene la fecha de seleccin La funcin devolver OK. Cuando la operacin se ha realizado correctamente ERROR_FICHERO. Cuando no se ha realizado como consecuencia de errores en el manejo de ficheros.

Pgina 3 de 6

PROBLEMA 4 Sea la siguiente definicin de tipos de datos en C:


#define TAM 51 typedef struct{ int id; char descripcion[TAM]; float densidad; }TElemento;

Se dispone de dos ficheros binarios llamados datos1.dat y datos2.dat. Los dos han sido generados usando la funcin que se indica a continuacin:
void guardar( TElemento tabla[], char nom[] ) { FILE *fich; int i; fich = fopen( nom, wb ); if ( fich != NULL ) { i = 0; while ( ( i < MAX ) && !ferror( fich ) ) { if ( tabla[i].id != -1 ) fwrite( &tabla[i], sizeof( TElemento ), 1, fich ); i++: } fclose( fich ); } }

donde MAX es una constante ya definida que indica el tamao de la tabla que se pasa como parmetro. Con todo ello se pide: Codificar en C la funcin eliminaRepes cuyo prototipo se indica ms adelante. La funcin crear un fichero binario llamado unicos.dat con los elementos del fichero datos2.dat que no estn en el fichero datos1.dat. Se considerar que dos elementos estn repetidos si tienen el mismo campo id y el mismo campo descripcion.
int eliminaRepes( int &nRepes );

En el prototipo de la funcin eliminaRepes el parmetro de salida nRepes indica, el nmero de elementos de datos2.dat que NO han sido copiados en unicos.dat. La funcin podr devolver alguno de los siguientes valores: NO_ERROR: Cuando no se detecte ningn error al gestionar los ficheros. ERROR_FICHERO: En caso contrario al anterior, es decir, cuando se detecte algn error al gestionar los ficheros. donde NO_ERROR y ERROR_FICHERO son constantes enteras ya definidas.

Pgina 4 de 6

PROBLEMA 5 Se dispone de un fichero de datos escrito en binario que tiene la siguiente estructura:

BLOQUE 1

BLOQUE 2

BLOQUE N

Donde cada bloque est formado por:


Nombre de mdico Nmero de paciente s paciente paciente

Tantos pacientes como indique el valor de nmero de pacientes

Los tipos de datos definidos son los siguientes:


Para los pacientes: typedef struct{ char numHistoria[10]; char nombre[50]; char diagnostico[200]; }TPaciente; Para los mdicos: typedef char TNombreMedico[50]; Para el nmero de pacientes: typedef int TNumPacientes;

Se pide: Codificar una funcin en C a la que se le pase el nombre de un fichero que contenga datos como los descritos en el enunciado y el nombre de un mdico y devuelva la cantidad de pacientes que tiene dicho mdico y un cdigo resultado de la operacin con los siguientes valores: 0 No error. Resultado correcto 1 Error en la lectura de los datos del fichero. 2 Error, el mdico no ha sido encontrado. 3 Error en la apertura del fichero

Pgina 5 de 6

PROBLEMA 6 Una determinada aplicacin informtica dispone de dos ficheros ordenados cuyos registros o bloques tienen la misma composicin o estructura, y se desea unir dichos ficheros en otro fichero, quedando este ltimo tambin ordenado. La estructura del registro o bloque corresponde a:
typedef struct{ char nombre [10]; char apellidos [30]; char dni[8]; int edad; }TBloque;

El criterio de ordenacin empleado corresponde a una ordenacin alfabtica primero por el apellido, luego por el nombre y posteriormente por el dni. Se pide: Codificar una funcin en C, que teniendo como parmetros los nombres de los dos ficheros origen y el fichero destino, guarde en el fichero destino la unin de los dos ficheros origen y devuelva un valor entero acorde a: 0 OK 1 ERROR. Fichero fuente no existe 2 ERROR. Fichero destino no creado 3 ERROR. No especificado.

Pgina 6 de 6

También podría gustarte