Решение: Исправление программы обработки чисел
На обработку поступает последовательность из четырёх неотрицательных целых чисел (некоторые числа могут быть одинаковыми). Нужно написать программу, которая выводит на экран количество чётных чисел в исходной последовательности и максимальное чётное число. Если чётных чисел нет, требуется вывести «NO». Известно, что вводимые числа не превышают 1000. Программист написал программу неправильно. Последовательно выполните следующие действия: 1) определите, что выведет программа при вводе последовательности 2 15 44 15; 2) приведите пример последовательности, содержащей хотя бы одно чётное число, при вводе которой программа, несмотря на ошибки, выведет правильный ответ; 3) найдите допущенные ошибки и исправьте их. Для каждой ошибки выпишите строку, в которой она сделана, и приведите правильный вариант этой строки. Исправление должно затрагивать только строку, в которой находится ошибка. Известно, что нужно исправить не более двух строк. Достаточно указать ошибки и способ их исправления для одного языка программирования. Примечание: 0 делится на любое натуральное число.
1n = 4 2count = 0 3maximum = 1000 4for i in range(1, n+1): 5 x = int(input()) 6 if x % 2 == 0: 7 count += 1 8 if x > maximum: 9 maximum = i 10if count > 0: 11 print(count) 12 print(maximum) 13else: 14 print("NO")
Решение по шагам
6 шаговДля последовательности 2, 15, 44, 15 чётными являются числа 2 и 44, поэтому count после обработки всех чисел равен 2.
Переменная maximum изначально равна 1000. Ни одно введённое число не превосходит 1000, поэтому условие x > maximum ни разу не выполняется. В результате программа выводит количество чётных чисел и исходное значение maximum.
$$2\n1000$$Пример последовательности, для которой программа случайно выдаёт правильный ответ: 1000 15 15 15. Чётных чисел одно, максимальное чётное число равно 1000. Программа также выведет 1 и 1000.
Первая ошибка: maximum = 1000. Если максимальное чётное число равно 1000, это значение допустимо, но сравнение x > maximum не позволяет корректно найти меньшие значения. Кроме того, при отсутствии подходящей замены программа сохраняет значение 1000 даже тогда, когда такого числа во входе нет. Начальное значение следует заменить на 0, так как все числа неотрицательны.
$$\texttt{maximum = 0}$$Вторая ошибка: при нахождении большего чётного числа в maximum записывается номер элемента i, а не само число x. Нужно записывать значение введённого числа.
$$\texttt{maximum = x}$$После исправления программа для каждой последовательности с чётными числами подсчитывает их количество и сохраняет наибольшее из них. При отсутствии чётных чисел выводится NO.
1) Программа выведет: 2 и 1000. 2) Например, последовательность 1000 15 15 15; правильный ответ: 1 и 1000. 3) Исправления в Python: строку maximum = 1000 заменить на maximum = 0; строку maximum = i заменить на maximum = x.
Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.
Где здесь ошибаются
Считать, что программа выводит 2 и 44 для первой последовательности.
Заменить maximum = i на maximum = x, но не исправить начальное значение maximum.
Выбрать в качестве исправления maximum = -1, хотя по условию все числа неотрицательные и требуется исправить не более двух строк.
Привести собственную новую программу вместо исправления конкретных строк исходной программы.
Забыть указать пример последовательности, для которой ошибочная программа случайно работает правильно.