Найти в массиве длину К самой длинной "пилообразной" (зубьями вверх) последовательности идущих подряд чисел - 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.

Объяснение кода листинга программы

  1. Вводится размер массива nmax и сохраняется в константе nmax.
  2. Создается массив a типа array[1..nmax] of integer для хранения чисел.
  3. Создаются следующие переменные:
    • m для хранения размера массива;
    • p для счётчика элементов массива;
    • j и k для работы с пилообразными участками;
    • mx для хранения максимальной длины пилообразного участка;
    • pmx для хранения индекса начала пилообразного участка;
    • max для хранения максимального размера пилообразного участка.
  4. Пользователю предлагается ввести элементы массива.
  5. После ввода всех элементов, программа ищет пилообразные участки, сравнивая три элемента в ряд.
  6. Если текущий элемент больше предыдущего и следующего, начинается новый пилообразный участок.
  7. Длина текущего пилообразного участка сохраняется в переменной k.
  8. Если текущий пилообразный участок длиннее предыдущего, текущий пилообразный участок заменяет предыдущий, а его длина сохраняется в переменной mx.
  9. Индекс начала текущего пилообразного участка сохраняется в переменной pmx.
  10. После окончания ввода, программа выводит массив.
  11. Если максимальный пилообразный участок не найден, выводится сообщение Нет пилообразных участков!.
  12. В противном случае выводится сообщение Максимальная пилообразная последовательность=, за которым следуют элементы пилообразного участка, а затем запрашивается ввод.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.2 из 5
Похожие ответы