Последовательность a1, a2, a3, … , an-1, an называется пилообразной, если она удовлетворяет одному из следующих условий:
1) a1 < a2 > a3 < … > an-1 < an
2) a1 > a2 < a3 > … < an-1 > an
Задание:
заполнить файл txt целыми числами с консоли, вывести самую длинную пилообразную последовательность.
Помогите, пожалуйста, с решением!! Заранее спасибо
Имеется код схожей задачи на массивы, но он немножко неверно работает:
uses crt;
const nmax=30;
var a:array[1..nmax] of byte;
n,i,j,k,mx,imx:byte;
begin
clrscr;
repeat
write('Размер массива до ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Введите элементы массива, в том числе образующие пилообразные последовательности');
for i:=1 to n do
begin
write('a[',i,']=');
readln(a[i]);
end;
clrscr;
writeln('Массив:');
for i:=1 to n do
write(a[i],' ');
writeln;
writeln;
i:=2;mx:=0;imx:=0;
while i<n do
if ((a[i]>a[i-1])and(a[i]>a[i+1]))or((a[i]<a[i-1])and(a[i]<a[i+1])) then
begin
j:=i;k:=2;
while(j<=n)and(((a[j]>a[j-1])and(a[j]>a[j+1]))or((a[j]<a[j-1])and(a[j]<a[j+1]))) do
begin
j:=j+1;
k:=k+1;
end;
if k>mx then
begin
mx:=k;
imx:=i-1;
end;
i:=i+k;
end
else i:=i+1;
if mx=0 then write('Нет пилообразной последовательности!')
else
begin
writeln('Максимальная пилообразная последовательность одинаковых чисел=',mx);
for i:=imx to imx+mx-1 do
write(a[i],' ');
writeln;
write('Её длина=',mx);
end;
readln
end.