Na tablicy 5 ele. o elementach struktury (Imię Nazwisko, Wiek, Miasto, Płeć) wykona:


- wczyta wszystkie informacje o osobach do tablicy,
- znajdzie najmłodszą osobę i wyświetli wszystkie informacje o tej osobie,
- znajdzie najstarszą osobę i wyświetli wszystkie informacje o tej osobie,
- Obliczy średni wiek wszystkich osób,
- Wyświetli informacje tylko o samych mężczyznach,
- Wyświetli informacje tylko o samych kobietach.
Program zapętlij do momentu podania 0, w programie wyświetl MENU


Odpowiedź :

Odpowiedź:

#include <iostream>

#include <string>

#include <algorithm>

#include <vector>

#include <numeric>

struct Person {

   std::string m_name;

   std::string m_surname;

   int m_age;

   std::string m_city;

   std::string m_gender;

   Person(const std::string &name, const std::string &surname, const int age, const std::string &city,

          const std::string &gender) :

           m_name(name), m_surname(surname), m_age(age), m_city(city), m_gender(gender) {};

};

void printYoungest(const std::vector<Person>

       &tab) {

   auto youngest = *std::min_element(tab.begin(), tab.end(), [](const Person &a, const Person &b) {

       return a.m_age < b.m_age;

   });

   std::cout << youngest.m_name << std::endl

             << youngest.m_surname << std::endl

             << youngest.m_age << std::endl

             << youngest.m_city << std::endl

             << youngest.m_gender << std::endl;

}

void printOldest(const std::vector<Person> &tab) {

   auto oldest = *std::max_element(tab.begin(), tab.end(), [](const Person &a, const Person &b) {

       return a.m_age < b.m_age;

   });

   std::cout << oldest.m_name << std::endl

             << oldest.m_surname << std::endl

             << oldest.m_age << std::endl

             << oldest.m_city << std::endl

             << oldest.m_gender << std::endl;

}

void printAverageAge(const std::vector<Person> &tab) {

   int sum = std::accumulate(tab.begin(), tab.end(), 0, [](int sum, const Person &b) {

       sum += b.m_age;

       return sum;

   });

   std::cout << 1.0 * sum / tab.size() << std::endl;

}

void printManInfo(const std::vector<Person> &tab) {

   std::for_each(tab.begin(), tab.end(), [](const Person &a) {

       if (a.m_gender == "man") {

           std::cout << a.m_name << std::endl

                     << a.m_surname << std::endl

                     << a.m_age << std::endl

                     << a.m_city << std::endl

                     << a.m_gender << std::endl;

       }

   });

}

void printWomanInfo(const std::vector<Person> &tab) {

   std::for_each(tab.begin(), tab.end(), [](const Person &a) {

       if (a.m_gender == "woman") {

           std::cout << a.m_name << std::endl

                     << a.m_surname << std::endl

                     << a.m_age << std::endl

                     << a.m_city << std::endl

                     << a.m_gender << std::endl;

       }

   });

}

void menu(const std::vector<Person> &tab) {

   int option = -1;

   std::cout << "Wpisz 0 - 5 w zaleznosci co chcesz zrobic\n";

   while (option != 0) {

       std::cin >> option;

       switch (option) {

           case 0:

               break;

           case 1:

               printYoungest(tab);

               break;

           case 2:

               printOldest(tab);

               break;

           case 3:

               printAverageAge(tab);

               break;

           case 4:

               printManInfo(tab);

               break;

           case 5:

               printWomanInfo(tab);

               break;

           default:

               std::cout << "Podano nieodpowiedni numer\n";

       }

   }

}

int main() {

   auto person1 = Person("Adam", "Dada", 27, "Lublin", "man");

   auto person2 = Person("Wojtek", "Golas", 34, "Warszawa", "man");

   auto person3 = Person("Zosia", "Samosia", 18, "Gdansk", "woman");

   auto person4 = Person("Lola", "Koala", 57, "Katowice", "woman");

   auto person5 = Person("Bartek", "Pokaz", 51, "Wroclaw", "man");

   std::vector<Person> people = {person1, person2, person3, person4, person5};

   menu(people);

   return 0;

}

Wyjaśnienie:

Mało punktów dałeś, a zajęło mi to 117 linijek, więc jak dasz naj, to będę wdzięczny :)