elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Calcular moda, mediana, media aritmética, media geométrica de n números en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Calcular moda, mediana, media aritmética, media geométrica de n números en C  (Leído 48,756 veces)
ERIK546

Desconectado Desconectado

Mensajes: 44



Ver Perfil WWW
Calcular moda, mediana, media aritmética, media geométrica de n números en C
« en: 27 Junio 2012, 18:41 pm »

Hola, esta vez solicito la ayuda de los expertos por el siguiente problema en C; que debe calcular como dice el título; la moda, mediana, media aritmética y media geométrica de n numeros en C; El ingresar los n números no ha sido problema, ya que los he guardado en un arreglo. Sin embargo se me ha complicado realizar las acciones necesarias. He iniciado por la que considero yo la más sencilla, sería la media aritmética; que como ya saben consiste en sumar los n números del arreglo y dividir el resultado entre n. Sin embargo no logra hacer lo solicitado. Les dejo mi avance y si me podrían dar ideas para realizar las otras acciones se los agradecería mucho.
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.    int n,i,c;
  7.    float ma;
  8.    int *a;
  9.    printf("Programa que calcula la moda, mediana,  media aritmetica y media geometrica de n numeros\n");
  10.    printf("Introduce n\n");
  11.    scanf("%d",&n);
  12.    a=(int*)malloc(sizeof(int)*n);
  13.    printf("Introduce los %d numeros\n",n);
  14.    for(i=0;i<n;i++){
  15.                     scanf("%d",&a[i]);
  16.                     }
  17.    printf("Los %d numeros son:\n",n);
  18.    for(i=0;i<n;i++){
  19.                     printf("%d\n",a[i]);
  20.                     }
  21.    //Media Aritmetica
  22.    for(i=0;i<n-1;i++){
  23.                     c=0;
  24.                     c+=a[i]+a[i+1];
  25.                     }
  26.    ma=c/n;
  27.    printf("La media aritmetica es: %d\n",ma);
  28.  
  29.  system("PAUSE");
  30.  return 0;
  31. }
  32.  


En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Calcular moda, mediana, media aritmética, media geométrica de n números en C
« Respuesta #1 en: 27 Junio 2012, 19:32 pm »

Hola! el problema lo tenes aca:
Código
  1. //Media Aritmetica
  2.    for(i=0;i<n-1;i++){
  3.                     c=0; // ERROR INICIALIZAR C=0 ACA
  4.                     c+=a[i]+a[i+1];
  5.                     }
el error es hacer c=0 dentro del for, por cada ciclo estas haciendo que c valga 0 y por lo tanto no estas sumando. Debe ir antes del for

Saludos


En línea

Ahorrate una pregunta, lee el man
ERIK546

Desconectado Desconectado

Mensajes: 44



Ver Perfil WWW
Re: Calcular moda, mediana, media aritmética, media geométrica de n números en C
« Respuesta #2 en: 27 Junio 2012, 19:47 pm »

Hola, ya he corregido el código para la media aritmética y he proseguido con la media geométrica. Les dejo el código para corroborarlo:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.    int n,i,c;
  7.    float ma;
  8.    int *a;  
  9.  
  10.    printf("Programa que calcula la moda, mediana,  media aritmetica y media geometrica de n numeros\n");
  11.    printf("Introduce n\n");
  12.    scanf("%d",&n);
  13.    a=(int*)malloc(sizeof(int)*n);
  14.    printf("Introduce los %d numeros\n",n);
  15.    for(i=0;i<n;i++){
  16.                     scanf("%d",&a[i]);
  17.                     }
  18.    printf("Los %d numeros son:\n",n);
  19.    for(i=0;i<n;i++){
  20.                     printf("%d\n",a[i]);
  21.                     }
  22.    //Media Aritmetica  
  23.    c=0;
  24.    for(i=0;i<n;i++){
  25.                       c+=a[i];
  26.                       }
  27.    ma=c/n;
  28.    printf("La media aritmetica es: %f\n",ma);
  29.  
  30.  system("PAUSE");
  31.  return 0;
  32. }
  33.  
Ahora con la media geométrica consiste en: los n números multiplicarlos entre sí y obtener del resultado; su raíz n-ésima. Hasta ahora he avanzado un poco en el problema y me he dado cuenta que tengo un error al momento de obtener la raíz n-ésima. Les dejo el código para que me rectifiquen en la función para obtener la raíz n-ésima ya que el parecer el lenguaje C, no acepta lo que yo estoy haciendo:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.    int n,i,c,d;
  7.    float ma,mg;
  8.    int *a;  
  9.  
  10.    printf("Programa que calcula la moda, mediana,  media aritmetica y media geometrica de n numeros\n");
  11.    printf("Introduce n\n");
  12.    scanf("%d",&n);
  13.    a=(int*)malloc(sizeof(int)*n);
  14.    printf("Introduce los %d numeros\n",n);
  15.    for(i=0;i<n;i++){
  16.                     scanf("%d",&a[i]);
  17.                     }
  18.    printf("Los %d numeros son:\n",n);
  19.    for(i=0;i<n;i++){
  20.                     printf("%d\n",a[i]);
  21.                     }
  22.    //Media Aritmetica  
  23.    c=0;
  24.    for(i=0;i<n;i++){
  25.                       c+=a[i];
  26.                       }
  27.    ma=c/n;
  28.    printf("La media aritmetica es: %f\n",ma);
  29.  
  30.    //Media Geométrica
  31.    d=0;
  32.    for(i=0;i<n;i++){
  33.                     d*=a[i];
  34.                     }
  35.    mg=pow(c,(1/n));
  36.    printf("La media geometrica es: %f\n",mg);
  37.  
  38.  system("PAUSE");
  39.  return 0;
  40. }
  41.  
En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Calcular moda, mediana, media aritmética, media geométrica de n números en C
« Respuesta #3 en: 27 Junio 2012, 21:23 pm »

El problema lo tienes aquí:

   
Código
  1. mg=pow(c,(1/n));
   
Para usar la función pow debes incluir la librería math.h

Saludos.
En línea

ERIK546

Desconectado Desconectado

Mensajes: 44



Ver Perfil WWW
Re: Calcular moda, mediana, media aritmética, media geométrica de n números en C
« Respuesta #4 en: 27 Junio 2012, 21:48 pm »

El problema lo tienes aquí:

   
Código
  1. mg=pow(c,(1/n));
   
Para usar la función pow debes incluir la librería math.h

Saludos.
He incluido la librería que dices, sin embargo sigue sin dar el resultado correcto.
En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Calcular moda, mediana, media aritmética, media geométrica de n números en C
« Respuesta #5 en: 27 Junio 2012, 22:13 pm »

Código
  1. //Media Geométrica
  2.    d=0;
  3.    for(i=0;i<n;i++){
  4.                     d*=a[i];
  5.                     }
  6.    mg=pow(c,(1/n));
  7.    printf("La media geometrica es: %f\n",mg);
  8.  

Lo que haces es inicializar la variable d a 0, y después con

Código:
d*=a[i];

multiplicas d (0) por un valor, que dará 0. Así, el resultado de d al salir del bucle será 0.

Además, en el pow deberías poner

mg = pow(d, (1/n));

(tenías puesto como base a c en vez de a d).

Por lo tanto, podrías hacer algo así:

Código
  1. //Media Geométrica
  2.    d=1;
  3.    for(i=0;i<n;i++){
  4.    d*=a[i];
  5.    }
  6.    mg=pow(d,(1/n));
  7.    printf("La media geometrica es: %f\n",mg);
  8.  

Saludos.
« Última modificación: 27 Junio 2012, 22:17 pm por DickGumshoe » En línea

ERIK546

Desconectado Desconectado

Mensajes: 44



Ver Perfil WWW
Re: Calcular moda, mediana, media aritmética, media geométrica de n números en C
« Respuesta #6 en: 27 Junio 2012, 23:27 pm »

Código
  1. //Media Geométrica
  2.    d=0;
  3.    for(i=0;i<n;i++){
  4.                     d*=a[i];
  5.                     }
  6.    mg=pow(c,(1/n));
  7.    printf("La media geometrica es: %f\n",mg);
  8.  

Lo que haces es inicializar la variable d a 0, y después con

Código:
d*=a[i];

multiplicas d (0) por un valor, que dará 0. Así, el resultado de d al salir del bucle será 0.

Además, en el pow deberías poner

mg = pow(d, (1/n));

(tenías puesto como base a c en vez de a d).

Por lo tanto, podrías hacer algo así:

Código
  1. //Media Geométrica
  2.    d=1;
  3.    for(i=0;i<n;i++){
  4.    d*=a[i];
  5.    }
  6.    mg=pow(d,(1/n));
  7.    printf("La media geometrica es: %f\n",mg);
  8.  

Saludos.

Muchas gracias DickGumshoe, lo he corregido respecto a lo que me dices. Antes de subir la mediana que ya he completado; he encontrado un error muy importante en todas las funciones que realiza este programa. Al obtener la media aritmética y la media aritmética no me puede regresar valores flotantes. Aunque dichas variables resultantes ma (media aritmética) y mg (media geométrica) han sido declaradas como flotantes. Al realizar las operaciones que corresponden a cada una de ellas solamente me regresan la parte entera del resultado. Si alguien pudiera por favor revisar el código y decirme ¿Porqué sucede esto? se lo agradecería mucho. Gracias por toda la ayuda hasta ahora.
Les dejo el código ya con las correcciones señaladas:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. int main(int argc, char *argv[])
  5. {
  6.    int n,i,c,d,j;
  7.    float ma,mg;
  8.    int *a;  
  9.  
  10.    printf("Programa que calcula la moda, mediana,  media aritmetica y media geometrica de n numeros\n");
  11.    printf("Introduce n\n");
  12.    scanf("%d",&n);
  13.    a=(int*)malloc(sizeof(int)*n);
  14.    printf("Introduce los %d numeros\n",n);
  15.    for(i=0;i<n;i++){
  16.                     scanf("%d",&a[i]);
  17.                     }
  18.    printf("Los %d numeros son:\n",n);
  19.    for(i=0;i<n;i++){
  20.                     printf("%d\n",a[i]);
  21.                     }
  22.    //Media Aritmetica  
  23.    c=0;
  24.    for(i=0;i<n;i++){
  25.                       c+=a[i];
  26.                       }
  27.    ma=c/n;
  28.    printf("La media aritmetica es: %f\n",ma);
  29.  
  30.    //Media Geométrica
  31.    d=1;
  32.    for(i=0;i<n;i++){
  33.                     d*=a[i];
  34.                     }
  35.    mg=pow(d,(1/n));
  36.    printf("La media geometrica es: %f\n",mg);
  37.  
  38.    system("PAUSE");
  39.  return 0;
  40. }
  41.  
En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Calcular moda, mediana, media aritmética, media geométrica de n números en C
« Respuesta #7 en: 27 Junio 2012, 23:41 pm »

Eso sucede porque el resto de variables con las que haces operaciones deben ser también de tipo float. De lo contrario, muchas veces al hacer una operación en la que intervengan un float y un int, te dejará solo la parte entera.

Por lo tanto, el código quedaría así:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. int main(int argc, char *argv[])
  5. {
  6.    int n,i, j;
  7.    float c, d;
  8.    float ma,mg;
  9.    float *a;
  10.  
  11.    printf("Programa que calcula la moda, mediana,  media aritmetica y media geometrica de n numeros\n");
  12.    printf("Introduce n\n");
  13.    scanf("%d",&n);
  14.    a=(float*)malloc(sizeof(float)*n);
  15.    printf("Introduce los %d numeros\n",n);
  16.    for(i=0;i<n;i++){
  17.                     scanf("%f",&a[i]);
  18.                     }
  19.    printf("Los %d numeros son:\n",n);
  20.    for(i=0;i<n;i++){
  21.                     printf("%f\n",a[i]);
  22.                     }
  23.    //Media Aritmetica
  24.    c=0;
  25.    for(i=0;i<n;i++){
  26.                       c+=a[i];
  27.                       }
  28.    ma=c/n;
  29.    printf("La media aritmetica es: %f\n",ma);
  30.  
  31.    //Media Geométrica
  32.    d=1;
  33.    for(i=0;i<n;i++){
  34.                     d*=a[i];
  35.                     }
  36.    mg=pow(d,(1/n));
  37.    printf("La media geometrica es: %f\n",mg);
  38.  
  39.    system("PAUSE");
  40.  return 0;
  41. }
  42.  
  43.  
  44.  
En línea

ERIK546

Desconectado Desconectado

Mensajes: 44



Ver Perfil WWW
Re: Calcular moda, mediana, media aritmética, media geométrica de n números en C
« Respuesta #8 en: 28 Junio 2012, 00:13 am »

Eso sucede porque el resto de variables con las que haces operaciones deben ser también de tipo float. De lo contrario, muchas veces al hacer una operación en la que intervengan un float y un int, te dejará solo la parte entera.

Por lo tanto, el código quedaría así:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. int main(int argc, char *argv[])
  5. {
  6.    int n,i, j;
  7.    float c, d;
  8.    float ma,mg;
  9.    float *a;
  10.  
  11.    printf("Programa que calcula la moda, mediana,  media aritmetica y media geometrica de n numeros\n");
  12.    printf("Introduce n\n");
  13.    scanf("%d",&n);
  14.    a=(float*)malloc(sizeof(float)*n);
  15.    printf("Introduce los %d numeros\n",n);
  16.    for(i=0;i<n;i++){
  17.                     scanf("%f",&a[i]);
  18.                     }
  19.    printf("Los %d numeros son:\n",n);
  20.    for(i=0;i<n;i++){
  21.                     printf("%f\n",a[i]);
  22.                     }
  23.    //Media Aritmetica
  24.    c=0;
  25.    for(i=0;i<n;i++){
  26.                       c+=a[i];
  27.                       }
  28.    ma=c/n;
  29.    printf("La media aritmetica es: %f\n",ma);
  30.  
  31.    //Media Geométrica
  32.    d=1;
  33.    for(i=0;i<n;i++){
  34.                     d*=a[i];
  35.                     }
  36.    mg=pow(d,(1/n));
  37.    printf("La media geometrica es: %f\n",mg);
  38.  
  39.    system("PAUSE");
  40.  return 0;
  41. }
  42.  
  43.  
  44.  
Muchas gracias aunque me sigue dando problemas lo de la raíz n-ésima; que corresponde a la media geométrica.
En línea

ERIK546

Desconectado Desconectado

Mensajes: 44



Ver Perfil WWW
Re: Calcular moda, mediana, media aritmética, media geométrica de n números en C
« Respuesta #9 en: 28 Junio 2012, 00:24 am »

Gracias a todos por sus respuestas ahora he terminado de manera satisfactoria hacer la mediana. Subiré el programa que calcula junto con lo anterior la mediana de n numeros. He modificado un poco las fórmulas para su cálculo debido al arreglo. Les agradecería que me dieran ideas para hacer la moda; que sería la última parte del programa.
Aunque cabe mencionar que en la parte de la media geométrica, sigue de-volviéndome la parte entera. Les dejo el código, agradeceré grandemente sus aportaciones.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. int main(int argc, char *argv[])
  5. {
  6.    int n,i,j,p,w,v;
  7.    float c,d,aux,l,e,ma,mg,mm;
  8.    float *a;  
  9.  
  10.    printf("Programa que calcula la moda, mediana,  media aritmetica y media geometrica de n numeros\n");
  11.    printf("Introduce n\n");
  12.    scanf("%d",&n);
  13.    a=(float*)malloc(sizeof(float)*n);
  14.    printf("Introduce los %d numeros\n",n);
  15.    for(i=0;i<n;i++){
  16.                     scanf("%f",&a[i]);
  17.                     }
  18.    printf("Los %d numeros son:\n",n);
  19.    for(i=0;i<n;i++){
  20.                     printf("%f\n",a[i]);
  21.                     }
  22.    //Media Aritmetica  
  23.    c=0;
  24.    for(i=0;i<n;i++){
  25.                       c+=a[i];
  26.                       }
  27.    ma=c/n;
  28.    printf("La media aritmetica es: %f\n",ma);
  29.  
  30.    //Media Geométrica
  31.    d=1.0;
  32.    for(i=0;i<n;i++){
  33.                     d*=a[i];
  34.                     }
  35.    mg=pow(d,(1/n));
  36.    printf("La media geometrica es: %f\n",mg);
  37.  
  38.    //Mediana
  39.    for(i=0;i<n;i++){
  40.                     for(j=i+1;j<n;j++){
  41.                                        if(a[i]>a[j]){
  42.                                                      aux=a[i];
  43.                                                      a[i]=a[j];
  44.                                                      a[j]=aux;
  45.                                                      }
  46.                                        }
  47.                     }
  48.    printf("Los numeros ordenados son\n");
  49.    for(i=0;i<n;i++){
  50.                     printf("%f\t\n",a[i]);
  51.                     }                
  52.    if((n%2)!=0){
  53.               p=((n+1)/2)-1;
  54.               printf("La mediana es %f\n",a[p]);
  55.               }
  56.               else{
  57.                    w=(n/2)-1;
  58.                    v=(n/2);
  59.                    l=a[w];
  60.                    e=a[v];
  61.                    mm=(l+e)/2;
  62.                    printf("La mediana es %f\n",mm);
  63.                    }                                                    
  64.  system("PAUSE");
  65.  return 0;
  66. }
  67.  
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
AYUDA CON MEDIA ARITMETICA PLISSSSS
Programación Visual Basic
love_magic 4 2,581 Último mensaje 22 Julio 2006, 21:13 pm
por love_magic
Media aritmetica de un array entero
Programación C/C++
dairus20 2 13,073 Último mensaje 5 Marzo 2011, 13:20 pm
por dairus20
calcular media aritmética con while
Programación C/C++
indict 6 7,005 Último mensaje 8 Noviembre 2012, 22:49 pm
por leosansan
Calcular media Aritmética, Geométrica, Armónica.
.NET (C#, VB.NET, ASP)
Ahinoam 4 5,956 Último mensaje 12 Junio 2016, 20:46 pm
por Lekim
Como calcular la media, mediana, y moda
Programación C/C++
M-Stewart612 2 1,416 Último mensaje 1 Noviembre 2018, 04:03 am
por M-Stewart612
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines