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?
#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);
}