Вычисление стандартного отклонения

50
6

Я пытаюсь вычислить стандартное отклонение массива, но мой ответ возвращается как 0. Я думаю, что проблема связана с тем, что "счет" запутался. Массив, который я получаю из данных, - это просто четыре числа 1,4,6,7. Код выводит ответ как 0, но это неверно. Любая помощь приветствуется.

#include <iostream> 
#include <iomanip>
#include <fstream>
#include <cmath>
#include <string>

using namespace std;
double mean(double *mydata, double N);
double standard_dev(double *mydata, double m, int N);

int main()
{
int N(0);
char filename [100];
double m, stdev;
double next;

int count=0;
cout<<"Enter name of file: ";
cin>>filename;

ifstream myfile;
myfile.open(filename);
while(myfile>>next)
{
count++;
}

N=count;
double *mydata;
mydata=new double[N];

for(int i=0; i<N; i++)
{
myfile>>mydata[i];
}
m = mean(mydata, N);
stdev = standard_dev(mydata, m, N);
cout<<"The standard deviation is:" <<stdev<<endl;

myfile.close();
delete[] mydata;
return 0;
}

double mean(double *mydata, double N)
{
double sum(0), m;
for(int i=0; i<N; i++)
{
sum +=mydata[i];
}
m=(sum/(double)N);
return (m);
}
double standard_dev(double *mydata, double m, int N)
{
double *mydata2= new double [N];
for(int i=0; i<N; i++)
{
mydata2[i]= pow((mydata[i]-m),2);
}
double sum(0), S, X;
for(int i=0; i<N; i++)
{
sum+=mydata2[i];
}
X=sum/N;
S=sqrt(X);
return (S);
}

Код для массива, содержащего 4 числа, справедлив: 1 4 6 7 Они кодируются по вертикали.

спросил(а) 2014-04-14T20:41:00+04:00 5 лет, 10 месяцев назад
1
Решение
61

Вы неправильно читаете данные. Во- первых, вы читали во всех данных в next, чтобы увеличить count. Затем вы пытаетесь читать в несуществующих данных с вами for цикла. Я рекомендую вам использовать std::vector чтобы избежать проблемы с распределением динамической памяти;

vector<double> mydata;
while(myfile>>next)
{
mydata.push_back(next);
}

Другим простым решением является простое количество элементов в файле. Пример:

Файл:

4 1 4 6 7

И прочитайте N из файла и используйте цикл for

ответил(а) 2014-04-14T20:45:00+04:00 5 лет, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема