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

Вниз

Пример генерация не повторяющихся случайных чисел в 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;
Скачать: CL | DM;

Наверх




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


1-25401
Igorr
2003-12-24 13:43
2004.01.09
Как в Delphi осуществить MIME кодирование/раскодирование


6-25468
lena19
2003-11-08 10:49
2004.01.09
как узнать мак адрес сетевой платы


3-25202
Viktor
2003-12-11 14:37
2004.01.09
ADO и SQL


7-25634
Ал
2003-10-28 22:06
2004.01.09
Серийные(Заводские) номера