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

Задание 19 урок 15

Дан массив длиной N где 10 ≤ N

Найти в этом массиве отрезок длиной F, такой что на нем встречаются
все числа от 0 до k, где 0≤k указанные числа, существует, в противном случае сообщите, что его не существует).
В качестве ответа (если отрезок найден) получите его начальный и конечных
индекс - m и p 1 ≤ m

Указание: Проверку массива на соответствие условиям задачи вынести в
подпрограмму (процедуру, которая вычислит нужные индексы, если есть)
Подсказка: можно использовать функцию проверки отрезка в массиве из предыдущей задачи.

Не могу решить следующую, двадцатую, задачу. Поэтому стоит вопрос о корректности этого решения.

type
  arr1 = array [1..100] of integer;

var
  min, max, i,
    k, // верхняя граница поиска чисел от 0 до k
    f, // длина отрезка
    m // левая граница найденного отрезка
    : integer;
  a : arr1;

function SearchNum(k : integer; var f, m : integer; a : arr1) : boolean;
var
  j, l : integer;
begin
  l := 1; // первый индекс поиска отрезка (ишем от L до f)
  m := f;

  while f <= high(a) do
  begin
    for i := 0 to k do  // перебор искомых чисел
    begin
      result := false;
      for j := l to f do  // поиск с первого индекса до f
        if i = a[j] then
        begin
          result := true;
          break;
        end;
      if result = false then
      begin
        f += 1; // сдвигаем зону поиска на один индекс вправо. И всё по новой
        l += 1;
        break;
      end;
    end;

    if result = true then
    begin
      m := f - (m - 1); // вычисление левой границы получившегося отрезка.
      break;
    end
  end;
end;

begin
  randomize();
  min := 0;
  max := 30;
  for i := low(a) to high(a) do
    a[i] := min + random(max - min + 1);

  writeln('До какого числа искать? ');
  readln(k);
  writeln('Длина отрезка');
  readln(f);

  if SearchNum(k, f, m, a) then
  begin
    writeln('Есть отрезок');
    writeln('Границы отрезка: ', m, ' - ', f);
  end
  else
    write('Нет такого отрезка');
  writeln;
  for i := low(a) to high(a) do
    writeln(i, ') ', a[i], ' ');
  writeln;

  write('Программа завершила свою работу');
  readln();
end.
     

.