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

