Урок 22 Задача 1

Урок 22 Задача 1:

У вас есть функция:

program my_program;
type b = array[1..10] of integer; // объявление типа
     
function filling_array( min, max : integer ) : b;
  var  count, i, j, l, k, number : integer;
      arr : b;
begin 
  count := 0;
  k := 1;
  randomize; // вызов процедуры
  while( count < 10 ) do 
  begin
    number := random( max - (min + 1) + min ) ; // случайные числa
    write( number, ' ' ); 
    j := 0; 
    for i := low( arr ) to k do
    begin
      if( arr[i] <> number ) then
      begin
          j += 1; 
          if( j = k ) then
          begin
            count += 1;
            k += 1; 
            arr[count] := number; 
          end;
      end
      else
        break;
    end;
  end;
  filling_array := arr; // возвращаем значение функции
end;

Что делает эта функция? (добавьте текстовое описание)
В данной функции есть лишние переменные, перепишите код так, чтобы они не использовались.

type b = array[1..10] of integer; // объявление типа
var
  arr: b;
  i: integer;

{   Функция получает на вход два числа,
  и возвращает массив с уникальными значениями.
    Получаемые два числа на вход - это минимальное и
  максимальное значение диапазона.
    Из этого диапазона с помощью процедуры randomize
  функция в цикле получает случайные значения.
    Далее с помощью вложенного цикла осуществляется
  проверка очередного случайного значения на равенство
  значениям, уже вписанным в массив.
    Если значение не равно ни одному из элементов массива,
  происходит запись этого значения в очередной элемент массива.
    Внешний цикл работает, пока не заполнится весь массив.  }  
function filling_array( min, max : integer ) : b;
  var  count, i, j, l, k, number : integer;
  arr : b;
begin
  count := 0;
  k := 1;
  randomize; // вызов процедуры
  while( count < 10 ) do
  begin
    number := random( max - (min + 1) + min ) ; // случайные числa
    write( number, ' ' );
    j := 0;
    for i := low( arr ) to k do
    begin
      if( arr[i] <> number ) then
      begin
        j += 1;
        if( j = k ) then
        begin
          count += 1;
          k += 1;
          arr[count] := number;
        end;
      end
      else
        break;
    end;
  end;
  filling_array := arr; // возвращаем значение функции
end;

begin
  arr:= filling_array(0, 15);
  writeln;
  for i := low(arr) to high(arr) do
    write(arr[i], ' ' );
  readln();
end.

Переписанный код:

type b = array[1..10] of integer; // объявление типа
var
  i: integer;
  arr : b;

function filling_array( min, max: integer ): b;
var
  i, k, number: integer;
  arr: b;
begin
  k := 1;
  randomize; // вызов процедуры
  while not(k > high(arr)) do
  begin
    number := random( max - (min + 1) + min ) ; // случайные числa
    write(number, ' ' );
      for i := low(arr) to k do
        if arr[i] = number then
          break;
      if (i = k) and not(arr[i] = number) then
      begin
        arr[i] := number;
        k:= k+1;
      end;
  end;
  filling_array := arr; // возвращаем значение функции
end;

begin
  arr:= filling_array(0, 15);
  writeln;
  for i := low(arr) to high(arr) do
    write(arr[i], ' ' );
  readln();
end.
vedro-compota's picture

засчитано

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