C/C++

Нужна помощь по шаблонам на C++

1. Создать класс Butterfly у которого есть поля:
Строка “стадия жизни” (гусеница, куколка или бабочка);
Число “дни жизни”;


В нашей задаче следующие условия для перехода на следующую стадию жизни объекта:
гусеница = от 0 до 7 дней
куколка = от 8 до 15 дней
бабочка = от 16 до 23 дней

Если бабочка прожила 24 дня она становится гусеницей 0 дней.



Необходимо создать метод в классе, который добавляет единицу к текущему дню этой бабочки и переводит её на следующую стадию жизни если условия соблюдены.

Например если была гусеница, которая живет уже 7 дней, то эта функция превратит её в куколку, которая живет 8 дней.
Или если была куколка, которая живет 13 дней, эта функция изменит только её дни жизни.



Задача: Создать вектор указателей на объекты класса Butterfly. Добавить 10 указателей на объекты и с помощью цикла вызвать этот метод для каждого объекта. Вывести на экран исходный и получившийся вектор



2. Модифицируйте программу из домашнего задания по ГПСЧ:
“С помощью функций rand() и srand() создайте ГПСЧ, который выводит количество очков, полученных при бросании двух игральных кубиков. Не забудьте учесть теорию вероятностей. Выведите не менее 100 исходов”

#include <ctime>
#include <iostream>
using namespace std;

int main() {
srand(time(0));
int sum;
for (int i = 0; i < 1000; i++) {
sum = rand() % 6 + 1 + rand() % 6 + 1;
cout << sum << " ";
if ((i + 1) % 10 == 0) cout << endl;
}
}



Необходимо создать контейнер map который хранит в себе ключ “сумма очков на кубиках”, а в значении хранит количество выпадений данной суммы очков. Вывести на экран ключ - значение после генерации 1000 исходов.
1)
.

#include <iostream>
#include <string>
#include <vector>

class Butterfly
{
public:
std::string stage_name;
int life_days;

void changeStage()
{
if (stage_name == "гусеница" && life_days >= 7)
{
stage_name = "куколка";
life_days = 0;
}
else if (stage_name == "куколка" && life_days >= 15)
{
stage_name = "бабочка";
life_days = 0;
}
else if (stage_name == "бабочка" && life_days >= 23)
{
stage_name = "гусеница";
life_days = 0;
}
else
{
life_days += 1;
}
}
};

int main()
{
std::vector<Butterfly*> butterflies;

for (int i = 0; i < 10; i++)
{
butterflies.push_back(new Butterfly);
}

// Инициализация вектора
for (int i = 0; i < 10; i++)
{
butterflies[i]->stage_name = "гусеница";
butterflies[i]->life_days = 0;
}

std::cout << "Исходный вектор:" << std::endl;
for (int i = 0; i < 10; i++)
{
std::cout << butterflies[i]->stage_name << " " << butterflies[i]->life_days << std::endl;
}

// С помощью цикла вызываем метод changeStage()
for (int i = 0; i < 10; i++)
{
butterflies[i]->changeStage();
}

std::cout << "\nПолучившийся вектор:" << std::endl;
for (int i = 0; i < 10; i++)
{
std::cout << butterflies[i]->stage_name << " " << butterflies[i]->life_days << std::endl;
}

return 0;
}
2)
#include <ctime>
#include <iostream>
#include <map>
using namespace std;

int main() {
srand(time(0));
int sum;
map<int, int> m;
for (int i = 0; i < 1000; i++) {
sum = rand() % 6 + 1 + rand() % 6 + 1;
cout << sum << " ";
if ((i + 1) % 10 == 0) {
cout << endl;
}
if (m.find(sum) != m.end()) {
m[sum]++;
}
else {
m[sum] = 1;
}
}
cout << "Результаты бросания двух кубиков:" << endl;
for (auto n : m) {
cout << "Сумма очков: " << n.first << ", Количество исходов: " << n.second << endl;
}
return 0;
}
Владимир Хаджинов
Владимир Хаджинов
1 209
Лучший ответ