Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];

Вниз

Пример генерация не повторяющихся случайных чисел в Delphi   Найти похожие ветки 

 
niko4543   (2003-12-23 05:43) [0]

Привет всем.
Срочно помогите пожайлуста ни как не получается.
Пример генерация не повторяющихся случайных чисел в Delphi
Заранее спасибо.


 
Юрий Зотов   (2003-12-23 05:55) [1]

Уточните, каких именно чисел - целых или действительных (и если второе, то сколько интересует знаков).


 
Palladin   (2003-12-23 05:57) [2]

var
Nums:TList;

procedure _Randomize(p_nFrom,p_nCount:integer);
var
i:integer;
begin
Nums.Clear;
for i:=p_nFrom to p_nFrom+p_nCount-1 do Nums.Add(pointer(i));
end;

function _Random:integer;
var
nIndex:integer;
begin
if Nums.Count=0 then raise Exception.Create("Не вызван _Randomize");
nIndex:=random(Nums.Count);
result:=integer(Nums[nIndex]);
Nums.Delete(nIndex);
end;

незабудь про создание и удаление объекта Nums


 
TUser   (2003-12-23 07:02) [3]

Кнут, глава 3. Там правда, не про Delphi, но ничего - были бы алгоритмы, а на нужный язык перевести можно.


 
Тимохов   (2003-12-23 10:26) [4]

Во блин, "ни как не получается."
Интересно, что он пробовал, что у него не получается.
Даже интересно...


 
Developerr   (2003-12-23 12:14) [5]

procedure sluch;
var
y,x,h,t,p:integer;
begin
Randomize;
h:=1; y:=2;
f[1]:=Random(104)+1;
while y<=104 do
begin
p:=Random(104)+1; t:=0; x:=1;
while x<=h do
begin
if p=f[x] then
begin
t:=1; x:=y;
end;
x:=x+1;
end;
if t=0 then
begin
f[y]:=p; h:=h+1; y:=y+1;
end;
end;
end;


104 - это мне нужно было. Можно устанавливать и другое значение.


 
cybervector   (2003-12-23 12:15) [6]

Используй алгоритмы из Кнута.
К примеру
x[i+1]:=(x[i]*2345+6789) mod 512;
Этот генератор я не проверял. Но принцип таков. Важно правильно подобрать мультипликативный и адитивный коэф-ты а так же модуль.


 
PVOzerski   (2003-12-23 12:35) [7]

Вот, выдрал из своей проги (моделирование эволюции, FreePascal 1.9) генератор, сделал тестовую программку).

{$apptype console}
type
tLongs0=array[0..0]of longint;
pLongs0=^tLongs0;

procedure MakeSequence(var x:tlongs0;base,len:longint);
var
i,max,y,z:longint;
begin
max:=pred(len);
for i:=0 to max do
x[i]:=i+base;
for i:=0 to max do
begin
y:=random(succ(max));
z:=x[max];
x[max]:=x[y];
x[y]:=z;
dec(max);
end;
end;
var
data:array[0..9]of longint;
i:longint;
begin
Randomize;
MakeSequence(plongs0(@data)^,1,10);
for i:=0 to 9 do
writeln(data[i]);
end.



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

Форум: "Основная";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.012 c
1-25360
baataars
2003-12-23 13:20
2004.01.09
TImage - распечатать


6-25469
lkj
2003-11-07 13:45
2004.01.09
Кодинг сокетов юзая winsock в Дэлфи


1-25273
xtz
2003-12-25 18:50
2004.01.09
Ув Мастера где можно скачать модуль Proxies.pas???


14-25536
Ega23
2003-12-18 14:29
2004.01.09
Прогноз: Россия - Финляндия?


1-25437
MV
2003-12-23 18:05
2004.01.09
А можно ли, отловив в обработчике формы сообщение, скажем WM_PAIN





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