Данил Душистов: «Решение 50 типовых задач по программированию на языке Pascal»
59
2.
3.
var
4.
a, b: word;
5.
delta: integer;
6.
7.
begin
8.
read(a);
9.
if a <> 0 then read(b) else b := 0;
10.
delta := a - b;
11.
while b <> 0
do begin
12.
if delta * (a - b) <= 0 then break;
13.
a := b;
14.
read(b)
15.
end;
16.
if a = 0 then b := 1;
17.
writeln(b = 0)
18.
end.
Стоит отметить, что на первом шаге в основном цикле значение
a и
b еще не изменено, и грубо
говоря,
delta в строке 12 умножается само на себя. Это нужно для того,
чтобы обеспечить правиль-
ную обработку последовательности из двух одинаковых чисел, которая не является строго моно-
тонной. Например, если на вход
подается последовательность k k 0,
k – некоторое натуральное
число, то
delta будет равно 0 (строка 10), и при входе в цикл будет осуществлен выход по
break
(
строка 12), что повлечет вывод
false, так как
b отлично от 0.
Если бы мы в цикле сначала осуществили сдвиг последовательности и ввод третьего члена (то
есть, переместили бы строки 13-14 на одну позицию вверх, а строку 12 поместили бы после них), то
по выходе из цикла через
break b уже было бы равно 0,
что повлекло бы вывод true, а это неверно.
Do'stlaringiz bilan baham: