Can't get the right output..

Trying to calculate mean, standard deviation, & variance through data structures.

Output:

``````Mean:                -9.25596e+061
Standard Deviation:   2.2836e+046
Variance:             5.21481e+092``````

Code:

``````#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;

struct StatData
{
double Data[10];
double mean;
double stdDev;
double variance;
};

int main()
{
const int SIZE=10;
double sum=0;
double stdDevSum=0;
double temp=0;
int i=0;
int j=0;

StatData calc;
calc.Data[SIZE] = (24,21,24,43,31,41,42,34,41,45);

for(i=0;i<SIZE;i++)
sum=calc.Data[i]+sum;

calc.mean = sum/SIZE;

for(j=0;j<SIZE;j++)
stdDevSum = pow((calc.mean - calc.Data[j]),2) + stdDevSum;

temp = stdDevSum/SIZE;

calc.stdDev = sqrt (temp);

calc.variance = temp;

cout << "Mean:                " << calc.mean << endl;
cout << "Standard Deviation:   " << calc.stdDev << endl;
cout << "Variance:             " << calc.variance << endl;

}``````

Edited by jtylerboy222: n/a

4
Contributors
7
Replies
8
Views
7 Years
Discussion Span
Last Post by burcin erek

why not make functions and keep main() clean?
that way you will avoid many troubles

It's part of the assignment.

Well done!! I don't think I have seen this error before!!

What you have done is this: `calc.Data[SIZE]=(24,21,43,24,43,31,41,42,34,41,45);` That is your error... You have use round bracket e.g. ( ). That is not what you wanted. So let us see what happens.

You first evaluate the contents of the bracket. e.g. 24,etc. using the comma operator, that simple means that it evaluates to 45. Then you set calc.Data to 45. But since that is over the limit of the array boundary, [recall, arrays are indexed from 0 to SIZE-1] you in effect have a completely uninitialized array, and because of your structure, you set mean to be 45.

However, if it was a simple array you, could write this `double arrayData[]={4,5,6,7,8};` But this is not allowed for the struct. Therefore, the quickest thing to do is to change the first loop to this:

``````const double arrayData[]={4,6,7,8,9,91};
for(int i=0;i<SIZE;i++)
{
calc.Data[i]=arrayData[i];
sum+=calc.Data[i];
}``````

Edited by StuXYZ: n/a

I'm kind of confused, can you post the whole code so I don't do this wrong.

And by the way, I need those 10 numbers specifically for this problem... I'm confused where you got {4,6,7,8,9,91} from.

Edited by jtylerboy222: n/a

Never mind, got it!

``````#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;

struct StatData
{
double Data[10];
double mean;
double stdDev;
double variance;
};

int main()
{
const int SIZE=10;
double sum=0;
double stdDevSum=0;
double temp=0;
int numCount = 0;
int i=0;
int j=0;

StatData calc;
calc.Data[SIZE];

cout << "This program calculates the mean, standard deviation,"
"and variance of " << SIZE << " numbers.";
cout << "Enter " << SIZE << " numbers." << endl;

while(numCount < SIZE)
{
cin >> calc.Data[numCount];
numCount++;
}

for(i=0;i<SIZE;i++)
{
sum=calc.Data[i]+sum;
}

calc.mean = sum/SIZE;

for(j=0;j<SIZE;j++)
{
stdDevSum = (pow((calc.Data[j] - calc.mean),2)) + stdDevSum;
}

temp = stdDevSum/SIZE;
calc.stdDev = sqrt (temp);
calc.variance = temp;

cout << "Mean:                 " << calc.mean << endl;
cout << "Standard Deviation:   " << calc.stdDev << endl;
cout << "Variance:             " << calc.variance << endl;
}``````

Edited by jtylerboy222: n/a

Ok, sorry, I got 4,5,6 etc from being lazy and not wanting to type.

If you want to save yourself the typing ...
From line 29 to 36 of your second version of the code, you could replace it with this:

``````const double arrayData[]={24,21,43,24,43,31,41,42,34,41,45};

for(int i=0;i<SIZE;i++)
calc.Data[i]=arrayData[i];``````

Note, that line 25 of your code has no purpose and should be deleted.

Otherwize a good effort.

Edited by StuXYZ: n/a

``````#include <iostream>
#include <stdio.h>
#include <math.h>
#include <conio.h>

using namespace std;

struct StatData
{
double Data[10];
double mean;
double stdDev;
double variance;
};

int main()
{
double sum=0,mean=0;
double stdDevSum=0;
double temp=0;
int i=0;
int j=0;
int Data[] = {24,21,24,43,31,41,42,34,41,45};

for(i=0;i<10;i++)
sum=Data[i]+sum;

mean = sum/10;
cout << mean;

getch();
}
``````

it works may be math function does not work
I saw that

``````calc.Data[SIZE] = (24,21,24,43,31,41,42,34,41,45);
``````

this should be with this bracket `{.....}`
may be

Edited by Dani: Formatting fixed

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.