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

Не рандомный rand()

22.10.2018, 16:17. Показов 1387. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for (int i = 0; i < 3; i++)
        {
            srand(time(0));
            InitUnit(troops[i]);
        }
        do
        {
            for (int i = 0; i < 3; i++)
            {
                srand(time(0));
                strcpy(troops[i].name, botNames[rand() % 20]);
            }
        } while (troops[0].name == troops[2].name && troops[0].name == troops[1].name && troops[1].name == troops[2].name);
Думаю, что из-за того, что я использую rand без "перерывов", то выдает всегда одинаковое значение. Как избавиться от этого?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.10.2018, 16:17
Ответы с готовыми решениями:

рандомный массив
требутеся описать функцию случайной генерации элементов массива. Описатть ф-цию, которая в новом...

Рандом не рандомный
Привет! Имею класс: public class Block { public Block(int X, int Y) { ...

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

Рандомный вес
Есть минимальный и максимальный вес в граммах. Например min = 100, max = 7500 Нужен такой...

15
1468 / 1009 / 456
Регистрация: 30.10.2017
Сообщений: 2,800
22.10.2018, 16:23 2
Лучший ответ Сообщение было отмечено Kuzia domovenok как решение

Решение

10я строка (и третяя) должна выполняться только один раз - в начале программы.
1
0 / 0 / 0
Регистрация: 16.08.2018
Сообщений: 38
22.10.2018, 16:37  [ТС] 3
Цитата Сообщение от QuakerRUS Посмотреть сообщение
10я строка (и третяя) должна выполняться только один раз - в начале программы.
Зделал:
*имена разные
*типы одинаковые
0
1468 / 1009 / 456
Регистрация: 30.10.2017
Сообщений: 2,800
22.10.2018, 16:39 4
Цитата Сообщение от QWwy Посмотреть сообщение
*имена разные
*
типы одинаковые
Э-э? Какие имена? Какие типы? Это строка, которая инициализирует генератор случайных чисел. Если вы ее инициализируете значением часов (в секундах) повторно в эту же секунду, то и получите снова то же случайное число при вызове rand(). Поэтому эту строку надо вызывать один раз перед первым вызовом rand(), обычно в начале программы.
0
0 / 0 / 0
Регистрация: 16.08.2018
Сообщений: 38
22.10.2018, 16:42  [ТС] 5
попытался так -
C++
1
2
3
4
5
6
do
        {
             for (int i = 0; i < 3; i++)
                 InitUnit(troops[i]);
 
        } while (troops[0].type == troops[2].type && troops[0].type == troops[1].type && troops[1].type == troops[2].type);
- не помогло - длинный цикл
0
1468 / 1009 / 456
Регистрация: 30.10.2017
Сообщений: 2,800
22.10.2018, 16:45 6
QWwy, а куда "съели" строки 8-12?
0
0 / 0 / 0
Регистрация: 16.08.2018
Сообщений: 38
22.10.2018, 16:47  [ТС] 7
Лови весь код (может поймешь)
Вложения
Тип файла: rar Exam.rar (8.8 Кб, 4 просмотров)
0
1468 / 1009 / 456
Регистрация: 30.10.2017
Сообщений: 2,800
22.10.2018, 16:48 8
QWwy, просто верните как было в первом сообщении, только без строк 3 и 10, должно работать.
0
0 / 0 / 0
Регистрация: 16.08.2018
Сообщений: 38
22.10.2018, 16:51  [ТС] 9
Цитата Сообщение от QuakerRUS Посмотреть сообщение
QWwy, просто верните как было в первом сообщении, только без строк 3 и 10, должно работать.
Попробовал -> имена (trops[].name) - разные, а (типы (trops[].type) - одинаковые
0
1468 / 1009 / 456
Регистрация: 30.10.2017
Сообщений: 2,800
22.10.2018, 16:53 10
QWwy, наверное что то лишнее удалили. Показывайте как выглядит этот фрагмент сейчас.
0
0 / 0 / 0
Регистрация: 16.08.2018
Сообщений: 38
22.10.2018, 16:58  [ТС] 11
C++
1
2
3
4
5
6
7
8
9
10
11
12
do
        {
             for (int i = 0; i < 3; i++)
                 InitUnit(troops[i]);
 
        } while (troops[0].type == troops[2].type && troops[0].type == troops[1].type && troops[1].type == troops[2].type);
        do
        {
            for (int i = 0; i < 3; i++)
                strcpy(troops[i].name, botNames[rand() % 20]);
 
        } while (troops[0].name == troops[2].name && troops[0].name == troops[1].name && troops[1].name == troops[2].name);
Функция InitUnit:
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
switch (1 + rand() % 3)
    {
    case 1:
        unit.type = Swordsman;
        unit.HP = 100;
        unit.damage = 35;
        unit.armor = 5;
        unit.miss = 0;
        unit.critical = 12;
    case 2:
        unit.type = Archer;
        unit.HP = 60;
        unit.damage = 16;
        unit.armor = 2;
        unit.miss = 40;
        unit.critical = 24;
    case 3:
        unit.type = Wizard;
        unit.HP = 40;
        unit.damage = 35;
        unit.armor = 0;
        unit.miss = 15;
        unit.critical = 36;
    }
0
1468 / 1009 / 456
Регистрация: 30.10.2017
Сообщений: 2,800
22.10.2018, 17:02 12
QWwy, строк 1, 2, 6 у вас не было, может в этом проблема? В чем вообще сейчас проблема? Программа не компилируется или выдает неверный результат?
0
0 / 0 / 0
Регистрация: 16.08.2018
Сообщений: 38
22.10.2018, 17:07  [ТС] 13
1)Да, не было. Я решил попробовать может так сработает
2)забрал 1,2,6 работает, но troops []. name все одинаковые
а надо, чтобы были разные

Добавлено через 1 минуту
я в 16:47 сбросил полностью весь код (VS) (архив)
0
1468 / 1009 / 456
Регистрация: 30.10.2017
Сообщений: 2,800
22.10.2018, 17:10 14
Цитата Сообщение от QWwy Посмотреть сообщение
я в 16:47 скинув полностью весь код (VS) (архив)
В котором в этом месте (с первого поста темы) был неверный вариант.

С таймером то помогло? Если да, то вопрос решен. Дальше меняйте как вам нравится.

Цитата Сообщение от QWwy Посмотреть сообщение
troops []. name все одинаковые
Проверяйте алгоритм, что то работает не так как вы задумали видимо.
0
0 / 0 / 0
Регистрация: 16.08.2018
Сообщений: 38
22.10.2018, 17:32  [ТС] 15
Вся проблема в InitUnit там я в case-ах не поставил break ...
0
Вездепух
Эксперт CЭксперт С++
12769 / 6651 / 1791
Регистрация: 18.10.2014
Сообщений: 16,816
22.10.2018, 17:43 16
Цитата Сообщение от QWwy Посмотреть сообщение
я использую rand без "перерывов", то выдает всегда одинаковое значение. Как избавиться от этого?
Распространенные ошибки
0
22.10.2018, 17:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.10.2018, 17:43
Помогаю со студенческими работами здесь

Рандомный стринг
Есть ли стандартные методы для создания рандомной строки? Или надо по своему писать? Добавлено...

Рандомный алгоритм
Помогите пожалуйста. Нужно создать такой алгоритм, что бы он ранодомно в промежутке(Матрица) от...

Рандомный decimal
Суть такова надо на php сгенерировать demical число между 2 числами! Т. е. 46.390294 &lt; x &lt; ...

Рандомный выбор
#include&lt;iostream&gt; #include&lt;conio.h&gt; using namespace std; void questions(int t) { char q1 =...


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

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

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