Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для VadimuSSS
2 / 2 / 0
Регистрация: 23.06.2014
Сообщений: 167

Рандомные числа выдают один и тот же результат при их использовании в цикле

03.05.2016, 13:17. Показов 1429. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток. У меня есть метод, в котором используются рандомные числа, чтобы взять из вектора имен - случайное имя и из вектора фамилий - случайную фамилию. И последнее рандомное число помогает создать рандомный курс условного студента. После этого создается обьект класса студент, в который передаются сгенерированная информация о студенте. Проблема в том, что я делаю в цикле вызов метода "создать рандомного студента" и в итоге создаются несколько абсолютно одинаковых студентов. При дебаге и запуске кода построчно, все срабатывает нормально. Сначала я подумал, что проблема в том, что цикл происходит молниеносно и рандом работающий от времени выдает одинаковые числа. Так я подумал, когда скомпилировав код в очередной раз, создалось 5 одинаковых полностью студентов, но курс последнего - отличался. Но проверив в другом месте, создав в цикле несколько рандомных чисел, я понял, что дело в другом, т.к. числа в цикле всегда генерились действительно случайные. Помогите понять в чем дело и почему выдаются одинаковые числа в методе при быстрой компиляции.
Вот код:
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
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
class University
{
private:
    vector <Student*> univ;
public:
    //------------------------------------
    University()
    {
 
    }
    //------------------------------------
 
    Student* GenerateRandStundent() // метод возвращающий созданного случайного студента
    {
        srand(time(NULL));
        vector <string> names = { "John", "Haim", "Greg", "Jake", "Mike", "Joseph", "Henry", "Moishe", "Kevin" };
        vector <string> surnames = { "Graham", "Bynum", "Williams", "Koen", "Jordan", "Mayer", "Levi", "James", "Nahmann"};
        
        int n = rand() % names.size(); // рандомный индекс для вектора имен
        int s = rand() % surnames.size(); // рандомный индекс для вектора фамилий
        int c = 1 + rand() % 5;  // рандомный курс студента
 
        cout << n << endl << s << endl << c << endl << endl;
        Student* Temp = new Student(names[n], surnames[s], c);
        return Temp;
    }
 
    //------------------------------------
    void FillUniversity(int _quantity)
    {
        for (int i = 0; i < _quantity; i++)
            univ.push_back(GenerateRandStundent());    // принимает случайного студента и заносит его в вектор
    }
    //------------------------------------
    void PrintAllStuds()
    {
        for (int i = 0; i < univ.size(); i++)
        {
            cout << "#" << i+1 << endl;
            cout << univ[i]->GetName() << " ";
            cout << univ[i]->GetSecondName() << endl;
            cout << univ[i]->GetCourse() << " course" << endl << endl;
        }
    }
};
int main()
{
    University A;
 
    A.FillUnivesity(5);
    A.PrintAllStuds();
 
return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.05.2016, 13:17
Ответы с готовыми решениями:

Функции выдают один и тот-же результат
Пробовал по разному - самый больший результат , 200, а должно быть 255. Вообще не понимаю как это ещё и работает. Такое ощущение-что всё...

Один и тот же результат при использовании Calendar и GregorianCalendar
Всем привет, Сейчас читаю книгу, там в примерах доступ к методам класса GregorianCalendar описан таким образом: GregorianCalendar...

Потоки, обрабатывающие разные данные, выдают один и тот же результат
Пытаюсь создать несколько потоков используя CreateThread() , которые используют одну функцию, но с разными параметрами.На выходе у всех...

2
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
03.05.2016, 14:01
15-ю строку перенеси в начало main().
1
 Аватар для VadimuSSS
2 / 2 / 0
Регистрация: 23.06.2014
Сообщений: 167
03.05.2016, 14:19  [ТС]
nmcf, спасибо! помогло!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.05.2016, 14:19
Помогаю со студенческими работами здесь

При вычислении отрицательных значении выдают не совсем тот результат,который нужен был
Здравствуйте,написал программу которая вычисляет значение по x и y. Так вот проблема в чем,она отнимает положительные значения правильно,а...

Выводит один и тот же результат при разных параметрах
Техническое задание: Даны N целых чисел x1, x2,…,xN. Расставить между ними знак «+» и «-» так, чтобы значение получившегося выражения...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru