М-да... такие "шедевры" мне давно не попадались... Там что ни строчка, то скрижаль.
Даже и не знаю, что делать... Конечно, я могу написать программку, но мне бы очень не хотелось, чтобы Вы тупо ее перекатали, сдали и забыли. Хоть попытайтесь в основах языка разобраться! Ну как это в цикле по
i у Вас условие
if i=i+1? Как такое может быть в принципе? Если бы еще
if m[j]=m[j+1] - куда ни шло, а такое... Преобразование типа данных из числового в строковый делается специальной стандартной процедурой
Str, а
q:='i'+'i' выдаст значение
q, равное
ii. Перед
else разделитель
; не ставится, это ошибка, ввод массива отсутствует начисто,
readln; в конце не "случайно затесался", а служит для остановки программы, чтобы дать возможность посмотреть на экране результат, и т.д., и т.п., и проч...
Ну ладно, вот программа, решающая данную задачку. Не очень простая, потому некоторые пояснения:
1. Случайным образом заполняется массив из 20 элементов числами в диапазоне от -2 до +1.
2. Массив выводится на экран.
3. Формируются массивы данных по "площадкам":
N - количество "площадок".
p_sq - номер элемента исходного массива, являющегося первым в каждой "площадке".
m_sq - значение одинаковых элементов в "площадке".
n_sq - количество элементов в каждой "площадке".
4. Ищется максимум по длинам "площадок".
5. Выводятся на экран данные обо всех "площадках", имеющих максимальную длину.
Код:
Program OS;
USES CRT;
VAR
m,m_sq,n_sq,p_sq:Array[1..20] of Integer;
i,Max_sq,N:Integer;
BEGIN
Randomize;
For i:=1 to 20 do
begin
m[i]:=Random(4)-2;
Write(m[i]:3);
end;
Writeln;
i:=1;
N:=0;
Repeat
Inc(N);
n_sq[N]:=0;
m_sq[N]:=m[i];
p_sq[N]:=i;
While (m[i]=m_sq[N]) and (i<20) do
begin
Inc(i);
Inc(n_sq[N]);
end;
If (i=20) and (m[19]=m[20]) then Inc(n_sq[N]);
Until i=20;
Max_sq:=0;
For i:=1 to N do
If n_sq[i]>Max_sq then Max_sq:=n_sq[i];
Writeln;
Writeln('Largest squares:');
For i:=1 to N do
If n_sq[i]=Max_sq then
begin
Write('from i=',p_sq[i]:2,' to i=',p_sq[i]+Max_sq-1:2);
Writeln(' square of ',Max_sq,' elements equal to ',m_sq[i]:3);
end;
ReadLn;
END.