Работа со структурами (C++)

252
17 марта 2018, 17:59

Задача:

В населенном пункте проживает N человек. О каждом известны фамилия, возраст, пол. Ввести информацию о жителях данного пункта и посчитать количество женщин и мужчин, вывести информацию о средний возраст мужчин, напечатать фамилии тех мужчин, чей возраст ниже среднего.

Как реализовать ее условие?

Answer 1

Создаете структуру с фамилией, возрастом и полом. Создаете массив где будете хранить объекты структур, считываете и заполняете структуры. Параллельно суммировать возраст мужчин, после чего, поделить сумму возрастов на кол-во мужчин, и пройтись еще раз по массиву, выводя имена тех у кого возраст ниже среднего значения

Answer 2

Пример:

#include <string>
#include <iostream>
#include <list>
struct Human{
    enum class Gender{
        Male = 1,
        Female = 2
    };

    Human(int age = 0, Gender gender = Gender::Male, const std::string&
          lastName = {}):
        age{age},
        gender{gender},
        lastName{lastName}
    {}
    Human(const Human& other):
        age{other.age},
        gender{other.gender},
        lastName{other.lastName}
    {}
    Human& operator=(const Human& other){
        if (this != &other){
            age = other.age;
            gender = other.gender;
            lastName = other.lastName;
        }
        return *this;
    }
    int age;
    Gender gender;
    std::string lastName;
};
Human readFromUser(){
    int age;
    int gender;
    std::string lastName;
    std::cout << "Enter gender of human:\n"
              << "1 - Male\n"
              << "2 - Female" << std::endl;
    std::cin >> gender;
    std::cout << "Enter age of human:\n";
    std::cin >> age;
    std::cout << "Enter lastName of human:";
    std::cin >> lastName;
    return Human(age, static_cast<Human::Gender>(gender), lastName);
}

int main()
{
    std::cout << "Enter number of humans:";
    int n;
    std::cin >> n;
    std::list<Human> humans;
    for (int i = 0; i < n; i++){
        humans.push_back(readFromUser());
    }
    double ageSum = 0.0;
    int maleCount = 0;
    int femaleCount = 0;
    //считаем сумму возрастов мужчин,
    //а заодно и количество женщин и мужчин
    for (const auto& h: humans){
        switch (h.gender) {
        case Human::Gender::Female: //женщины
            femaleCount++;
            break;
        case Human::Gender::Male:
            ageSum += static_cast<double>(h.age);
            maleCount++;
            break;
        default:
            break;
        }
    }
    double ageAvg = 0.0;
    if (maleCount != 0){
        ageAvg = ageSum / static_cast<double>(maleCount);
    }
    std::cout << "male count: " << maleCount << std::endl;
    std::cout << "female count: " << femaleCount << std::endl;
    std::cout << "ageAvg:" << ageAvg << std::endl;
    std::cout << "list of lastnames:" << std::endl;
    for (const auto& h: humans){
        if (h.gender == Human::Gender::Male){
            if (static_cast<double>(h.age) < ageAvg){
                std::cout << "age: " << h.age << " lastname:" << h.lastName << std::endl;
            }
        }
    }
}

Пример использования:

Enter number of humans:10
Enter gender of human:
1 - Male
2 - Female
1
Enter age of human:
45
Enter lastName of human:ivanov
Enter gender of human:
1 - Male
2 - Female
1
Enter age of human:
25
Enter lastName of human:Egorov
Enter gender of human:
1 - Male
2 - Female
2
Enter age of human:
19
Enter lastName of human:Smirnova
Enter gender of human:
1 - Male
2 - Female
1
Enter age of human:
38
Enter lastName of human:Sidorov
Enter gender of human:
1 - Male
2 - Female
1
Enter age of human:
25
Enter lastName of human:Petrov
Enter gender of human:
1 - Male
2 - Female
2
Enter age of human:
36
Enter lastName of human:Barabash
Enter gender of human:
1 - Male
2 - Female
1
Enter age of human:
26
Enter lastName of human:Skladanov
Enter gender of human:
1 - Male
2 - Female
1
Enter age of human:
27
Enter lastName of human:Karlov
Enter gender of human:
1 - Male
2 - Female
2
Enter age of human:
59
Enter lastName of human:Poroshina
Enter gender of human:
1 - Male
2 - Female
1
Enter age of human:
45
Enter lastName of human:Petrov
male count: 7
female count: 3
ageAvg:33
list of lastnames:
age: 25 lastname:Egorov
age: 25 lastname:Petrov
age: 26 lastname:Skladanov
age: 27 lastname:Karlov
READ ALSO
Загрузка музыки в вк

Загрузка музыки в вк

Пытаюсь загрузить аудиофайл через api вк (с++, qt)Загрузка на сайт проходит нормально, но при попытке вызвать метод api

204
Задача на с++ (Жадные алгоритмы) [требует правки]

Задача на с++ (Жадные алгоритмы) [требует правки]

Не могу придумать идею для решения данной задачи, ищу помощи

194
Работа с потоками, передача данных между потоками

Работа с потоками, передача данных между потоками

Здравствуйте, как правильно передавать параметр в функцию потокаТо есть как передать "а" в метод Func? Я читал что вроде бы 4 параметр метода...

207
C++ Неявно вызывается лишний конструктор. Классы как поля другого класса

C++ Неявно вызывается лишний конструктор. Классы как поля другого класса

Есть простенькая программа на с++Есть три класса, один содержит приватными полями 2 других

223