Dev - C++ - AYUDAA con codigo para calcular moda

 
Vista:

AYUDAA con codigo para calcular moda

Publicado por MikeMJ (1 intervención) el 24/09/2017 20:01:11
Buenas tardes

Este es mi primer post, les comento que estoy estudiando diseño de software y la profesora nos dejo realizar un programa para calcular la media, varianza, desviación y moda. Todo corre bien pero el problema esta en la MODA no me sale el resultado correcto y no encuentro el error. Les agradecería me ayudaran, les anexo el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <stdio.h>
#include <math.h>
/* ESte programa calcula la media, la varianza, la desviación estándar 
y la moda de veinte datos ingresados por el usuario */
 
 
/*Se declaran las funciones para cada variable o funcion para
obtener los resultados deseados*/
const int MAX = 100;
void Lectura(int *, int);
float Media(int *, int);
float Varianza(int *, int, float);
float Desviacion(float);
void Frecuencia(int *, int, int *);
int Moda(int *, int);
int main(void)
{
 
	/*Se declaran las variables a utilizar*/
	int TAM=20, MOD, DAT[MAX], FRE[11] = {0};
	float MED, VAR, DES;
do
{
	printf( "\n**************************************************************************\n");
	printf( "\n\t\t           ***BIENVENIDO*** \n" );
	printf( "\n**************************************************************************\n");
	printf( "\n\ - Este programa ayuda a calcular las medidas de tendencia central: - \n" );
	printf( "\n\      - Media aritmetica, Varianza, Desviacion estandar y Moda - \n" );
	printf( "\n\            - de veinte datos ingresados por el usuario - \n" );
	printf( "\n***************************************************************************\n\n");
}
	while (TAM > MAX | TAM < 1);
	/* Se verifica que el tamaño del arreglo sea correcto. */
 
	Lectura(DAT, TAM);
	MED = Media(DAT, TAM);
	VAR = Varianza(DAT, TAM, MED);
	DES = Desviacion(VAR);
	Frecuencia(DAT, TAM, FRE);
	MOD = Moda(FRE, 11);
	printf( "\n--------------------------------------------------\n");
	printf("\n  Los resultados de los datos son: \n\n");
	printf("\n  La Media de los datos ingresados es: %.2f", MED);
	printf("\n  La Varianza de los datos ingresados es: %.2f", VAR);
	printf("\n  La Desviación de los datos ingresados es: %.2f", DES);
	printf("\n  La Moda de los datos ingresados es: %d", MOD);
	printf( "\n--------------------------------------------------\n");
}
	void Lectura(int A[], int T)
	/* Con la funcion lectura leeremos los datios del arrglo */
{
	int I;
	for (I=0; I<T; I++)
{
	printf("  Por favor ingrese el dato %d: ", I+1);
	scanf("%d", &A[I]);
}
}
	float Media(int A[], int T)
	/* Funcion para calcular la media */
 
{
	int I;
	float SUM = 0.0;
	for (I=0; I < T; I++)
	SUM += A[I];
	return (SUM / T);
}
	float Varianza(int A[], int T, float M)
	/* Funcion para calcular la varianza */
{
	int I;
	float SUM = 0.0;
	for (I=0; I < T; I++)
	SUM += pow ((A[I] - M), 2);
	return (SUM / T);
}
	float Desviacion(float V)
	/* Funcion para calcular la desviación estándar */
{
	return (sqrt(V));
}
	void Frecuencia(int A[], int P, int B[])
	/* Funcion para calcular la frecuencia */
{
	int I;
	for (I=0; I < P; I++)
	B[A[I]]++;
}
	int Moda(int A[], int T)
	/* Funcion para calcular la moda. */
{
	int I, MOD = 0, VAL = A[0];
	for (I=1; I<T; I++)
	if (MOD < A[I])
{
	MOD = I;
	VAL = A[I];
}
	return (MOD);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Dionicio
Val: 168
Ha aumentado 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

re: AYUDAA con codigo para calcular moda

Publicado por Dionicio (57 intervenciones) el 25/09/2017 15:40:01
Primero que nada, bienvenido al foro. :D

Hay unos tantos detalles que quisiera discutir en estas líneas pero por cuestiones de tiempo no lo haré.

En la siguientes líneas, no acabo de comprender del todo lo que intentas hacer. Pero simplemente comparas el valor de la moda con el valor del arreglo, y se cumplirá siempre y cuando el valor que tiene MOD sea menor al valor que esté en el arreglo en la posición dada. Por ejemplo si el número que más se repite en un conjunto de datos es 1, pero existe un 9 el valor que tendrá MOD será la posición en la que se encuentre ese 9.

1
2
3
4
5
if (MOD < A[I])
{
	MOD = I;
	VAL = A[I];
}


Aquí te dejo una función que te ayudará a encontrar una moda simple, si quisieras obtener más de un valor(si la moda es bimodal o multimodal), pues estaría en tus manos, el como hacerlo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//obtener_moda: Obtiene la moda de un vector o arreglo.
//size: tamaño del arreglo
int obtener_moda(int arreglo[], int size){
 
	int moda, veces = 0, ultimo_numero_veces = 0;//veces: contará el número de veces que se repite un número
	int i, j;//Contadores de los bucles
 
	for(i = 0; i < size; i++){
		//j: analizará una posición adelante de del valor actual
		j = i + 1;
 
		while(j < size){
			//Si el número en i se repite más adelante, el número de veces incrementa
			if(arreglo[i] == arreglo[j]){
				veces++;
			}
 
			j++;
		}
 
		if(veces > ultimo_numero_veces){
			moda = arreglo[i];
			ultimo_numero_veces = veces;
			veces = 0;
		}else{
         veces = 0;
      }
	}
 
	//Devuelve el numero que más se repite
	return moda;
}

Compara la función anterior con la tuya con diferentes datos de prueba así te aseguras que yo no halla hecho algo tonto.

Si tienes más dudas, no dudes en escribirlas. Espero te haya sido de ayuda. :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar