2015-05-19 136 views
-4

我正在开发一个程序,但我面临一些问题。以下程序从数字文件计算平均值,最大值等。但是我无法在下面的代码中计算标准偏差。 编译器是MS视觉工作室10标准偏差问题

int main() 
{ 
    ifstream infile; 
    float num; 
    float total; 
    float x; 
    float aver; 
    float sumDiffSqr; 
    float stdDev; 
    vector<std::string> files = { "mynumberlist1.txt" }; 

    for (int i = 0; i<files.size(); i++) 
    { 
     x = 0; 
     total = 0; 
     infile.open(files.at(i)); 
     if (!infile.is_open()) 
     { 
      cout << "Error opening file\n"; 
      return 1; 
     } 
     while (!infile.eof()) 
     { 
      infile >> num; 
      total = total + num; 
      x++; 
     } 

     aver = (total - num)/(x - 1); 

     cout << "The last number in this range is: " << num << "\n"; 
     cout << "The sum of this range is: " << (total - num) << '\n'; 
     cout << "The number of items in this range is: " << x - 1 << '\n'; 
     cout << "The average of this range is: " << aver << '\n'; 
     cout << "" << '\n'; 
     cout << "Press enter to continue..." << '\n'; 

     sumDiffSqr = 0; 

     for (i = 0; i < num; i++) 
     { 
      sumDiffSqr = sumDiffSqr + pow((num[i] - aver), 2); 
     } 

     stdDev = sqrt(sumDiffSqr/num); 

     infile.close(); 
     getchar(); 
    } 

    return 0; 
} 
+2

这是否甚至编译? – mathematician1975

+2

为什么你不能计算标准偏差?是因为你不知道那是什么吗? – rghome

+0

您正在错误地检查您的输入循环,请参阅[为什么eof不好](http://stackoverflow.com/questions/5837639/eof-bad-practice)。 –

回答

1

样子你会需要你的号码保存到一个载体,至少在标准偏差:

std::vector<double> numbers; 
double value; 
double sum = 0.0; 
while (infile >> value) 
{ 
    numbers.push_back(value); 
    sum += value; 
} 

const double average = sum/(double)numbers.size(); 
double sumDiffSqr = 0.0; 
std::vector<double>::const_iter iter; 
for (iter = numbers.begin(); 
    iter != numbers.end(); 
    ++iter) 
{ 
    const double temp_value = *iter - average; 
    sumDiffSqr += temp_value * temp_value; 
} 
+0

'value'没有类型。还要考虑for..in循环而不是详细的迭代器。 – Gerard

+0

@杰拉德,谢谢你的好意。我做了更正。 –