Estructuras de Datos en C: Gestión de Alumnos y Cursos
Clasificado en Informática
Escrito el en español con un tamaño de 4,89 KB
Definición de Constantes y Tipos de Datos
A continuación, se definen las constantes y tipos de datos necesarios para la gestión de información académica:
Constantes
MAXCAR
: Longitud máxima de una cadena de caracteres (256).MAXASIG
: Número máximo de asignaturas por alumno (50).MAXALUM
: Número máximo de alumnos por curso (100).
Tipos de Datos
Cadena
: Tipo de dato para representar cadenas de caracteres (char[MAXCAR]
).TablaEnteros
: Tipo de dato para representar un array de enteros (int[MAXASIG]
).TablaReales
: Tipo de dato para representar un array de números reales (double[MAXASIG]
).fichero
: Tipo de dato para representar un puntero a un archivo (FILE *
).Alumno
: Estructura que representa un alumno, con los siguientes campos:dni
: DNI del alumno (Cadena
).codigos
: Códigos de las asignaturas en las que se ha matriculado (TablaEnteros
).notas
: Notas obtenidas en las asignaturas (TablaReales
).n
: Número de asignaturas en las que se ha matriculado (int
).
TablaAlumno
: Tipo de dato para representar un array de alumnos (Alumno[MAXALUM]
).Curso
: Estructura que representa un curso, con los siguientes campos:codigo
: Código del curso (Cadena
).alumnos
: Array de alumnos matriculados en el curso (TablaAlumno
).n
: Número de alumnos matriculados en el curso (int
).
Implementación de Funciones
Función 1: Lectura de Datos de Alumno desde Fichero
Alumno ejercicio1 (Cadena nomfich) {
fichero f;
Alumno a;
f = fopen(nomfich, "r");
if (f == NULL) {
printf("Error");
} else {
fscanf(f, "%d", &a.n);
for (int i = 0; i < a.n; i++) {
fscanf(f, "%d", &a.codigos[i]);
fscanf(f, "%lf", &a.notas[i]);
}
strcpy(a.dni, nomfich);
}
fclose(f);
return a;
}
Función 2: Nota Mínima y Código de Asignatura
double ejercicio2 (Alumno a, int *pnota, int *pcod) {
*pnota = a.notas[0];
*pcod = a.codigos[0];
for (int i = 1; i < a.n; i++) {
if (a.notas[i] < *pnota) {
*pnota = a.notas[i];
*pcod = a.codigos[i];
}
}
return *pnota; // Devolver la nota mínima
}
Función 3: Códigos de Asignaturas con Nota Mayor o Igual a un Valor Dado
int ejercicio3 (Alumno a, double vnota, int t[]) {
int j = 0;
for (int i = 0; i < a.n; i++) {
if (a.notas[i] >= vnota) {
t[j] = a.codigos[i];
j++;
}
}
return j;
}
Función 4: Obtener Nota de una Asignatura
double ejercicio4 (Alumno a, int cod) {
double resul = -1.0;
for (int i = 0; i < a.n; i++) {
if (a.codigos[i] == cod) {
resul = a.notas[i];
break;
}
}
return resul;
}
Función 5: Verificar si Todas las Notas Superan un Valor Dado
bool ejercicio5 (Alumno a, double vnota) {
bool resul = true;
for (int i = 0; i < a.n; i++) {
if (a.notas[i] < vnota) {
resul = false;
break;
}
}
return resul;
}
Función 6: Verificar si un Alumno ha Terminado los Estudios
bool ejercicio6 (Alumno a) {
return ejercicio5(a, 5.0) && a.n >= 40;
}
Función 7: Calcular la Nota Media de un Alumno
double ejercicio7 (Alumno a) {
double suma = 0.0;
for (int i = 0; i < a.n; i++) {
suma = suma + a.notas[i];
}
return suma / a.n;
}
Función 8: Contar Asignaturas con Nota Mayor a un Valor Dado en un Curso
int ejercicio8 (Curso c, double vnota) {
int cont = 0;
int t[MAXASIG]; // Declarar el array t
for (int i = 0; i < c.n; i++) {
cont = cont + ejercicio3(c.alumnos[i], vnota, t);
}
return cont;
}
Función 9: Obtener el DNI del Alumno con Máxima Nota en una Asignatura
void ejercicio9 (Curso c, int codAsig, Cadena resul) {
double max = ejercicio4(c.alumnos[0], codAsig);
strcpy(resul, c.alumnos[0].dni); // Inicializar resul con el primer alumno
for (int i = 1; i < c.n; i++) {
double notaActual = ejercicio4(c.alumnos[i], codAsig);
if (notaActual > max) {
max = notaActual;
strcpy(resul, c.alumnos[i].dni);
}
}
}