Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число A, не превосходящее 109, и выводится количество цифр в десятичной записи этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
| Бейсик | Паскаль |
|---|---|
DIM A AS LONG INPUT A cnt = 0 WHILE A > 1 cnt = cnt + A MOD 10 A = A \ 10 WEND PRINT cnt END
| var A: longint; cnt: integer; begin readln(A); cnt := 0; while A > 1 do begin cnt:=cnt + A mod 10; A := A div 10; end; writeln(cnt); end.
|
| Си++ | Алгоритмический язык |
#include <iostream> using namespace std; int main() { long int A; int cnt; cin >> A; cnt = 0; while (A > 1) { cnt = cnt + A%10; A = A /10; } cout « cnt « endl; } | алг нач цел A, cnt ввод A cnt := 0 нц пока A > 1 cnt := cnt + mod(A, 10) A := div(A, 10) кц вывод cnt кон |
| Python | |
A = int(input()) cnt = 0 while A > 1: cnt += A % 10 A //= 10 print(cnt) | |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 111.
2. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
а) выпишите строку, в которой сделана ошибка;
б) укажите, как исправить ошибку: приведите правильный вариант строки.
Обратите внимание на то, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Решение использует запись программы на Паскале. Допускается использование программы на трёх других языках.
1. Программа выведет число 2.
2. Первая ошибка. Неверное условие продолжения цикла.
Программа не будет рассматривать старшую цифру числа, если она равна 1.
Строка с ошибкой:
while A > 1 do
Возможные варианты исправления:
while (A >= 1) do
или
while (A > 0) do
При этом замена на while (A >= 0) do корректной не является.
3. Вторая ошибка. Неверный подсчёт количества цифр (переменная cnt).
Вместо количества цифр числа программа считает их сумму.
Строка с ошибкой:
сnt := cnt + A mod 10;
Возможный вариант исправления:
сnt := cnt + 1;

