Задача 1 урок 21

Задача 1 урок 21

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

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

Данная функция по замыслу автора должна заполнять массив из 10 чисел случайными значениями(но она с этой задачей не справляется)

  • переменная "l" не используется вовсе, все вычисления с переменной "k" излишни
  • цикл while в этой функции бесконечен т.к. заходя в цикл for происходит сравнение рандомного числа с не существующими (не записанными в массив) элементами. Необходима до цикла while или до for записать в массив первое значение

Рабочий вариант:

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

begin
  arr := filling_array(1,11);
  for i:=1 to high(arr) do
    write(arr[i],'/');

  readln();
end.
vedro-compota's picture

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

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