Задание 19 тоже часто учащиеся пугаются. Кто-то просто боится программирования, кто-то - конкретно массивов. Я скоро раскрою секрет, какие задания я считаю "страшными" и сложными. А сейчас разберем задание 19. Здесь, как вы уже поняли, важно умение анализировать программы.
Рассмотрим пример:
Проанализируем программу построчно.
Переменные s и n обнуляются. Далее, цикл, в котором последовательно перебираются все элементы массива:
20, 19, 17, 41, 23, 12, 24, 16, 4, 13, 6, 15.
Проверим работу программы, подставив начальные значения. Посмотрим, что делает программа.
При i = 0: A[i]<=A[n], A[0] <= A[0], т.е. 20 = 20,
s := s + i = 0 + 0 = 0,
t:= A[i] = A[0] = 20
A[i]: = A[n], A[0] = A[0] = 20
A[n] = A[0] = t = 20.
При i = 1: A[i]<=A[n], A[1] <= A[0], т.е. 19 < 20,
s := s + i = 0 + 1 = 1,
t:= A[i] = A[1] = 19
A[i]: = A[n], A[1] = A[0] = 20
A[n] = A[0] = t = 19.
При i = 2: A[2]<=A[n], A[2] <= A[0], т.е. 17 < 19,
s := s + i = 1 + 2 = 3,
t:= A[i] = A[2] = 17
A[i]: = A[n], A[2] = A[0] = 19
A[n] = A[0] = t = 17.
Обратите внимание, что в программе нет ни одного оператора, где бы переменной n присваивалось другое значение, то есть на протяжении выполнения всей программы значение переменной n не меняется и равно 0.
Получается, что в цикле в условии каждый последующий элемент сравнивается с нулевым элементом массива. И если встречается элемент меньший нулевого, то переменная s увеличивается на число равное порядковому номеру этого элемента в массиве.
Следующие три оператора - стандартный обмен значениями двух переменных, то есть значение текущего элемента меняется со значением нулевого элемента.
Чтобы решить задачу, нам надо сделать следующее: найти элементы, при которых, будет выполняться цикл, то есть какие элементы будут меньше текущего значения нулевого элемента (который при прохождении через цикл меняет свое значение на значение элемента, который оказался меньше нулевого в начале цикла).
В большей степени нас интересуют порядковые номера этих элементов.
Ну мы уже выяснили, что при i=0, 1 и 2 цикл будет выполняться и по прохождении этих трех витков нулевой элемент будет равен 17.
A[3] = 43 больше 17, цикл выполняться не будет.
A[4] = 23 больше 17, цикл также выполняться не будет.
A[5] = 12 меньше 17, цикл выполняется, s = 3 + 5 = 8, A[0] = 12 (больше нас ничего не интересует).
A[6] = 24 больше 12, цикл не выполняется.
A[7] = 16 больше 12, цикл не выполняется.
A[8] = 4 меньше 12, цикл выполняется, s = 8+8 = 16, A[0] = 4.
И дальше видим, что A[9], A[1] и A[11] больше A[0] и значит никаких изменений не будет.
По заданию нам надо определить значение переменной s. Оно равно 16.
Ответ: 16.
Рассмотрим еще пример:
Иногда достаточно посмотреть действия цикла при одном выполненном витке.
Начальные значения переменных s и n соответственно 9 и 1.
Далее цикл, в котором перебираются все 9 элементов массива:
24, 19, 53, 17, 27, 39, 5, 25, 5, 24.
Если выполняется следующее условие: A[i]<A[n], то элемент A[i] и A[n] обмениваются своими значениями и переменная s увеличивается во столько раз, каков порядковый номер текущего элемента массива.
Рассмотрим выполнение программы при i = 0 и 1.
При i = 0: A[0] = 24, A[n] = A[9] = 24 (кстати, значение переменной n не меняется в программе, то есть A[n] - это всегда последний элемент массива, значение которого как раз меняется на протяжении выполнения программы)
Так вот при i = 0 получаем, что 24=24, цикл не выполняется. Берем следующий элемент.
При i = 1: A[1] = 19, A[9] = 24, 19<24, цикл выполняется, A[1] и A[9] меняются значениями и A[1] = 24, A[9] = 19. Значение A[1] нас теперь мало интересует. s = s*i = 1*1 = 1.
Так вот мы перебираем все элементы массива и если встречаем элемент меньший последнего элемента, то меняем их значения и увеличиваем переменную s во столько раз, каков порядковый номер текущего элемента.
Перебираем:
A[2] = 53 больше 19, цикл не выполняется.
A[3] = 17 меньше 19, цикл выполняется, A[9] = 17, s = 1*3=3.
A[4] = 27 больше 17, цикл не выполняется.
A[5] = 39 больше 17, цикл не выполняется.
A[6] = 5 меньше 17, цикл выполняется, A[9] = 5, s = 3*6=18.
Видим, что в массиве дальше элементов, значение которых меньше 5, нет, то есть цикл больше запускаться не будет.
Ответ: 18.
Если остались вопросы, пишите в комментариях. Обязательно отвечу. Если нужно разобрать конкретный пример, также - в комментарии. Кроме этого, можете воспользоваться услугами репетитора.
Читайте также: Задание 1, Задание 2, Задание 3, Задание 4, Задание 5, Задание 6, Задание 7, Задание 8, Задание 9, Задание 10, Задание 11, Задание 12, Задание 13, Задание 14, Задание 15, Задание 22, Задание 16, Задание 17, Задание 18, Задание 20, Задание 21, Задание 23, Задание 24, Задание 25, Задание 26, Задание 27.