С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 23

Использование функции rand()

25.10.2015, 16:20. Показов 3042. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, при использовании библиотечной функции rand() (которая должна генерировать случайное число, как я понимаю) выбирается постоянно одно число - 41.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Программа "Угадай магическое число"
 
#include <iostream>
#include <cstdlib>
using namespace std;
 
int main()
{
 int magic; // Магическое число
 int guess; // Вариант пользователя
 magic = rand(); // Получаем случайное число.
 cout << "Vvedite svoy variant magicheskogo chisla: ";
  cin >> guess;
 if(guess == magic) cout << "** Pravelbno **";
 else cout << "...Ochenb zhalb." << " " << magic;
 
 return 0;
}
Кликните здесь для просмотра всего текста

В чем дело и как это исправить?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.10.2015, 16:20
Ответы с готовыми решениями:

Использование функции rand()
Всем привет.Попалась мне еще давно такая задача : #include&lt;iostream&gt; using namespace std; int main(){ int n; for(int...

Использование функции rand()
Здравствуйте! У меня проблемка. Мне нужно чтобы функция rand() выдавала значения от как это реализовать?

Использование функции rand()
По этому коду выдаётся только число 41,хотя должно выдаваться рандомное вроде как. Помогите, если знает кто в чём дело #include...

20
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.10.2015, 16:26
srand() в самом начале.
1
0 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 23
25.10.2015, 16:40  [ТС]
nmcf, не получилось, можно по подробнее?
0
Dimension
595 / 463 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
25.10.2015, 16:43
C++
1
srand(time(0));
0
0 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 23
25.10.2015, 16:55  [ТС]
Dimension, Если ставлю перед main()
C++
1
2
3
4
5
6
#include <iostream>
#include <cstdlib>
using namespace std;
 
srand(time(0));
int main()
Кликните здесь для просмотра всего текста
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.10.2015, 17:07
Да почему перед? В самом начале main().
0
0 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 23
25.10.2015, 17:18  [ТС]
nmcf, Если ставлю после тоже не получается
C++
1
2
3
4
int main()
{
 srand(time(0));
 int magic; // Магическое число
Кликните здесь для просмотра всего текста
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.10.2015, 17:19
Там же всё объяснено: <ctime> подключи.
0
0 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 23
25.10.2015, 17:32  [ТС]
nmcf, Я понял что это связано с time, но что с этим делать не знаю. Занимаюсь по "C++: базовый курс Herbert Schildt". В книге был приведен исходный код программы который я продемонстрировал в начале, не о каких srand() и time речи не идет.
Если бы я пользовался VS, srand() не понадобилась бы?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.10.2015, 18:37
Везде он нужен для инициализации генератора псевдослучайных чисел.
0
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
26.10.2015, 01:11
Точнее так Rand() умышленно генерирует одинаковую последовательность для отладке а когда добавляешь srand и привязываешь его к time то исходной точкой генерации выступает время, текущее! Есть тонкий момент что для генерации подряд нескольких значений надо делать паузу хотя-бы в секунду, ну или использовать более совершенный генератор!

Добавлено через 3 минуты
Я лично еще srand пускал в цикле с прибавление туда значения I из цикла но меня тут помидорами закидали, хотя на распределения не как не повлияло (проверял опытным путем)
2
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
26.10.2015, 02:53
умышленно генерирует

Не по теме:

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

0
26.10.2015, 13:43

Не по теме:

gazlan, При повторном запуске программы, печатаются те же самые числа. Суть в том, что функция rand() один раз генерирует случайные числа, а при последующих запусках программы всего лишь отображает сгенерированные первый раз числа. Такая особенность функции rand() нужна для того, чтобы можно было правильно отладить разрабатываемую программу Действительно мануалы надо читать, извиняюсь если выразился не так, но суть была именно эта источник

0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
26.10.2015, 14:03
Mesteriis, это чушь. Где эти сгенерированные числа хранятся в перерывах между запусками? Просто генерирующий алгоритм по умолчанию инициализируется одним и тем же значением.
1
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
26.10.2015, 14:34
BeetleGold, так или так.

Про новый рэндом подробности в великолепной статье уважаемого MrGluck. Ну и справочная инфа.
1
0 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 23
26.10.2015, 17:39  [ТС]
Всем спасибо, разобрался.
0
0 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 23
01.11.2015, 18:02  [ТС]
Возвращаюсь к этой теме, потому что получилось получать рандомные значения при помощи функции rand(), не используя srand() и таймер при котором число изменялось с течением времени и его нельзя было зафиксировать.

Вот код программы в которой используется только rand() и новое значение можно получить в любой момент.
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
#include <iostream>
#include <cstdlib>
using namespace std;
void play(int m);
int main()
{
 int option;
 int magic;
 magic = rand();
 do {
  cout << "1. Получить новое число. \n";
  cout << "2. Играть\n";
  cout << "3. Выйти из игры\n";
  do {
   cout << "Введите свой вариант: ";
    cin >> option;
  }while (option<1 || option>3);
  switch (option) {
   case 1:
    magic = rand();
    break;
   case 2:
    play (magic);
    break;
   case 3:
    cout << "До свидания !\n";
    break;
  }
 }while(option != 3);
 return 0;
}
 
void play(int m)
{
 int t, x;
 for(t=1; t<101; t++) {
  cout << t << " Угадай число: ";
   cin >> x;
  if(x==m){
   cout << "** Правильно **\n";
   return;
  }
  else
   if(x<m) cout << "...Маловато.\n";
   else cout << "...Многовато.\n";
 }
 cout << "Вы использовали все попытки." << "Попробуйте снова.\n";
}
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2015, 19:57
Лучший ответ Сообщение было отмечено BeetleGold как решение

Решение

Каждый вызов rand() в пределах одного сеанса будет давать разные числа, но сама последовательность будет одна и та же.
0
0 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 23
01.11.2015, 20:23  [ТС]
nmcf, Согласен, последовательность будет одной и той же. Если рассуждать в этом направлении то при использовании time последовательность тоже будет одной и той же (от 0 и до определенного момента времени). Вот только в этом случае значение не получится сделать фиксированным (ведь оно изменяется с течением времени).
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2015, 20:32
Если тебе нужны одинаковые последовательности, зачем тему создал?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.11.2015, 20:32
Помогаю со студенческими работами здесь

Использование rand()
Уже сам решил) а как закрыть незнаю

Альтернатива функции rand()?
Доброго времени суток. Подскажите новичку, альтернативу функции rand(). Просто у меня есть 10 потоков у которых одновременно используется...

Не работает rand() в функции
Надо написать программу которая случайно задает количество светлячков, время их жизни и яркость. И если время жизни == 1, то обновлять...

Алгоритм функции rand()
Доброго времени суток! подскажите если информация об описании работы алгоритма функции rand(), если да, кинте пожалуйста ссылочку

Особенности использования функции rand() в С++
Не пойму почему Visual Studio ругается когда я создал класс и описывая его хочу использовать функцию rand() подключая при этом и stdlib.h и...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru