Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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.