Найти тему
sДаёшь ОГЭ/ЕГЭ

ЕГЭ по информатике. Задание 24

Задание 24 характеризуется повышенным уровнем сложности,
время выполнения – 30 минут, максимальный балл — 3. В среднем это задание выполняют 50% сдающих.

Для выполнения этого задания прежде всего нужно выполнить трассировку программы с заданным значением. Это поможет найти ошибки.

Самая распространенная ошибка, которую можно найти и исправить – это неправильное использование вложенных условных операторов. Для усложнения поиска возможно неправильное форматирование текста (неправильно поставленные отступы).

Кроме того, часто присутствует ошибка при вводе или выводе. Обязательно нужно проверить, та ли информация выводится на экран.

Особого внимания требует и инициализация переменных.

Рассмотрим пример:

На об­ра­бот­ку по­сту­па­ет по­ло­жи­тель­ное целое число, не пре­вы­ша­ю­щее 10^9. Нужно написать программу, ко­то­рая выводит на экран сумму цифр этого числа, меньших 7. Если в числе нет цифр, меньших 7, тре­бу­ет­ся на экран вывести 0. Про­грам­мист написал программу не­пра­виль­но. Ниже эта программа для Вашего удобства при­ве­де­на на пяти языках про­грам­ми­ро­ва­ния. ( Я беру только Паскаль)
-2
По­сле­до­ва­тель­но вы­пол­ни­те следующее.
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

Еще больше интересного материала в группе в ВК и на сайте. Кроме этого, можете воспользоваться услугами репетитора.

Наука
7 млн интересуются