Задание №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.