Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Randomize   Найти похожие ветки 

 
16xmax   (2004-03-22 11:49) [0]

Как сделать так, чтобы Random(x) не повторялся:

...
begin
 for i:=0 to 100 do
     begin
       {Randomize - хоть пиши хоть нет(см. ниже по чему)}        x[i]:=random(100);
       y[i]:=random(100);
     end;
end;
...

В общем при таком коде Delphi выдает минимум 10 совпадений из 100, как исправит эту гадость?


 
Piople ©   (2004-03-22 11:53) [1]

Проверяй есть ли уже это число или нет, если нет то добавляй, если есть то бери другое случайное число.


 
Плохиш   (2004-03-22 12:05) [2]

>16xmax   (22.03.04 11:49)

> В общем при таком коде Delphi выдает минимум 10 совпадений
> из 100

В каком определении сказано, что последовательность случайных чисел не может содержать одинаковые числа?


 
16xmax   (2004-03-22 12:30) [3]

Так при после проверки нет гарантии что при повторном Random"е новое число не повторит какое-то еще из существующих!

Плохиш   (22.03.04 12:05) [2]
>16xmax   (22.03.04 11:49)

> В общем при таком коде Delphi выдает минимум 10 совпадений
> из 100

В каком определении сказано, что последовательность случайных чисел не может содержать одинаковые числа?


И бобру понятно что она может содержать одинаковые числа, так по этому поводу мне и надо чтобы они не были одинаковыми!


 
Рамиль ©   (2004-03-22 12:37) [4]


> Так при после проверки нет гарантии что при повторном Random"е
> новое число не повторит какое-то еще из существующих!

Так проверять надо до тех пор, пока не будет!


 
Плохиш   (2004-03-22 12:42) [5]

>16xmax   (22.03.04 12:30) [3]

И сколько раз тебе тогда [1] повторять?


 
Иван Бездомный ©   (2004-03-22 13:04) [6]

использовать множества можть?
добавлять каждое число в мн-во и проверять передследующей генерации сл-ного числа


 
dr Tr0jan ©   (2004-03-22 13:10) [7]

Во-первых:
Randomize нужно писать перед циклом, обязательно и всего-лишь один раз. Так устроена эта функция и между прочим правильно.

Во-вторых:
В "случайной" (см. рекурентной последовательности РП) период никогда не может быть длиной меньше 1000 (а десяти тем более) чисел.

В-третьих:
В Бэйсике была очень замечательная функция RandomizeTimer (или что-то подобное) - она воспроизводила член РП помноженный на единицу времени, и вот эта функция всегда выводила случайное число. Посему, что тебе не мешает создать подобную функцию и юзать ее на здоровье?


 
Mihey ©   (2004-03-22 13:41) [8]

Заполнение массива случайными неповторяющимися числами:

procedure FillArray(var A: array of Integer);
var

I, S, R: Integer;
begin

for I := 0 to High(A) do A[I] := I;
for i := High(A) downto 0 do begin
R := Random(I);
S := A[R]; A[R] := A[I]; A[I] := S;
end;
end;



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.048 c
4-1074966294
Арр'акктур
2004-01-24 20:44
2004.04.11
Поиск в чужом процессе


14-1081172037
VMcL
2004-04-05 17:33
2004.04.11
Поголубел :))


6-1079094334
Dysan
2004-03-12 15:25
2004.04.11
почему отсылаеться приатаченный файл


6-1079741156
piratehnik
2004-03-20 03:05
2004.04.11
Как вернуть сокеты в делфи 7 ?


1-1082350586
Denizzz
2004-04-19 08:56
2004.04.11
StringGrid - выравнивание чисел по правому краю