6. Registros


En la sección 3.2 se resolvió un problema con los nombres y las notas de un conjunto de alumnos usando dos arrays en paralelo, uno con las notas y otros con los nombres, de forma que cada alumno obtenía su nota porque el índice del array de nombres coincidia con el índice en el array de notas. Sin embargo, en programación hay mejores soluciones, pero para ello necesitamos implementar el concepto de registro. Un registro es la unión bajo un mismo tipo de distintas informaciones para constituir un todo. Por ejemplo, un registro Alumno lo constituye el nombre de un alumno (de tipo Cadena) junto con su nota ( de tipo double). De esta manera un array de Alumno nos permite manejar la misma información que los dos arrays en paralelo de la sección 3.2 pero de una manera más cómoda, ya que todos los algoritmos vistos para arrays (suma, búsqueda, filtro, existe, etc.) son iguales sobre arrays de registros salvo que las operaciones habitualmente serán sobre alguna de las partes o campos del registro. En C los registros se implementan mediante el tipo struct que como siempre en este blog deberá ser declarado previamente.


6.1 Alumnos y notas

6.1.1 Defina los tipos necesarios para guardar los nombres y notas de un conjunto de alumnos. 












6.1.2 Implemente una función que devuelva la nota media de los alumnos
 











6.1.3 Escriba una función que devuelva los alumnos aprobados











6.1.4  Otra solución al mismo ejercicio pero devolviendo el número de aprobados (tamaño real del array filtrado tap) como un puntero:












6.1.5 Otra versión es devolver sólo los nombres de los alumnos aprobados en un array de tipo Cadena:











6.1.6 Función que devuelva el alumno con la máxima nota












6.1.7  Otra solución para el problema anterior es devolver el tipo Alumno en el nombre de la función. Hay que tener en cuenta que las asignaciones del valor de una variable de tipo struct en otra puede dar problemas dependiendo de la complejidad del mismo y del compilador, ya que es posible definir struct con un alto grado de complejidad y anidamiento (un struct que contenga como campo un array de otro tipo de struct que a su vez esté compuesto por arrays, etc) y es posible que el compilador no sea capaz de asignar ese tipo de valores al devolver una función. En cualquier caso para tipos struct “normales” no debe haber problemas en este código: 
 











6.1.8 Función que lea desde teclado los datos de un Alumno:









6.1.9 Función que reutilizando la anterior lea desde teclado los datos de un array de Alumno:
 

No hay comentarios:

Publicar un comentario