Semana 11

 

Ejemplos de programas

  1. Leer y escribir una estructura de tipo estudiante
  2. Leer una secuencia de estructuras de tipo estudiante y almacenar sus elementos en un vector

 

Ejercicios a realizar

En los ejemplos anteriores se define una acción void secuencia_a_vector(estudiante t[LongTabla], int& n) que lee una secuencia de estructuras (tuplas) de tipo "estudiante" y las almacena en el vector de t. La secuencia de estudiantes termina cuando el usuario introduce un estudiante cuyo nombre es "fin". El parámetro de salida n indica el número de estructuras de tipo "estudiante" que contenía la secuencia. La estructura de tipo estudiante consta de los siguientes campos:

Los siguientes ejercicios pretenden ampliar el segundo ejemplo añadiendo funciones que permitan comparar los elementos de un vector de estructuras de tipo estudiante de acuerdo con distintos criterios, intercambiar dos elementos del vector de estudiantes, y buscar un estudiante dado en un vector de estructuras de tipo estudiante.

  1. Implementad funciones y acciones que permitan realizar las siguientes operaciones con estructuras de tipo estudiante:

    • Intercambie los contenidos de dos tuplas de tipo estudiante void intercambia(estudiante& e1, estudiante& e2).

    • Comparar alfabéticamente dos estudiantes teniendo en cuenta en primer lugar el primer apellido, en segundo lugar el segundo apellido y finalmente el nombre  int orden_alf(estudiante e1, estudiante e2). Esta función devuelve 1 si e2 precede alfabéticamente a e1, 0 si son iguales, y -1 si e1 precede alfabéticamente a e2. 

    • Comparar la edad de dos estudiantes utilizando los datos contenidos en su fecha de nacimiento int mayor_edad(estudiante e1, estudiante e2). Esta función devuelve 1 si e1 es mayor que e2, 0 si son iguales, y -1 si e2 es mayor que e1.  (sol)

  2. Implementad una acción void busca(estudiante e, estudiante t[LongMax], int n, bool& encontrado, int& posicion) que permita buscar un estudiante particular en un vector de estructuras de tipo estudiante a partir de su nombre y apellidos. El nombre y apellidos del estudiante se introducen en una estructura de tipo estudiante e, donde al resto de los campos se les asigna valores arbitrarios. Si el estudiante con nombre y apellidos iguales a los de e se encuentra en el vector t, el parámetro de salida "encontrado" tomará el valor verdadero y el parámetro de salida "posición" la posición donde se encuentra en el vector, en otro caso el parámetro de salida "encontrado" tomará el valor falso (sol).

  3. Implementad una nueva versión de secuencia_a_vector que consista en una función que devuelva una tupla de tipo Testudiante con dos campos: una tabla de estudiantes y un índice que nos informe de la primera posición libre de la tabla de estudiantes. La cabecera de la función solicitada es Testudiante secuencia_a_tupla(void). Después de ejecutar la función el campo "tabla" debe contener los estudiantes de la secuencia y el campo índice la posición de la primera posición libre de la tabla, que coincide con el número de estudiantes que contenía la secuencia (sol). 

  4. Leer dos secuencias de secuencias de tuplas de tipo estudiante (emai, DNI, nota), almacenarlas en dos tuplas de tipo grupo (con dos campos, una tabla de estudiantes y un indice), ordenar las tuplas de tipo grupo por DNI y fusionar las tuplas de tipo grupo en una tupla cuya tabla contenga ordenados todos los elementos de las dos tuplas fusionadas (sol).