hola braedu, la inicializacion del array de funciones era correcto,
fallo mio
lo que tienes incorrecto es la llamada al array de funciones que le sobraba el parentesis y el asterisco
intente hacerlo con punteros y me pasaba lo mismo, con una dimension bien pero al añadir la segunda me daba errores, y asi se me ocurrio una solucion
poner el array multidimensional en una estructura, y funciono bien
no se si es la mejor opcion pero funciona, le he hecho algun pequeño cambio, te envio el codigo:
Código c:
Ver original#include <stdio.h>
#define ESTUDIANTES 3
#define EXAMENES 4
typedef struct {
int calificaciones[ESTUDIANTES][EXAMENES];
}Notas_Curso;
void imprimeCalificaciones(Notas_Curso*);
void calificacionMinima(Notas_Curso*);
void calificacionMaxima(Notas_Curso*);
void promedioEstudiante(Notas_Curso*);
void (*procesaCalificaciones[4])(Notas_Curso*) =
{
imprimeCalificaciones,
calificacionMinima,
calificacionMaxima,
promedioEstudiante
};
int main()
{
int opcion;
Notas_Curso curso;
for(int i=0, j=3; i<ESTUDIANTES; i++)
for(int ii=0; ii<EXAMENES; ii++){
if(j==10) j=3;
curso.calificaciones[i][ii]=++j;
}
do{
printf("\n\n\n\n\t\t\tElija una opcion:\n\n\n"); printf("\t\t1 imprima el arreglo de calificaciones\n\n"); printf("\t\t2 Encuentra la calificacion minima\n\n"); printf("\t\t3 Encuentra la calificacion maxima\n\n"); printf("\t\t4 imprime el promedio de cada estudiante\n\n"); printf("\t\t5 fin del programa\n\n\n\n\n\n\n"); scanf("%d", &opcion
); opcion
--; if (opcion >= 0 && opcion < 4){
procesaCalificaciones[opcion](&curso);
}
}while(opcion != 4);
return 0;
}
void imprimeCalificaciones(Notas_Curso* curso)
{
printf("\n\t\tExamen1\tExamen2\tExamen3\tExamen4\n"); for(int i = 0; i < ESTUDIANTES; i++){
printf("Estudiante %d\t", i
+1); for(int j = 0; j < EXAMENES; j++)
printf("%5d\t", curso
->calificaciones
[i
][j
]); }
}
void calificacionMinima(Notas_Curso* curso)
{
int minimo = EXAMENES * 10;
for(int i = 0; i < ESTUDIANTES; i++)
for(int j = 0; j < EXAMENES; j++)
if (curso->calificaciones[i][j] < minimo)
minimo = curso->calificaciones[i][j];
printf("\n\nLa calificacion minima es de %d puntos\n", minimo
); }
void calificacionMaxima(Notas_Curso* curso)
{
int maxima = 0;
for(int i = 0; i < ESTUDIANTES; i++)
for(int j = 0; j < EXAMENES; j++)
if (curso->calificaciones[i][j] > maxima)
maxima = curso->calificaciones[i][j];
printf("\n\nLa calificacion maxima es de %d puntos\n", maxima
); }
void promedioEstudiante(Notas_Curso* curso)
{
float promedio;
for(int i = 0; i < ESTUDIANTES; i++){
promedio = 0;
printf("\tEstudiante %d = ", i
+1); for(int j = 0; j < EXAMENES; j++)
promedio += curso->calificaciones[i][j];
promedio/=EXAMENES;
}
}
espero te sirva de alguna ayuda
suerte