Ayuda para sacar la desviación estándar

Iniciado por lonelym29, 11 Febrero 2020, 04:50 AM

0 Miembros y 1 Visitante están viendo este tema.

lonelym29

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

CalgaryCorpus

Al menos inicializa las variables locales suma y sigma a 0.
Aqui mi perfil en LinkedIn, invitame un cafe aqui