P10. Trabajo con ficheros de texto

Anuncio
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
Descargar