Язык программирования Форт



         

Полезная программа - часть 3


Для этого нам потребуется еще один цикл DO. Определим слово

: TESTGRAPH CR 4 0 DO BAR LOOP ;

и теперь введем строчку

5 10 15 20 TESTGRAPH

Вы увидите гистограмму

хххххххххххххххххххх ххххххххххххххх хххххххххх ххххх

Конечно, данное определение будет исполняться только с четырьмя числами, поскольку в TESTGRAPH задано только четыре повторения цикла.

Мы уже почти пришли к нашей программе построения гистограммы, но в нее нужно ввести еще несколько усовершенствований. Во-первых, мы предполагали, что ширина экрана равна 64 позициям, поэтому число больше 64 недопустимо. Нам нужно как-то ограничить длину столбика. Во-вторых, Форт должен каким-либо образом определить, сколько чисел находится в стеке и, следовательно, сколько нужно построить столбиков. Поэтому число 4 в цикле 4 О DO в программе TESTGRAPH нам не нужно. Будем вводить усовершенствования в программу по одному. Во-первых, как можно ограничить длину столбика ? Вот программа, которая может выполнить это:

: LIMITBAR DUP 64 > IF DROP 64 THEN BAR ;

Рассмотрим, как она работает. Она делает копию числа, находящегося на вершине стека, выражение 64 > сравнивает это число с числом 64, и если оно больше 64, то в стек возвращается значение, которое оператор IF интерпретирует как истину. Если оператор IF встречает значение истина, то исполняется та часть программы, которая находится между словами IF и THEN, в данном случае DROP 64, т.е. убрать из стека число, которое там находится, и положить вместо него число 64. Если число в стеке меньше или равно 64, то выражение 64 > возвращает в стек значение ложь, которое оператор IF воспринимает как указание перейти на слово, следующее после THEN, в данном случае BAR. Если число больше 64, т.е. исполняются слова между IF и THEN, то затем процесс продолжается также после слова THEN, но слово BAR печатает 64 литеры "X", т.е. столбик, занимающий всю ширину экрана.

Этот пример требует некоторого осмысления, но главное, что мы хотели бы в нем подчеркнуть, -- это большая важность в языке Форт конструкции IF...THEN.


Содержание  Назад  Вперед