Найти в массиве длину К самой длинной "пилообразной" (зубьями вверх) последовательности идущих подряд чисел - Free Pascal
Формулировка задачи:
Задан массив X[1..m]. Найти длину К самой длинной "пилообразной"(зубьями вверх) последовательности идущих подряд чисел: X[p+1]<X[p+2]>X[p+3]<....>X[p+K].
Решение задачи: «Найти в массиве длину К самой длинной "пилообразной" (зубьями вверх) последовательности идущих подряд чисел»
textual
Листинг программы
- uses crt;
- const nmax=20;
- var a:array[1..nmax] of integer;
- m,p,j,k,mx,pmx,max:byte;
- begin
- clrscr;
- repeat
- write('Размер массива до ',nmax,' m=');
- readln(m);
- until m in [1..nmax];
- writeln('Введите элементы массива, в том числе пилообразные участки:');
- for p:=1 to m do
- begin
- write('a[',p,']=');
- readln(a[p]);
- end;
- clrscr;
- writeln('Массив:');
- for p:=1 to m do
- write(a[p],' ');
- writeln;
- writeln;
- p:=2;mx:=0;pmx:=0;max:=0;
- while p<m do
- if (a[p]>a[p-1])and(a[p]>a[p+1]) then
- begin
- j:=p;k:=0;
- while (a[j]>a[j-1])and(a[j]>a[j+1])and(j<m) do
- begin
- k:=k+1;
- j:=j+2;
- end;
- if k>mx then
- begin
- max:=2*k+1;
- pmx:=p-1;
- end;
- p:=p+2*k+1;
- end
- else p:=p+1;
- if max=0 then write('Нет пилообразных участков!')
- else
- begin
- writeln('Максимальная пилообразная последовательность=',max);
- for p:=pmx to pmx+max-1 do
- write(a[p],' ');
- end;
- readln
- end.
Объяснение кода листинга программы
- Вводится размер массива
nmax
и сохраняется в константеnmax
. - Создается массив
a
типаarray[1..nmax] of integer
для хранения чисел. - Создаются следующие переменные:
m
для хранения размера массива;p
для счётчика элементов массива;j
иk
для работы с пилообразными участками;mx
для хранения максимальной длины пилообразного участка;pmx
для хранения индекса начала пилообразного участка;max
для хранения максимального размера пилообразного участка.
- Пользователю предлагается ввести элементы массива.
- После ввода всех элементов, программа ищет пилообразные участки, сравнивая три элемента в ряд.
- Если текущий элемент больше предыдущего и следующего, начинается новый пилообразный участок.
- Длина текущего пилообразного участка сохраняется в переменной
k
. - Если текущий пилообразный участок длиннее предыдущего, текущий пилообразный участок заменяет предыдущий, а его длина сохраняется в переменной
mx
. - Индекс начала текущего пилообразного участка сохраняется в переменной
pmx
. - После окончания ввода, программа выводит массив.
- Если максимальный пилообразный участок не найден, выводится сообщение
Нет пилообразных участков!
. - В противном случае выводится сообщение
Максимальная пилообразная последовательность=
, за которым следуют элементы пилообразного участка, а затем запрашивается ввод.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д