Решение 50 типовых задач по программированию на языке Pascal Дата размещения сборника в сети
Данил Душистов: «Решение 50 типовых задач по программированию на языке Pascal»
Download 1.52 Mb. Pdf ko'rish
|
Задачи на 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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling