Advertisement
Guest User

Untitled

a guest
Dec 12th, 2019
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. using namespace std;
  5. typedef vector<string> vecstr; // добавление шаблона для типа данных vector<string>
  6. struct Body{
  7.     Body(string F, int age, bool sex){
  8.         this->F = F;
  9.         this->age = age;
  10.         this->sex = sex;
  11.     }; // Конструктор для структуры. this - указатель на члены структуры , а не на члены функции.
  12.     string F;
  13.     int age;
  14.     bool sex;
  15.     static const bool male = false;
  16.     static const bool female = true; // статичные переменные для определения пола
  17. };
  18. vecstr split(string str, string substr = " "){ // функция для разделения строки на вектор строк
  19.     vecstr result;
  20.     str += substr;
  21.     int ssl = substr.length();
  22.     int sl = str.length();
  23.     int sub = 0;
  24.     for (int i = 0; i < sl; i++){
  25.         string buff = str.substr(i, ssl);
  26.         if (buff == substr) {
  27.             i+=ssl - 1;
  28.             result.push_back(str.substr(i-sub+1, sub-1));
  29.             sub = 0;
  30.         }
  31.         sub++;
  32.     }
  33.     return result;
  34. }
  35.  
  36. int main(){
  37.     vector<Body> city; // вектор жителей города
  38.     vecstr data = split("Первый 12 0 Второй 19 0 Третяя 22 1 Четвертый 15 0 Пятый 19 0");
  39.     for(int i = 0; i!=data.size()/3; i++){
  40.         bool sex;
  41.         if (data[3*i+2] == "1") sex = Body::female;
  42.         else sex = Body::male; // чтение из строки пола
  43.         Body body(data[3*i], stoi(data[3*i+1]), sex); // создание класса
  44.         city.push_back(body); //добавление класса в вектор классов
  45.     }
  46.     double malemid = 0;
  47.     double femalemid = 0;
  48.     int femcount = 0;
  49.     int malecount = 0;
  50.     for(auto v : city){  // цикл for основанный на длинне вектора city, auto - самоподставляющийся тип данных
  51.         if (v.sex == Body::male) {malecount++; malemid+=v.age;}
  52.         else {femcount++; femalemid+=v.age;}  // суммарный возвраст и кол-во
  53.     }
  54.     cout << "Колличество женщин " << femcount << endl;
  55.     cout << "Колличество мужчин " << malecount << endl;
  56.     malemid /= malecount;
  57.     femalemid /= femcount; //вычисление среднего возвраста
  58.     cout << "Средний возвраст женщин " << femalemid << endl;
  59.     cout << "Средний возвраст мужчин " << malemid << endl;
  60.     cout << "\nСписок мужчин, чьих возвраст выше среднего" << endl;
  61.     for(auto v: city){ // вывод списков
  62.         if (v.sex == Body::male and v.age > malemid){
  63.             cout << v.F << endl;
  64.         }
  65.     }
  66.     cout << "\nСписок женщин, чьих возвраст выше среднего" << endl;
  67.     for(auto v: city){
  68.         if (v.sex == Body::female and v.age < femalemid){
  69.             cout << v.F << endl;
  70.         }
  71.     }
  72.  
  73.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement