Решение: Исправление программы обработки чисел
На обработку поступает последовательность из четырёх неотрицательных целых чисел. Некоторые числа могут быть одинаковыми. Нужно написать программу, которая выводит количество чётных чисел в исходной последовательности и сумму таких чисел. Если чётных чисел нет, требуется вывести «NO». Вводимые числа не превышают 1000. Программист написал программу неправильно. Достаточно указать ошибки и способ их исправления для одного языка программирования.
Последовательно определите результат работы программы для последовательности $20\ 93\ 40\ 39$, приведите пример последовательности, содержащей хотя бы одно чётное число, для которой программа выведет правильный ответ, а затем найдите и исправьте не более двух ошибок в программе на Python. Исправление каждой ошибки должно затрагивать только строку, в которой находится ошибка.
Решение по шагам
7 шаговВ последовательности $20\ 93\ 40\ 39$ чётными являются числа 20 и 40. Они занимают позиции 1 и 3. Программа увеличивает count два раза, поэтому count становится равным 2.
Из-за ошибки программа складывает номера позиций, а не сами чётные числа: $sum = 1 + 3 = 4$. Поэтому она выводит сначала 2, затем 4.
Пример последовательности, для которой ошибка сложения не приводит к неправильному результату: $1\ 2\ 1\ 1$. Единственное чётное число равно 2 и стоит на позиции 2. Программа выводит 1 и 2, что совпадает с правильным ответом.
Первая ошибка находится в строке `sum = sum + i`: вместо номера позиции нужно прибавлять введённое чётное число.
Правильная строка: `sum = sum + x`.
Вторая ошибка находится в строке `if sum > 0:`. Проверка суммы неверна, поскольку чётные числа могут быть равны нулю. Например, при наличии числа 0 сумма равна 0, но выводить «NO» нельзя.
Правильная строка: `if count > 0:`. Она проверяет, встретилось ли хотя бы одно чётное число.
1) Программа выведет 2 и 4. 2) Например, последовательность 1 2 1 1: правильный ответ — 1 и 2, и программа выведет то же самое. 3) Исправления в Python: `sum = sum + i` заменить на `sum = sum + x`; `if sum > 0:` заменить на `if count > 0:`.
Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.
Где здесь ошибаются
Складывать номера позиций чётных чисел вместо самих чисел.
Считать, что сумма равна нулю только при отсутствии чётных чисел.
Не учитывать, что 0 является чётным числом.
Указывать исправления, изменяющие сразу несколько строк программы.