Want decimal output from function.

Why won't Mary Jones' gpa output as 3.6 instead of 3.0? any help would be much appreciated. thanks


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
#include <iostream>
#include <string>

using namespace std;

struct studenttype{
	string firstname;
	string lastname;
	unsigned studentnumber;
	unsigned numberofunits;
	unsigned gradepoints;
};

void output(const studenttype& student_info);
void takeclass(studenttype& student, int unitstaken, char grade);
double gpa(const studenttype& studentnewgpa);

int main (){
	double studentonegpa;
	double studenttwogpa;
	
	studenttype studentone = {"John", "Smith", 123456789, 0, 0 };
	studenttype studenttwo = {"Mary", "Jones", 123456790, 6, 24};

	output(studentone);
	output(studenttwo);

	takeclass(studentone, 3, 'A');
	takeclass(studenttwo, 4, 'B');

	studentonegpa = gpa(studentone);
	cout<< "John Smith's gpa:  "<< studentonegpa<< endl;
	
	studenttwogpa = gpa(studenttwo);
	cout<< "Mary Jones's gpa:  "<< studenttwogpa<< endl;
}

void output(const studenttype& student_info){
	cout << student_info.firstname << student_info.lastname << ", #" << student_info.studentnumber << ":  " << student_info.numberofunits
	<< " units and " << student_info.gradepoints << " grade points" <<endl;
}

void takeclass(studenttype& student, int unitstaken, char grade){   
	switch(grade)
	{
	case 'A':
			student.gradepoints = student.gradepoints + (unitstaken * 4);
			break;
	case 'B':
			student.gradepoints = student.gradepoints + (unitstaken * 3);
			break;		
	case 'C':
			student.gradepoints = student.gradepoints + (unitstaken * 2);
			break;
	case 'D':
			student.gradepoints = student.gradepoints + (unitstaken * 1);
			break;		
	case 'F':
			student.gradepoints = student.gradepoints + (unitstaken * 0);
			break;
	default:
			cout << grade << " is not a valid letter grade" << endl;
			return;
	}
	student.numberofunits = student.numberofunits + unitstaken;
}

double gpa(const studenttype& studentnewgpa){
	if (studentnewgpa.numberofunits == 0)
		return(0);

	else 
		return(studentnewgpa.gradepoints/studentnewgpa.numberofunits);
}
Because the members used on line 73 are integers. Convert to double before performing the division.

double(a)/double(b)
i understand but if I do that I have to change my struct at the top. The requirement is that they have to be unsigned numberofunits and unsigned gradepoints.
Sigh.

return double(studentnewgpa.gradepoints)/double(studentnewgpa.numberofunits);
do i have to use a typecast then?
ok, i gotcha, i didn't know u could do it like that.
Topic archived. No new replies allowed.