Дано натуральное число N, не превосходящее 10
8. Необходимо найти и вывести число, которое получится при записи N справа налево и удалении всех единиц. Ведущие нули выводить не надо. Если в числе N нет цифр кроме единиц и нулей, необходимо вывести 0. Например, при вводе числа 1984 нужно вывести 489, а при вводе 2001 нужно вывести 2. Для решения этой задачи ученик написал такую программу:
Паскаль |
Си |
var n, m: longint;
d: integer;
begin
(*)
(1) read(n);
(2) m := 0;
(3) while n>=1 do begin
(4) d := n mod 10;
(5) if d > 1 then begin
(6) m := 10*d + m;
(7) end;
(8) n:= (n – d) div 10;
(9) end;
(10) write(m);
end.
|
#include<stdio.h>
main(){
int n, m,d;
(*)
(1) scanf("%d",&n);
(2) m=0;
(3) while (n >= 1) {
(4) d = n % 10;
(5) if (d > 1){
(6) m = 10*d + m;
(7) }
(8) n = (n-d) / 10;
(9) }
(10) printf("%d", m);
}
|
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 1984.
2. Приведите пример числа, при вводе которого программа выдаст верный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки: выпишите строку, в которой сделана ошибка, и приведите правильный вариант
строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения.
В качестве ответа загрузите исправленную программу, в которой добавлена строка на место (*). Строка должна содержать оператор вывода (с переходом на новую строку после выполнения) номеров строк, в которых допущена ошибка (выводить нужно ТОЛЬКО номера слитно без пробелов и запятых)
например:
Паскаль |
Си |
...
begin
(*) writeln('123');
... далее исправленная программа
end.
|
#include<stdio.h>
main(){
...
(*) printf("123\n");
... далее исправленная программа
}
|