Даны 4 целых положительных числа. Необходимо выбрать из них и вывести на экран число с наибольшей последней цифрой. Если в наборе несколько чисел с одинаковой наибольшей последней цифрой, нужно вывести наибольшее из этих чисел. Для решения этой задачи ученик написал программу, но, к сожалению, его программа неправильная. Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
| Бейсик | Python |
|---|---|
DIM M, X, DX AS INTEGER M = 1 FOR I = 1 to 4 INPUT X DX = X MOD 10 IF DX > M MOD 10 THEN M = X ELSE IF DX=M MOD 10 OR X>M THEN M = X END IF END IF NEXT I PRINT M
| m = 1 for i in range (4): x = int(input()) dx = x % 10 if dx > m%10: m = x else: if dx == m%10 or x>m: m = x print(m)
|
| Паскаль | Алгоритмический язык |
var m, x, dx, i: integer; begin m := 1; for i:=1 to 4 do begin readln(x); dx := x mod 10; if dx > m mod 10 then m :=x else begin if (dx=m mod 10) or (x>m) then m :=x end end; write(m) end.
| алг нач цел m, x, dx, i m := 1 для i от 1 до 4 ввод x dx := mod(x,10) если dx > mod(m,10) то m := x иначе если dx = mod(m,10) или x>m то m := x все все кц вывод m кон |
| Си++ | |
#include <iostream> using namespace std;
int main() { int m, x, dx, i; m = 1; for (i=1; i<=4; ++i) { cin >> x; dx = x%10; if (dx > m%10) m = x; else { if (dx==m%10 || x>m) m = x; } } cout << m; return 0; }
| |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе чисел 19, 29, 104, 16.
2. Приведите пример исходных данных, при вводе которых программа, несмотря на ошибки, выведет верный ответ.
3. Найдите в программе все ошибки (известно, что их не больше двух) и исправьте их. Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
1. При вводе указанных чисел программа выведет число 16.
2. Программа выводит верный ответ A, если после ввода A не вводится никакое число, которое больше A. Пример такого набора: 15, 20, 37, 32.
3. В программе есть две ошибки.
Первая ошибка: Неверная инициализация. Если все числа в наборе заканчиваются цифрой 0, то (в случае исправления второй ошибки) вместо правильного ответа будет выводиться 1.
Строка с ошибкой:
m := 1;
Верное исправление:
m := 0;
Вторая ошибка: Неверное логическое условие. При рассмотрении случая, когда последняя цифра нового числа равна текущей максимальной, используется неверная логическая операция. В результате, если новое число больше числа с максимальной последней цифрой, будет зафиксировано новое число, даже если его последняя цифра меньше.
Строка с ошибкой:
if (dx=m mod 10) or (x>m)
Верное исправление:
if (dx=m mod 10) and (x>m)

