MathCAD

       

Метод половинного деления III (QBasic)


В аналогичной BASIC-программе (на рис. 6.21 она вписана в структурную диаграмму) также обошлись без альтернативы. Более того, удалось избавиться и от переменной-диспетчера Flag, заменив два цикла while на один цикл, но с двумя выходами из середины – одним условным, а вторым безусловным.

Весь фокус программ на рис. 6.20 и 6.21

в том, что альтернатива – это средство ускоренного «путешествия» по алгоритму только в одну сторону (сверху вниз и слева направо), а цикл – в обе. Отсюда и ненужность (в теоретическом плане, конечно, а не в практическом[36]) альтернативы. Цикл Do [...] If

... Then [...] Exit Do [...] Loop можно считать гибридом цикла и альтернативы.

Доказательством теоремы Дейкстры может служить факт, что до сих пор не было случая, когда задуманный алгоритм нельзя было бы реализовать, используя только цикл и альтернативу[37]. Если альтернативу исключить, то основная структурная теорема должна звучать так: «Алгоритм любой сложности можно реализовать, используя только цикл». Вот это-то теоретическое положение вводом операторов break, continue и return подсовывает задним числом язык программирования Mathcad под свой фундамент. Обращаю внимание на несовершенный вид глагола – «подсовывает», а не «подсунул» – цикл с выходом из середины на языке Mathcad осуществим через насилие над циклом while (рис. 6.18). При этом приходится писать в заголовке цикла какую-нибудь тривиальную истину: «Волга впадает в Каспийское море».

Теорему Дейкстры следует «понизить в звании» и называть леммой, то есть вспомогательной теоремой, служащей для доказательства основной.

Здесь мы вернулись к спорам, бушевавшим лет 30 назад. Операторы break, continue и return, введенные в язык Mathcad, дали нам повод напомнить о них. Эти операторы по принципу «и вашим и нашим» примирили сторонников и противников оператора перехода к метке.



Содержание раздела