(I) Ejercicio 1. Solución

Anuncio
Ejercicio 1
Fundamentos de Programación II
7
ESTRUCTURAS DE DATOS
Registros, Uniones y Enumerados
Ejercicios
z
Escribir una función que recibiendo como parámetro una estructura
de datos con los resultados de la jornada, devuelva en otra
estructura la quiniela correspondiente.
z
Resultados de la jornada:
– nombre equipo local
– nombre equipo visitante
– goles local
– goles visitante
z
Quiniela:
– nombre equipo local
– nombre equipo visitante
– signo de la quiniela:’1’,’X’,’2’
Curso 2002/2003
D.L.S.I.
1
D.L.S.I.
Ejercicio 1. Solución (I)
Ejercicio 1. Solución (II)
void HacerQuiniela (Tresult result [ ], TQuiniela quiniela[ ] ) {
int i;
for ( i= 0; i < kPartidos; i++) {
quiniela[i].local = result[i].local;
quiniela[i].visitante = result[i].visitante;
if (result[i].golesL == result[i].golesV)
quiniela[i].signo = 'X';
else
if (result[i].golesL > result[i].golesV)
quiniela[i].signo = '1';
else
quiniela[i].signo = '2';
}
}
const int kPartidos = 15;
struct Tresult {
string local, visitante;
int golesL, golesV;
};
struct Tquiniela {
string local, visitante;
char signo;
};
D.L.S.I.
3
Ejercicio 2
z
z
2
D.L.S.I.
4
Ejercicio 2. Solución (I)
Diseñar las estructuras de datos necesarias para almacenar la
información de los 600 alumnos que cursan estudios en informática:
– Nombre (máx. 30 caracteres)
– Domicilio (máx. 45 caracteres)
– Curso ( 1, 2 ó 3)
Dependiendo del curso, se dispone de los siguientes datos:
Curso 1:
– notas de las 6 asignaturas de primer curso
Curso 2:
– número de asignaturas pendientes
– notas de las 4 asignaturas de segundo curso.
Curso 3:
– número de asignaturas pendientes
– notas de las 5 asignaturas de tercer curso
– nombre del tutor del proyecto (máx. 30 caracteres)
D.L.S.I.
Fundamentos de Programación. Ingeniería
en Informática
5
struct TCurso2 {
int numAsig;
float notas[4];
};
struct TCurso3 {
int numAsig;
float notas[5];
char nombreTutor [31];
};
D.L.S.I.
6
1
Ejercicio 2. Solución (II)
Ejercicio 3
union TCurso {
float notas[6];
TCurso2 datosCurso2;
TCurso3 datosCurso3;
};
z
z
z
z
struct TAlumno {
char nombre [31];
char domicilio [46];
int curso ;
// el campo curso hace de selector
Tcurso masDatos;
};
Talumno alumnos [600];
D.L.S.I.
Se supone que hay un máximo de 2000 ejemplares
D.L.S.I.
8
Ejercicio 3. Solución (II)
const int kTAM = 2000;
union TEspecifico {
TRevista revista;
TLibro libro;
};
struct TFecha {
int dia, mes, anyo; } ;
struct TLibro {
char ISBN[11] ;
int anyoPub;
TFecha fecNacAutor; };
struct TBib {
char titulo [41];
char editorial [26];
char tipo;
// Selector ‘R’ Revista, ‘L’ Libro
TEspecifico dato;
};
struct TRevista {
TFecha fecPublic;
int precio; };
D.L.S.I.
9
Ejercicio 4
D.L.S.I.
10
Ejercicio 4. Solución
A partir de los datos definidos en el ejercicio anterior,
escribir una función que recibiendo los siguientes
parámetros:
– el vector de las fichas de la biblioteca
– el número de fichas almacenadas
– dos enteros denominados mes y anyo
devuelva el número de revistas de la biblioteca con una
fecha de publicación posterior a dicho mes / anyo.
z
z
7
Ejercicio 3. Solución (I)
z
z
Definir los tipos de datos necesarios, las constantes y variables para
almacenar en un vector los datos de los libros y revistas, de una
biblioteca, cuyas fichas contienen la siguiente información :
Título: del libro o de la revista (máximo 40 caracteres).
Nombre: de la editorial (máximo 25 caracteres).
Si se trata de una revista:
– fecha de publicación (día, mes, año)
– precio
Si se trata de un libro:
– código de ISBN (10 caracteres)
– año de publicación.
– fecha de nacimiento del autor (día, mes, año)
Ej. si se recibe mes = 3 y anyo = 1997, contar las revistas
cuya fecha de publicación es mayor o igual al 1/4/1997
D.L.S.I.
Fundamentos de Programación. Ingeniería
en Informática
11
int ContarRevistas
(TBib biblio[ ], int numFichas, int mes, int anyo) {
int numero = 0, revA, revM, i;
for ( i = 0; i < numFichas ; i++)
if (biblio[i].tipo == 'R') {
revM = biblio[i].dato.revista.fecPublic.mes;
revA = biblio[i].dato.revista.fecPublic.anyo;
if (( revA > anyo) || ((revA == anyo) && (revM> mes)))
numero++;
}
return(numero);
}
D.L.S.I.
12
2
Ejercicio 5
Ejercicio 5. Solución (I)
z
Crear en una función que permita introducir por teclado
los datos de un registro y devuelva el mismo.
z
El registro deberá contener la siguiente información :
– Nombre de la persona (máximo 30 caracteres )
– Categoría : Profesor o Alumno (“P” o “A”)
En caso de ser profesor :
– Dpto. al que pertenece: TIC, LSI, CCIA (enumerado).
En caso de ser alumno :
– código de matrícula (entero)
– si es o no repetidor.
z
Definir los tipos de datos necesarios
D.L.S.I.
13
enum TDepto { TIC, LSI, CCIA } ;
struct TAlumno {
int codMat;
bool repetidor; };
union TEspecifico {
TDepto depto;
TAlumno datosAlumno; } ;
struct TPersona {
char nombre[31];
char categoria; // ‘P’ Profesor
TEspecifico dato; };
‘A’ Alumno
D.L.S.I.
Ejercicio 5. Solución (II)
Ejercicio 5. Solución (III)
TPersona LeerDatos( ) {
TPersona rec;
char car;
int num;
cout << "Introduce Nombre : " ;
cin >> rec.nombre;
do {
cout << "Introduce Categoria : ";
cin >> rec.categoria ;
} while ( (rec.categoria != 'P') && ( rec.categoria != 'A'));
switch (rec.categoria) {
case 'A' :
cout << "Introduce numero de matricula : ";
cin >>rec.dato.datosAlumno.codMat;
do {
cout<<”Es repetidor (S/ N) ";
cin >> car;
} while ((car != 'S') && ( car != 'N'));
if (car == 'S' )
rec.dato.datosAlumno.repetidor = true;
else
rec.dato.datosAlumno.repetidor = false;
break;
D.L.S.I.
15
Ejercicio 5. Solución (IV)
Fundamentos de Programación. Ingeniería
en Informática
16
Ejercicio 5. Solución (V)
void EscribirDatos ( TPersona rec) {
cout <<rec.nombre << endl;
switch (rec.categoria) {
case 'P’ : cout << "Profesor del depto ";
switch (rec.dato.depto) {
case TIC : cout<< “TIC" << endl; break;
case LSI : cout << "LSI" << endl; break;
case CCIA : cout << "CCIA " << endl; break;
}
break;
case 'P' :
do {
cout << "Introduce departamento 1-TIC, 2-LSI, 3-CCIA ";
cin >> num;
} while (( num < 1 ) || ( num > 3));
switch (num) {
case 1 : rec.dato.depto = TIC; break;
case 2 : rec.dato.depto = LSI; break;
case 3 : rec.dato.depto = CCIA; break;
}
break;
}
return(rec);
}
D.L.S.I.
D.L.S.I.
14
17
D.L.S.I.
18
3
Ejercicio 5. Solución (VI)
Ejercicio 5. Solución (VII)
case 'A' : cout << "Alumno con codigo:”;
cout << rec.dato.datosAlumno.codMat ;
if (rec.dato.datosAlumno.repetidor)
cout << " ES REPETIDOR ";
else
cout << " NO ES REPETIDOR ";
break;
int main( ) {
TPersona rec;
rec = LeerDatos ( );
EscribirDatos (rec);
}
}
}
D.L.S.I.
Fundamentos de Programación. Ingeniería
en Informática
19
D.L.S.I.
20
4
Descargar