Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema en la cabecera de las funciones (C)

Estas en el tema de Problema en la cabecera de las funciones (C) en el foro de C/C++ en Foros del Web. ¿Podría un alma caritativa decirme que error he cometido? El programa recoge de un archivo números, los guarda en un vector y calcula el máximo, ...
  #1 (permalink)  
Antiguo 14/11/2012, 18:52
Avatar de rodrigoemece  
Fecha de Ingreso: septiembre-2011
Mensajes: 68
Antigüedad: 12 años, 7 meses
Puntos: 1
Información Problema en la cabecera de las funciones (C)

¿Podría un alma caritativa decirme que error he cometido? El programa recoge de un archivo números, los guarda en un vector y calcula el máximo, la media y el mínimo. Gracias por vuestra atención y un saludo.

Código C:
Ver original
  1. #include <stdio.h>
  2. #define LNX 99999
  3.  
  4. float max(float,int);
  5. float min(float,int);
  6. float med(float,int);
  7.  
  8. main(){
  9.   int i=0;
  10.   float v[LNX];
  11.   FILE *fp;
  12.  
  13.   fp = fopen("doc.txt","rt");
  14.   if(fp==NULL) {
  15.     printf("Erro na apertura do arquivo.\n");
  16.     exit(1);
  17.   }
  18.   else
  19.   {
  20.     while(feof(fp)==0)
  21.         {
  22.             fscanf(fp, "%d", &v[i]);
  23.             if(feof(fp)==0)
  24.             i++;
  25.         }
  26.   printf("O maximo do arquivo e: %f\n", max(v[i],i));
  27.   printf("O minimo do arquivo e: %f\n", min(v[i],i));
  28.   printf("A media do arquivo e: %f\n", med(v[i],i));
  29.   fclose(fp);
  30.   }
  31. }
  32.  
  33. float max(float *vec, int x) {
  34.     float mx=0;
  35.     int z=0;
  36.     mx=vec[0];
  37.     while(z<x)
  38.     {
  39.         if (vec[z]>=mx)
  40.             mx=vec[z];
  41.         z++;
  42.     }
  43.     return(mx);
  44. }
  45.  
  46. float min(float *vec, int x) {
  47.     float mn=0;
  48.     int z=0;
  49.     mn=vec[0];
  50.     while(z<x)
  51.     {
  52.         if (vec[z]<=mn)
  53.             mn=vec[z];
  54.         z++;
  55.     }
  56.     return(mn);
  57. }
  58.  
  59. float med(float *vec, int x) {
  60.     float md=0, suma=0;
  61.     int z=0;
  62.     while(z<x){
  63.         suma=suma + vec[z];
  64.         z++;
  65.     }
  66.     md=suma/z;
  67.    
  68.     return (md);
  69. }
  #2 (permalink)  
Antiguo 15/11/2012, 02:03
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: Problema en la cabecera de las funciones (C)

¿Qué fallo da? ¿El error es de compilación o de ejecución? Si es de ejecución, ¿Has depurado para ver el detalle del error?
  #3 (permalink)  
Antiguo 15/11/2012, 02:45
Avatar de rodrigoemece  
Fecha de Ingreso: septiembre-2011
Mensajes: 68
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Problema en la cabecera de las funciones (C)

El error es de compilación :S

Código Error:
Ver original
  1. main.c:33: error: conflicting types for 'max'
  2. main.c:4: error: previous declaration of 'max' was here
  3. main.c:33: error: conflicting types for 'max'
  4. main.c:4: error: previous declaration of 'max' was here
  5. main.c:46: error: conflicting types for 'min'
  6. main.c:5: error: previous declaration of 'min' was here
  7. main.c:46: error: conflicting types for 'min'
  8. main.c:5: error: previous declaration of 'min' was here
  9. main.c:59: error: conflicting types for 'med'
  10. main.c:6: error: previous declaration of 'med' was here
  11. main.c:59: error: conflicting types for 'med'
  12. main.c:6: error: previous declaration of 'med' was here
  13. make[2]: *** [build/Debug/Cygwin-Windows/main.o] Error 1
  14. make[1]: *** [.build-conf] Error 2
  15. make: *** [.build-impl] Error 2
  16.  
  17.  
  18. BUILD FAILED (exit value 2, total time: 453ms)
  #4 (permalink)  
Antiguo 15/11/2012, 08:18
Avatar de cotolon  
Fecha de Ingreso: octubre-2012
Mensajes: 55
Antigüedad: 11 años, 5 meses
Puntos: 10
Respuesta: Problema en la cabecera de las funciones (C)

Hola, tienes 2 errores, el primero es la forma de declarar la función prototipo, ya que la función tiene de parámetro un puntero, tienes que declarar el tipo float puntero arriba de main. en max min y med, así:

Código C++:
Ver original
  1. float max(float *,int);
  2. float min(float *,int);
  3. float med(float *,int);

Y el segundo, es cuando pasas el vector a la función, la pasas como v[i], y solamente hay que pasarla como v, así:

Código C++:
Ver original
  1. printf("O maximo do arquivo e: %f\n", max(v,i));
  2.   printf("O minimo do arquivo e: %f\n", min(v,i));
  3.   printf("A media do arquivo e: %f\n", med(v,i));

Etiquetas: funciones, int, programa, cabeceras
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:21.