Задача 12 Урок 15

Напишите программу, которая будет заполнять массив из 10 элементов случайными числами из диапазона от 0 до 20, при этом в полученном массиве не должно быть одинаковых значений.

function check(a:array of integer; k:integer):integer;
var i,h:integer;
  begin
    h:=0;
    for i:=low(a) to high(a) do
      if (a[i]=k) then h:=1;
    result:=h;
  end;

var
  mas: array [1..10] of integer;
  i,j,k,y,flag:integer;
begin
  randomize();
  mas[1]:=random(20);
  y:=0;
  for i:=1 to 10 do
    begin
      k:=random(20);
      flag:=check(mas,k);
      if(flag=0) then
        mas[i]:=k
      else
        begin
          mas[i]:=-1;
          y:=y+1;
        end;
    end;
    repeat
      for j:=1 to 10 do
        if(mas[j]=-1) then
          begin
            k:=random(20);
            flag:=check(mas,k);
            if(flag=0) then
              begin
                mas[j]:=k;
                y:=y-1;
              end;
            end;
    until (y=0);
    for i:=1 to 10 do
      write(mas[i],' ');
end.  

Консоль:

3 16 4 2 8 5 10 18 0 6  
vedro-compota's picture

1)

function check(a:array of integer; k:integer):integer;

-- лучше возвращать boolean

2) Условие выхода из цикла формирование массива - достижение условия заполнения всего массива. Также элемент должен записываться в массив только тогда, когда мы знаем что он уникальный

_____________
матфак вгу и остальная классика =)

function check(a:array of integer; k:integer;j:integer):boolean;
var i:integer;
    h:boolean;
  begin
    h:=true;
    for i:=1 to j do
      if (a[i]=k) then h:=false;
    result:=h;
  end;

var
  mas: array [1..10] of integer;
  i,j,k,y:integer;
  flag:boolean;
begin
  randomize();
  mas[1]:=random(20);
  for i:=1 to 10 do
    begin
      repeat
        k:=random(20);
        flag:=check(mas,k,i-1);
      until (flag);
      mas[i]:=k;
    end;
    for i:=1 to 10 do
      write(mas[i],' ');
end.