[Last Call] Learn how to a build a cloud-first strategyRegister Now

x
?
Solved

Finding the Standard deviation from a structure of numbers

Posted on 2003-11-25
11
Medium Priority
?
364 Views
Last Modified: 2010-04-15
Im trying to find the standard deviation from a structure of numbers.
the array is in the format:

        s[x].sid=            301111;
        s[x].mark=      50;
        s[x].grade=      'A';

were x is incremented for every user.


heres the code for the standard deviation, its in the form of a function initalised using:

float stdDev(struct student s[], int n);

and called using:

stdDev(staff,ARR_SIZE);

heres the function... it just crashes! theres 5 entrys, which should be passed to the function in n
float stdDev(struct student s[], int n)
{
  int x;
  float  mean, sigma;


  mean = s[x].sid / n;
  for (x=0; x<5; x++) n += (mean - s[x].mark)*(mean-s[x].mark);
  sigma = sqrt(n/5);
  printf("Std Deviation is %f",sigma);


  return sigma;
0
Comment
Question by:chinswain
  • 5
  • 2
  • 2
9 Comments
 
LVL 14

Expert Comment

by:Tommy Braas
ID: 9819557
You're trying to access your struct in:

   mean = s[x].sid / n;

but x has not been initialized!

Try to change:

   int x;

to:

   int x = 0;
0
 
LVL 14

Expert Comment

by:Tommy Braas
ID: 9819564
Also, the for() loop, change:

   for (x=0; x<5; x++)

to:

   for (x=0; x<n; x++)

as 'n' is the size of the array!
0
 

Author Comment

by:chinswain
ID: 9820212
Its returning: -1.#IND00 any ideas on what could be wrong?
if you send your email to madlan@yahoo.com i will reply with the whole code,
if that would be any easier? or is there a better way to work out the Standard Deviation!

float stdDev(struct student s[], int n);




*/function called with:*/
stdDev(staff,ARR_SIZE);

*/Function:*/

float stdDev(struct student s[], int n)
{
  int x = 0;
  float  mean, sigma;


  mean = s[x].sid / n;
  for (x=0; x<n; x++) n += (mean - s[x].mark)*(mean-s[x].mark);
  sigma = sqrt(n/5);
  printf("Std Deviation is %f",sigma);
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
LVL 14

Expert Comment

by:Tommy Braas
ID: 9821055
Ok, I had a closer look at your aglorithm, and it is not correct, which of course is why you're getting the wrong result.

Change to the following:

float mean_mark(struct student s[], int n)
{
      int i;
      int acc = 0;
      for( i=0; i<n; i++ )
      {
            acc += s[i].mark;
      }
      return (float)acc / (float)n;
}

float stdDev(struct student s[], int n)
{
      int x;
      float  mean, sigma, sum = 0.0f;
      
      mean = mean_mark( s, n );
      for (x=0; x<n; x++)
      {
            sum += pow(mean - s[x].mark, 2.0);
      }
      sigma = sqrtf(sum/(n -1));
      std::cout << "Std Deviation is %f" << sigma;
      
      return sigma;
}

And, btw, you voilated your agreement by posting your email address!

Good luck!
0
 

Author Comment

by:chinswain
ID: 9839878
I belive this is a C++ alternative, is it possible to modify this for C? i think pow is the only command thats C++, apart from that, its perfect
0
 
LVL 14

Accepted Solution

by:
Tommy Braas earned 1000 total points
ID: 9840774
The code above is pure C. pow is included in the standard math.h

So the code is working for you now?
0
 
LVL 3

Expert Comment

by:guynumber5764
ID: 9853044
>>> std::cout << "Std Deviation is %f" << sigma;
>>>The code above is pure C
???!!!

replace that with a printf() and replace
 pow (x, 2.0)
with
 (x * x)


0
 
LVL 14

Expert Comment

by:Tommy Braas
ID: 9864021
The code that does the work is pure C. The std::cout was a lapse.

0
 
LVL 3

Expert Comment

by:guynumber5764
ID: 9880593
I figured but couldn't resist the urge to be pedantic.  :)
E.
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

An Outlet in Cocoa is a persistent reference to a GUI control; it connects a property (a variable) to a control.  For example, it is common to create an Outlet for the text field GUI control and change the text that appears in this field via that Ou…
Windows programmers of the C/C++ variety, how many of you realise that since Window 9x Microsoft has been lying to you about what constitutes Unicode (http://en.wikipedia.org/wiki/Unicode)? They will have you believe that Unicode requires you to use…
The goal of this video is to provide viewers with basic examples to understand opening and writing to files in the C programming language.
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use while-loops in the C programming language.
Suggested Courses

834 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question