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

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

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

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;
  • Что делает эта функция?
  • В данной функции есть лишние переменные, перепишите код так, чтобы они не использовались.

Функция возвращает массив целых уникальных чисел и выдает все промежуточные результаты генерации случайного числа number в диапазоне от 0 до max-2. Так как длина массива равна 10, то число number должно быть не меньше 9, а max - не менее 11 для заполнения массива всеми уникальными числами от 0 до 9 включительно, иначе в строке 15 будет постоянный выход из цикла for до заполнения массива, а цикл while будет бесконечным.

Лишние переменные: min - в выражении на строке 11 сокращается, l - изначально не задействована, j и k - в цикле проверки предыдущих чисел и заполнения массива можно сократить, снизив вложенность условий.

program my_program;
type b = array [1..10] of integer;
function filling_array(max: integer): b;
var count, i, number: integer;
      arr: b;
begin
  count := 1;
  randomize;
  while count <= 10 do
   begin
    number := random(max - 1); // = max - 2 + 1
    write(number, ' ');
    for i := 1 to count do
     begin
      if arr[i] = number then break;
      if (i = count) and (arr[i] <> number) then
       begin
        arr[count] := number;
        count += 1;
       end;
     end;
    end;
  filling_array := arr;
end;

//Проверка
var a: b;
    maxf, c: integer;
begin
  maxf := 11;
  a := filling_array(maxf);
  writeln();
  for c := 1 to 10 do write(a[c], ' ');
  readln();
end.