Programación 1 Tema III – Clase de problemas Diseño de algoritmos que trabajan con ficheros binarios (1) 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 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); 3 Problema 1º Diseñar el código de esta función. /* * Pre: [nombre] define el nombre de un fichero binario de NIFs * y [laLetra] es una letra mayúscula * Post: Devuelve el número de NIFs almacenados en el fichero * [nombre] cuya letra sea igual a [laLetra] */ int contarNIF (const char nombre[], const char laLetra); 4 Problema 2º Diseñar el código de esta función. /* * Pre: [nombre] define el nombre de un fichero binario de NIFs * que almacena un número no nulo de NIFs * Post: Devuelve el NIF almacenado en el fichero [nombre] cuyo * número de DNI sea el más bajo */ Nif masBajo (const char nombre[]); 5 Problema 3º Diseñar el código de esta función. /* * Pre: [nombre] define el nombre de un fichero binario de NIFs * y [unaLetra] es una letra mayúscula * Post: Crea un fichero binario de NIFs de nombre [nombreNuevo] * y almacena en él una copia de los NIFs del fichero * [nombre] cuya letra coincide con el valor de [unaLetra] */ void seleccionar (const char nombre[], const char nombreNuevo[], const char unaLetra); 6 Problema 4º Diseñar el código de esta función. /* * Pre: [nombre] define el nombre de un fichero binario de NIFs * y [cifra] es un entero comprendido entre 0 y 9 * Post: Devuelve true si y solo si el fichero [nombre] almacena * un NIF cuyo número de DNI tiene como cifra menos * significativa [cifra]. En tal caso, asigna a [dato] * uno de los NIF del fichero [nombre] cuya cifra menos * significativa sea igual a [cifra] */ bool buscar (const char nombre[], const int cifra, Nif& dato); 7 18