Median calculation

I cannot get this code to execute a median calculation correctly. I know that my problem lies in the nth_element. I am just not sure how to fix it so it works correctly.

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
#include <iostream>
#include <vector>
#include <cstdio>
#include <iomanip>
#include <algorithm>

using namespace std;

//Declaring Constants
const int ZERO = 0;
const int ONE_HUNDRED = 100;
double median = 0.00;
vector<int> scores;
size_t mid = scores.size() / 2;
int size;

double findMedian(vector<int> &scores)
{
	size_t mid = scores.size() / 2;

	if (scores.size() == 0) 
		return 0;   
	// Make scores[mid] the mid'th element
	nth_element(scores.begin(), scores.begin() + mid, scores.end());
	if (size % 2 == 0) 
	{
		// size is even.  Need to average of scores[mid] and scores[mid-1]
		nth_element(scores.begin(), scores.begin() + mid - 1, scores.end());
		median = (scores[mid] + scores[mid - 1]) / 2;
	}
	else {
		median = scores[mid];
	}
}

int main()
{
	int firstExam, secondExam, thirdExam;
	int error;

	cout << "Dr. DoLittle's Grading Program ..... (by Kirk Kelley)" << endl;
	do
	{
		error = 0;
		cout << "Please enter in the score for the first exam: ";
		cin >> firstExam;
		if (firstExam < 0 || firstExam > 100)
		{
			cout << "Please enter a valid score between 0 and 100" << endl;
			cin >> firstExam;
			cin.clear();
		}
	} while (error);
	do
	{
		error = 0;
		cout << "Please enter in the score for the second exam: ";
		cin >> secondExam;
		if (secondExam < 0 || secondExam > 100)
		{
			cout << "Please enter a valid score between 0 and 100" << endl;
			cin >> secondExam;
			cin.clear();
		}
	} while (error);
	do
	{
		error = 0;
		cout << "Please enter in the score for the third exam: ";
		cin >> thirdExam;
		if (thirdExam < 0 || thirdExam > 100)
		{
			cout << "Please enter a valid score between 0 and 100" << endl;
			cin >> thirdExam;
			cin.clear();
		}
	} while (error);

	//declaring variable
	int homework;

	//initiating loop
	while (!cin.eof())
	{

		homework = EOF;

		cout << "\nEnter score for homework assignment (press Ctrl+Z to quit): ";

		cin >> homework;

		if (!cin.good())
			if (homework == EOF)
				break;
			else
			{
				cout << "\nInvalid Input. Entry must be an integer." << endl;
				cin.clear();
				cin.ignore(std::numeric_limits<streamsize> ::max(), '\n');
			}
		else
		{
			if (homework >= ZERO && homework <= ONE_HUNDRED)
			{
				scores.push_back(homework);
			}
			else
			{
				cout << "\nInvalid Input. Grade must be between 0-100." << endl;
				cin.clear();
				cin.ignore(std::numeric_limits<streamsize> ::max(), '\n');
			}
		}
	}
	double median = 0.00;
	size_t mid = scores.size() / 2;
	// Make scores[mid] the mid'th element
	nth_element(scores.begin(), scores.begin() + mid, scores.end());
	median = scores[mid];
	if (size % 2 == 0) 
	{
		// size is even.  Need to average of scores[mid] and scores[mid-1]
		nth_element(scores.begin(), scores.begin() + mid - 1, scores.end());
		median = (scores[mid] + scores[mid - 1]) / 2;
	}
	
	double totalPoints;
	totalPoints =  median + firstExam + secondExam + thirdExam;

	cout << "The total points earned was " << totalPoints << endl;
	cout << "The median homework score was " << median << endl;
	cout << "The letter calculated letter grade is ";
	system("Pause");
	return 0;
}
This is the else statement at line 126, it didn't add it
1
2
3
	else {
		median = scores[mid];
	}
closed account (jvqpDjzh)
One advice to improve your way of working: use a good IDE (for example Code::Blocks). To correct your mistakes you can put breakpoints where the program doesn't work and make it start in debug mode and see the flow of the program: you can understand much and improve your productivity more from these advanced IDE's :)
Topic archived. No new replies allowed.