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