Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: minette1988 en 22 Junio 2010, 20:21 pm



Título: obtener la media de una serie de números
Publicado por: minette1988 en 22 Junio 2010, 20:21 pm
Hola, quiero obtener la media de una serie de números almacenados en un vector. He definido un vector de 100 elementos, pero no lo quiero llenar todo. Uso el bucle while  para introducir la cantidad de números que yo quiera. En el momento que me pregunta otro? le doy que no y me sale esto: La media es -36046567217453303226519490776462834093195326687546261483049571502083785345215250433915316893387385717851675440677491564514894938068961058035063788649341798672398777324866008790631210573116460943674979154620314287199762365252556423138115833356791091699933773824.000000

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define TAM 100
  5.  
  6. int main(){
  7.        double v[TAM];
  8.        int i=0;
  9.        char op='s';
  10.        double media = 0.0;
  11.  
  12.        while((op == 's' || op == 'S') && i < TAM){
  13.            printf("Introduce un número: ");
  14.            scanf("%lf", &v[i]);
  15.            i++;
  16.            printf("Otro? (s/n)");
  17.            scanf("%1s", &op);
  18.        }
  19.  
  20.  
  21.        for(i=0; i<TAM; i++){
  22.           media += v[i];
  23.        }
  24.        media = media/TAM;
  25.        printf("La media es %lf\n", media);  
  26. }
  27.  


Título: Re: obtener la media de una serie de números
Publicado por: @synthesize en 22 Junio 2010, 20:26 pm
Plantea mejor el algoritmo antes de pasar a programar...  :P


Título: Re: obtener la media de una serie de números
Publicado por: Akai en 22 Junio 2010, 20:47 pm
tu problema está aqui:

Código
  1. for(i=0; i<TAM; i++){
  2.           media += v[i];
  3.        }

Ahí lo que estás haciendo es recorrer el vector de 100 elementos v. A menos que introduzcas 100 elementos en ese vector anteriormente, vas a tener un problema de acceder a elementos no declarados, lo cual, va a coger valores bastante... aleatorios.

Código
  1. media = media/TAM;
Por otra parte, tu siempre divides la suma del vector entre 100, aunque no siempre usas 100. Mejor divide por el contador de números que has recogido.

La solución podría pasar por dos opciones:

a) Definirte otro contador, y ese bucle hacer un recorrido desde 0 hasta i :
Código
  1. for(j=0; j<i; j++){
  2.           media += v[[b]j[/b]];
  3.        }
  4. media/i;

b) o que en el momento que introduces los números, los guardes directamente en media (esta es una opción poco recomendable si luego se les va a dar otro uso a los números, como moda etc):

Código
  1. while((op == 's' || op == 'S') && i < TAM){
  2.            printf("Introduce un número: ");
  3.            scanf("%lf", &[b]media[/b]);
  4.            i++;
  5.            printf("Otro? (s/n)");
  6.            scanf("%1s", &op);
  7.        }
  8. media=media/i;
  9.  
  10.  


Título: Re: obtener la media de una serie de números
Publicado por: leogtz en 22 Junio 2010, 21:32 pm
Aparte de lo que ya te dijeron, error aquí:

Código:
 scanf("%1s", &op);


Título: Re: obtener la media de una serie de números
Publicado por: nicolas_cof en 23 Junio 2010, 03:17 am
Ademas de lo ya mencionado, yo te recomendaria usar un do-while; ya que ademas de ahorrarte una comprobacion queda mas elegante en el codigo.

Otra cosa es usar fflush( stdout ); entre printf() y scanf()

Salu10.