Дано целое положительное число N ≥ 10. Необходимо найти наибольшую сумму двух соседних цифр в десятичной записи N. Например, для N = 2018 нужно получить ответ 9, а для N = 2010 ответ 2.
Для решения этой задачи ученик написал программу, но, к сожалению, его программа неправильная.
Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
| Бейсик | Python |
|---|---|
DIM N,M,D1,D2,S AS INTEGER INPUT N M = 0 D1 = N MOD 10 WHILE N > 0 D2 = N MOD 10 S = D1 + D2 IF S > M THEN M = S END IF D1 = N MOD 10 N = N \ 100 WEND PRINT M
| n = int(input()) m = 0 d1 = n%10 while n>0: d2 = n % 10 s = d1 + d2 if s > m: m = s d1 = n%10 n //= 100 print(m)
|
| Паскаль | Алгоритмический язык |
var n,m,d1,d2,s: integer; begin readln(n); m := 0; d1 := n mod 10; while n > 0 do begin d2 := n mod 10; s := d1 + d2; if s > m then m := s; d1 := n mod 10; n := n div 100 end; writeln(m) end.
| алг нач цел n,m,d1,d2,s ввод n m := 0 d1 := mod(n,10) нц пока n > 0 d2 := mod(n,10) s := d1 + d2 если s > m то m := s все d1 := mod(n,10) n := div(n,100) кц вывод m кон |
| С++ | |
#include <iostream> using namespace std; int main() { int n,m,d1,d2,s; cin >> n; m = 0; d1 = n % 10; while (n > 0) { d2 = n % 10; s = d1 + d2; if (s > m) m = s; d1 = n % 10; n /= 100; } cout << m; return 0; }
| |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе N = 2018.
2. Приведите пример числа N, при котором программа выведет верный ответ. Укажите этот ответ.
3. Найдите в программе все ошибки (известно, что их не больше двух) и исправьте их. Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Достаточно указать ошибки и способ их исправления для одного языка программирования.
Обратите внимание: Вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.
1. При вводе N = 2018 программа выведет число 16.
2. Примеры чисел, при вводе которых программа выводит верные ответы: 511 (ответ 6), 7104 (ответ 8), 9708 (ответ 16).
3. Программа содержит две ошибки.
Первая ошибка. Неверная инициализация d1. Из-за этой ошибки удвоенная последняя цифра рассматривается как одна из сумм.
Вторая ошибка. Неверное изменение n. Из-за этой ошибки рассматриваются суммы цифр, расположенных на нечётных, считая справа, позициях
Пример исправления для языка Паскаль:
Первая ошибка:
d1 := n mod 10;
Исправленная строка:
d1 := 0;
Вторая ошибка:
n := n div 100
Исправленная строка:
n := n div 10
В программах на других языках ошибочные строки и их исправления аналогичны.
Незначительной опиской, не влияющей на оценку, следует считать отсутствие служебных слов и знаков после содержательной части исправления (например, слова do или точки с запятой).
Примечание. В программе два раза встречается одинаковая строка. Исправлять следует строку инициализации, расположенную перед циклом. Если в работе ученика ошибочная строка названа правильно, но не указано, какая из двух возможных имеется в виду, это не считается ошибкой.

