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

