Ver Mensaje Individual
  #5 (permalink)  
Antiguo 01/04/2016, 13:56
vizen
 
Fecha de Ingreso: enero-2014
Mensajes: 60
Antigüedad: 10 años, 4 meses
Puntos: 1
Respuesta: duda apuntadores a funciones y for

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
  1. #include <stdio.h>
  2.  
  3. #define ESTUDIANTES 3
  4. #define EXAMENES 4
  5.  
  6. typedef  struct {
  7.   int calificaciones[ESTUDIANTES][EXAMENES];
  8. }Notas_Curso;
  9.  
  10. void imprimeCalificaciones(Notas_Curso*);
  11. void calificacionMinima(Notas_Curso*);
  12. void calificacionMaxima(Notas_Curso*);
  13. void promedioEstudiante(Notas_Curso*);
  14.  
  15. void (*procesaCalificaciones[4])(Notas_Curso*) =
  16.     {
  17.         imprimeCalificaciones,
  18.         calificacionMinima,
  19.         calificacionMaxima,
  20.         promedioEstudiante
  21.     };
  22.  
  23. int main()
  24. {
  25.   int opcion;
  26.   Notas_Curso curso;
  27.  
  28.   for(int i=0, j=3; i<ESTUDIANTES; i++)
  29.     for(int ii=0; ii<EXAMENES; ii++){
  30.       if(j==10) j=3;
  31.       curso.calificaciones[i][ii]=++j;
  32.     }
  33.  
  34.   do{
  35.     printf("\n\n\n\n\t\t\tElija una opcion:\n\n\n");
  36.     printf("\t\t1 imprima el arreglo de calificaciones\n\n");
  37.     printf("\t\t2 Encuentra la calificacion minima\n\n");
  38.     printf("\t\t3 Encuentra la calificacion maxima\n\n");
  39.     printf("\t\t4 imprime el promedio de cada estudiante\n\n");
  40.     printf("\t\t5 fin del programa\n\n\n\n\n\n\n");
  41.     scanf("%d", &opcion); opcion--;
  42.     if (opcion >= 0 && opcion < 4){
  43.       procesaCalificaciones[opcion](&curso);
  44.     }
  45.   }while(opcion != 4);
  46.  
  47.   return 0;
  48. }
  49.  
  50. void imprimeCalificaciones(Notas_Curso* curso)
  51. {
  52.   printf("\n\t\tExamen1\tExamen2\tExamen3\tExamen4\n");
  53.   for(int i = 0; i < ESTUDIANTES; i++){
  54.     printf("Estudiante %d\t", i+1);
  55.     for(int j = 0; j < EXAMENES; j++)
  56.       printf("%5d\t", curso->calificaciones[i][j]);
  57.     printf("\n");
  58.   }
  59. }
  60.  
  61. void calificacionMinima(Notas_Curso* curso)
  62. {
  63.   int minimo = EXAMENES * 10;
  64.  
  65.   for(int i = 0; i < ESTUDIANTES; i++)
  66.     for(int j = 0; j < EXAMENES; j++)
  67.       if (curso->calificaciones[i][j] < minimo)
  68.         minimo = curso->calificaciones[i][j];
  69.  
  70.   printf("\n\nLa calificacion minima es de %d puntos\n", minimo);
  71. }
  72.  
  73. void calificacionMaxima(Notas_Curso* curso)
  74. {
  75.   int maxima = 0;
  76.  
  77.   for(int i = 0; i < ESTUDIANTES; i++)
  78.     for(int j = 0; j < EXAMENES; j++)
  79.       if (curso->calificaciones[i][j] > maxima)
  80.         maxima = curso->calificaciones[i][j];
  81.  
  82.   printf("\n\nLa calificacion maxima es de %d puntos\n", maxima);
  83. }
  84.  
  85. void promedioEstudiante(Notas_Curso* curso)
  86. {
  87.   float promedio;
  88.   printf("\n\nPromedios:\n\n");
  89.   for(int i = 0; i < ESTUDIANTES; i++){
  90.     promedio = 0;
  91.     printf("\tEstudiante %d = ", i+1);
  92.     for(int j = 0; j < EXAMENES; j++)
  93.       promedio += curso->calificaciones[i][j];
  94.     promedio/=EXAMENES;
  95.     printf("%.2f\n", promedio);
  96.   }
  97. }

espero te sirva de alguna ayuda

suerte