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