Найти в массиве длину К самой длинной "пилообразной" (зубьями вверх) последовательности идущих подряд чисел - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Задан массив X[1..m]. Найти длину К самой длинной "пилообразной"(зубьями вверх) последовательности идущих подряд чисел: X[p+1]<X[p+2]>X[p+3]<....>X[p+K].

Решение задачи: «Найти в массиве длину К самой длинной "пилообразной" (зубьями вверх) последовательности идущих подряд чисел»

textual
Листинг программы
  1. uses crt;
  2. const nmax=20;
  3. var a:array[1..nmax] of integer;
  4.     m,p,j,k,mx,pmx,max:byte;
  5. begin
  6. clrscr;
  7. repeat
  8. write('Размер массива до ',nmax,' m=');
  9. readln(m);
  10. until m in [1..nmax];
  11. writeln('Введите элементы массива, в том числе пилообразные участки:');
  12. for p:=1 to m do
  13.  begin
  14.   write('a[',p,']=');
  15.   readln(a[p]);
  16.  end;
  17. clrscr;
  18. writeln('Массив:');
  19. for p:=1 to m do
  20. write(a[p],' ');
  21. writeln;
  22. writeln;
  23. p:=2;mx:=0;pmx:=0;max:=0;
  24. while p<m do
  25. if (a[p]>a[p-1])and(a[p]>a[p+1]) then
  26.   begin
  27.    j:=p;k:=0;
  28.    while (a[j]>a[j-1])and(a[j]>a[j+1])and(j<m) do
  29.     begin
  30.      k:=k+1;
  31.      j:=j+2;
  32.     end;
  33.    if k>mx then
  34.     begin
  35.      max:=2*k+1;
  36.      pmx:=p-1;
  37.     end;
  38.    p:=p+2*k+1;
  39.   end
  40. else p:=p+1;
  41. if max=0 then write('Нет пилообразных участков!')
  42. else
  43.  begin
  44.   writeln('Максимальная пилообразная последовательность=',max);
  45.   for p:=pmx to pmx+max-1 do
  46.   write(a[p],' ');
  47.  end;
  48. readln
  49. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы