Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c