Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
18 / 18 / 4
Регистрация: 05.05.2013
Сообщений: 88

rand() cpp

12.10.2013, 16:55. Показов 1403. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1. Тут недавно мне пришлось вспомнить как работать с rand() в С++. Ну сложности не было, конечно, нужно было случайное число на неком промежутке [min-max]. Я сразу написал вот такую формулу:
max - rand()%(max-min)
А потом погуглил, думал может будет чето по меньше, и заметил, точнее совсем не заметил такой формулы, и подумал что она "неправильная", хоть я ее и потестил: выдавала она корректные числа.

Вы думаете, можно такую формулу юзать, или она дольше работает или неправильно (что врядли, но возможно(= ).

2. И еще момент. Мне нужно было получать этот рандом в цикле, соответственно простой
C++
1
srand(time(NULL))
не катит (т.к итерации бешено быстрые) и я решил проблему вот так:
C++
1
srand(time(NULL)*i)
Работает на ура, но я думаю может есть другой рабочий вариант, получше этого, или так можно спокойно делать? =)
Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.10.2013, 16:55
Ответы с готовыми решениями:

Ошибка: [C++ Error] mk.cpp(20): E2268 Call to undefined function 'rand'
#include <stdio.h> #include <math.h> #include <time.h> void main() { double x, y, s, p,V;

Есть три файла. файл main.cpp и Source.cpp знают только Header.h, так как он подключен. как же подключается Source.cpp
main.cpp #include <iostream> #include"Header.h" using namespace std; int main() { A ob; ob.f(); return...

С помощью командной строки >namberstr f1.cpp Определить число строк в файле с именем f1.cpp
С помощью командной строки >namberstr f1.cpp Определить число строк в файле с именем f1.cpp

6
БНТУ ФИТР
 Аватар для kventin_zhuk
215 / 155 / 42
Регистрация: 26.12.2012
Сообщений: 382
12.10.2013, 16:58
gund, по логике вещей 0 можно и так

C++
1
srand(i);
или какое

C++
1
srand(time(NULL) * time(NULL));
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
12.10.2013, 17:00
От min до max включительно.
C++
1
rand() % (max - min + 1) + min
Цитата Сообщение от gund Посмотреть сообщение
но я думаю может есть другой рабочий вариант, получше этого
Есть. Не писать srand(time(NULL)) в цикле.
1
18 / 18 / 4
Регистрация: 05.05.2013
Сообщений: 88
12.10.2013, 18:36  [ТС]
kventin_zhuk, srand(i) можно, но тогда получаются одни и те же числа при каждом запуске программы (ведь i всегда от n до m), а srand(time(NULL) * time(NULL)) лишено смысла так как в один момент они одинаковы соответственно это тоже что и srand(time(NULL)) - то есть не подходит.

castaway, эту формулу я видел, но она длинней чем моя. =)
Цитата Сообщение от castaway Посмотреть сообщение
Не писать srand(time(NULL)) в цикле.
Если этого не делать получится что то типа
243
243
243
243
243
Сброс по любому нужен в цикле.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
12.10.2013, 18:38
Цитата Сообщение от gund Посмотреть сообщение
Если этого не делать получится что то типа
С какой стати? Приведи пример где так будет выдавать.
0
18 / 18 / 4
Регистрация: 05.05.2013
Сообщений: 88
12.10.2013, 18:59  [ТС]
castaway, действительно, работает =)
Но почему так происходит, ведь тогда смысла в использовании srand() вообще нет =)
Но спасибо, теперь будет удобней)
0
 Аватар для Гром
212 / 131 / 28
Регистрация: 20.03.2009
Сообщений: 1,123
Записей в блоге: 16
12.10.2013, 20:26
Смысл использования srand в том, что если его не использовать вообще, то каждый раз будут одни и те же последовательности псевдослучайных чисел. Если вызвать его один раз перед генерацией в виде srand(time(0)), то начальное значение последовательности всегда будет разным (т.к. время не будет одинаковым в двух разных вызовах программы) и сами последовательности, соответственно, тоже.

Если вызывать его каждый раз в цикле, то в тех итерациях, когда время будет "одинаковым" (система еще не обновила текущее время), вас будет каждый раз отбрасывать к первому генерируемому значению в последовательности, а поскольку результат srand(time(0)) в этих итерациях будет одинаков, и последовательности одинаковые, то вы будете получать одинаковые результаты.

К примеру, предположим, что srand устанавливает "затравочное" число на свой аргумент, а rand работает очень просто:
C++
1
2
3
4
5
6
7
8
9
10
void srand(uint x)
{
initValue = x;
}
uint rand()
{
uint res = initValue * 2 + 3;
initValue += 42;
return res;
}
Тогда получим:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
for (uint i = 0; i < 10; ++i)
 //допустим, за все 10 итераций системное время не успело обновиться и равно 100
 {
 srand(time(0));   //initValue = 100;
 uint x = rand();   //initValue = 142, x = 203
 }   //в следующей итерации будут те же самые результаты
 
 
srand(time(0));   //допустим, время стало 150
for (uint i = 0; i < 3; ++i)
 x = rand();  //1. x = 303, initValue = 192;  2. x = 387, initValue = 234;  3. x = 471, initValue = 276
 
 
for (uint i = 0; i < 3; ++i)
 {
 srand(i);   //1. initValue = 0;   2. initValue = 1;    3. initValue = 2
 x = rand();   //1. x = 3, initValue = 42;   2. x = 5, initValue = 43;   3. x = 7, initValue = 44
 }
//все хорошо, но при каждом запуске программы последовательность будет одна и та же -
//она будет зависеть исключительно от значений i, которые от запуска к запуску не меняются
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.10.2013, 20:26
Помогаю со студенческими работами здесь

Включение библиотек в main.cpp и my_func.cpp
Здравствуйте, Подскажите пожалуйста, ни как не могу понять, вот если: //main.cpp #include &lt;iostream&gt; int main() ...

Библиотеки в CPP. Ошибка компиляции | CPP
Доброго вечера! Появился один вопросик недавно. Начал юзать библиотеку &lt;windows.h&gt; для использования такой команды как...

Подключение файлов main.cpp some.cpp some.h
Всем привет, программа разделенна на три файла poly.cpp main.cpp poly.h Кто мог бы объяснить как происходит подключение этих файлов, и как...

C:\tsserver\Projects\cpp\codeblocks\MyComp\compiler\mmz\mmz. cpp|29|error: no match for 'operator=' in '* Item = * Source'|
char **Source; TArray&lt;std::string&gt; *Item; ... *Item=*Source;

Вот: source_file.cpp: In function 'int main()': source_file.cpp:10:12: error: 'strlen' was not declared in this scope
#include&lt;iostream&gt; using namespace std; int main() { char a,b; int i,j; cout&lt;&lt;&quot;Напишите слово:&quot;; cin&gt;&gt;a; i=0; ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru