24

Решение: Исправление программы обработки чисел

ЕГЭ · Информатика · Задание 24 · Основы программирования
ПовышеннаяФИПИ8FCDC3Развёрнутое решение≈ 10 минутРазбор в 5 шагов
Условие

На обработку поступает последовательность из четырёх неотрицательных целых чисел (некоторые числа могут быть одинаковыми). Нужно написать программу, которая выводит на экран количество делящихся нацело на 4 чисел в исходной последовательности и сумму таких чисел. Если делящихся нацело на 4 чисел нет, требуется на экран вывести «NO». Известно, что вводимые числа не превышают 1000. Программист написал программу неправильно. Ниже приведена написанная им программа на языке Python.

Последовательно выполните следующие действия:
1. Напишите, что выведет эта программа при вводе последовательности: 20 93 40 39.
2. Приведите пример такой последовательности, содержащей хотя бы одно делящееся нацело на 4 число, что при её вводе приведённая программа, несмотря на ошибки, выведет правильный ответ.
3. Найдите допущенные программистом ошибки и исправьте их. Исправление ошибки должно затрагивать только строку, в которой находится ошибка. Для каждой ошибки выпишите строку, в которой сделана ошибка, и приведите правильный вариант этой строки. Известно, что в тексте программы нужно исправить не более двух строк так, чтобы она стала работать правильно. Достаточно указать ошибки и способ их исправления для языка Python. 0 делится на любое натуральное число.

Python
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 шагов
1

Из чисел 20, 93, 40, 39 нацело на 4 делятся 20 и 40. Поэтому count получает значение 2. Однако программа прибавляет к sum порядковые номера этих чисел: 1 и 3.

$$sum = 1 + 3 = 4$$
2

Так как проверяется условие n > 0, а n равно 4, программа выводит две строки: сначала количество найденных чисел, затем ошибочную сумму.

3

Для примера 1 1 1 4 единственное число, делящееся на 4, стоит на позиции 4. Программа прибавит к сумме его индекс 4, а правильная сумма также равна 4. Поэтому результат программы совпадёт с правильным ответом: 1 и 4.

$$1 \cdot 4 = 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.

Исправлять больше двух строк или переписывать программу полностью.

Закрепить приёмВ теме «Основы программирования» ещё 159 задач — с ответом и таким же разбором.
Тренироваться

Как решать задание 24 ЕГЭ, информатика

Разбор этой задачи разложен на 5 шагов: видно, откуда берётся каждое число и где теряется балл. Ответ приведён рядом с выкладками, а не вместо них.

Задача из темы «Основы программирования»: в ней 160 задач, и у каждой есть такой же разбор. Регистрация не нужна.