Главная страница
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.028 c
7-25630
INTAARI
2003-10-29 11:39
2004.01.09
ReadFile не удается прочитать весь массив данных


3-25204
Inkotex
2003-12-11 19:36
2004.01.09
Работа с изображениями


4-25662
Dark Elf
2003-11-05 11:35
2004.01.09
Использование методов из ехе-файла


3-25262
LinOS
2003-12-08 13:48
2004.01.09
Мигает DBGrid


1-25383
TJ
2003-12-24 23:09
2004.01.09
Алгоритм перевода десятиричного числа в двоичный в HEX OCT и т.д.