Форум: "Основная";
Текущий архив: 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