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




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

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

 

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

DIM N, M AS LONG

DIM D AS INTEGER

INPUT N

M = 0

WHILE N>=1

D = N MOD 10

IF D>1 THEN

M = 10*D + M

END IF

N = (N – D) \ 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 > 1 then begin

m := 10*d + m;

end;

n := (n – d) 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>1) {

m = 10*d + m;

}

n = (n – d) / 10;

}

cout << m;

}

алг

нач

цел n, m

цел d

ввод n

m := 0

нц пока n>=1

d := mod(n,10)

если d>1 то

m := 10*d + m

все

n := div(n-d,10)

кц

вывод m

кон

Python

n = int(input())

m = 0

while n >= 1:

    d = n %10;

    if d > 1:

        m = 10*d + m

    n = (n – d) // 10

print(m)

 

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

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

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

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

 

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

Решение.

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

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

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

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

1. Неверное условие проверки цифры. Приведённое условие вычеркивает не только единицы, но и нули.

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

 

Условие цикла n>=1 может показаться неверным, но в действительности оно записано правильно. Обычно в подобных задачах используется условие n > 0, но для целого n эти два условия эквивалентны и, следовательно, взаимозаменяемы.

Неверной может показаться операция изменения N (n:=(n – d) div 10), но ошибки здесь нет. Вычитание d — лишнее действие, но оно не оказывает влияния на результат всего выражения, поэтому его нельзя считать ошибочным.

 

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

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

if d > 1 then begin

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

if d <> 1 then begin

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

m := 10*d + m;

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

m := 10*m + d;

 

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

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