calculate class average function

hi i have to Write a program that reads a student's name, together with his or her test scores for at most 50 students from a file, provided by users of your program. The program should then compute the average test score for each student and assign the appropriate grade. The grade scale is as the follows:
90 <= average < 100, A; 80 <= average < 90 B; 70 <= average < 80, C;
60 <= average < 70, D; average < 60, F.
The program also calculates the class average.

all the students average and grades are good but the function that calculate the class average is giving me wrong result could you please help to figure out what s wrong
this the data from file
Johnson 85 83 77 91 76
Aniston 80 90 95 93 48
Cooper 78 81 11 90 73
Gupta 92 83 30 69 87
Blair 23 45 96 38 59
Clark 60 85 45 39 67
Kennedy 77 31 52 74 83
Bronson 93 94 89 77 97
Sunny 79 85 28 93 82
Smith 85 72 49 75 63
Rosado 64 40 55 74 70
Dicicca 97 100 92 94 95
Lynch 74 85 52 60 95
Abdelgani 75 95 96 97 93
Hatcher 53 70 44 34 60
Lacap 94 95 95 95 95
Taveras 74 75 78 96 98
Thomas 64 75 39 60 75
Dauphin 47 70 79 47 80
Gomez 84 95 95 94 85
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;
 
/* Function Declarations */
char calculateGrade(double);
void calcAverage(ifstream &, int [], int, double &);
void calclasseAverage(ifstream &, int [],double &,double &);

/* Entry-Point */

int main(void)

{

    string name;

    int i,numgrades=5,grade[5];

    double average;
	double classAvg = 0;
    char letter;ifstream inputfile;
    
    
	 inputfile.open("prog7_input.txt");

    if(inputfile.fail())

    {
        cout<<"input file did not open please check it\n";
        return 1;
    }
  
   cout << "Names\t\tTest1\tTest2\tTest3\tTest4\tTest5\tAverage\tGrade\n\n";
    inputfile>>name;                  
    while(inputfile)       
    {
        calcAverage(inputfile,grade,numgrades,average);
        letter = calculateGrade(average);
		
        cout<<name<<"    \t";
		
    for(i=0;i<numgrades;i++)

           cout<<grade[i]<<"\t";

         cout<<average<<"\t"<<letter<<"\n"; 
         
         inputfile>>name;
		}
	calclasseAverage(inputfile,grade,average,classAvg);
   	cout<<"\nClass Average =  "<<classAvg<<endl<<endl;
    inputfile.close(); 

 
    return 0;

}

 

 

/* Function to retrieve the letter grade. */

char calculateGrade(double average)

{

    if(average >=90)

        return 'A';

 
    else if(average >=80)

        return 'B';

    else if(average >=70)

        return 'C';

    else if(average>=60)
        return 'D';

    else

        return 'F';

}

 

/* Function to read an entry and calculate the average. */

void calcAverage(ifstream &in, int grade[], int max, double &average) //

{

    int i,sum=0;

    for(i=0; i < max ;i++)
		
    {

        in>>grade[i];

        sum+=grade[i];

    }

    average=(double)sum/max;
}
	/* Function to calculat the class average. */

void calclasseAverage(ifstream &in, int grade[], double &average,double &classAvg) //

{

   
	classAvg = 0;

    for(int i = 7 ;i < 8;i++)
	{for(int j = 1; j < 22 ;j++)
		
    {

        in>>average;

        classAvg = classAvg + average;
	}
    }

   classAvg = classAvg/20;
}
There is a problem with your calclassAverage. There are no comments telling me what the values do or where they come from so I'm not going to sit here and debug it. Put in some cout's for every value you read and calculate. That ouput should show you where the problem lies.

while trying to understand your code I added my own values, and came up with a work around. It works but doesn't answer your question about what is wrong.

You might look at it and use what you find useful.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;
 
/* Function Declarations */
char calculateGrade(double);
void calcAverage(ifstream &, int [], int, double &);
// void calclasseAverage(ifstream &, int [],double &,double &);

int SumCount = 0; // Test

/* Entry-Point */


int main(void)

{
    string name;
    int i,numgrades=5,grade[5];
    double average;
	double classAvg = 0;
	int SumCount=0;  // Test
	double classAvg2 = 0;  // Test
	int numStudents=0;
    char letter;ifstream inputfile;
	 inputfile.open("prog7_input.txt");

    if(inputfile.fail())
    {
        cout<<"input file did not open please check it\n";
        return 1;
    }
  
   cout << "Names\t\tTest1\tTest2\tTest3\tTest4\tTest5\tAverage\tGrade\n\n";

    inputfile>>name;                  
    while(inputfile)       
    {
        calcAverage(inputfile,grade,numgrades,average);
        letter = calculateGrade(average);
numStudents++; // Test
        cout<<name<<"    \t";
		
    for(i=0;i<numgrades;i++)
    {
     cout<<grade[i]<<"\t";
 SumCount=(SumCount+grade[i]);   // Test

    }
classAvg2=classAvg2+average;  // Test
         cout<<average<<"\t"<<letter<<"\n"; 
         inputfile>>name;

		}


//	calclasseAverage(inputfile,grade,average,classAvg);
cout << endl << " # students: " << numStudents << " Class Average: " << classAvg2/numStudents << endl;  // Test
//   	cout<<"\nClass Average =  "<<classAvg <<endl<<endl;
    inputfile.close(); 
 
    return 0;
}


/* Function to retrieve the letter grade. */

char calculateGrade(double average)
{
    if(average >=90)
        return 'A';
    else if(average >=80)
        return 'B';
    else if(average >=70)
        return 'C';
    else if(average>=60)
        return 'D';
    else
        return 'F';
}

/* Function to read an entry and calculate the average. */

void calcAverage(ifstream &in, int grade[], int max, double &average) //
{
    int i=0,sum=0;
    for(i=0; i < max ;i++)
    {
        in>>grade[i];
        sum+=grade[i];
    }
    average=(double)sum/max;
}

/*
//	 Function to calculat the class average. 
void calclasseAverage(ifstream &in, int grade[], double &average,double &classAvg) //
{
	classAvg = 0;
    for(int i = 7 ;i < 8;i++)
	{for(int j = 1; j < 22 ;j++)
    {
        in>>average;
        classAvg = classAvg + average;
	}
    }
   classAvg = classAvg/20;
}
*/
Not sure why you had to post another thread on this. But like I said in the other one, and Sam has said here, without knowing what you are trying to do in the calclasseAverage function we can't help you. The code is too convoluted for us to simply guess.
hi thank you very much for your help that was some errors but i correct them and it work fine ,the other thing is i have to store the names in alphabetic order using parallel aray could you help me please!
any help please
Topic archived. No new replies allowed.