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

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

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

const
  N = 10;
  type
    arr = array [1..N] of integer;
var
  a: arr;
  min, max, i, j, el: integer;
  flag: boolean;
begin
   flag:= true;
   randomize();
   min:= 0;
   max:= 20;
   el:= 1;
   i:= 1;
   while (i <= N) do
    begin
      el:= min + random(max - min + 1);
      for j:= low(a) to high(a) do
       begin
         if a[j] = el then
         begin
            flag:= false;
            break;
         end
      else flag:= true;
       end;
      if flag then
        a[i]:= el
      else continue;
      write(a[i], ' ');
      a[j]:= a[i];
      inc(i);
    end;
   readln();
end.    
vedro-compota's picture

 for j:= low(a) to high(a) do

Тут правая граница перебора должна быть динамической и зависеть от уже добавленных в массив элементов

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

Сделал правую границу динамической и вывел проверку в функцию

const
  N = 10;
type
  arr = array [1..N] of integer;
var
  a: arr;
  min, max, i, el, m: integer;
function equal(var mas: arr; x, y: integer):boolean;
var
  j: integer;
  flag: boolean;
begin
  for j:= low(mas) to x do
  begin
     if mas[j] = y then
     begin
        flag:= false;
        break;
     end
    else flag:= true;
  end;
  result:= flag;
end;
begin
   randomize();
   min:= 0;
   max:= 20;
   i:= 1;
   m:= 0;//правая граница цикла в функции
   while (i <= N) do
    begin
      el:= min + random(max - min + 1);
      if equal(a, m, el) then
        a[i]:= el
      else continue;
      write(a[i], ' ');
      inc(i);
      if (m < N) then
         inc(m);
    end;
   readln();
end. 
vedro-compota's picture

решение засчитано

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