Задание №19.
Работа с массивами (заполнение, считывание, поиск, сортировка, массовые
операции и др.). Уровень сложности задания - повышенный, максимальный балл за выполнение - 1, примерное время выполнения задания - 5 минут.
Знать: цепочки  (конечные  последовательности),  деревья, списки,  графы,  матрицы  (массивы),  псевдослучайные последовательности. Сортировка.
Уметь: читать и отлаживать программы на языке программирования.


Пример задания (Демоверсия ЕГЭ 2020)
В программе используется одномерный целочисленный массив A с индексами от 0 до 11. Значения элементов равны 20, 19, 17, 41, 23, 12, 24, 16, 4, 13, 6, 15 соответственно, т.е. A[0] = 20, A[1] = 19 и т.д. Определите значение переменной s после выполнения следующего фрагмента этой
программы:

s := 0;
n := 0;
for i := 0 to 11 do
   if A[i] <= A[n] then
   begin
     s := s + i;
     t := A[i];
     A[i] := A[n];
     A[n] := t
end;

Разбор задания.
Давайте разберёмся с кодом программы. У нас есть цикл с параметром и проверка некоторого условия. Если условие истинно То переменная s увеличивается на значение переменной i, а элементы массива A[i] и A[n] с помощью хорошо известного алгоритма и вспомогательной переменной t меняются местами.

Шаг 1. Исходя из условия (строка if A[i] <= A[n] then) на этом шаге цикла будут сравниваться A[0] <= A[0], да A[0] равен A[0], следовательно, условие истинно и начинает выполнятся программа в операторных скобках (begin...end;). Переменная s увеличится на 0, т.к. i = 0 и останется равна нулю, в переменную t будет записано значение 20, значения элементов массива A[i] и A[n] поменяются местами и даже не изменяться, потому что мы будем менять A[0] на A[0], значение A[n] станет равно 20. По сути дела A[n] и A[0] это одно и тоже, т.е A[n] - это нулевой элемент массива.

Получается, что на каждом шаге цикла мы переменную s увеличиваем на значение переменной i, а в случае ещё и истинности условия цикла A[i] <= A[n] мы меняем местами значения записанные в A[i] и A[0].

Шаг 2. Мы сравниваем значения элементов массива A[i] и A[n], но на этом шаге переменная i равна 1, следовательно мы сравниваем 19 <= 20. Условие истинно: значение переменной s увеличивается на значение переменной i (s = 0 + 1 = 1), переменной t присваивается значение A[1] = 19, A[1] становится рваное 20, а A[0] - 19.

Шаг 3. Цикл продолжает свою работу. Переменная i равна 2, сравниваем A[2] и A[0] - 17 <= 20. Это условие истинно, следовательно значение переменной s увеличивается на значение переменной i (s = 1 + 2 = 3), переменной t присваивается значение A[2] = 17, A[2] становится раное 19, а A[0] - 17.

Шаг 4. Переменная i равна 3, сравниваем A[3] и A[0] - 41 <= 17. Это условие ложно, следовательно, программа в операторных скобках (begin...end;) не выполняется и все значения остаются на своих местах, а мы переходим к следующему шагу.

Шаг 5. Переменная i равна 4, сравниваем A[4] и A[0] - 23 <= 17. Это условие ложно, следовательно, программа в операторных скобках (begin...end;) не выполняется и все значения остаются прежними, а мы переходим к следующему шагу.

Шаг 6. Переменная i равна 5, сравниваем A[5] и A[0] - 12 <= 17. Это условие истинно. Значение переменной s увеличивается на значение переменной i (s = 3 + 5 = 8), переменной t присваивается значение A[5] = 12, A[5] становится раное 17, а A[0] - 12.

Шаг 7. Переменная i равна 6, сравниваем A[6] и A[0] - 24 <= 12. Это условие ложно. В программе ничего не поменяется, а мы переходим к следующему шагу.

Шаг 8. Переменная i равна 7, сравниваем A[7] и A[0] - 16 <= 12. Это условие ложно. В программе ничего не поменяется. Переходим к следующему шагу.

Шаг 9. Переменная i равна 8, сравниваем A[8] и A[0] - 4 <= 12. Это условие истинно. Значение переменной s увеличивается на значение переменной i (s = 8 + 8 = 16), переменной t присваивается значение A[8] = 4, A[8] присваиваем значение 12, а A[0] - 4.

Шаг 10. Переменная i равна 9, сравниваем A[9] и A[0] - 13 <= 4. Это условие ложно. В программе ничего не поменяется. Переходим к следующему шагу.

Шаг 11. Переменная i равна 10, сравниваем A[10] и A[0] - 6 <= 4. Это условие ложно. В программе ничего не поменяется.

Шаг 12. Переменная i равна 11, сравниваем A[11] и A[0] - 15 <= 4. Это условие ложно. В программе ничего не поменяется. На этом цикл прекратит свою работу. Переменная s останется равная 16, что и будет ответом к заданию.

Ответ: 16.



Добавить комментарий


Защитный код
Обновить

© 2019 Информатика и ИКТ. Все права защищены

^ Наверх