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:
creo que el problema esta en el parámetro que reciben las funciones a las que apunta procesaCalificaciones, pero no estoy seguro..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{ 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]; } } } 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]; } } } void imprimeCalificaciones(const int calificaciones[][EXAMENES]) { int j, i; for(i = 0; i < ESTUDIANTES; i++){ for(j = 0; j < EXAMENES; j++){ } } } void promedioEstudiante(const int calificaciones[][EXAMENES]) { int i, j; float promedio; for(i = 0; i < ESTUDIANTES; i++){ promedio = 0; for(j = 0; j < EXAMENES; j++){ promedio += calificaciones[i][j]; } promedio/=EXAMENES; } }
¿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:
Código C:
s1 es un apuntador al carácter nulo de una cadena y s2 es un apuntador al inicio de otra cadena,Ver original
for( ;*s1 = *s2; s1++,s2++){ ; }
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