Длина последовательности

Задача: 

Определить в массиве длину самого длинного ряда повторяющихся чисел.

Например.
Если массив таков: 2, 4, 4, 4, 8, 8, 9, 12, 12, 14, 16, 16, 85,
то искомое значение равно трем, т.к. самая длинная последовательность повторяющихся чисел состоит из трех четверок.

Алгоритм решения задачи: 
  1. Пусть значение элементов массива определяется случайным образом, с помощью функции random.
  2. Каждый элемент должен сравниваться со следующим за ним.
  3. Если элементы равны по значению, значит, счетчик количества одинаковых элементов должен увеличиться на единицу.
  4. Если последовательные элементы не равны, то должно произойти два действия: сравнение текущего значения счетчика с уже имеющимся максимальным значением и сброс текущего счетчика.
  5. После цикла for также требуется сравнить значение текущего значения счетчика с максимальным. Это делается на случай, если максимальной по длине оказывается последняя последовательность и в этом случае ветка else внутри for не «срабатывает».
Программа на языке Паскаль: 

const
    M = 20;
var
    arr: array[1..M] of integer;
    i, n, max, curr: integer;
 
begin
    randomize;
    for i := 1 to M do begin
        arr[i] := random(3) + 1;
        write(arr[i]:2)
    end;
 
    max := 1;
    curr := 1;
 
    for i := 1 to n - 1 do
        if arr[i] = arr[i+1] then
            curr := curr + 1
        else begin
            if curr > max then
                max := curr;
            curr := 1;
        end;
 
    if curr > max then
        max := curr;
 
    writeln;
    writeln (max);
 
readln
end.

Примечания: 

Данный код не работает так, как надо. Не срабатывает ветка if. Причина не установлена.

Комментарии

Рабочий код.

В 1 строке выбираете нужное кол-во элементов массива, а в 8 строке максимально возможный элемент.

const N=15;
var
a:array[1..N] of integer;
i,max,x:integer;
 begin
 randomize;
  for i:=1 to N do begin
   a[i]:=random(15);
   write(a[i],', ');
  end;
  max:=0;
  x:=1;
  for i:=1 to N-1 do begin
   if a[i]=a[i+1] then
    inc(x)
    else begin
     if x>max then begin
      max:=x;
      x:=1;
     end;
    end;
  end;
  writeln;
  writeln('Max:',max);
 end.

Вот , все работает

var
   a:array[1..100] of integer;
   k,n,max,i:integer;
begin
   readln(n);
   for i:=1 to n do
   begin
      a[i]:=random(5);
      write(a[i]:5);
   end;
 
   k:=1; max:=1;
 
   for i:=1 to n-1 do
   begin
      if a[i] = a[i+1] then inc(k)
      else
      begin
         if k>max then
         max:=k;
         k:=1;
      end;
   end;
   writeln;
   writeln(max);
end.
 

Размер массива задан как М, n

Размер массива задан как М, n никак не вводится и неизвестно чему равен, однако в алгоритме поиска границы цикла заявлены до n.

ОШИБКА

ПОСЛЕ КОДА:
MAX:=1;
CURR:=1;
ДОБАВИТЬ N:=M; И ВСЕ БУДЕТ РАБОТАТЬ!

Зачем лишнее? Просто в "for i

Зачем лишнее? Просто в "for i := 1 to n - 1 do" вместо "n - 1" поставить "M - 1". И из переменных, кстати, n убрать. И все заработает, и ничего совсем уж лишнего.