|
Условия if В then и if ~}B then можно запрограммировать совершенно одинаково, различаться будут лишь операции условного перехода в зависимости от выработанного значения признака со. Итак, программирование любого логического выражения в правой части оператора присваивания или в условии произвольного условного выражения или оператора можно свести к программированию того же выражения в условии оператора вида if В then go to L (1) Такие операторы программируются очень просто благодаря наличию в машинном языке операций условного перехода. Если В — простая логическая переменная, то оператор (1) программируется с помощью команд О ф В (true) 0 Если В == true, то (со : = 1) 0/71 0 L 0 перейти на L ИЛИ 0 ф В 0 0 Если В ее true, то (ш:==0) 0 #0 0 L 0 перейти на L где буква L заменяет адрес, соответствующий метке, обозначенной той же буквой. Второй вариант имеет то преимущество, что способы где Sx и S2 — вать к виду § 3. ПРИЕМЫ ПРОГРАММИРОВАНИЯ ЛОГИЧЕСКИХ ВЫРАЖЕНИЙ 233 представления значения true более разнообразны, тогда как значение false обычно изображается нулевым словом (см. § 1). Приемы программирования оператора (I), если В — отношение, были рассмотрены в § 3 гл. 6. Перейдем к случаю, когда значение В вырабатывается в результате выполнения одной из логических операций. Здесь открываются две возможности. Во-первых, любая логическая операция вырабатывает некоторое значение признака со, которое может быть использовано в последующей операции условного перехода на метку L. Например, оператор if xf\y then go to L может быть реализован командами ОД х у 0 Если х/\у ее true, то (со : = 0) 0 ПО 0 L 0 перейти на L Здесь как и выше, мы предполагаем, что значению false соответствует нулевое слово. Во-вторых, оператор (1) может быть подвергнут дальнейшим преобразованиям, облегчающим его программирование. Так, если выражение В имеет вид В1 Д В2, то оператор if В1ДВ2 then go to L может быть заменен операторами if TBI then go to LI; if B2 then go to L; LI: Оператор if Bl\/B2 then go to L эквивалентен операторам if Bl then go to L; if B2 then go to L Оператор if Bl zd B2 then go to L допускает замену операторами if "1 Bl then go to L; if В 2 then go to L
|