1,105,581 Community Members

Getting the Average

Member Avatar
NinjaLink
Posting Pro in Training
419 posts since Mar 2008
Reputation Points: -2 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 2 [?]
 
0
 

I have the whole code written for what I want to do, but the only problem is, on my Daily_Average function, I want to print the average of the scores occurring Day 3, but I'm getting average of ALL scores together as one. Here is an example of the scores etc.

..... Day 1   Day 2    Day 3
Jimmy   70       68          71
Jason    72       75          68
Roy       68       69          67
Griff      65       64          59
John      71       81          74

I want to get the average of the scores under the Day 3 column, but how do I do it? I tried everything. I'm getting the sum of all the numbers, but unfortunately, that is the only way I know how to get the sum. How do I get sum for the scores in Day 3 and not the whole thing? This is for "Daily_Average" function. Also, I need to return that average. Thanks!

#include <iostream>
#include <iomanip>

using namespace std;

void Prt_Gradebook (string names[], int score[][3]);
double Daily_Average (int score[][3], int day);
int Lowest_score (string names[], int score[][3]);

int main ()
{

    string names[5] = {"Jimmy","Jason","Roy","Griff","John"};
    int score[5][3] = {{70,68,71},{72,75,68},{68,69,67},{65,64,59},{71,81,74}};
    int day;

    Prt_Gradebook(names,score);
    cout<<"The Average for Day 3 is "<<Daily_Average(score,day)<<endl;
    Lowest_score(names,score);

    cout<<endl;


    system ("PAUSE");
    return 0;
}

    void Prt_Gradebook (string names[], int score[][3])
{
     int sum = 0;

     for (int i = 0; i < 5; i++)
     {
         cout<<names[i]<<" ";

         for (int j = 0; j < 3; j++)
         {
         cout<<score[i][j]<<" ";
         sum+=score[i][j];
         }
         cout<<sum;
         cout<<endl;

     }


}


  double Daily_Average (int score[][3],int day)
{

  double average;
  int sum = 0;
  int j = day-1;

  for (int i = 0; i < 5; i++)
      {
           for (j = 0; j < 3; j++)
           {
           sum+=score[i][j];

           average = (sum / 5);
           }
      }   

          return average;


}



  int Lowest_score (string names[], int score[][3])
{  
   int lowest;
   int day;
   int j = day-1;

   for (int i = 0; i < 5; i++)
       {
            for (j = 0; j < 3; j++)

            if (score[i][j] < lowest)

            lowest = score[i][j];
       }

       cout<<"Langon's lowest score of "<<lowest<<" was shot on day "<<j<<endl;


} 
Member Avatar
Sky Diploma
Practically a Posting Shark
878 posts since Mar 2008
Reputation Points: 571 [?]
Q&As Helped to Solve: 138 [?]
Skill Endorsements: 8 [?]
 
0
 
void Prt_Gradebook (string names[], int score[][3])
{

     
     for (int i = 0; i < 5; i++)
     {
         cout<<names[i]<<" ";
         int sum = 0;//Changed It to Here. 
         for (int j = 0; j < 3; j++)
         {
         cout<<score[i][j]<<" ";
         sum+=score[i][j];
         }
         cout<<sum/3;
         cout<<endl;

     }
}

How about this ?

I changed the place for sum into the for loop.

And divide the total by 3 in order to get the average which will be printed there.

Member Avatar
mcriscolo
Posting Whiz in Training
219 posts since Apr 2008
Reputation Points: 47 [?]
Q&As Helped to Solve: 64 [?]
Skill Endorsements: 0 [?]
 
0
 

In the "Daily_Average" function, you set the variable "j", like this:

int j = day-1;

but then in the loop, you do this:

for (j = 0; j < 3; j++)

thereby resetting the value of "j" back to zero.

Initialize a new variable at the top of the function, like this:

int k = day-1;

Then set your loop, like this:

for (j=k; j<3; j++)

And you should be all set.

Member Avatar
NinjaLink
Posting Pro in Training
419 posts since Mar 2008
Reputation Points: -2 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 2 [?]
 
0
 

Thanks for both of your replys.


I declared a new variable "k" and then setting k = day-1.

Now for the Daily_Average function, I returned the average, and wrote a cout statement inside of main for it to print to the screen, but I'm getting nasty numbers for the output.

The example code is suppose to be "cout<<Daily_Average(Arrayforthescores,3)<<endl;

For example:

I'm getting:

"The Average for Day 3 is 2.21112e-311"

It should actually be

"The Average for Day 3 is 67.8"

Did I return the average correctly? I'm trying to get the average for all the numbers that occur under the Day 3 column.

Reminder: The stats of the scores etc. is in my first post.

#include <iostream>
#include <iomanip>

using namespace std;

void Prt_Gradebook (string names[], int score[][3]);
double Daily_Average (int score[][3], int day);
int Lowest_score (string names[], int score[][3]);

int main ()
{
    
    string names[5] = {"Jimmy","Jason","Roy","Griff","Crimson"};
    int score[5][3] = {{70,68,71},{72,75,68},{68,69,67},{65,64,59},{71,81,74}};
    int day;
    double average;
    
    Prt_Gradebook(names,score);
    cout<<"The Average for Day 3 is "<<Daily_Average(score,day)<<endl;
    Lowest_score(names,score);
    

    cout<<endl;

    
    system ("PAUSE");
    return 0;
}

    void Prt_Gradebook (string names[], int score[][3])
{
     int sum = 0;
     
     for (int i = 0; i < 5; i++)
     {
         cout<<names[i]<<" ";
         
         for (int j = 0; j < 3; j++)
         {
         cout<<score[i][j]<<" ";
         sum+=score[i][j];
         }
         cout<<sum;
         cout<<endl;

     }
  

}


  double Daily_Average (int score[][3],int day)
{

  double average;
  int sum = 0;
  int k = day-1;
  
  for (int i = 0; i < 5; i++)
      {
           for (int j = k; j < 3; j++)
           {
           sum+=score[i][j];
           
           average = (sum / 5);
           }
      }   
           
          return average;
          
          
}



  int Lowest_score (string names[], int score[][3])
{  
   int lowest;
   int day;
   int j = day-1;
   
   for (int i = 0; i < 5; i++)
       {
            for (j = 0; j < 3; j++)
            
            if (score[i][j] < lowest)
            
            lowest = score[i][j];
       }
       
       cout<<"Crimson's lowest score of "<<lowest<<" was shot on day "<<j<<endl;
 
 
}
Member Avatar
Sky Diploma
Practically a Posting Shark
878 posts since Mar 2008
Reputation Points: 571 [?]
Q&As Helped to Solve: 138 [?]
Skill Endorsements: 8 [?]
 
0
 

I dont understand Why You need the second loop in the average function.

double Daily_Average (int score[][3],int day)
{

  double average;
  int sum = 0;
  int k = day-1;
  
  for (int i = 0; i < 5; i++)
      {
    sum+=score[i][k];
     }      
           average = (sum / 5);
           
       
           
          return average;
          
          
}

And Secondly.
Another Mistake is in main ();

int day is not initialised to any number.

int day=3;

And now the code will work.

Member Avatar
ArkM
Postaholic
2,001 posts since Jul 2008
Reputation Points: 1,090 [?]
Q&As Helped to Solve: 347 [?]
Skill Endorsements: 8 [?]
 
1
 

That's the fateful (and typical) mistake in the average value calculations:

double average;
  int sum = 0;
  ...
  average = (sum / 5); // *** integer division!

You try to assign the result of integer division to double value. You want to get exact average value. But 7/5 == 1, 9/5 == 1, 12/5 == 2 and so on. You lost a fractional part of calculated value. It does not matter what's a type of a target.

If you want to get an exact (more precisely, double type) result, make float division, for example:

average = sum / 5.0; // Type of 5.0 constant is double
Question Answered as of 5 Years Ago by Sky Diploma, mcriscolo and ArkM
Member Avatar
NinjaLink
Posting Pro in Training
419 posts since Mar 2008
Reputation Points: -2 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 2 [?]
 
0
 

Thank you guys, it worked. The problem is now solved. =)

You
This question has already been solved: Start a new discussion instead
Post:
Start New Discussion
Tags Related to this Article