Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Необходимо узнать, что делает эта часть программы (http://www.tehnari.ru/f41/t93212/)

Demon11101995 19.12.2013 16:37

Необходимо узнать, что делает эта часть программы
 
Помогите!мне необходимо узнать что делает эта часть программы

i:=2;mx:=0;imx:=0;
while i<=n do
if a[i]>a[i-1] then
begin
j:=i;k:=1;
while (j<=n)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;
writeln('Максимальная последовательность возрастания=',mx);
for i:=imx to imx+mx-1 do
write(a[i],' ');
readln
end.

Vladimir_S 19.12.2013 17:03

Цитата:

Сообщение от Demon11101995 (Сообщение 982744)
Помогите!мне необходимо узнать что делает эта часть программы

Ищет участки монотонного возрастания элементов массива.

Demon11101995 19.12.2013 23:05

мне бы описать,что делает каждое предложение=(

Vladimir_S 19.12.2013 23:08

Цитата:

Сообщение от Demon11101995 (Сообщение 982866)
мне бы описать,что делает каждое предложение=(

Дык... это мне для начала самому разобраться надо, что оно делает... Попробую завтра, ежели будет время.

Vladimir_S 20.12.2013 10:58

Ну вот, извольте. Итак, имеется неупорядоченный массив a в диапазоне 1..n. Задача: найти наибольший по длине фрагмент массива, в котором элементы упорядочены по возрастанию.
Приняты следующие обозначения:
i - переменная (счетчик) цикла.
mx - текущее значение максимальной длины упорядоченного фрагмента. Исходное значение mx=0.
k - текущее значение длины упорядоченного фрагмента.
j - счетчик элементов упорядоченного фрагмента.
imx - порядковый номер первого элемента упорядоченного фрагмента. Исходное значение imx=0.

Код:

{Задаём исходные значения:}
i:=2;
mx:=0;
imx:=0;
{Организуем цикл по всему исходному массиву:}
while i<=n do
 {Проверяем условие "если последующий элемент больше предыдущего":}
 if a[i]>a[i-1] then
 {Если указанное условие выполнено, то:}
  begin
  {Задаем исходные значения k и j. Далее "движемся" по массиву, используя счетчик j. Значение i остаётся соответствующим второму элементу упорядоченного фрагмента:}
  j:=i;
  k:=1;
  {Наращивая j, движемся по массиву до тех пор, пока или массив не кончится, или условие упорядоченности (текущий элемент больше предыдущего) не нарушится. В результате определяем длину (k) упорядоченного фрагмента:}
  while (j<=n) and (a[j]>a[j-1]) do
    begin
    j:=j+1;
    k:=k+1;
    end;
    {Проверяем, не превышает ли полученная длина k значение максимальной протяженности упорядоченного фрагмента, полученное после обработки предыдущей части исходного массива, и если превышает, то переопределяем как саму длину (mx), так и номер первого элемента упорядоченного фрагмента (imx):}
    if k>mx then
    begin
      mx:=k;
      imx:=i-1;
    end;
    {Смещаем глобальную нумерацию (i) на длину найденного упорядоченного фрагмента с тем, чтобы продолжить глобальный цикл:}
    i:=i+k;
  end
  {Если указанное в начале условие соотношения пары соседних элементов не выполнено (последующий меньше или равен предыдущему), то продолжаем движение вдоль исходного массива:}
  else i:=i+1;
{Выводим полученный результат (длину наибольшего упорядоченного фрагмента и сам фрагмент):}
writeln('Максимальная последовательность возрастания=',mx);
for i:=imx to imx+mx-1 do
  write(a[i],' ');
{Останавливаем, а потом завершаем программу:}
readln
end.


Demon11101995 23.12.2013 17:40

спасибо выручили


Часовой пояс GMT +4, время: 10:06.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.