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

         

ДЛЯ НАЧИНАЮЩИХ


7.1. Вероника Вэйнрайт не могла вспомнить верхнее значение для чисел одинарной длины со знаком. У нее не было книги, по которой она могла бы справиться, а была только Форт-система, поэтому она написала определение N-MAX с использованием цикла BEGIN ... UNTIL. После выполнения этого определения у нее получилось следующее: 32767 ok

Восстановите написанное ею определение.

7.2. (Данное упражнение позволит вам приобрести навыки работы с битами.) Прежде всего, если вы не сделали этого ранее, определите слово BINARY.

а) Разряды внутри 16-разрядной ячейки нумеруются с 0 до 15 справа налево, так что нулевым разрядом является самый младший бит, а 15-м - самый старший.

Определите слово с именем БИТ, которое переводило бы номер разряда (от 0 до 15) в маску, соответствующую этому разряду, например 0 бит соответствует маске 1, бит 1 - маске 2, бит 3 - маске 4 и т. д. (Совет: проще всего использовать цикл DO.)

б) Пусть в стеке находится значение, представляющее некоторый массив из 16разрядов (назовем его «битовый!»). Определите слово с именем УСТАНОВИТЬ-БИТ, которое устанавливало бы в единицу заданный бит в массиве «битовый!» при следующей стековой нотации: (битовый! номер-бита - битовый2). Например, если в стеке находится битовый шаблон, равный двоичному числу 1000, и вы выполняете последовательность команд 1 УСТАНОВИТЬ-БИТ (в десятичной системе), то получите в результате 1010.

в) Определите слово ОЧИСТИТЬ-БИТ, которое сбрасывает заданный бит. Стековая нотация та же, что и для слова УСТАНОВИТЬ-БИТ. Например: BINARY 11111111 DECIMAL 5 ОЧИСТИТЬ-БИТ 7 ОЧИСТИТЬ-БИТ BINARY U. 101011111

г) Определите слово ДАЙ-БИТ, вносящее в стек указанный бит (выбранный посредством маски из массива «битовый»), который мог бы служить аргументом оператору IF (т. е. если бит установлен в единицу, то в стек помещается значение «истина», если нет, - «ложь»). Стековая нотация выглядит следующим образом: (битовый номер-бита - бит).
Например:BINARY 1001 DECIMAL DUP 0 ДАЙ-БИТ . 1 ok DUP 1 ДАЙ-БИТ . 0 ok 3 ДАЙ-БИТ . 8 ok

д) Определите слово с именем ПЕРЕКЛЮЧИТЬ-БИТ с той же стековой нотацией, что и для слов УСТАНОВИТЬ-БИТ и ОЧИСТИТЬ-БИТ, которое переключало бы заданный бит (устанавливало бы его в единицу, если бы он был сброшен, и наоборот).

е) Пусть заданы две битовые последовательности, причем вторая получена путем изменения значений нескольких битов первой. Определите слово с именем ИЗМЕНЕНИЕ, которое воспроизводило бы битовую маску с измененными битами.

7.3. Напишите определение, которое заставило бы зазвонить колокольчик на вашем терминале три раза Убедитесь в том, что перерыв в звучании достаточен для того, чтобы отдельные звонки не слились в один длинный звонок. Всякий раз при звучании колокольчика на экране терминала должно появляться слово БИП.

Упражнения 7.4 и 7.5 посвящены выполнению операций над числами двойной длины.

7.4 а) Перепишите созданные в гл. 5 определения перевода значений температур из одной шкалы в другую в предположении, что вводимые в результирующие значения температур должны быть представлены целыми числами двойной длины со знаком с коэффициентом масштабирования 10 (т. е. должны быть умножены на 10). Например, если вы вводите фактическое значение 10.5°, то оно будет представлено 32-разрядным целым числом со значением 105.

б) Напишите слово для форматного вывода с именем .ГРАДУСЫ, которое будет выдавать 32-разрядное целое с коэффициентом масштабирования 10 как строку цифр с десятичной точкой и одной дробной цифрой. Например:12.3 .ГРАДУСЫ<return> 12.3 ok

в) Преобразуйте следующие значения температур:0.0 °F в °С 212.0 °F в °С 20.5 °F в °С 16.0 °С в °F -40.0 °С в °F 100.0 °К в °С 100.0 °К в °F 233.0 °К в °С 233.0 °К в °F

7.5, а) Напишите программу, которая вычисляет значение полинома 7х2 + 20х + 5 при заданном х и выводит результат в виде числа двойной длины.

б) Какое максимальное значение может принимать х, чтобы при вычислении результата как 32-разрядного числа со знаком не произошло переполнения?


Содержание раздела