Реализовать процедуру заполнения массива случайными числами без повторения элементов (Pascal)

Ответы

Ответ дал: Аноним
0
// PascalABC.NET 3.3, сборка 1583 от 25.11.2017
// Внимание! Если программа не работает, обновите версию!

procedure FillRandom(var P:array of integer; a,b:integer);
begin
  var (k,n):=(0,P.Length);
  repeat
      P:=ArrRandom(n,a,b);
      k+=1;
    until P.Distinct.Count=n;
  Writeln('Сделано ',k,' генераций массива')
end;

begin
  var n:=ReadInteger('n=');
  var (a,b):=ReadInteger2('Укажите интервал значений элементов:');
  if b-a+1<n then Writeln('Задание выполнить невозможно')
  else begin
    var x:=new integer[n];
    FillRandom(x,a,b);
    x.Println
    end
end.

Примеры
n= 15
Укажите интервал значений элементов: 10 30
Сделано 695 генераций массива
14 26 30 18 27 20 28 10 25 12 22 29 13 15 17

n= 15
Укажите интервал значений элементов: -50 50
Сделано 6 генераций массива
20 11 31 8 12 -47 16 -27 -21 -44 32 10 47 -36 46
Вас заинтересует