why is my code crashing because of line : dev = dev + pow(value[i] - mean,2) ??
ID: 3633683 • Letter: W
Question
why is my code crashing because of line : dev = dev + pow(value[i] - mean,2) ?? ????#include <cstdlib>
#include <iostream>
#include <fstream>
#include <cmath>
#include <iomanip>
using namespace std;
int const MAXSIZE = 145;
int main()
{
double value[MAXSIZE],dev, SD, variance, mean, ccoeff, sum, sumsqr;
int n, i;
ifstream inFile;
ofstream outFile;
sum = n = i = 0;
inFile.open("northdataIN.txt");
outFile.open("northdataOUT.txt");
for(i = 0; i <= MAXSIZE; i++)
{
inFile >> value[i];
sum = sum + value[i];
sumsqr = sumsqr + pow(value[i],2);
n = n + i;
mean = sum/n;
}
for(i = 1; i <= n; i++)
{
dev = dev + pow(value[i]-mean,2);
}
variance = dev/n;
SD = sqrt(variance);
outFile << "Mean " << mean << endl;
outFile << "Variance " << variance << endl;
outFile << "Standard Deviation " << SD << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
Explanation / Answer
Dear,
The incorrect code is colored blue and respective comments are given
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <cmath>
#include <iomanip>
using namespace std;
int const MAXSIZE = 145;
int main()
{
double value[MAXSIZE],dev, SD, variance, mean, ccoeff, sum, sumsqr;
int n, i;
ifstream inFile;
ofstream outFile;
sum = n = i = 0;
//the file should contain at least 145 elements program to work as MAXSIZE = 145
inFile.open("northdataIN.txt");
outFile.open("northdataOUT.txt");
//array will contain 0 to 144 elements as MAXSIZE = 145
for(i = 0; i <= MAXSIZE; i++)
{
inFile >> value[i];
sum = sum + value[i];
//here sumsqr should be initialized
sumsqr = sumsqr + pow(value[i],2);
//in the below statement if you add ‘i’ to the computation will be like this
//n = 0+0 when i=0
//n = 0+1 when i=1
//n = 1+2 when i=2
//n = 3+3 when i=3 etc
n = n + i;
//in the following statement n will computed incorrectly more over mean computed in //every iteration
mean = sum/n;
}
//the for loop iterates for 145(145+1)/2 times which crosses the array bound
for(i = 1; i <= n; i++)
{
dev = dev + pow(value[i]-mean,2);
}
//computes wrong value
variance = dev/n;
SD = sqrt(variance);
outFile << "Mean " << mean << endl;
outFile << "Variance " << variance << endl;
outFile << "Standard Deviation " << SD << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
The working version of your code:
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <cmath>
#include <iomanip>
using namespace std;
int const MAXSIZE = 145;
int main()
{
double value[MAXSIZE],dev=0, SD, variance, mean, ccoeff, sum, sumsqr=0;
int n, i;
ifstream inFile;
ofstream outFile;
sum = n = i = 0;
inFile.open("northdataIN.txt");
outFile.open("northdataOUT.txt");
if(!inFile)
{
cout<<"File not found.";
exit(0);
}
for(i = 0; i < MAXSIZE; i++)
{
inFile >> value[i];
sum = sum + value[i];
sumsqr = sumsqr + pow(value[i],2);
}
mean = sum/MAXSIZE;
for(i = 0; i < MAXSIZE; i++)
dev = dev + pow((value[i]-mean),2.0);
variance = dev/MAXSIZE;
SD = sqrt(variance);
outFile << "Mean " << mean << endl;
outFile << "Variance " << variance << endl;
outFile << "Standard Deviation " << SD << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
File contents: northdataIN.txt
35
19
52
21
82
55
97
30
65
5
6
54
30
98
89
81
14
54
19
91
16
12
9
3
33
9
1
37
71
24
35
19
52
21
82
55
97
30
65
5
6
54
30
98
89
81
14
54
19
91
16
12
9
3
33
9
1
37
71
24
35
19
52
21
82
55
97
30
65
5
6
54
30
98
89
81
14
54
19
91
16
12
9
3
33
9
1
37
71
24
35
19
52
21
82
55
97
30
65
5
6
54
30
98
89
81
14
54
19
91
16
12
9
3
33
9
1
37
71
24
35
19
52
21
82
55
97
30
65
5
6
54
30
98
89
81
14
54
19
91
16
12
9
3
33
Hope this would help you.
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.