Bien en realidad tengo un par de dudas pero creo que es innecesario abrir 2 temas...
Bueno primero con el que me urge mas, estoy haciendo un sistema sencillo de menús con apuntadores a funciones, pero tengo problemas con el parámetro ya que me tira muchas advertencias, y en todos los intentos el programa falla en ejecucion..
Código C:
Ver original#include <stdio.h>
#define ESTUDIANTES 3
#define EXAMENES 4
void imprimeCalificaciones(const int calificacion[][EXAMENES]);
void calificacionMinima(const int calificacion[][EXAMENES]);
void calificacionMaxima(const int calificacion[][EXAMENES]);
void promedioEstudiante(const int calificacion[][EXAMENES]);
int main()
{
int opcion;
void (*procesaCalificaciones[4])(int [][EXAMENES]) = {imprimeCalificaciones,calificacionMinima,calificacionMaxima,promedioEstudiante};
int calificaciones[ESTUDIANTES][EXAMENES] = {
{76,89,65,76},
{78,90,89,95},
{78,97,58,87}
};
do{
printf("Elija una opcion:\n"); printf("0 imprima el arreglo de calificaciones\n"); printf("1 Encuentra la calificacion minima\n"); printf("2 Encuentra la calificacion maxima\n"); printf("3 imprime el promedio de todos los examenes de cada estudiante\n"); printf("4 fin del programa\n"); if (opcion >= 0 && opcion < 4){
(*procesaCalificaciones[opcion])(calificaciones);
}
}while(opcion != 4);
return 0;
}
void calificacionMinima(const int calificacion[][EXAMENES])
{
int i, j;
int minimo = 100;
for(i = 0; i < ESTUDIANTES; i++){
for(j = 0; j < EXAMENES; j++){
if (calificacion[i][j] < minimo)
minimo = calificacion[i][j];
}
}
printf("La calificacion minima es de %d\n", minimo
); }
void calificacionMaxima(const int calificacion[][EXAMENES])
{
int i, j;
int maxima = 0;
for(i = 0; i < ESTUDIANTES; i++){
for(j = 0; j < EXAMENES; j++){
if (calificacion[i][j] > maxima)
maxima = calificacion[i][j];
}
}
printf("La calificacion maxima es de %d\n", maxima
); }
void imprimeCalificaciones(const int calificaciones[][EXAMENES])
{
int j, i;
printf("Examen1\tExamen2\tExamen3\tExamen4\n"); for(i = 0; i < ESTUDIANTES; i++){
printf("Estudiante %d\t", i
+1); for(j = 0; j < EXAMENES; j++){
printf("%d\t", calificaciones
[i
][j
]); }
}
}
void promedioEstudiante(const int calificaciones[][EXAMENES])
{
int i, j;
float promedio;
for(i = 0; i < ESTUDIANTES; i++){
promedio = 0;
printf("Estudiante %d = ", i
+1); for(j = 0; j < EXAMENES; j++){
promedio += calificaciones[i][j];
}
promedio/=EXAMENES;
}
}
creo que el problema esta en el parámetro que reciben las funciones a las que apunta procesaCalificaciones, pero no estoy seguro..
¿Cual es la forma correcta de indicarle al arreglo de apuntadores a funciones que las funciones reciben un arreglo de 2 subíndices?
Bueno la segunda duda es más una incomodidad que tengo:
s1 es un apuntador al carácter nulo de una cadena y s2 es un apuntador al inicio de otra cadena,
De modo que la instrucción anterior asigna la cadena s2 a s1 en donde se quedo esta ultima, de modo que si la cadena1 = "hola" y cadena2 = "adios", al final de la instrucción for, cadena1 sera igual a "holaadios".
El ciclo for se rompe en cuanto asigna el carácter nulo de la cadena2 a cadena1, mi duda es ¿porque?, no entiendo el porque se rompe el ciclo.
Le doy mas prioridad a la primera duda, Espero que me puedan ayudar, de antemano gracias