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

