Решение 50 типовых задач по программированию на языке Pascal Дата размещения сборника в сети


Download 1.52 Mb.
Pdf ko'rish
bet65/77
Sana03.02.2023
Hajmi1.52 Mb.
#1152062
TuriРешение
1   ...   61   62   63   64   65   66   67   68   ...   77
Bog'liq
Задачи на Pascal

задачах 32, 43 и 44, с некоторым, однако, 
изменением инициализации входных значений переменных. 
Напоследок необходимо позаботиться о правильной обработке вырожденных случаев. Будем 
считать последовательность из единственного нуля не строго монотонной, в отличие от последова-
тельности из одного члена. Она, кстати, итак уже будет обрабатываться корректно: в a вводится 
некоторое число, а в b вводится 0. При этом не осуществляется вход в основной цикл, и программа 
переходит к выводу выражения b = 0, которое верно. 
Сделаем корректной обработку пустой последовательности. Во-первых, необходимо дать воз-
можность ввода таковой, так как в нашем наброске требуется ввод минимум двух чисел. Для этого 
мы будем считывать сначала a, и если оно отлично от нуля, то считывать b: 
read(a); 
if a <> 0 then read(b) else b := 0; 
При этом если a = 0, то мы обязательно присваиваем значение 0 переменной b, чтобы она была 
определена, и гарантированно не было входа в цикл. Однако в этом случае вывод выражения b = 0 
повлечет вывод true. Чтобы избежать этого, нужна еще одна проверка: если a = 0, то присвоить b 
натуральное число, отличное от 0 (например, 1), что повлечет вывод false
if a = 0 then b := 1; 
Код: 
1.
program MonotonicSequence; 


Данил Душистов: «Решение 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, а это неверно. 

Download 1.52 Mb.

Do'stlaringiz bilan baham:
1   ...   61   62   63   64   65   66   67   68   ...   77




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling