Advertisement
RobertDeMilo

BB5.1 Зачем нужны функции?

Jun 21st, 2024 (edited)
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.39 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <numeric>
  5.  
  6. using namespace std;
  7.  
  8. enum class Gender
  9. {
  10.     FEMALE,
  11.     MALE
  12. };
  13.  
  14. struct Person
  15. {
  16.     int age;
  17.     Gender gender;
  18.     bool is_employed;
  19. };
  20.  
  21.     template <typename InputIt>
  22.     int ComputeMedianAge(InputIt range_begin, InputIt range_end)
  23.     {
  24.         if(range_begin==range_end)
  25.         {
  26.             return 0;
  27.         }
  28.         vector<typename InputIt::value_type> range_copy(range_begin,range_end);
  29.        
  30.         auto middle = begin(range_copy) + range_copy.size()/2;
  31.        
  32.         nth_element(begin(range_copy),middle, end(range_copy),[](const Person&lhs, const Person& rhs)
  33.                     {return lhs.age<rhs.age;});
  34.        
  35.         return middle->age;
  36.     }
  37.  
  38. void PrintStats(vector<Person> persons)
  39. {
  40.     auto females_end = partition(begin(persons),end(persons),[](const Person&p)
  41.                                  {return p.gender == Gender::FEMALE; });
  42.    
  43.     auto employed_females_end = partition(begin(persons),females_end,[](const Person&p){return p.is_employed; });
  44.      
  45.     auto employed_males_end = partition(females_end,end(persons),[](const Person&p){return p.is_employed; });
  46.        
  47.     cout << "Median age = " << ComputeMedianAge(begin(persons), end(persons)) << endl;
  48.        
  49.     cout << "Median age for females = " << ComputeMedianAge(begin(persons), females_end) <<endl;
  50.        
  51.     cout << "Median age for males = " << ComputeMedianAge(females_end, end(persons)) << endl;
  52.          
  53.     cout << "Median age for employed females = " << ComputeMedianAge(begin(persons), employed_females_end) << endl;
  54.          
  55.     cout << "Median age for unemployed females = " << ComputeMedianAge(employed_females_end, females_end) << endl;
  56.          
  57.     cout << "Median age for employed males = " << ComputeMedianAge(females_end, employed_males_end) << endl;
  58.          
  59.     cout << "Median age for unemployed males = " << ComputeMedianAge(employed_males_end, end(persons)) << endl;
  60.          
  61. }
  62.  
  63.  
  64.  
  65. int main()
  66. {
  67.  
  68. int person_count;
  69. cin >> person_count;
  70. vector<Person> persons;
  71. persons.reserve (person_count);
  72.  
  73. for(int i=0;i<person_count;++i)
  74. {
  75.     int age,gender, is_employed;
  76.     cin >> age >> gender >> is_employed;
  77.     Person person {age,static_cast<Gender>(gender),is_employed==1};
  78.     persons.push_back(person);
  79. }
  80.     PrintStats(persons);
  81.     return 0;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement