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

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

Дан массив длиной N (где 10≤N В качестве ответа (если отрезок найден) получите его начальный и конечных индекс - m и p ( 1≤m

type
  //myArr = array [1..10] of integer;
  myArr = array [1..100] of integer;

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

function SearchNum(k : integer; var f, m : integer; a : myArr) : 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
   //a[1]:=0;
   //a[2]:=1;
   //a[3]:=4;
   //a[4]:=6;
   //a[5]:=3;
   //a[6]:=0;
   //a[7]:=1;
   //a[8]:=2;
   //a[9]:=3;
   //a[10]:=4;
  randomize();
  min := 0;
  max := 10;
  for i := low(a) to high(a) do
    a[i] := min + random(max - min + 1);
  writeln('enter K');
  readln(k);
  writeln('enter the segment F ');
  readln(f);

  if SearchNum(k, f, m, a) then
  begin
    writeln('the segment occurs');
    writeln('segment: ', m, ' - ', f);
    for i := m to f do
    write(a[i], ' ');
  end
  else
    write('the segment does not occur');
  writeln;
  writeln('Original');
  for i := low(a) to high(a) do
    write(a[i], ' ');
  writeln;

  write('End');
  readln();
end.      

Вывод консоли:

enter K
3
enter the segment F
10
the segment occurs
segment: 59 - 68
9 6 0 9 10 2 1 5 0 3
Original
4 5 9 7 10 0 10 0 7 6 1 4 9 3 10 0 9 3 6 6 0 10 9 5 0 7 4 4 2 10 6 10 4 5 0 6 7 8 9 4 6 2 1 8 10 8 1 6 1 5 7 5 3 7 4 6 2 2 9 6 0 9 10 2 1 5 0 3 7 7 7 10 0 1 5 6 2 4 4 0 0 1 3 8 10 5 7 4 6 1 4 0 6 4 5 3 1 7 1 5
End