Заполнение массива неповторяющимися случайными целыми числами
Автор: DiVo
WEB-сайт: http://delphibase.endimus.com
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Заполнение массива неповторяющимися случайными целыми числами
Данная процедура заполняет заданный массив случайными неповторяющимися целыми числами.
Заполнения идет числами начиная с 1, если вам необходимо заполнить массив числами с 0,
то измените строку:
inputMass[i]:=Unic(bm,range)+1;
на
inputMass[i]:=Unic(bm,range);
Зависимости: стандартные модули
Автор: Ru, DiVo_Ru@rambler.ru, Одесса (Украина)
Copyright: DiVo 2003 creator Ru
Дата: 22 октября 2003 г.
***************************************************** }
procedure MassRand(range: integer; var inputMass: array of integer);
var
i: integer;
bm: array of boolean; //массив флагов для отслеживания было уже число
или нет
begin
SetLength(bm, length(inputMass));
for i := 0 to length(inputMass) - 1 do
begin
inputMass[i] := Unic(bm, range) + 1; //для последовательности 1,2, ... , N
//inputMass[i]:=Unic(bm,range);//для последовательности 0,1, ... , N
end;
end;
function Unic(var flag: array of boolean; range: integer): integer;
begin
{данная функция возвращает одно случайное число}
result := random(range);
while flag[result] do
result := random(range); //ищем какого числа еще нет
flag[result] := true; //это чтобы не было повторений
end;
Пример использования:
// Использовать можно по разному, например:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i: integer;
mass: array of integer; //массив над которым будем извращаться
begin
Memo1.Lines.Clear; //сюда выведем результат
SetLength(mass, strtoint(Edit1.Text)); //тут получим размерность массива
MassRand(strtoint(Edit1.Text), mass); //соответственно поимели процедуру
for i := 0 to length(mass) - 1 do
begin
Memo1.Lines.Add(inttostr(mass[i])); //отобразили пользователю результат
end;
end;
|