-
October 21st, 2013, 11:07 PM
#1
Trying to calculate average & standard deviation!
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>
using namespace std;
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;
}
-
October 22nd, 2013, 01:42 AM
#2
Re: Trying to calculate average & standard deviation!
Originally Posted by rephlex
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
What have you done to debug your program? Are the values read from file correctly? Is the sum and sum of squared calculated correctly?
Cheers, D Drmmr
Please put [code][/code] tags around your code to preserve indentation and make it more readable.
As long as man ascribes to himself what is merely a posibility, he will not work for the attainment of it. - P. D. Ouspensky
-
October 22nd, 2013, 01:49 AM
#3
Re: Trying to calculate average & standard deviation!
Originally Posted by D_Drmmr
What have you done to debug your program? Are the values read from file correctly? Is the sum and sum of squared calculated correctly?
Yes everything is correct except the last loop when calculating standard deviation, it wasn't coming out correctly. Now I have noticed that totalSq in the second loop is the problem but I don't know what to do with it or why it is coming out like that
Sample output
PHP Code:
This 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.
Enter the name of the input file: STATNUMS.DAT
Enter the name of the output file: STATNUMS.out
Reading values first time. . .
10 11 8 9 6 21 54 89 2 15
34 5 8
Number of values read: 13
Mean of the values : xxx.xxx
Standard deviation using method 1: xxx.xxx
Greatest value : xxx.xxx
Least value : xxx.xxx
Reading values second time
10 9 54 15 8
Number of values read : 5
Standard deviation using method 2: xxx.xxx
-
October 22nd, 2013, 04:51 AM
#4
Re: Trying to calculate average & standard deviation!
Now I have noticed that totalSq in the second loop is the problem but I don't know what to do with it or why it is coming out like that
You need to be able to debug your programs to find problems like this. The ability to debug programs is an essential skill.
Code:
total=0;
avg = total/count;
As total is 0, avg will be always be 0!
All advice is offered in good faith only. All my code is tested (unless stated explicitly otherwise) with the latest version of Microsoft Visual Studio (using the supported features of the latest standard) and is offered as examples only - not as production quality. I cannot offer advice regarding any other c/c++ compiler/IDE or incompatibilities with VS. You are ultimately responsible for the effects of your programs and the integrity of the machines they run on. Anything I post, code snippets, advice, etc is licensed as Public Domain https://creativecommons.org/publicdomain/zero/1.0/ and can be used without reference or acknowledgement. Also note that I only provide advice and guidance via the forums - and not via private messages!
C++23 Compiler: Microsoft VS2022 (17.6.5)
-
October 22nd, 2013, 05:05 AM
#5
Re: Trying to calculate average & standard deviation!
Originally Posted by rephlex
Yes everything is correct except the last loop when calculating standard deviation, it wasn't coming out correctly. Now I have noticed that totalSq in the second loop is the problem but I don't know what to do with it or why it is coming out like that
As others have mentioned -- use the debugger that comes with the compiler. Step through your program using the debugger and watch the values of the variables at each step.
Regards,
Paul McKenzie
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|