Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.47 MB
Время: 0.043 c
3-1079175325
Oleksiy
2004-03-13 13:55
2004.04.11
Как отобразить изображения, хранящиеся в базе данных


14-1082099543
Yorick
2004-04-16 11:12
2004.04.11
Фильм "Страсти Христовы"


6-1076129800
@ac
2004-02-07 07:56
2004.04.11
Как запретить TWebBrowser щелкать при переходе по ссылкам, и вооб


1-1082678989
Бегун
2004-04-23 04:09
2004.04.11
TListBox


14-1079115770
Замороченный
2004-03-12 21:22
2004.04.11
Объясните последовательность установки C# Builder





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский