0 / 0 / 0
Регистрация: 22.01.2021
Сообщений: 103
1

Дополнить класс Person конструктором

07.07.2021, 18:06. Показов 1396. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не проходит 5 тест:
Failed case #5/5: Wrong answer

Дополните класс Person из задачи «Имена и фамилии — 2» конструктором, позволяющим задать имя и фамилию человека при рождении, а также сам год рождения. Класс не должен иметь конструктора по умолчанию.

При получении на вход года, который меньше года рождения:

методы GetFullName и GetFullNameWithHistory должны отдавать "No person";
методы ChangeFirstName и ChangeLastName должны игнорировать запрос.
Кроме того, необходимо объявить константными все методы, которые по сути ими являются.

Пример
Код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main() {
  Person person("Polina", "Sergeeva", 1960);
  for (int year : {1959, 1960}) {
    cout << person.GetFullNameWithHistory(year) << endl;
  }
  
  person.ChangeFirstName(1965, "Appolinaria");
  person.ChangeLastName(1967, "Ivanova");
  for (int year : {1965, 1967}) {
    cout << person.GetFullNameWithHistory(year) << endl;
  }
 
  return 0;
}
Вывод:
C++
1
2
3
4
No person
Polina Sergeeva
Appolinaria (Polina) Sergeeva
Appolinaria (Polina) Ivanova (Sergeeva)

Мой код:


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;
struct FullName {
    string Name;
    string Soname;};
class Person {
public:
    Person(const string& first_name, const string& last_name, int year) {
        YearNameSoname[year] = { first_name, last_name };
        birth_year = year;
        for (auto& i : YearNameSoname) {
            if (i.first < year) YearNameSoname.erase(i.first);}}
    void ChangeFirstName(int year, const string& first_name) {
        for (auto& i : YearNameSoname) {
            if (year > i.first) {
                if (YearNameSoname.count(year) == 0) YearNameSoname[year].Soname = "";
                YearNameSoname[year].Name = first_name;}
            break;}}
    void ChangeLastName(int year, const string& last_name) {
        for (auto& i : YearNameSoname) {
            if (year > i.first) {
                if (YearNameSoname.count(year) == 0) YearNameSoname[year].Name = "";
                YearNameSoname[year].Soname = last_name;}
            break;}}
    string GetFullName(int year) const {
        if ( year < birth_year) return "No person";
        else if (YearNameSoname.empty()) {
            return "Incognito";}
        else {
            for (const auto& i : YearNameSoname) {
                if (year < i.first) return "Incognito";
                break;}}
        string nm;
        string sn;
        for (const auto& i : YearNameSoname) {
            if (i.first <= year && !i.second.Soname.empty()) sn = i.second.Soname;
            if (i.first <= year && !i.second.Name.empty()) nm = i.second.Name;}
        if (nm.empty()) return sn + " with unknown first name";
        else if (sn.empty()) return nm + " with unknown last name";
        else return nm + " " + sn;}
    string GetFullNameWithHistory(int year) const {
        if ( year < birth_year) return "No person";
        else if (YearNameSoname.empty()) {
            return "Incognito";}
        else {
            for (const auto& i : YearNameSoname) {
                if (year < i.first) return "Incognito";
                break;}}
        string nm;
        string sn;
        vector<string> secondnames;
        vector<string> firstnames;
        for (const auto& i : YearNameSoname) {
            if (i.first <= year && !i.second.Soname.empty()) {
                if (i.second.Soname != sn && !sn.empty()) {
                    secondnames.push_back(sn);}
                sn = i.second.Soname;}
            if (i.first <= year && !i.second.Name.empty()) {
                if (i.second.Name != nm && !nm.empty()) {
                    firstnames.push_back(nm);}
                nm = i.second.Name;}}
        string secnames_string, firstnames_string;
        if (!secondnames.empty()) {
            secnames_string += " (" + secondnames[secondnames.size() - 1];
            if (secondnames.size() > 1) {
                for (int i = secondnames.size() - 1; i > 0; --i) {
                    secnames_string += ", " + secondnames[i - 1]; }}
            secnames_string += ")"; }
        if (!firstnames.empty()) {
            firstnames_string += " (" + firstnames[firstnames.size() - 1];
            if (firstnames.size() >1) {
                for (int i = firstnames.size() - 1; i > 0; --i) {
                    firstnames_string += ", " + firstnames[i - 1];}}
            firstnames_string += ")";}
        if (nm.empty()) return sn + secnames_string + " with unknown first name";
        else if (sn.empty()) return nm + firstnames_string + " with unknown last name";
        else return nm + firstnames_string + " " + sn + secnames_string;}
private:
    map<int, FullName> YearNameSoname;
    int birth_year = 0;};
 
 
int main() {
    Person person("Polina", "Sergeeva", 1960);
    for (int year : {1959, 1960}) {
        cout << person.GetFullNameWithHistory(year) << endl;
        cout << person.GetFullName(year) << endl;
    }
 
    person.ChangeFirstName(1965, "Appolinaria");
    person.ChangeLastName(1967, "Ivanova");
    person.ChangeFirstName(1802, "Test");
    person.ChangeLastName(1804, "test");
    for (int year : {1965, 1967, 2000, 0, -1, -2000}) {
        cout << person.GetFullNameWithHistory(year) << endl;
        cout << person.GetFullName(year) << endl;
    }
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.07.2021, 18:06
Ответы с готовыми решениями:

Создайте класс person. Создайте тип people, описывающий массив элементов типа person.
Создайте класс person. У него должны быть поля: name: string; sex: (&quot;муж&quot;, &quot;жен&quot;); height:...

Реализовать пользовательские типы: класс Person и класс String
1)Разработать класс Person, который содержит соответствующие члены для хранения: имени, ...

Базовый класс PERSON и производный класс STUDENT
Базовый класс: ЧЕЛОВЕК(PERSON) Имя(name) - string Возраст (age) - int Определить методы...

Производный класс Employee и базовый класс Person
Класс Person содержит информацию о человеке - firstName - lastName - age - address -...

0
07.07.2021, 18:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.07.2021, 18:06
Помогаю со студенческими работами здесь

Класс Person
Добрый день, форумчане. Решал задание из книги С.Прата, №2 из главы 10. Пусть имеется определение...

Класс Person
Здравствуйте! Задание: Разработать класс Person, который содержит соответствующие члены для...

класс person
Создать класс Person. Переменная типа Person должна вмещать такую информацию о некотором человеке:...

Класс Person
Здравствуйте есть одна задачка с вариантом её выполнения. Кто сможет помочь разобратьсяв этом...

Класс: создать класс "Person"
1,2 #include &lt;iostream&gt; #include &lt;string&gt; class Person { Person() : name(&quot;Alex&quot;),...

Класс с конструктором
Доброго времени суток,помогите,пожалуйста с кодом для ВУЗа. Задание:предметная область: больница....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru