I've been trying to calculate the Second standard deviation but the average in the second loop isn't calculating correctly which is causing the standard deviation (method 2) to not calculate correctly. I can't find anything wrong. please help
Code:
#include <iostream>#include <iomanip>
#include <string>
#include <fstream>
#include <cmath>
usingnamespacestd;
int main ()
{
cout << "\nThis program will produce statistics (Mean, Standard Deviation, "
"Maximum and Minimum values of the list) for a list of integer values."
"The user will provide the names of input and output files.\n" ;
cout <<"\nEnter the name and location of the input file: " ;
string file_input ;
getline(cin, file_input);
ifstream fin( file_input.c_str() ) ;
if(fin.fail())
{
cout << "Bad file name or location.\n" ;
exit(0);
}
cout <<"Enter the name and location of the output file: ";
string file_output ;
getline(cin, file_output);
ofstream fout( file_output.c_str() );
cout << "\nReading values first time. . .\n" ;
fout << "\nReading values first time. . .\n" ;
int num;
int count = 0 ;
double total = 0 ;
int Min = 100;
int Max = 0;
double totalSq=0;
double avg=0;
double stdDev=0;
fin >> num;
while(!fin.eof())
{
cout << num << ' ' ;
fout << num << ' ' ;
if( ++count%10 == 0 )
{
cout << '\n' ;
fout << '\n' ;
}
{
total += num ;
if( num > Max ) Max = num ;
if( num < Min ) Min = num ;
totalSq+= num*num;
fin >> num;
}
}
avg = total / count ;
if (count>0)
{
stdDev = sqrt((totalSq/count) - pow(avg,2));
cout << fixed << setprecision(3);
cout << "\n\nNumber of values read: " << count << endl;
cout << setw(40) << right << "Mean of the values: " << avg << endl;
cout << setw(40) << right << "Standard deviation using method 1: " << stdDev << endl;
cout << setw(40) << right << "Greatest value: " << Max << '\n' ;
cout << setw(40) << right << "Least value: " << Min << '\n' ;
fout << fixed << setprecision(3);
fout << "\n\nNumber of values read: " << count << endl;
fout << setw(40) << right << "Mean of the values: " << avg << endl;
fout << setw(40) << right << "Standard deviation using method 1: " << stdDev << endl;
fout << setw(40) << right << "Greatest value: " << Max << '\n' ;
fout << setw(40) << right << "Least value: " << Min << '\n' ;
fin.close();
}
fin.open(file_input.c_str());
cout << "\nReading values second time. . ." << endl;
fout << "\nReading values second time. . ." << endl;
stdDev=0, totalSq=0;
total=0;
avg = total/count;
count = -1;
fin >> num;
while(!fin.eof())
{
if(++count%3 == 0)
{
cout << setw(3) << num;
fout << setw(3) << num ;
total += num;
totalSq+= (num-avg) * (num-avg);
}
fin >> num;
}
count = (int)(count/3) + 1;
if (count > 0)
{
stdDev = sqrt(totalSq/count);
cout << "\n\nNumber of values read: " << count << endl;
fout << "\n\nNumber of values read: " << count << endl;
cout << setw(40) << right << "\n\tStandard Deviation using method 2: "<< stdDev <<endl;
fout << setw(40) << right << "\n\tStandard Deviation using method 2: "<< stdDev <<endl;
}
return 0;
}