class SHOOTER : public Person
{
...
//метод выстрел
bool successfully_shot() const
{
return sucsess_probability(probability());
}
...
private:
//метод стрельба
virtual double probability() const = 0;
bool sucsess_probability(double probability) const
{
//генератор случайных(вихрь мерсена)
static std::mt19937 gen(unsigned(time(0)));
//Формируем распределение целых чисел с одинаковыми интервалами и вероятностью в каждом интервале
std::discrete_distribution<>distr({ 1 - probability, probability });
return distr(gen);
}
};
class VETERAN : public SHOOTER
{
public:
...
virtual double probability() const override
{
return 0.9 - 0.01*get_age();
}
...
};
for (auto shooter_ptr : shooter_ptrs)//проходимся по всем 1 раз
{
std::cout << "# " << ++shots_count << ":" << std::endl;
shooter_ptr->print_data();
auto res = shooter_ptr->successfully_shot();
std::cout << "result\t\t: " << res << std::endl << std::endl;
if (res)
{
break;
}
}
virtual void print_data() const override
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.