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