Главная страница
    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.01 c
4-25669
reef
2003-11-07 16:32
2004.01.09
WriteFile и 1Mb массив


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


4-25651
Колян_К
2003-11-06 12:14
2004.01.09
Что делает mouse.destroy;


6-25479
CaDIsT
2003-11-03 09:30
2004.01.09
TTcpServer и TTcpClient


3-25203
loki128
2003-12-12 16:46
2004.01.09
Считать значения полей записи





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