Programación 1 Tema III – Clase de problemas Diseño de algoritmos que extraen información de ficheros de texto (2) 1 Ficheros de texto para almacenar la información de un grupo de ciudadanos 1706 57912906,GRACIA MORLAN,MARIA EUGENIA,false,19830615,true 57994246,ESPOSITO IZUZQUIZA,ROSA,false,19771120,true 58067572,ARRUGA BERNUES,JOSE MARIA,true,19760315,false 58199931,BADENES SIPAN,MARIA ISABEL,false,19520815,false . . . 58648200,ZURDO MEDRANO,ODON,true,20080314,false 58705592,SIPAN BERNUES,NOELIA,false,19870215,false 58716844,MARQUES GALO,ANA CRISTINA,false,19790127,false 2 Sintaxis de los ficheros de texto que almacenan información de un grupo de ciudadanos <ficheroCiudadanos> ::= <número> { <ciudadano> } <número> ::= literal_entero fin_línea <ciudadano> ::= <dni> <separador> <apellidos> <separador> <nombre> <separador> <esHombre> <separador> <fechaNacimiento> <separador> <estaCasado> fin_línea <separador> ::= "," <dni> ::= literal_entero <apellidos> ::= literal_string <nombre> ::= literal_string <esHombre> ::= literal_booleano <fechaNacimiento> ::= literal_entero <estaCasado> ::= literal_booleano 3 Recordatorio de las funciones visibles del módulo ciudadano que quizás convenga tener presentes en la resolución de alguno de los problemas que se van a plantear. • Ciudadano definirCiudadano (char nombre[], char apellidos[], Nif nif, Fecha fechaNacimiento, bool casado, bool hombre); • void nombre (Ciudadano c, char nombre[]); • void apellidos (Ciudadano c, char nombre[]); • Nif nif (Ciudadano c); • Fecha nacimiento (Ciudadano c); • bool estaCasado (Ciudadano c); • bool esHombre (Ciudadano c); 4 Recordatorio de las funciones visibles del módulo fecha que quizás convenga tener presentes en la resolución de alguno de los problemas que se van a plantear. • • • • • • Fecha definirFecha (int d, int m, int a); Fecha definirFecha (int fecha); int dia (Fecha f); int mes (Fecha f); int anyo(Fecha f); int fechaCompacta (Fecha f); 5 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); 6 Problema 1º Diseñar el código de esta función. /* * Pre: [nombre] define el nombre de un fichero de texto que * almacena datos de ciudadanos. El número de ciudadanos * almacenados en el fichero es igual o mayor que [posicion] * Post: Devuelve la información del ciudadano ubicado en el * puesto [posicion] del fichero [nombre], contando desde * el comienzo del fichero. */ Ciudadano leerCiudadano (const char nombre[], const int posicion); 7 Problema 2º Diseñar el código de esta función. /* * Pre: [nombre] define el nombre de un fichero de texto que almacena * datos de ciudadanos. El número de ciudadanos almacenados en el * fichero es igual o mayor que [n] * Post: Asigna a los elementos de T[0,n‐1] la información de los * [n] primeros ciudadanos del fichero [nombre], contados a partir * de su comienzo */ void leerCiudadanos (const char nombre[], Ciudadano T[], const int n); 8 20