Требовалось написать программу, которая получает на вход натуральное число N, не превосходящее 109, и выводит число, которое получается из N после удаления всех единиц; порядок остальных цифр при этом не меняется. Например, число 19520125 должно быть преобразовано в число 952025. Число, в котором все цифры — единицы и нули, должно быть преобразовано в 0. Незначащие нули в старших разрядах полученного числа печатать не нужно.
Программист торопился и написал программу неправильно.
| Бейсик | Паскаль |
|---|---|
DIM N, R, T AS LONG DIM d AS INTEGER INPUT N R = 0 T = 1 WHILE N > 0 d = N MOD 10 IF d <> 1 THEN R = R + d * T T = T + 1 END IF N = N \ 10 WEND PRINT T END | var N, R, T: longint; d: integer; begin readln(N); R:=0; T:=1; while N>0 do begin d := N mod 10; if d<>1 then begin R := R + d*T; T := T+1 end; N := N div 10; end; writeln(T); end. |
| Си++ | Алгоритмический |
#include <iostream> using namespace std; int main() { long int N, R, T; int d; cin >> N; R = 0; T = 1; while (N > 0) { d = N % 10; if (d != 1) { R = R + d*T; T = T+1; } N = N / 10; } cout << T; } | алг нач цел N, R, T, d ввод N R := 0 T := 1 нц пока N > 0 d := mod(N, 10) если d <> 1 то R := R + d*T T := T+1 все N := div(N, 10) кц вывод T кон |
| Python | |
N = int(input()) R=0 T=1 while N > 0: d = N % 10 if d != 1: R = R + d*T T = T+1 N //= 10 print(T) | |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 314.
2. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) Выпишите строку, в которой сделана ошибка.
2) Укажите, как исправить ошибку — приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения.
Элементы ответа:
1.Программа выведет число 3. (Примечание Программа выводит число, которое на 1 больше
количества содержащихся в исходном числе цифр, не равных 1).
2. Первая ошибка. Неверное изменение переменной T.
Строка в программе на Паскале:
T := T+1
Правильная строка:
T := T*10
3. Вторая ошибка. Программа выводит значение переменной T, а не число R, в которое преобразуется исходное число. Строка в программе на Паскале:
writeln(T);
Правильная строка:
writeln(R);

