Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Sword9K en 11 Octubre 2018, 22:44 pm



Título: Medidas de Dispersión. Error
Publicado por: Sword9K en 11 Octubre 2018, 22:44 pm
ya corregí algunas cosas en el arreglo para pedir los valores, pero no se que es lo que podría estar mal en la desviación por la frecuencia.

Código:
#include <iostream>
#include <conio.h>
#include <math.h>

using namespace std;

int main(int argc, char** argv) {
    
    ddouble  numeros[500], numeros2[500], numeros3[500], n;
                                double  fre=0, coef=0, des=0, varia=0, suma=0, media=0, suma2=0;
                               
                               
                                cout <<"\nDigite el Numero de Datos:";
                                cin>>n;
                               
                                for(int i=0, j=0, k=0;i<n && j<n && k<n;i++ && j++ && k++){     
                                               
                                               cout <<"\n-Digite el numero: ";
                                               cin>>numeros[i];
                                               cout <<"\n-Digite la Frecuencia del Dato: ";
                                               cin>>numeros2[j];
                                               
                                               fre = fre + numeros2[j];
                                               
                                               numeros3[k] = numeros[i] * numeros2[j] ;
                                               //cout <<"\n X.F:"<<numeros3[k];
                                               suma = suma + numeros3[k];
                                }
                                media = suma / fre;
                                cout<<"\n Promedio:"<<media;
                               
                                for(int i=0;i<n;i++){
                                        numeros[i]= numeros[i] - media;
                                        numeros[i]= pow(numeros[i],2);
                                        cout<<"\nDesviacion al cuadrado: "<<numeros[i];
                                }
                               
                                for(int i=0, j=0;i<n && j<n;i++ && j++){
                                       numeros2[j] = numeros2[j] * numeros[i];
                                       cout<<"\nDesviacion por la Frecuencia: "<<numeros2[j];
                                       suma2 = suma2 + numeros2[j];
                                }
                               
                                varia = suma / fre;
                                cout<<"\nLa Varianza es: "<<varia;
                               
                                des = sqrt(varia);
                                cout<<"\nLa Desviacion Estandar es: "<<varia;
                               
                                coef = (des*100)/media;
                                cout<<"\nCoeficiente de Variacion: "<<coef;
getch();
return 0;
}


Título: Re: Medidas de Dispersión. Error
Publicado por: dariodr01 en 12 Octubre 2018, 06:15 am
Hola, no entiendo muy bien tu codigo. Cual es el enunciado del problema.
Salu2.


Título: Re: Medidas de Dispersión. Error
Publicado por: Sword9K en 12 Octubre 2018, 15:35 pm
Es crear un programa que realice las medidas de dispersión en datos agrupados, pero como este utiliza dos arreglos, uno para los datos y luego otro para la frecuencia de cada uno. de estos toca sacar el promedio, desviación al cuadrado, de esa desviación multiplicarla por la frecuencia etc. el programa creo que esta bien, pero no se que pasa en la desviación al cuadrado que creo que los datos salen mal


Título: Re: Medidas de Dispersión. Error
Publicado por: EdePC en 12 Octubre 2018, 15:38 pm
Saludos,

- Tienes algo de redundancia de variables, además de que algunas variables no tienen el nombre apropiado.

- Se trata de Estadística Descriptiva > Medidas de dispersión en datos simples

- He hecho algunos parches para que funciones bien, revísalos para ver si cumple con tu ejercicio, yo lo he probado con la tabla que adjunto aquí:

-- Tabla (utilizo otro método para el cálculo, pero da el mismo resultado, solo concéntrate en xi, fi, y los resultados finales, el código utiliza tu propio método):

(https://image.ibb.co/eyt9EU/medidas-dispersion-datos-simples.jpg)

-- Código corregido:

Código
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <math.h>
  4.  
  5. using namespace std;
  6.  
  7. int main(int argc, char** argv) {
  8.  
  9.  double  numeros[500], numeros2[500], numeros3[500], n;
  10.  double  fre = 0, coef = 0, des = 0, varia = 0, suma = 0, media = 0, suma2 = 0;
  11.  
  12.  
  13.  cout << "\nDigite el Numero de Filas de la Tabla:";
  14.  cin >> n;
  15.  
  16.  for (int i = 0; i < n; i++) {
  17.  
  18.    cout << "\n- Digite el numero: ";
  19.    cin >> numeros[i];  // xi
  20.    cout << "\n- Digite la Frecuencia del Dato: ";
  21.    cin >> numeros2[i]; // fi
  22.  
  23.    fre = fre + numeros2[i]; // SUM(fi) o número de datos (n)
  24.  
  25.    numeros3[i] = numeros[i] * numeros2[i] ; // xi*fi
  26.    //cout <<"\n X.F:"<<numeros3[i];
  27.    suma = suma + numeros3[i]; //SUM(xi*fi)
  28.  }
  29.  
  30.  media = suma / fre;
  31.  cout << "\n Promedio:" << media;
  32.  
  33.  for (int i = 0; i < n; i++) {
  34.    numeros[i] = fabs(numeros[i] - media); // |xi - media|
  35.    numeros[i] = pow(numeros[i], 2); // |xi - media|^2
  36.    cout << "\nDesviacion al cuadrado: " << numeros[i];
  37.  }
  38.  
  39.  for (int i = 0; i < n; i++) {
  40.    numeros2[i] = numeros2[i] * numeros[i]; // (|xi - media|^2)*fi
  41.    cout << "\nDesviacion por la Frecuencia: " << numeros2[i];
  42.    suma2 = suma2 + numeros2[i]; // SUM( (|xi - media|^2)*fi )
  43.  }
  44.  
  45.  varia = suma2 / fre; // free es el número de datos n (SUM(Xi*fi))
  46.  cout << "\nLa Varianza es: " << varia;
  47.  
  48.  des = sqrt(varia); // Desviación Típica o Estándar
  49.  cout << "\nLa Desviacion Estandar es: " << varia;
  50.  
  51.  coef = (des * 100) / media; // Coeficiente de variación en %
  52.  cout << "\nCoeficiente de Variacion: " << coef;
  53.  getch();
  54.  return 0;
  55. }


-- Resultados

Código:
Digite el Numero de Filas de la Tabla:11

- Digite el numero: 0

- Digite la Frecuencia del Dato: 1

- Digite el numero: 1

- Digite la Frecuencia del Dato: 1

- Digite el numero: 2

- Digite la Frecuencia del Dato: 2

- Digite el numero: 3

- Digite la Frecuencia del Dato: 0

- Digite el numero: 4

- Digite la Frecuencia del Dato: 3

- Digite el numero: 5

- Digite la Frecuencia del Dato: 3

- Digite el numero: 6

- Digite la Frecuencia del Dato: 4

- Digite el numero: 7

- Digite la Frecuencia del Dato: 1

- Digite el numero: 8

- Digite la Frecuencia del Dato: 2

- Digite el numero: 9

- Digite la Frecuencia del Dato: 2

- Digite el numero: 10

- Digite la Frecuencia del Dato: 1

 Promedio:5.35
Desviacion al cuadrado: 28.6225
Desviacion al cuadrado: 18.9225
Desviacion al cuadrado: 11.2225
Desviacion al cuadrado: 5.5225
Desviacion al cuadrado: 1.8225
Desviacion al cuadrado: 0.1225
Desviacion al cuadrado: 0.4225
Desviacion al cuadrado: 2.7225
Desviacion al cuadrado: 7.0225
Desviacion al cuadrado: 13.3225
Desviacion al cuadrado: 21.6225
Desviacion por la Frecuencia: 28.6225
Desviacion por la Frecuencia: 18.9225
Desviacion por la Frecuencia: 22.445
Desviacion por la Frecuencia: 0
Desviacion por la Frecuencia: 5.4675
Desviacion por la Frecuencia: 0.3675
Desviacion por la Frecuencia: 1.69
Desviacion por la Frecuencia: 2.7225
Desviacion por la Frecuencia: 14.045
Desviacion por la Frecuencia: 26.645
Desviacion por la Frecuencia: 21.6225
La Varianza es: 7.1275
La Desviacion Estandar es: 7.1275
Coeficiente de Variacion: 49.9016


Título: Re: Medidas de Dispersión. Error
Publicado por: Sword9K en 12 Octubre 2018, 17:34 pm
:0, Esta Perfecto me siento pendejo pero bn. mi error era que utilizaba una variable int para cada arreglo. Muchas Gracias por ayudarme, es increíble. ;D