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


ИСПОЛЬЗОВАНИЕ МАССИВА СЧЕТЧИКОВ


Вернемся на нашу птицеферму. Приведем еще один пример на использование массива. Каждый его элемент служит как бы отдельным счетчиком. Следовательно, мы можем дифференцирование вести подсчет числа коробок «очень крупных» яиц, «крупных» яиц и т. д., упакованных машиной.

Вспомните, что в приведенном выше определении РАЗМЕР-ЯИЦ (см. гл. 4) у нас было четыре категории стандартных яиц и две категории нестандартных. 0 БРАК 1 МЕЛКИЕ 2 СРЕДНИЕ 3 КРУПНЫЕ 4 ОЧЕНЬ КРУПНЫЕ 5 ОШИБКА

Давайте создадим массив из шести ячеек: CREATE СЧЕТЧИКИ 12 ALLOT

Счетчики будут увеличиваться с помощью слова +!, так что мы должны иметь средства «обнуления» всех элементов массива перед началом процесса подсчета. Выражение СЧЕТЧИКИ 12 0 FILL

заполняет нулями 12 байтов, начиная с адреса СЧЕТЧИКИ. Если в вашей Форт-системе имеется слово ERASE, то в данной ситуации лучше воспользоваться им. Это слово заполняет заданное число байтов нулями. Ниже показан пример его использования. СЧЕТЧИКИ 12 ERASE

FILL (ЗАПОЛНИТЬ) ( a u b -- ) Заполнение n байтов памяти, начиная с заданного адреса, значением Ь.

ERASE (ОЧИСТИТЬ) ( а n -- ) Заполнение n байтов памяти, начиная с заданного адреса, нулями.

Иногда удобно помещать это выражение внутрь определения: : УСТАНОВИТЬ СЧЕТЧИКИ 12 ERASE ;

Далее определим слово, которое по заданному номеру категории яиц (от 0 до 5) даст нам адрес одного из счетчиков, например: : СЧЕТЧИК ( номер-категории -- а) 2* СЧЕТЧИКИ + ;

и еще одно слово для добавления единицы к счетчику с заданным номером:: УЧЕТ ( номер-категории --) СЧЕТЧИК 1 SWAP +! ;

Здесь 1 служит приращением для слова +!, a SWAP располагает его аргументы в требуемом порядке, т. е. ( n адрес --).

Теперь, например, выражение 3 УЧЕТ увеличит значение счетчика, соответствующего категории крупных яиц.

Определим слово, которое переводит вес на дюжину в номер категории1: : КАТЕГОРИЯ ( вес—на-дюжину — номер-категории) DUP 18 < IF в ELSE DUP 21 < IF I ELSE DUP 24 < IF 2 ELSE DUP 27 < IF 3 ELSE DUP З0 < IF 4 ELSE 5 THEN THEN THEN THEN THEN SWAP DROP ;




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