СДАМ ГИА: РЕШУ ЕГЭ
Образовательный портал для подготовки к экзаменам
Информатика
≡ информатика
сайты - меню - вход - новости




Задания
Версия для печати и копирования в MS Word
Задание 24 № 7350

Дано натуральное число N, не превосходящее 108. Необходимо найти и вывести число, которое получится при записи N справа налево и удалении всех девяток. Ведущие нули выводить не надо. Если в числе N нет цифр кроме девяток и нулей, необходимо вывести 0. Например, при вводе числа 1984 нужно вывести 481, а при вводе 2009 нужно вывести 2. Для решения этой задачи ученик написал такую программу:

 

БейсикПаскаль

DIM N, M AS LONG

DIM D AS INTEGER

INPUT N

M = 0

WHILE N>1

D = N MOD 10

IF D<9 THEN

M = M + D

END IF

N = N \ 10

WEND

PRINT M

END

var n, m: longint;

d: integer;

begin

read(n);

m := 0;

while n>1 do begin

d := n mod 10;

if d < 9 then begin

m := m + d;

end;

n := n div 10;

end;

write(m);

end.

Си++Алгоритмический

#include <iostream>

using namespace std;

int main(){

long int n, m;

int d;

cin >> n;

m = 0;

while (n>1) {

d = n%10;

if (d<9) {

m = m + d;

}

n = n / 10;

}

cout << m;

}

алг

нач

цел n, m

цел d

ввод n

m := 0

нц пока n>1

d := mod(n,10)

если d<9 то

m := m + d

все

n := div(n,10)

кц

вывод m

кон

Python

n = int(input())

m = 0

while n > 1:

    d = n % 10

    if d < 9:

        m = m + d

    n //= 10

print(m)

 

 

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

1. Напишите, что выведет эта программа при вводе числа 1984.

2. Приведите пример числа, при вводе которого программа выдаст верный ответ.

3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.

 

Обратите внимание: Вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.

Решение.

1. При вводе числа 1984 программа выведет число 12.

Комментарий. Приведённая программа выводит сумму цифр числа, отличных от 9, при этом если старшая цифра равна 1, она не учитывается.

2. Примеры чисел, для которых программа даёт верный ответ: 990909, 996, 96909.

3. Ошибки содержатся в двух строках программы.

 

1. Неверное условие цикла. При данном условии не обрабатывается старшая цифра числа, если она равна 1.

2. Неверная операция добавления цифры к записи: чтобы цифра d дописывалась после m, а не прибавлялась арифметически, нужно умножать m на 10.

Проверка значения цифры d < 9 может показаться неверной, но в действительности она записана правильно. Обычно в подобных задачах используется условие d < > 9, но поскольку d — цифра, а 9 — наибольшее возможное значение цифры, эти два условия эквивалентны и, следовательно, взаимозаменяемы.

 

Пример исправления для языка Паскаль

Первая строка с ошибкой:

while n>1 do begin

Исправленная строка:

while n>0 do begin

Другой вариант исправления:

while n>=1 do begin

Вторая строка с ошибкой:

m := m + d;

Исправленная строка:

m := 10*m + d;

 

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

Допустимы избыточные скобки, не изменяющие правильный порядок действий.