Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Неслучайный random 
:(
    Опции темы
AlexSam
Дата 17.11.2005, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 24.9.2005

Репутация: нет
Всего: нет



Может я что не так делабаю . Использую в проге генератор случайных чисел (random) .Числа то конечно случайные , но при каждом новом запуске программы генерируется одна и таже последовательность этих чисел (0 , 5 , 9 , 11 , 15 , 33 , 3 ,...), как мне сделать , чтобы при каждом новом запуске генерировались разные числа.
PM MAIL   Вверх
darkart
Дата 17.11.2005, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 9.11.2005

Репутация: нет
Всего: 31



Надо вызвать randomize до первого random.
PM MAIL WWW ICQ Skype GTalk   Вверх
Poseidon
Дата 17.11.2005, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



AlexSam, видно ты еще новичок. Вот, держи:
Цитата
Random - Генерирует последовательность целых или действительных случайных чисел

Модуль System

Объявление
function Random (Range: Integer);

Описание
Функция Random генерирует последовательность целых или действительных случайных чисел. Парметр Range не является обязательным. Если этот параметр не задан, то функция возвращает случайные действительные числа X
, равномерно распределенные в интервале 0  <= X < 1. Например, оператор


for i:=Low(A) to High(A) do
  A[i] := Random;

заполняет массив A равномерно распределенными действительными числами в диапазоне от 0 до 1. Если вам требуются действительные случайные числа X
, равномерно распределенные в каком-то другом диапазоне A1 <= X < A2, то такие действительные числа легко получить, сдвинув начальное значение чисел и умножив генерируемые числа на длину интервала. Например, операторы


A1, A2: double;
...
A1 := 50;
A2 := 150;
for i:=Low(A) to High(A) do
  A[i] := A1 + (A2 - A1) * Random;

обеспечивают заполнение массива действительными случайными числами X, лежащими в диапазоне 50 <= X < 150.
Если в функции Random задан параметр Range, то функция возвращает случайные целые числа в диапазоне 0 <= X < Range. Например, оператор


for i:=Low(M) to High(M) do
  M[i] := Random(101);

заполняет массив M целыми числами, равномерно распределенными в диапазоне от 0 до 100. А оператор


for i:=Low(M) to High(M) do
  M[i] := 100 + Random(101);

заполняет массив M целыми числами, равномерно распределенными в диапазоне от 100 до 200.
Для рандомизации генератора Random используется процедура Randomize.


Цитата
Randomize - Рандомизирует генераторы случайных чисел

Модуль System

Объявление
procedure Randomize;

Описание
Процедура Randomize рандомизирует функции генерации случайных чисел Random и RandG. Если не использовать процедуру Randomize, то при каждом запуске на выполнение функции Random и RandG будут генерировать одинаковые последовательности квазислучайных чисел. Если же вставить в код процедуру Randomize, например, в событии OnCreate формы, то при каждом запуске последовательности случайных чисел будут разными.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
FRAGNATIC
Дата 17.11.2005, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


Профиль
Группа: Участник
Сообщений: 901
Регистрация: 17.10.2004
Где: ICQ

Репутация: 6
Всего: 11



Код

procedure TForm1.Button1Click(Sender: TObject);
begin
randomize;
Edit1.Text := Format('%s%s%s%s%s%s%s%s', [chr(random(9) + 49), chr(random(10) + 48), chr(random(10) + 48), chr(random(10) + 48), chr(random(10) + 48), chr(random(10) + 48), chr(random(10) + 48), chr(random(10) + 48)]);
end;

PM MAIL   Вверх
Rrader
Дата 18.11.2005, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 70
Всего: 191



AlexSam
Чтобы было понятно, почему так генерируются числа, посмотри исходники Randomize:
Код

...
Var
  RandSeed: Longint = 0;
...

Procedure Randomize;
Var
  Counter: Int64;
Begin
  If QueryPerformanceCounter(Counter) Then
    RandSeed := Counter
  Else
    RandSeed := GetTickCount; // Возвращает время работы Windows
End;

Когда работает Random, он использует переменную RandSeed. По умолчанию она равна нулю. Если не вызвать Randomize, как видно, RandSeed так и останется равной нулю smile


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
AlexSam
Дата 18.11.2005, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 24.9.2005

Репутация: нет
Всего: нет



Спасибо всем . теперь понял. smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0464 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.