Advertisement
Guest User

Exercise1.cpp

a guest
Oct 15th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.95 KB | None | 0 0
  1. #include <algorithm>
  2. #include <iomanip>
  3. #include <iostream>
  4. #include <stdexcept>
  5. #include <string>
  6. #include <vector>
  7.  
  8. using std::cin; using std::cout; using std::domain_error; using std::endl; using std::istream;
  9. using std::ostream; using std::setprecision; using std::sort; using std::streamsize; using std::string; using std::vector;
  10.  
  11. double median(vector<double> vec) {
  12.   typedef std::vector<double>::size_type vec_sz;
  13.   typedef vector<double>::size_type vec_sz;
  14.  
  15.   vec_sz size = vec.size();
  16.   if (size == 0)
  17.     throw domain_error("median of an empty vector");
  18.  
  19.   sort(vec.begin(), vec.end());
  20.  
  21.   vec_sz mid = size/2;
  22.  
  23.   return size % 2 == 0 ? (vec[mid] + vec[mid-1]) / 2 : vec[mid];
  24. }
  25.  
  26. double grade(double midterm, double final, double homework) {
  27.   return 0.2 * midterm + 0.4 * final + 0.4 * homework;
  28. }
  29.  
  30. double grade(double midterm, double final, const vector<double>& hw) {
  31.   if (hw.size() == 0)
  32.     throw domain_error("student has done no homework");
  33.  
  34.   return grade(midterm, final, median(hw));
  35. }
  36.  
  37. istream& read_hw(istream& in, vector<double>& hw) {
  38.   if (in) {
  39.     hw.clear();
  40.  
  41.     double x;
  42.     while (in >> x)
  43.       hw.push_back(x);
  44.  
  45.     in.clear();
  46.   }
  47.  
  48.   return in;
  49. }
  50.  
  51. int main() {
  52.   cout << "Please enter your first name: ";
  53.   string name;
  54.   cin >> name;
  55.   cout << "Hello, " << name << "!" << endl;
  56.  
  57.   cout << "Please enter your midterm and final exam grades: ";
  58.   double midterm, final;
  59.   cin >> midterm >> final;
  60.  
  61.   cout << "Enter all your homework grades, "
  62.     "followed by end-of-file: ";
  63.  
  64.   vector<double> homework;
  65.  
  66.  
  67.   read_hw(cin, homework);
  68.  
  69.   try {
  70.     double final_grade = grade(midterm, final, homework);
  71.     streamsize prec = cout.precision();
  72.     cout << "Your final grade is " << setprecision(3)
  73.      << final_grade << setprecision(prec) << endl;
  74.   } catch (domain_error) {
  75.     cout << endl << "You must enter your grades.  "
  76.       "Please try again." << endl;
  77.     return 1;
  78.   }
  79.  
  80.   return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement