- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
//Попробуйте программно смоделировать разговор людей.Всего есть 10 людей.Каждый человек имеет имя(строку) и возраст(число).
//Возраст каждого человека генерируется рандомно из диапазона от 20 до 40, а имена состоят из следующего списка:
//Александр, Андрей, Анастасия, Ирина, Наталья, Павел, Роман, Светлана, Сергей, Татьяна.
//Любой человек способен выполнять два действия :
//-здороваться с другим человеком;
//-рассказывать о себе.
//Люди делятся на 3 типа(разные классы) :
// Тип №1 : Формалисты.Здороваются со всеми следующим образом : Здравствуйте, <имя>!, где <имя> — это имя человека, с которым он здоровается.
// Тип №2 : Неформалы.Со всеми здороваются : Привет, <имя>!.
// Тип №3 : Реалисты.Если возраст собеседника меньше / равен или не больше, чем на 5 лет, то здороваются следующим образом : Привет, <имя>!, в противном случае — Здравствуйте, <имя>!.
// В программной реализации приветствие должно быть реализовано как полиморфный метод, принимающий человека в качестве параметра и возвращающий строку.
// Рассказ о человеке является строкой формата "Меня зовут Вася, мой возраст 21 лет и я неформал" (вместо Вася используется имя любого другого человека,
// вместо 21 возраст этого человека, вместо неформал может быть формалист, либо реалист).Как видите у людей с грамматикой не всё в порядке,
// и они говорят лет после любого числа — непорядок, это нужно обязательно исправить.
// Программа должна показать информацию обо всех людях.Затем все люди должны поздороваться друг с другом в следующем порядке :
// первый здоровается со вторым, затем второй с первым, а затем первый с третьим, третий с первым и т.д.Например :
// Петя : Привет, Вася!
// Вася : Здравствуйте, Петя!
// Петя : Привет, Женя!
// Женя : Привет, Петя!
unique_ptr<Person>& createPerson()
{
switch (getRandomNumber(0, 2))
{
case 0:
{
unique_ptr<Person> person = make_unique<Formalist>(RANDNAME_0_10, RANDAGE_20_40);
return person;
}
case 1:
{
unique_ptr<Person> person = make_unique<Neformal>(RANDNAME_0_10, RANDAGE_20_40);
return person;
}
case 2:
{
unique_ptr<Person> person = make_unique<Realist>(RANDNAME_0_10, RANDAGE_20_40);
return person;
}
default:
{
unique_ptr<Person> person = nullptr;
return person;
}
};
}
void createGroup(vector<unique_ptr<Person>>& group, int8_t size)
{
unique_ptr<Person> tempPerson = nullptr;
for (int i = 0; i < size; ++i)
{
tempPerson = std::move(createPerson());
group.push_back(tempPerson);
}
}
Не могу понять как инициализировать массив в createGroup() через unique_pointers. Нужно ли было изначально возвращать shared pointers из createPerson()? Или использовать перемещения с unique_pointers? И куда по правильному впихивать using namespace std; если не в global scope? Спасибо заранее
Полный код
https://repl.it/@radionnazmiev/Ravesli#Ravesli_12_H/main.cpp
gost 07.12.2020 02:34 # +5
> Не могу понять как инициализировать массив в createGroup() через unique_pointers.
«group.emplace_back(createPerson())» или «group.push_back(createPerson())», если из createPerson() возвращать не ссылку (что вообще-то UB). В обоих случаях (с C++11) в итоге вызовется конструктор перемещения.
> И куда по правильному впихивать using namespace std; если не в global scope?
Никуда.
1024-- 07.12.2020 04:48 # +4
> #define RANDNAME_0_10 (string_view)(Person::nameList[getRandomNumber(0, NAMELIST_SIZE - 1)])
Не очень хорошо.
1. Макросы надо откладывать на случай, когда с помощью функций не получается решить задачу.
2. У каста приоритет меньше, чем у []. Если случайно взять RANDNAME_0_10[0], это будет штрингвью от нулевого символа.
> for (int i = 0; i < size; ++i)
Есть более удобный for (auto& x: array) для обхода.
А далее, если по лестнице абстракций вверх, есть std::for_each для обхода и std::generate для изначальной генерации массива.
Если в group уже есть size элементов, будет справедливо std::generate(group.begin(), group.end(), createPerson);
> age % 10 == 1
Не совсем. В коде должно быть не только % 10, но и % 100.
1, 21, 31, ... питух, 2, 22, 32, ..., 4, 23 питуха, но 11, 12, ... 19 питухов
oaoaoammm 07.12.2020 05:25 # +1
Работа с числительными это тот ещё багор.
Хотя тут, кажется, всё довольно просто:
https://znanija.com/task/17626254
1024-- 07.12.2020 05:30 # +2
Дискриминация тех, кому за 100 110.
> system("chcp 1251 > nul"); //для кириллицы
Какой багор )))
gost 07.12.2020 05:33 # +1
bormand 07.12.2020 08:23 # +2
Меня зовут bormand, мой возраст 15 лет и я девочка-волшебница!
А setlocale(LC_ALL, "") под виндой не катит чтобы на платформу не завязываться?
TOPT 07.12.2020 08:53 # +5
gost 07.12.2020 09:39 # +2
https://i.imgur.com/3S7INjS.jpg
Не знаю, все посредственные лабы требуют «using namespace std» и «setlocale(LC_ALL, "RUS")».
bormand 07.12.2020 09:41 # +1
MAKAKA 07.12.2020 16:36 # 0
cykablyad 07.12.2020 16:38 # +2
MAKAKA 07.12.2020 16:40 # 0
cykablyad 07.12.2020 16:41 # 0
j123123 07.12.2020 09:44 # +2
Что за ебанутые задания? Что значит "принимающий человека"? Как он его принимает? Принимает структуру в которой прописан возраст, формал, неформал или реалист он? Хотя нет, там же написано
> Люди делятся на 3 типа(разные классы) :
Т.е. отдельный класс для формала, неформала, формалиста? НА-ХУ-Я? Почему не сделать структуру, где есть имя, возраст и просто какой-то там блядь енум, в котором описано, формал неформал или формалист он?
Это надо чтоб оправдать необходимость использования "void *" "полиморфных методов"? Т.е. мы на ровном месте создаем какую-то питушню1, и потом используем питушню2 чтоб ее решить. Охуенное задание.
Может там еще будет задание в духе "реализуйте такую-то поебень используя такой-то говнопаттерн", а на деле (если реально надо будет запилить такую питушню в реальном не учебном примере) этот говнопаттерн нахуй не нужен, и всё делается проще?
oaoaoammm 07.12.2020 10:14 # +1
Вот будет кра-со-та.
bormand 07.12.2020 10:18 # +2
bormand 07.12.2020 10:16 # +3
> как он его принимает
Эм, параметром? chel1.greet(chel2).
j123123 07.12.2020 10:38 # 0
Ну вот в задании написано:
> Затем все люди должны поздороваться друг с другом в следующем порядке : первый здоровается со вторым, затем второй с первым, а затем первый с третьим, третий с первым и т.д.
т.е. надо
chel1.greet(chel2); chel2.greet(chel1);
chel1.greet(chel3); chel3.greet(chel1);
chel1.greet(chel4); chel4.greet(chel1);
...
chel2.greet(chel3); chel3.greet(chel2);
chel2.greet(chel4); chel4.greet(chel2);
chel2.greet(chel5); chel5.greet(chel2);
...
и так чтоб все друг с другом перездоровались, и чтоб эта хуйня в цикле проматывалась, не руками же всю эту питушню анроллить?
j123123 07.12.2020 10:42 # 0
А эта вот питушня с тремя разными классами. Зачем? Зачем?
oaoaoammm 07.12.2020 10:49 # 0
Не совсем так, в условии они друг с другом здороваются (т.е. отвечают на приветствия). Скорее со всеми, кроме себя самого, при этом задача так же решается двумя вложенными циклами.
j123123 07.12.2020 10:55 # 0
Ну так я это и имел в виду. По сути такая хуйня
oaoaoammm 07.12.2020 11:03 # +1
С полиморфизмом получится почти то же самое:
Тут уже кому что больше нравится. Лично я за «ООП».
defecate-plusplus 07.12.2020 11:05 # 0
bormand 07.12.2020 11:08 # +2
defecate-plusplus 07.12.2020 11:13 # +3
j123123 07.12.2020 11:23 # +1
bormand 07.12.2020 11:33 # 0
Можно в std::any засунуть.
gost 07.12.2020 10:55 # +2
Потому что это учебная задача, ёпта! Ты бы ещё до младшеклассников доебался: хули они в столбик умножают, когда эту питушню можно реализовать тупо на калькуляторе?
j123123 07.12.2020 10:57 # +1
Почему не показывать в учебных задачах более реальные примеры, где бы от этой питушни был какой-то заметный профит, а не ненужное усложнение?
defecate-plusplus 07.12.2020 11:06 # +5
gost 07.12.2020 15:51 # +2
Приведи реальный пример задачи, которая:
1) Решается с использованием самых базовых ООП-парадигм (объекты, поля, методы, возможно, самый-самый простой полиморфизм), чтобы практически ничего не знающий про ООП школьник/студент не охуел;
2) Достаточно проста, чтобы среднестатистический школьник/студент мог её решить за пару-другую часов (из которых бо́льшую часть должны занимать отладка и борьба с языком);
3) Достаточно сложна, чтобы демонстрировать реальный профит от ООП (например, требовать для своего решения большой и запутанной иерархии различных сущностей с пересекающимися свойствами).
cykablyad 07.12.2020 15:54 # +1
bormand 07.12.2020 15:55 # +2
cykablyad 07.12.2020 15:56 # +3
cykablyad 07.12.2020 16:00 # +2
CHayT 07.12.2020 16:41 # +4
MAKAKA 07.12.2020 16:33 # +2
jojaxon 07.12.2020 17:09 # +1
cykablyad 07.12.2020 12:51 # +4
принимающий пиздюли в качестве аргумента и возвращающий дом
CHayT 07.12.2020 15:18 # +4
cykablyad 07.12.2020 15:55 # 0
1024-- 08.12.2020 08:53 # 0
gost 08.12.2020 09:18 # +2
Доброе утро, Can't modify constant item in postdecrement (--) at main.pl line 1, near "1024--".
1024-- 08.12.2020 10:01 # 0
KAPA6AXCKuu_nemyx 11.12.2020 00:09 # +2
MAKAKA 08.12.2020 15:39 # 0
cykablyad 08.12.2020 09:27 # 0
1024-- 08.12.2020 10:02 # 0
Xepyc_DJIuHyc 08.12.2020 12:25 # 0
guest6 08.11.2021 14:14 # 0
bormand 07.12.2020 16:56 # +4
> и возвращающий дом
Парсер html?
MAKAKA 07.12.2020 17:00 # +1
OCETuHCKuu_nemyx 11.12.2020 16:05 # 0
guest3 11.12.2020 20:35 # 0
Кстати, объяснить как она работает, не мог ни один преподдаватель. А в книгах такая лажа, что впору ими подтираться. МБ писмьо керри написать? А то так и умру несведущим.