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

subprograma que calcula la media

Estas en el tema de subprograma que calcula la media en el foro de C/C++ en Foros del Web. Hola, estoy haciendo un subprograma que me calcula la media de 5 números, pero me da fallos de compilación: subprograma_media.c:18: error: tipos en conflicto para ...
  #1 (permalink)  
Antiguo 01/07/2010, 11:21
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 1 mes
Puntos: 0
subprograma que calcula la media

Hola, estoy haciendo un subprograma que me calcula la media de 5 números, pero me da fallos de compilación: subprograma_media.c:18: error: tipos en conflicto para ‘media’
subprograma_media.c:10: error: la declaración previa de ‘media’ estaba aquí


Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5.  
  6. int main(){
  7.           int i;
  8.           int num;
  9.          
  10.           void media(int);
  11.  
  12.           for(i=0; i<=5; i++){
  13.              printf("Numero: ");
  14.              scanf("%d\n", &num);
  15.           }
  16.           media(num);
  17. }
  18. void media(int num, int t){
  19.           int suma;
  20.           double m;
  21.           int i;
  22.  
  23.           for(i=0; i<t; i++){
  24.               suma = suma + num;
  25.           }
  26.           m = suma/t;
  27.  
  28.           printf("La media es %lf\n", m);
  29. }
¿Podéis decirme si está bien estructurado el programa?. Gracias.

Última edición por minette1988; 01/07/2010 a las 11:27
  #2 (permalink)  
Antiguo 01/07/2010, 12:55
 
Fecha de Ingreso: junio-2010
Ubicación: Charlotte, NC
Mensajes: 611
Antigüedad: 13 años, 10 meses
Puntos: 95
Respuesta: subprograma que calcula la media

La linea 10, debe ir afuera de main.
Se llama prototipo de la función, no lo he compilado pero eso deberia solucionarlo.
  #3 (permalink)  
Antiguo 01/07/2010, 13:26
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: subprograma que calcula la media

declarar una funcion dentro de otra no es muy común, aun q valido. Lo que si es q

void media(int);//linea 10

difiere de

void media(int num, int t)//linea 18

y los dos deben tener el mismo numero de parametros
  #4 (permalink)  
Antiguo 02/07/2010, 04:08
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: subprograma que calcula la media

He modificado el programa, pero cuando lo compilo el resultado es incorrecto. Me sale como resultado la media es -405297833.000000

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.        
  4. int main(){
  5.          int i;
  6.          int n=0;
  7.          int num;
  8.          void media( int, int );
  9.      
  10.          printf("Cuántos números quieres introducir?");
  11.          scanf("%d", &n);
  12.  
  13.          for(i=1; i<=n; i++){
  14.             printf("Numero: ");
  15.             scanf("%d", &num);
  16.          }
  17.          media(n,num);
  18. }
  19. void media(int n_datos, int dato){
  20.          int suma;
  21.          double m;
  22.          int i;
  23.  
  24.          for(i=1; i<=n_datos; i++){
  25.            suma = suma + dato;
  26.          }
  27.          m = suma/n_datos;
  28.        
  29.          printf("La media es %lf\n", m);
  30. }

Última edición por minette1988; 03/07/2010 a las 05:54
  #5 (permalink)  
Antiguo 04/07/2010, 06:31
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: subprograma que calcula la media

Ayudadme con este programa, por favor. Gracias.
  #6 (permalink)  
Antiguo 04/07/2010, 08:00
 
Fecha de Ingreso: agosto-2008
Mensajes: 240
Antigüedad: 15 años, 7 meses
Puntos: 6
Respuesta: subprograma que calcula la media

Hola. El contenido de la línea 8 tiene que estar antes de la linea:

Código C:
Ver original
  1. int main()

Y por supuesto, borrar la línea 8. Saludos,
Gonzo
  #7 (permalink)  
Antiguo 04/07/2010, 10:06
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: subprograma que calcula la media

Es así cómo dices ¿no?, lo he compilado , pero el resultado sigue siendo incorrecto.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void media( int, int );
  5.        
  6. int main(){
  7.          int i;
  8.          int n=0;
  9.          int num;
  10.          
  11.      
  12.          printf("Cuántos números quieres introducir?");
  13.          scanf("%d", &n);
  14.  
  15.          for(i=1; i<=n; i++){
  16.             printf("Numero: ");
  17.             scanf("%d", &num);
  18.          }
  19.          media(n,num);
  20. }
  21. void media(int n_datos, int dato){
  22.          int suma;
  23.          double m;
  24.          int i;
  25.  
  26.          for(i=1; i<=n_datos; i++){
  27.            suma = suma + dato;
  28.          }
  29.          m = suma/n_datos;
  30.        
  31.          printf("La media es %lf\n", m);
  32. }
  #8 (permalink)  
Antiguo 06/07/2010, 12:21
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: subprograma que calcula la media

¿Qué es lo que tengo mal?
  #9 (permalink)  
Antiguo 06/07/2010, 15:01
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: subprograma que calcula la media

Realizar varias veces scanf, sin hacer nada mas, en un ciclo (lineas 15 a 18) no tiene sentido.
Es lo mismo que asignar un valor a una variable varias veces:

a = 1; // se va a perder este valor
a = 9; // se va a perder este valor
a = 4; // se va a perder este valor, si se continua asignando la misma variable
...

Por otro lado, y como consecuencia de esto, la funcion media() suma varias veces el mismo valor.

Recomiendo sumar en el ciclo en que lees, o bien leer hacia un arreglo y no a una variable int.
  #10 (permalink)  
Antiguo 07/07/2010, 06:19
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: subprograma que calcula la media

¿Podrías explicarte mejor?. Gracias.
  #11 (permalink)  
Antiguo 07/07/2010, 06:33
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: subprograma que calcula la media

He intetado hacerlo con vectores, pero el resultado me sale mal La media es -405607764.000000


Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.      
  5. int main(){
  6.          int v[3];
  7.          int i;
  8.          
  9.          void media( int[], int );
  10.      
  11.          
  12.  
  13.          for(i=0; i<3; i++){
  14.             printf("Numero: ");
  15.             scanf("%d", &v[i]);
  16.          }
  17.          media(v,3);
  18. }
  19. void media(int v[], int t){
  20.          int suma;
  21.          double m;
  22.          int i;
  23.  
  24.          for(i=0; i<t; i++){
  25.            suma = suma + v[i];
  26.          }
  27.          m = suma/t;
  28.        
  29.          printf("La media es %lf\n", m);
  30. }
  #12 (permalink)  
Antiguo 07/07/2010, 13:36
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: subprograma que calcula la media

2 problemas:
- La linea 25 tiene sentido solo si la variable suma tiene un valor antes.

- En la linea 27, hay una division entre 2 enteros. Eso siempre da entero.

por ejemplo: 5 / 2 resulta 2, no resulta 2.5
y m = 5 / 2 demandara una conversion del 2 a un double y no de 2.5 a un double.

Hay varias posibilidades de solución a esto último:
- suma deberia ser float o double, no int. Asi, "suma / t " no sera una division de enteros
- Hacer un cast en la division: (float) suma / t, suma / (float) t, (float) suma / (float) t.
  #13 (permalink)  
Antiguo 08/07/2010, 05:25
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: subprograma que calcula la media

Gracias por tu ayuda, se me había olvidado hacer el cast.

Etiquetas: media
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 19:33.