Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.017 c
3-25199
zergey
2003-12-12 10:54
2004.01.09
Доступ к нескольким книгам Excel


1-25334
Андреев
2003-12-21 20:46
2004.01.09
сохранение StringGrid в файле


14-25512
Думкин
2003-12-16 07:03
2004.01.09
С днем рождения! 16 декабря.


14-25611
Ske4er
2003-12-17 07:56
2004.01.09
Куваев Олежка


8-25447
TGrey
2003-09-06 22:40
2004.01.09
Как определить координаты области вокруг линии




   Наверх