Самая длинная цепочка (2 уровень)

Условие:
Дана вещественная таблица a[1], a[2],...,a[1000]. Определить максимальное количество подряд идущих положительных элементов последовательности, не прерываемых ни нулями, ни отрицательными элементами. Напечатать найденный фрагмент.

Решение:
Идея решения. Движемся вдоль массива. Фиксируем начало и конец “положительного” фрагмента и запоминаем его длину, индексы первого и последнего элементов. Аналогично поступаем со следующим фрагментом ( если он есть!). Если следующий фрагмент длиннее предыдщего, то помним его начало, конец и длину. Так ( за один проход!) проходим по всему массиву и на финише имеем то, что позволит нам напечатать интересующий нас фрагмент. Комментарии в исходнм тексте позволят до конца уяснить решение.

const
max = 100; {сколько элементов в массиве}
var
a:array[1..max] of integer; {исследуемый массив}
maxstart,maxstop,i,len,start,stop:integer;
begin
randomize; {заполняем массив случайными числами }
for i:=1 to max do
begin
  a[i]:=random(5);
  a[i]:=a[i]-1; {чтобы были числа меньше 0}
  write(a[i],' ');
end;
i:=1;
maxstart:=0; {начало искомого фрагмента}
maxstop:=0; {конец искомого фрагмента}
len:=0; {текущая длина фрагмента}
while i<=max do
begin
  while (i<=max) and (a[i]<=0) do {ищем начало фрагмента...}
  inc(i);
  start:=i; {запоминаем начало фрагмента}
  while (i<=max) and (a[i]>0) do {ищем конец фрагмента}
  inc(i);
  stop:=i-1; {запоминаем конец фрагмента}
  if len<stop-start
  then
  begin {текущий фрагмент длиннее всех предыдущих}
   len
:=stop-start;
   maxstart:=start;
   maxstop:=stop;
  end;
end;
writeln;
if maxstop=0
then writeln('Нет положительных элементов')
else
begin
  writeln('Найденa последовательность от ',maxstart,
  ' до ',maxstop);
  for i:=maxstart to maxstop do
  begin
 
  write(a[i],' ');
  end;
end;
end.