Как создать метод, чтобы он задавал объекту случайные свойства? Есть программа, в которой есть класс, в котором есть метод, который должен устанавливать объекту класса случайные параметры, но при применении этого метода к двум разным объектам класса результат получается один и тот же. Как изменить программу так, чтобы при каждом применении этого метода к объекту получался разный результат?spoiler#include
#include
using namespace std;
enum Level {easy=1, hard, medium};
class alpha
{
private:
Level level;
int number;
public:
alpha() : level(easy), number(5)
{}
void gen()
{
srand(time(NULL));
number = rand() % 10 + 1;
int levelgen = rand() % 3 + 1;
switch (levelgen)
{
case 1:
level = easy;
break;
case 2:
level = medium;
case 3:
level = hard;
default:
break;
}
}
void disp()
{
if (level == hard)
cout << "level - ???? " << endl;
else
{
cout << "level = ";
switch (level)
{
case easy:
cout << "easy" << endl;
break;
case medium:
cout << "medium" << endl;
break;
default:
break;
}
}
cout << "number = " << number << endl;
}
};
int main()
{
srand(time(NULL));
alpha obj1;
obj1.gen();
obj1.disp();
alpha obj2;
obj2.gen();
obj1.disp();
system("pause");
}

21 Авг 2019 в 07:01
165 +1
0
Ответы
1

Проблема в том, что каждый раз при вызове метода gen(), вы создаете новый seed для генератора случайных чисел srand(). Это приводит к тому, что при последующих вызовах метода gen() результаты будут одинаковыми.

Для того чтобы исправить это, вы должны установить seed для генератора случайных чисел только один раз в начале программы. Это можно сделать в функции main(). Вот обновленный код:

#include <iostream>
#include <ctime>
using namespace std;
enum Level {easy = 1, hard, medium};
class alpha
{
private:
Level level;
int number;
public:
alpha() : level(easy), number(5)
{}
void gen()
{
number = rand() % 10 + 1;
int levelgen = rand() % 3 + 1;
switch (levelgen)
{
case 1:
level = easy;
break;
case 2:
level = medium;
break;
case 3:
level = hard;
break;
default:
break;
}
}
void disp()
{
if (level == hard)
cout << "level - hard" << endl;
else
{
cout << "level = ";
switch (level)
{
case easy:
cout << "easy" << endl;
break;
case medium:
cout << "medium" << endl;
break;
default:
break;
}
}
cout << "number = " << number << endl;
}
};
int main()
{
srand(time(NULL));
alpha obj1;
obj1.gen();
obj1.disp();
alpha obj2;
obj2.gen();
obj2.disp();
system("pause");
}

Теперь seed устанавливается только один раз в начале программы, и при последующих вызовах метода gen() результаты будут разными для каждого объекта.

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 541 автору
Первые отклики появятся уже в течение 10 минут
Прямой эфир