Dev - C++ - Sacar la desviación estándar

 
Vista:

Sacar la desviación estándar

Publicado por Louis (1 intervención) el 11/02/2020 04:55:33
Tengo que hacer un programa con listas enlazadas que calcule la media y la desviación estándar, puedo calcular la media pero tengo un error en la desviación, alguien me podría ayudar?

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
102
103
104
105
106
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<iostream>
#include<stdlib.h>
 
//NODO
struct Nodo
{
	int dato;
	Nodo *siguiente;
};
 
void insertar(Nodo *&,int);
void mostrar(Nodo*);
void media(Nodo*);
 
int main()
{
	struct Nodo *lista=NULL;
	float dato;
	int opcion;
 
	do
	{
		printf("Inserte el numero: ");
		scanf("%f",&dato);
		insertar(lista,dato);
		printf("Deseas ingresar otro numero (1)Si   (2)No:   ");
		scanf("%i",&opcion);
	}while(opcion==1);
 
	printf("\n Los datos ingresados son los siguientes: \n");
	mostrar(lista);
	media(lista);
	getch();
 
	return 0;
 
}
 
//Insertar en la lista
void insertar( Nodo* & lista, int n)
{
	Nodo *nuevo=new Nodo();
	Nodo *otro;
	nuevo->dato=n;
	nuevo->siguiente=NULL;
	if(lista==NULL)
	{
		lista=nuevo;
		lista=root;
	}
	else
	{
		otro=lista;
		while(otro->siguiente!=NULL)
		{
			otro=otro->siguiente;
		}
		otro->siguiente=nuevo;
	}
}
 // mostrar la lista de datos
 void mostrar(Nodo *lista)
 {
 	while(lista != NULL)
 	{
 		printf("->%0.2i\n",lista->dato);
 		lista=lista->siguiente;
	 }
 }
 
 //Media y operaciones
 void media(Nodo *lista)
 {
 	int z=0;
 	float to = 0;
 	float suma, n,media,sigma,resta,total,i=0;
	int desv;
 	while(lista!=NULL)
 	{
 		z++;
 		suma= suma + lista->dato;
 		lista=lista->siguiente;
 		to=to+1;
	}
	media=suma/to;
	lista=root;
	 while(lista!=NULL)
	 {
	 	while(i<z)
	 	{
			sigma= sigma + pow(lista->dato - media,2);
	 		lista=lista->siguiente;
	 		i++;
		}
	 }
	 	desv=pow((sigma/z-1),(.5));
 
 
	 printf("\nEl numero de datos ingresados es: %i\n",z);
	 printf("\n La sumatoria es: %0.2f\n",suma);
	 printf("\n La media es: %0.2f\n", media);
	 printf("\n La desviacion estandar es: %e\n",desv);
 }
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 Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Sacar la desviación estándar

Publicado por Rodrigo (539 intervenciones) el 11/02/2020 09:02:34
Algunos comentarios en varias partes para corregir y mejorar:

Inicializa las variables que defines.

En C las variables locales no parten en 0.

Si quieres/esperas que eso ocurra, como por ejemplo con suma o sigma, tienes que asignarle 0, tal como hiciste con i en la linea 79.

Elimina las variables que no usas, como n, que parece que no usas (a menos que este equivocado yo y no este' viendo donde la usas).
Pareciera que "to" y "z" calculan y guardan lo mismo. Si es asi, elimina una de las 2 variables.

Cambiale el nombre a las variables para saber que' representan, "z" es un mal nombre.

Algunos parentesis son superfluos: pow( (a), (b) ) -> pow( a, b )
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