Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ randomize в С/С++

Автор: от compiler 6.11.2007 22:40

Добрый день!
собственно вопрос в заголовке
видел у некого Vort-а реализованно так

#include <stdlib.h>
#include <time.h>
...
srand((int)time(0));
...
одноко автор говорит, что списал это не вникая в подробности... а мне хотелось бы понять суть... итак имеим srand() с библиотеки stdlib, который инициализирует ГСЧ, однако чтоб он генерились при разных запусках программы разные числа необходим дополнительный параметр.
для этого мы используем time из библ. time приводя его в тип int
правильное ли это утверждение и какой параметр получает time?
заранее благодарен.

Автор: volvo 7.11.2007 0:45

Судя по содержимому документации:

Цитата
void srand(unsigned seed);
Вызов srand(n) инициализирует ГСЧ таким образом, что генерируемая случайная последовательность определяется значением аргумента n.
<...>
Чтобы получить непредсказуемую случайную последовательность, следует установить seed равным текущему значению быстро изменяющейся величины, такой как время.
Отсюда плавно переходим к описанию time():

Цитата
time_t time(time_t *thetime);
Возвращает текущую дату и время как число секунд, прошедших с 00:00:00, 1 января 1970 по Гринвичу.
time_t *thetime - необязательный указатель на переменную типа time_t, в которую записывается текущая дата/время (это же значение возвращается функцией time()). Игнорируется, если thetime = 0


А явное приведение типа используется для того, чтобы указать компилятору, что программист сознательно приводит тип к менее емкому (long -> int), понимает, что это может привести к потере данных, но в данном случае это программиста не особо волнует, и Warning можно не выдавать smile.gif