Данил Душистов: «Решение 50 типовых задач по программированию на языке Pascal»
57
4.
L, M, R: integer;
5.
6.
begin
7.
read(L, M, R);
8.
while R <> 0 do begin
9.
if (L - M) * (R - M) <= 0 then break;
10.
L := M;
11.
M := R;
12.
read(R)
13.
end;
14.
if R = 0 then R := L;
15.
writeln((L - M) * (R - M) > 0)
16.
end.
К слову, данная задача может быть обобщена и на случай, когда длина вводимой последова-
тельности не имеет ограничений снизу, то есть, последовательность может также быть пустой или
содержать один член (для двух членов она будет работать корректно – это легко проверить). Для
этого можно выполнить контроль ввода в зависимости от значений первых двух вводимых элемен-
тов и провести инициализацию значений для вывода необходимого для вырожденных случаев от-
вета.
Задача № 45. Проверить, является ли последовательность строго монотонной
Формулировка. Дана последовательность натуральных чисел, ограниченная вводом нуля.
Проверить, является ли эта последовательность строго монотонной.
Решение. Эта задача – упрощенный вариант задачи 32. Вообще, эти две задачи логично было
бы в данном сборнике поменять местами, однако она оказалась на этой позиции из-за тематического
распределения задач.
Единственное отличие от
задачи 32 состоит в том, что в нашем случае члены последователь-
ности вводятся с клавиатуры с помощью оператора read() – их не нужно добывать как цифры неко-
торого числа.
Воспользуемся формулой (II) из
задачи 32:
p = delta
1
* delta
i
Напомним, что если произведение p отрицательно или равно нулю, то последовательность не
строго монотонна, так как нашлись два delta разных знаков. Мы будем двигаться по последователь-
ности в порядке ввода, слева направо, исследуя при этом знаки всех произведений p. Так как delta
1
присутствует в формуле в качестве константы, его значение необходимо вычислить заранее:
read(a, b);
delta := a – b;
В цикле мы будем на каждом шаге считывать один очередной член, поэтому необходимо
«сдвигать последовательность» и считывать его в освободившуюся переменную. Так как в перемен-
ной a хранится левый член каждой пары, а в переменной b – правый член, то очередное число мы
будем считывать в переменную b. Так как ограничитель последовательности – ноль, то и цикл будет
продолжаться до ввода в b нуля:
while b <> 0 do begin
if delta * (a - b) <= 0 then break;
a := b;
read(b)
end;
Do'stlaringiz bilan baham: |