Начальный курс программирования на языке Форт


ВЫХОД ИЗ ЦИКЛА (LEAVE) И ВЕТВЛЕНИЕ (BRANCH)


Существует способ написания цикла со счетчиком, при котором выполнение цикла может закончиться раньше, чем будет достигнуто заданное значение границы. Для этого нужно с помощью слова LEAVE запрограммировать внутри цикла DO изменение условия с «истины» на «ложь». LEAVE заставляет цикл немедленно завершиться1.

Перепишем наше прежнее определение слова СЛОЖНЫЕ-ПРОЦЕНТЫ. Теперь мы не будем запускать цикл ровно 20 раз, а организуем завершение этого цикла либо после его 20-го выполнения, либо после удвоения денежной суммы — в зависимости от того, какое из событий произойдет раньше.

Добавим следующую фразу: 2000 > IF LEAVE THEN

как в следующем тексте:: УДВОЕНО ( вклад процент — ) SWAP 21 1 DО CR ." Год " I 2 .R 3 SPACES 2DUP R% + DUP ." Сумма " . DUP 2000 > IF CR ." Более чем удвоено через" I . ." лет " LEAVE THEN LOOP 2DROP ;

1 Для пользователей систем, разработанных до принятия Стандарта-83. Ранее слово LEAVE вызывало завершение цикла при выполнении очередного слова LOOP или +LOOP.

В результате получим: 1000 6 УДВОЕНО

Год 1 Сумма 1060 Год 2 Сумма 1124 Год 3 Сумма 1191 Год 4 Сумма 1262 Год 5 Сумма 1338 Год 6 Сумма 1418 Год 7 Сумма 1503 Год 8 Сумма 1593 Год 9 Сумма 1689 Год 10 Сумма 1790 Год 11 Сумма 1897 Год 12 Сумма 2011

Более чем удвоено через 12 лет

В одном из упражнений в конце главы вам предлагается переработать слово УДВОЕНО таким образом, чтобы оно выбирало из стека в виде аргументов норму процента и начальную сумму и выполняло бы вычисления до получения удвоенной начальной суммы, после чего слово LEAVE завершало бы эти вычисления.

Слово LEAVE ведет себя, как и положено при использовании его во вложенных операторах цикла DO: оно просто «покидает» цикл, в котором находится. В одном цикле может употребляться несколько слов LEAVE. Цикл завершается при встрече первого из них.

Согласно Стандарту-83, любой код, размещенный после сочетания IF LEAVE THEN, не будет исполнен на последнем шаге.


Начало  Назад  Вперед