Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подскажите алгоритм...


Alex_Sudakov ©   (2002-08-29 12:14:00) 

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


DiamondShark   (2002-08-29 13:09:00) [1]


> ЗЫ Забыл уточнить - массив нужно залить случайными числами
> в диапазоне 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));


Alex_Sudakov   (2002-08-29 13:07:00) [2]

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


Anatoly Podgoretsky   (2002-08-29 12:41:00) [3]

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


Jeer   (2002-08-29 12:36:00) [4]

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

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


MBo   (2002-08-29 12:35:00) [5]

в списке каждое число уникально, при добавлении в массив оно удаляется.
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


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

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


MBo   (2002-08-29 12:29:00) [7]

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


Alex_Sudakov   (2002-08-29 12:28:00) [8]

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


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

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


Alex_Sudakov   (2002-08-29 12:26:00) [10]

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


Alex_Sudakov   (2002-08-29 12:25:00) [11]

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


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

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;


Skier   (2002-08-29 12:23:00) [13]

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


Alex_Sudakov   (2002-08-29 12:23:00) [14]

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


Anatoly Podgoretsky   (2002-08-29 12:22:00) [15]

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


Alex_Sudakov   (2002-08-29 12:21:00) [16]

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


Skier   (2002-08-29 12:15:00) [17]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо