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

Вниз

Подскажите алгоритм...   Найти похожие ветки 

 
Alex_Sudakov ©   (2002-08-29 12:14) [0]

Господа, подскажите красивый алгоритм заполнения массива случайными числами, при чем числа повторятся не должны. Массив - array of integer;


 
Skier ©   (2002-08-29 12:15) [1]

>Alex_Sudakov
Тебе помогут : Random(...) и Randomize.
А дубликаты,IMHO, придётся самому искать...


 
Alex_Sudakov ©   (2002-08-29 12:21) [2]

Спасибо, но это несколько не то...:) Про Random я и сам догадался, а вот с дубликатами это проблема. Если делать Random(5) то скажем что-бы получить 3 можно этот рандом неделю вызывать. А может с первого раза...
ЗЫ Забыл уточнить - массив нужно залить случайными числами в диапазоне Low(Array) to High(Array).


 
Anatoly Podgoretsky ©   (2002-08-29 12:22) [3]

Если ты больше ничего сказать не хочешь, то тогда генерируешь число и сравниваешь со всеми предыдущими


 
Alex_Sudakov ©   (2002-08-29 12:23) [4]

И?
PS Здравствуй, Анатолий :)


 
Skier ©   (2002-08-29 12:23) [5]

>Alex_Sudakov
Чудес не бывает...


 
MBo ©   (2002-08-29 12:24) [6]

for i:=0 to 9 do
list.add(pointer(random(10));
for i:=0 to 9 do begin
k:=random(list.count);
rndarr[i]:=Integer(list[k]);
list.delete(k);
end;


 
Alex_Sudakov ©   (2002-08-29 12:25) [7]

А так хочется...:) И все же, неужели не существует КРАСИВОГО алгоритма? :(


 
Alex_Sudakov ©   (2002-08-29 12:26) [8]

2MBo В данном алгоритме будут повторяющиеся варианты.


 
MBo ©   (2002-08-29 12:27) [9]

>повторяющиеся варианты
нет.


 
Alex_Sudakov ©   (2002-08-29 12:28) [10]

Посмотри еще раз. :)


 
MBo ©   (2002-08-29 12:29) [11]

извиняюсь
for i:=0 to 9 do
list.add(pointer(i));


 
Alex_Sudakov ©   (2002-08-29 12:30) [12]

Ни какой разницы. Все равно буду повторяющиеся варианты.


 
MBo ©   (2002-08-29 12:35) [13]

в списке каждое число уникально, при добавлении в массив оно удаляется.
procedure TForm1.Button1Click(Sender: TObject);
var i,k:integer;
list:tlist;
begin
randomize;
list:=tlist.create;
for i:=0 to 9 do
list.add(pointer(i));
for i:=0 to 9 do begin
k:=random(list.count);
memo1.lines.add(inttostr(Integer(list[k])));
list.delete(k);
end;
вывод:

0
4
6
2
8
1
3
9
5
7


 
Jeer ©   (2002-08-29 12:36) [14]

Красивый - такой:

Заполнить массив заданного размера линейно.
Многократно выполнить обмен для случайных i,j ячеек.


 
Anatoly Podgoretsky ©   (2002-08-29 12:41) [15]

Это бы можно было делать, если бы Alex_Sudakov чуть больше чем сказад


 
Alex_Sudakov ©   (2002-08-29 13:07) [16]

2MBo Спасибо, действительно работает...:)
2Anatoly Podgoretsky Вообще-то информация была исчерпывающей...


 
DiamondShark ©   (2002-08-29 13:09) [17]


> ЗЫ Забыл уточнить - массив нужно залить случайными числами
> в диапазоне Low(Array) to High(Array).


Тогда очень просто

for i := Low(MyArray) to High(MyArray) do
MyArray[i] := i;
for i := Low(MyArray) to pred(High(MyArray)) do
SwapElement(i, i + Random(High(MyArray)-i+1));



Страницы: 1 вся ветка

Текущий архив: 2002.09.09;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
4-27275
hovl
2002-07-17 23:16
2002.09.09
WinAPI


3-26882
Alex Chu
2002-08-19 16:26
2002.09.09
Ускориние работы СУБД


3-26883
pvasya
2002-08-19 17:05
2002.09.09
как прилепить к DBGrid выпадающий список?


3-26932
andwcomm
2002-08-20 17:32
2002.09.09
проверка Is null в триггере для Ib 6.0


1-26950
Zelius
2002-08-29 10:42
2002.09.09
Конфликт в пакетах BPL при загрузке Delphi6