Главная страница
    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.46 MB
Время: 0.039 c
4-1075748523
DelphiN!
2004-02-02 22:02
2004.04.11
Как достать файл из ресурса и сохранить на диск


14-1079187844
Alex30
2004-03-13 17:24
2004.04.11
Может кто знает как инет файлы на ящик себе отсылать?


14-1079589762
able
2004-03-18 09:02
2004.04.11
LPT - порт


3-1078399668
Spectre
2004-03-04 14:27
2004.04.11
Задание значения NULL через параметры


8-1071123168
alvin
2003-12-11 09:12
2004.04.11
Комментарии в JPEG





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский