Информатика и технология программирования

         

Пример анализа программы : выбор возрастающих последовательностей



for (m=0, k=0, i=1; i&#60 20; i++)
if (A[i-1]&#60A[i]) k++;
else { l il f (k&#62m) m=k; k=0; }



1. Смысл цикла for() - последовательный просмотр элементов массива.



2. Смысл переменной m из выражения if (k&#62m) m=k; - выбор максимального значения из последовательности получаемых значений k.



3. A[i] - текущий элемент массива, A[i-1] - имеет смысл - предыдущий элемент массива, A[i-1] A[i] &#60/b имеет смысл - два соседних элемента массива (предыдущий и текущий) расположены в порядке возрастания.



4. Смысл переменной k из выражения if () k++; - переменная-счетчик.



5. Смысл фрагмента if (A[i-1] A[i]) k++; &#60/b - подсчет количества пар соседних элементов, расположенных в порядке возрастания.



6. После фиксации очередного значения k на предмет определения максимума в m , его значение сбрасывается, то есть процесс подсчета начинается сначала.



7. Для окончательного уяснения смысла
программы необходимо представить процесс выполнения нескольких шагов цикла. Необходимо ответить на вопрос, как поведет себя программа при разных сочетаниях возрастающих и убывающих пар:


i= 1 2 3 4 5 6 7 8
A[] 3 4 5 2 1 3 4 6 2
k=0 k++ k++ k=0 k=0 k++ k++ k++ k=0
1 2 0 0 1 2 3 0
m=0 m=k m=k
2 3

Очевидно, что процесс подсчета k связан каким-то образом с процессом возрастания значений A[i]. Если несколько значений расположены подряд в порядке возрастания, то выполняется одна и та же ветка if , а k последовательно увеличивается. При появлении первого убывающего значения в последовательности счетчик сбрасывается, но перед этим его значение фиксируется на предмет максимума. Таким образом, программа определяет МАКСИМАЛЬНУЮ ДЛИНУ ПОСЛЕДОВАТЕЛЬНОСТИ ВОЗРАСТАЮЩИХ ЗНАЧЕНИЙ в массиве.



Содержание раздела