Задание 24 характеризуется повышенным уровнем сложности,
время выполнения – 30 минут, максимальный балл — 3. В среднем это задание выполняют 50% сдающих.
Для выполнения этого задания прежде всего нужно выполнить трассировку программы с заданным значением. Это поможет найти ошибки.
Самая распространенная ошибка, которую можно найти и исправить – это неправильное использование вложенных условных операторов. Для усложнения поиска возможно неправильное форматирование текста (неправильно поставленные отступы).
Кроме того, часто присутствует ошибка при вводе или выводе. Обязательно нужно проверить, та ли информация выводится на экран.
Особого внимания требует и инициализация переменных.
Рассмотрим пример:
На обработку поступает положительное целое число, не превышающее 10^9. Нужно написать программу, которая выводит на экран сумму цифр этого числа, меньших 7. Если в числе нет цифр, меньших 7, требуется на экран вывести 0. Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования. ( Я беру только Паскаль)
Последовательно выполните следующее.
1. Напишите, что выведете эта программа при вводе числа 456.
2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
Достаточно указать ошибки и способ их исправления для одного языка программирования. Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находиться ошибка.
Решение.
Во-первых, в условии сказано, что программа должна выводить сумму цифр числа, меньших 7. Выполним задания по порядку:
1. Нужно написать что выведет на экран программа при вводе числа 456.
Рассмотрим программу построчно:
N = 456;
sum = 0;
Начало цикла:
1-й виток цикла:
digit := 456 mod 10 = 6;
6 < 7 — условие выполняется, следовательно sum := sum + 1 = 0 + 1 = 1;
N := N div 10 = 456 div 10 = 45.
2-й виток цикла:
digit := 45 mod 10 = 5;
5 < 7 — условие выполняется, следовательно sum := sum + 1 = 1 + 1 = 2;
N := N div 10 = 45 div 10 = 4.
3-ий виток цикла:
digit := 4 mod 10 = 4;
4 < 7 — условие выполняется, следовательно sum := sum + 1 = 2 + 1 = 3;
N := N div 10 = 4 div 10 = 0.
N = 0, значит, цикл завершен.
writeln(digit) — digit в последней итерации равно 4.
Ответ: 4.
2. Надо привести пример трёхзначного числа, при вводе которого программа выдаёт верный ответ, несмотря на ошибки.
Сначала определим, что вообще выводит данная программа с учетом ошибок. Выводится значение digit.
В цикле операция digit := N mod 10 выделяет последнюю цифру числа, при повторе цикла, в последнем повторе переменная digit равна старшему разряду числа. Например, вводим 258, программа выводит 2.
А требовалось написать программу, которая выводит сумму цифр числа, меньших 7. Получается, нам надо подобрать такое трёхзначное число, чтобы старший разряд этого числа был равен сумме цифр числа, которые меньше 7. Например, 853. 5 и 3 меньше 7, их сумма равна 8 и "неправильная" программа выведет правильный ответ 8.
Ответ: 853.
3. И последнее, что нужно сделать - найти ошибки в программе.
Ошибка 1. Каждый повтор цикла при выполнении условия к переменной sum прибавляется единица. Программа должна искать сумму разрядов, а не их количество, то есть к переменной sum должна прибавляться переменная digit. Значит строку
sum := sum + 1;
нужно заменить на
sum := sum + digit;
Ошибка 2. Программа выводит значение переменной digit, должна же выводить значение переменной sum. Заменим строку
writeln(digit)
на
writeln(sum)
Ответ: sum := sum + 1; sum := sum + digit;
writeln(digit); writeln(sum).
Еще остановлюсь на указаниях по оцениванию:
Обратите внимание! В задаче требовалось выполнить четыре действия:
1) указать, что выведет программа при конкретном входном числе;
2) указать пример входного числа, при котором программа выдаёт верный ответ;
3) исправить первую ошибку;
4) исправить вторую ошибку.
Для проверки правильности выполнения п. 2) нужно формально выполнить исходную (ошибочную) программу с входными данными, которые указал экзаменуемый, и убедиться в том, что результат, выданный программой, будет таким же, как и для правильной программы. Для 3) и 4) ошибка считается исправленной, если выполнены оба следующих условия:
а) правильно указана строка с ошибкой;
б) указан такой новый вариант строки, что при исправлении другой ошибки получается правильная программа
Выполнены все четыре необходимых действия, и ни одна верная строка не указана в качестве ошибочной - получаете 3 балла.
Не выполнены условия, позволяющие поставить 3 балла. Имеет место одна из следующих ситуаций:
а) выполнены три из четырёх необходимых действий. Ни одна верная строка не указана в качестве ошибочной;
б) выполнены все четыре необходимых действия. Указано в качестве ошибочной не более одной верной строки - получаете 2 балла.
Не выполнены условия, позволяющие поставить 2 или 3 балла. Выполнены два из четырёх необходимых действия - получаете 1 балл.
Не выполнены условия, позволяющие поставить 1, 2 или 3 балла -получаете 0 баллов.
Если остались вопросы, пишите в комментариях. Обязательно отвечу. Если нужно разобрать конкретный пример, также - в комментарии.
Читайте также: Задание 1, Задание 2, Задание 3, Задание 4, Задание 5, Задание 6, Задание 7, Задание 8, Задание 9, Задание 10, Задание 11, Задание 12, Задание 13, Задание 14, Задание 15, Задание 22, Задание 16, Задание 17, Задание 18, Задание 19, Задание 20, Задание 21, Задание 23, Задание 25, Задание 26, Задание 27
Еще больше интересного материала в группе в ВК и на сайте. Кроме этого, можете воспользоваться услугами репетитора.