P13. Trabajo con ficheros de acceso directo

Anuncio
Programación 1
Tema III – Clase de problemas
Diseño de algoritmos que trabajan con ficheros de acceso directo y de lectura y escritura
1
Sintaxis de un fichero binario que almacena una
secuencia de NIF de ciudadanos
<ficheroBinarioNif> ::= <número> { <unNif> } <número> ::= int
<unNif> ::= Nif
El valor de <numero> define el número de NIF almacenados en el
fichero
2
Restricciones en el diseño de las funciones
En los problemas que se plantean se debe trabajar exclusivamente
con ficheros binarios de NIF, sin que se permita utilizar tablas o
vectores de datos auxiliares de tipo Nif o de cualquier otro tipo
para almacenar una secuencia de NIF.
Para ello se deberá hacer uso de las posibilidades :
• de acceso directo a los datos del fichero
• de trabajo con un fichero en modo entrada (lectura) y salida
(escritura)
3
Recordatorio de las funciones visibles del módulo nif que
quizás convenga tener presentes en la resolución de alguno de
los problemas que se van a plantear.
•
•
•
•
•
Nif crearNif (int dni, char letra);
Nif crearNif (int dni);
int dni (Nif unNif);
char letra (Nif unNif);
bool esValido (Nif unNif);
4
Problema 1º Diseñar el código de esta función.
/*
* Pre: [nombreFichero] es un fichero binario de NIF en el cual
* es posible que haya algún NIF con la letra asociada * equivocada
* Post: [nombreFichero] es un fichero binario de NIF que almacena
* tantos NIFs como al inicio de la ejecución de la * función, con los mismos números de DNI, pero ahora la
* letra de cada NIF es correcta
*
* Restricción importante sobre el diseño: En este problema no * se van a poder definir tablas o vectores auxiliares * para almacenar en ellos datos de tipo Nif
*/
void corregirNif (const char nombreFichero[]);
5
Problema 2º Diseñar el código de esta función.
/*
* Pre: [nombreFichero] es un fichero binario de NIF
* Post: [nombreFichero] es un fichero binario de NIF que almacena
* los mismos NIFs que al inicio de la ejecución de la
* función, pero ahora están dispuestos en el fichero de
* forma que cualquier NIF cuyo número de DNI sea par,
* debe preceder a todos los NIF cuyo DNI sea impar
*
* Restricción importante sobre el diseño: En este problema no * se van a poder definir tablas o vectores auxiliares * para almacenar en ellos datos de tipo Nif
*/
void distribuirNifPorParidad (const char nombreFichero[]);
6
Problema 3º Diseñar el código de esta función.
/*
* Pre: [nombreFichero] es un fichero binario de NIF
* Post: [nombreFichero] es un fichero binario de NIF que almacena
* los mismos NIFs que al inicio de la ejecución de la * función, pero ahora están dispuestos en el fichero * de forma que la letra de cualquier NIF es igual o
* anterior en el alfabeto que las de los NIF que le siguen
*
* Restricción importante sobre el diseño: En este problema no * se van a poder definir tablas o vectores auxiliares * para almacenar en ellos datos de tipo Nif
*/
void ordenarNifPorLetra (const char nombreFichero[]);
7
20
Descargar