obtener la media de una serie de números

Iniciado por minette1988, 22 Junio 2010, 20:21 PM

0 Miembros y 1 Visitante están viendo este tema.

minette1988

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

#include <stdio.h>
#include <stdlib.h>

#define TAM 100

int main(){
        double v[TAM];
        int i=0;
        char op='s';
        double media = 0.0;

        while((op == 's' || op == 'S') && i < TAM){
            printf("Introduce un número: ");
            scanf("%lf", &v[i]);
            i++;
            printf("Otro? (s/n)");
            scanf("%1s", &op);
        }
       
   
        for(i=0; i<TAM; i++){
           media += v[i];
        }
        media = media/TAM;
        printf("La media es %lf\n", media); 
}

@synthesize

Plantea mejor el algoritmo antes de pasar a programar...  :P

Akai

tu problema está aqui:

for(i=0; i<TAM; i++){
          media += v[i];
       }


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.

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 :
for(j=0; j<i; j++){
          media += v[[b]j[/b]];
       }
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):

while((op == 's' || op == 'S') && i < TAM){
           printf("Introduce un número: ");
           scanf("%lf", &[b]media[/b]);
           i++;
           printf("Otro? (s/n)");
           scanf("%1s", &op);
       }
media=media/i;


leogtz

Aparte de lo que ya te dijeron, error aquí:

scanf("%1s", &op);
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

nicolas_cof

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.