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


Данил Душистов: «Решение 50 типовых задач по программированию на языке Pascal»


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

Данил Душистов: «Решение 50 типовых задач по программированию на языке Pascal» 
58 
Здесь в первом операторе тела цикла происходит проверка произведения каждых двух delta по 
уже упомянутой формуле (II) из 
задачи 32. Далее идет «сдвиг» правого члена текущей пары и ввод 
нового элемента вместо него. Проще говоря, если, например, у нас в a находился 1-й член последо-
вательности, а в b – 2-й, то данным способом мы переносим 2-й член в переменную a и считываем 
3-
й член в переменную b, после чего можно проводить следующее сравнение. 
Если введенный элемент – не ноль, то цикл продолжается, и исследуется знак произведения 
delta
1
и следующего вычисленного delta. Если условие монотонности нарушается на каком-либо 
шаге, то дальнейшая проверка бессмысленна, и можно переходить к выводу результата. 
Каким же будет развитие событий после выхода из цикла? 
1) 
Если выход был осуществлен через break, то есть по условию нарушения строгой монотон-
ности, то можно вывести на экран значение выражения delta * (a – b) > 0, что даст ответ 
false
2) 
Если цикл завершился по вводу нуля, то последовательность строго монотонна, и нужно, 
соответственно, выводить ответ true. Однако здесь мы сталкиваемся с 
проблемой из за-
дачи 45, связанной с тем, что вводимый ноль не обрабатывается в основном цикле, так как 
не входит в последовательность, однако он вводится в обрабатываемую переменную b
чтобы можно было выйти из цикла. Однако из-за этого с помощью оператора writeln(delta 
* (a – b) > 0) 
мы можем получить неправильный ответ, так как в последовательность обра-
батывается с вводимым нулем включительно. 
Например, последовательность 1 2 3 0 строго монотонна, хотя программа выдаст ответ false
потому что по выходе из цикла delta будет содержать число –1, a – число 3, b – число 0, и 
выражение –1 * (3 – 0) > 0 – неверно. 
На этот раз мы справимся с проблемой по-другому. Легко понять, что если после выхода из 
цикла b = 0, то последовательность строго монотонна, так как проверка прошла по всем delta вплоть 
до ввода ограничителя. Если же после выхода b отлично от 0, то был совершен выход по break в 
теле цикла и последовательность не является строго монотонной. Поэтому логично оформить вывод 
ответа так: 
writeln(b = 0); 
Кстати, в такой форме можно осуществить вывод и в 

Download 1.52 Mb.

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




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