Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Почему random(4) всегда возвращает 0??? [D5]


greenrul ©   (2001-12-29 14:42:00) 

Пример - procedure changebanner;
var rand:integer;
begin
rand:=random(4);
ShowMessage(IntToStr(rand));
end;


Yaro   (2001-12-30 14:50:00) [1]

>> ~skaminski~ - Я бы не советовал вызывать его "сколько душе угодно", он довольно тормознутый (это еще из паскаля помню :).

>> Dimaond Cat - А на счет своего рандома - это не так-то и просто.
Если не привязывать его к таймеру компьютера, чтоб быстрее работал, то это довольно-таки тупо выходит... Вот попробуйте код, приведенный ниже и посмотрите на результаты. У меня такое мнение сложилось (я про стандартный рандом), что он приблизительно по такому же принципу работает, только RANDOMIZE значение N из таймера берет...



var
n: real;

function _Random(_n: word): word;
begin if n = 0 then n := sqr(_n);
n := sqr(_n/n);
while not (n <= _n) do n := n/2;
Result := round(n);
end;


Dimaond Cat   (2001-12-30 14:12:00) [2]

А еще лучше самому рандомчик написать, потому как стандартный довольно галимый :о)


yaJohn   (2001-12-29 18:10:00) [3]

2 ~skaminski~
S tem je uspehom mojno vizivat raz v minutu sam random. A luchshe - po OnMouseMove.
A vizov Randomize po taimeru... Gdeto ya chital, chto Randomaize dlia inicializacii Now() ispolzuet...


~skaminski~   (2001-12-29 17:46:00) [4]

2 Вадим
Randomize можно вывзывать сколько раз душеньке угодно, и слово "достаточно" ни при чем. Я, напр., вызываю его по таймеру раз в 1 мин примерно ;)


Andrey   (2001-12-29 15:35:00) [5]

> greenrul
Встречный вопрос. Ты Help читал?

P.S. Потому что не инициализирован генератор.


panov   (2001-12-29 15:35:00) [6]

>greenrul © (29.12.01 15:28)
Достаточно одинраз при старте программы проинициализировать генератор случайных чисел процедурой Randomize.


greenrul   (2001-12-29 15:28:00) [7]

Ну а почему тот-то код не работает?

как я понял, если я по таймеру делаю Random, то Randomiseмне не поможет?


Вадим   (2001-12-29 15:22:00) [8]

Randomize надо вызывать только 1 раз при старте программы


Andrey   (2001-12-29 14:48:00) [9]

var I: Integer;
begin
Randomize;
for I := 1 to 50 do begin
{ Write to window at random locations }
Canvas.TextOut(Random(Width), Random(Height), "Boo!");
end;
end;

Взято из Help-a


panov   (2001-12-29 14:47:00) [10]

Есть еще инициализация генератора: Randomize;


Наверх

Титульная страница Поиск, карта сайта Написать письмо