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


ВЛОЖЕННЫЕ ЦИКЛЫ


Ранее мы определили слово с именем ПРОИЗВЕДЕНИЯ, в котором содержался цикл DO. При желании можно было бы поместить слово ПРОИЗВЕДЕНИЯ внутрь другого цикла DO, например: : ТАБЛИЦА CR 11 1 DO I ПРОИЗВЕДЕНИЯ LOOP ;

В результате мы получили бы таблицу умножения в таком виде: 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 и т.д. 10 20 30 40 50 60 70 80 90 100

так как I во внешнем цикле обеспечивает аргумент для слова ПРОИЗВЕДЕНИЯ.

Циклы тоже можно вкладывать один в другой только в пределах одного определения: : ТАБЛИЦА CR 11 1 DO 11 1 DO I J * 4 .R LOOP CR LOOP ;

Обращаем ваше внимание на тот случай, когда во внутреннем цикле находится фрагмент I J *

Если I копирует индекс того цикла, внутри которого само расположено, то слово J копирует индекс следующего внешнего цикла. Поэтому выражение I J * приведет к перемножению двух индексов. Таким образом мы создаем значения нашей таблицы.

Что можно сказать теперь о выражении 4 .R

Это всего лишь видоизмененный оператор, который используется для печати чисел в табличной форме с выравниванием их по вертикали. Цифра 4 определяет заданное число позиций в столбце. Новую таблицу можно теперь распечатать так: 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 и. д.

Под каждое число выделено четыре позиции независимо от того, сколько цифр содержится в данном числе. Слово .R означает «вывод числа, выравненного вправо».

+LOOP

Если вы хотите, чтобы значение индекса на каждом шаге выполнения цикла изменялось не на единицу, а на некоторую другую величину, то вместо LOOP можно использовать слово +LOOP. Для этого слова в стеке должно находиться число, значение которого является приращением индекса на каждом шаге. Например, в определении : ЧЕРЕЗ-ПЯТЬ 50 0 DO I . 5 +LOOP ;

индекс всякий раз будет увеличиваться на пять, что приведет к следующему результату:ЧЕРЕЗ-ПЯТЬ 0 5 10 15 20 25 3В 35 40 45 ок

(Представляете, о каких гигантских шагах идет речь.)

Отрицательное приращение заставляет цикл выполняться в обратном направлении, например:: СНИЖЕНИЕ -10 0 DO I . -1 +LOQP ;




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