awsmpshk

Сортировки, Кузичкин 141 группа

May 21st, 2020
105
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <fstream>
  2. #include <vector>
  3. #include <string>
  4. #include <cmath>
  5. #include <algorithm>
  6.  
  7. struct Student
  8. {
  9.   string F, I;
  10.   int score[3];
  11.   int fullScore()
  12.   {
  13.     return score[0] + score[1] + score[2];
  14.   }
  15.   double averageGeom()
  16.   {
  17.     return sqrt(score[0] * score[1] * score[2]);
  18.   }
  19.   bool pred(const Student& stud)
  20.   {
  21.     if (fullScore() < stud.fullScore()) return true;
  22.     else if (fullScore() == stud.fullScore() && averageGeom() < stud.averageGeom()) return true;
  23.     else if (averageGeom() == stud.averageGeom()) return false;
  24.   }
  25. };
  26.  
  27. vector<Student> initVector(ifstream& in)
  28. {
  29.   vector<Student> base;
  30.   while (in.peek() != EOF)
  31.   {
  32.     Student stud;
  33.     in >> stud.F >> stud.I;
  34.     for (int i = 0; i < 3; ++i) in >> stud.score[i];
  35.     base.push_back(stud);
  36.   }
  37.   return base;
  38. }
  39.  
  40. void printVector(vector<Student> base, ofstream& out)
  41. {
  42.   for (Student stud : base)
  43.   {
  44.     out << stud.F << " " << stud.I << " ";
  45.     for (int i = 0; i < 3; ++i) out << elem.score[i];
  46.   }
  47. }
  48.  
  49. int main()
  50. {
  51.   ifstream in("input.txt");
  52.   ofstream out("output.txt");
  53.   vector<Student> base = initVector(in);
  54.   sort(base.begin(), base.end(), pred);
  55.   printVector(base, out);
  56. }
  57.  
  58. input.txt:
  59. sidorov sergey 100 100 100
  60. kuzichkin pavel 50 50 50
  61. orlov daniil 90 90 90
  62. imanov rauf 100 100 100
  63. tihonov levan 84 87 99
  64.  
  65. output.txt:
  66. kuzichkin pavel 50 50 50
  67. tihonov levan 84 87 99  
  68. orlov daniil 90 90 90
  69. imanov rauf 100 100 100
  70. sidorov sergey 100 100 100
RAW Paste Data Copied