egeinformnata.ru

Этот сайт предназначен для подготовке к ЕГЭ по информатике

Рекомендации по выполнению 24 задания

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

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

Во втором пункте необходимо предложить свои исходные данные, при которых программа будет давать верный ответ несмотря на ошибки. Здесь тоже возникают определенные трудности. Для подбора нужных данных, для начала нужно внимательно прочитать условие задачи и проанализировать выполнения первого пункта. Тогда сразу видно, что идет не так.  Как правило на этом этапе можно определить одну ошибку.

В третьем пункте необходимо указать ошибки, которые допустил автор программы. Причем, переписывать программу нельзя, нужно исправить только одну строку. Обычно в программе присутствует 2 ошибки, но бывает и три. Если Вы нашли только одну ошибку, это означает что вторую Вы не видите. Так же баллы снимают за строку, в которой нет ошибки.

Пример.

Дано целое положительное число N. Необходимо найти и вывести количество и сумму чётных цифр в десятичной записи N. Если чётных цифр в числе нет, нужно вывести слово «NO».

Например, для N=2018 нужно вывести числа 3 (в числе три чётные цифры) и 10 (2+0+8=10), а для N=1993 – слово «NO».

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

Ниже эта программа для Вашего удобства приведена на четырех языках программирования (алгоритмический язык с прошлого года исключили с экзамена).

БэйсикПаскаль
DIM N, D, K, S AS INTEGER INPUT N K = 0 S = 0 WHILE N > 1     D = N MOD 10     IF D MOD 2 = 0 THEN         K = K + 1         S = D     END IF     N = N \ 10; WEND IF S > 0 THEN     PRINT K, S ELSE     PRINT «NO» END IF  var n, d, k, s: integer;begin    readln(n);    k := 0;    s := 0;    while n > 1 do begin        d := n mod 10;        if d mod 2 = 0 then begin            k := k + 1;            s := d        end;        n := n div 10    end;    if s > 0 then        write(k, ‘ ‘, s)    else        write(‘NO’)end.
PythonC++
n = int(input())k = 0s = 0while n > 1:    d = n % 10    if d % 2 == 0:        k += 1        s = d    n = n // 10if s > 0:    print(k,s)else:    print(«NO»)  #include <iostream>using namespace std;int main() {    int n, d, k, s;    cin >> n;    k = 0;    s = 0;    while (n > 1) {        d = n % 10;        if (d % 2 == 0) {            ++k;            s = d;        }        n /= 10;    }    if (s > 0)        cout << k << ‘ ‘ << s;    else        cout << «NO»;    return 0;}

Последовательно выполните следующее.

  1. Напишите, что выведет эта программа при вводе N=2016
  2. Приведите пример трёхзначного числа N содержащего хотя бы одну чётную цифру, при вводе которого программа выведет верный ответ.
  3. Найдите в программе все ошибки (известно, что их не больше двух) и исправьте их. Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.

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

Решение:

1.Не читая условия подставим в программу вместо N число 2016.

  1. N=2016, больше 1. Заходим в цикл while, d=6. Если d четное, то k=1 и s=6. N=201.
  2. N=201, больше 1. Заходим в цикл while, d=1. Если d нечетное, то k=1 и s=6. N=20.
  3. N=20, больше 1. Заходим в цикл while, d=0. Если d четное, то k=2 и s=0. N=2.
  4. N=2, больше 1. Заходим в цикл while, d=2. Если d четное, то k=3 и s=2. N=0.
  5. N=0, не больше 1. Цикл закончился.

Проверяем условие s>0, s=2>0, условие выполняется. Выводим 3 и 2.

В ответ по первому пункту достаточно указать 3 и 2 без объяснений.

2. Нам нужно было найти и вывести количество и сумму чётных цифр в десятичной записи N. У нас было число 2016. Количество четных цифр 3, сумма 8. Мы получили 3 и 2. Значит, неправильно считается сумма. Вместо суммы в программе стоит замена числа s на d. Поэтому подойдет любое число, в котором будет только одна четная цифра. Для примера нам нужно указать трехзначное число. Пусть это будет 257. Программа выведет 1 и 2.

В ответ пишем только число – 257. (Если попросят объяснений, то тогда поясняете)

3. Первая ошибка найдена, это неправильный подсчет суммы.

Вторая ошибка неочевидна, но если мы возьмем для примера число 100, в котором 2 четные цифры, а их сумма равна 0, то программа нам выведет NO. А это неправильно. Отсюда следует, что в последней проверке нужно проверять не сумму, а количество.

Ответ можно оформить следующим образом:

  1. Строка с ошибкой: s=d

Исправленная строка: s+=d (s:=s+d для Паскаля, s=s+d для Бейсика)

  • Строка с ошибкой: if s>0: (if s>0 then)

Исправленная строка: if k>0: (if k>0 then)

Многие указывают в качестве ошибки строчку while n > 1. Эта строка ошибкой не является, так как не влияет на выполнение программы (1 нечетное число, а с нуля число начинаться не может). Поэтому, проверяющий может снять балл. За третье задание балл начисляется только в том случае, если указаны все ошибки и как их исправить.
Будьте внимательны и удачной сдачи экзаменов.
egeinformnata.ru © 2018 Оставляя комментарий на сайте или используя форму обратной связи, вы соглашаетесь с правилами обработки персональных данных. Frontier Theme