Чтение онлайн

на главную - закладки

Жанры

High Arsen Gonian Academy
Шрифт:

S" lib\include\float.f" INCLUDED

S" lib\include\float2.f" INCLUDED

Но можно только вторую строчку.

Теперь чтобы ввести вещественное число, скажем 0,5, нужно набрать на клавиатуре следующее:

5E-1

До E – это мантисса (число), после экспонента (степень). Мантисса и экспонента могут быть как положительными (знак не требуется), так и отрицательными (в данном случае степень -1, что значит 10 в минус первой степени).

После ввода, вещественное число размещается на соответствующем

ей стеке, поэтому мы не видим его после вывода слова Ok в скобках, так как это другой стек для целых чисел. Чтобы его увидеть нужно ввести «F.». Итак, чтобы проверить, что всё работает как надо, введём код:

5E-1 F.

В ответ увидим:

0.5000000 Ok

Слово «F.», аналогично, как и «.» выводит число на экран, только не с целочисленного стека, а с вещественного.

Теперь мы можем переписать пример 4 для вещественных аргументов:

: B4 ( D -> L ) \ L=Pi*D

314E-2 F* ;

Посчитаем длину окружности диаметром 0,5, набрав следующее:

5E-1 B4 F. \ вызываем слово, которое считает длину и «F.» печатает ответ

1.5700000 Ok

Переделаем таким же образом первые 3 примера для случая с вещественными аргументами, сделав их более универсальными.

Пример 1:

: B1 ( A -> P ) 4E F* ; \ P=4*A

Знак «*» заменяется на «F*», четверка вводится как вещественное число (операция «F*», в отличие от «*» производит операцию над вещественными числами на вещественном стеке). Теперь проверим, посчитаем периметр квадрата со стороной 0,5:

5E-1 B1 F.

2.0000000 Ok

Ответ 2 (0,5*4=2) что является правдой.

Данный пример, так же можно преобразовать, написав в стиле:

: B1 ( A -> P ) \ P=4*A

4E F*

;

Но он настолько маленький и примитивный, что едва ли это необходимо, проще и лаконичней всё оставить на одной строчке. В более сложных и больших примерах код нужно писать структурированным, понятным и разумеется в едином стиле.

Пример 2:

: B2 ( A -> S ) FDUP F* ; \ S=A^2

Опять DUP превращается в FDUP, умножение как в первом случае. Проверим работу слова. Посчитаем площадь квадрата со стороной 0,5:

5E-1 B2 F.

0.2500000 Ok \ 0,5*0,5 = 0,25

Пример 3:

: B3 ( A B -> S P ) \ ( S=A*B P=2*(A+B) )

FOVER FOVER ( A B -> A B A B )

\ Слово FOVER, дублирует слово под вершиной стека на ее вершину т.е. ( A B -> A B A )

\ Повторив его 2 раза получим ( A B -> A B A B )

F* F. ( A B A B -> A B A*B=S )

\ Площадь вычислен – это просто произведение сторон

F+ 2E F* F. ; \ складываем A и B, и умножив на 2, оператором F*, получаем периметр

Проверим работу слова B3:

2E-1 3E-1 B3

0.0600000 1.0000000 Ok

Как

можете увидеть ниже всё работает верно:

S = 0,2*0,3=0,06

P=2*(0,2+0,3)=2*0,5=1

0,2 и 0,3 можно вводить и в следующем виде: 0.2E и 0.3E. Самостоятельно можете убедиться, что слово «F.» выведет на экран тоже самое значение.

Универсальный вариант того же примера, если вы не хотите сразу печатать результаты обработки в слове:

: B3 ( A B -> S P ) \ ( S=A*B P=2*(A+B) )

FOVER FOVER ( A B -> A B A B )

F* ( A B A B -> A B A*B=S )

\ Площадь вычислен – это просто произведение сторон

FROT FROT ( A B A*B=S -> A*B=S A B )

F+ 2E F* ; \ складываем A и B, и умножив на 2, оператором F*, получаем периметр

Проверим. Посчитаем площадь и периметр прямоугольника со сторонами 0,2 и 0,3:

2E-1 3E-1 B3

Ok

F. F.

1.0000000 0.0600000 Ok

Сначала выводит периметр затем площадь, чтобы изменить порядок как указано в стековой нотации нужно набрать команду FSWAP перед печатью результатов, то есть:

2E-1 3E-1 B3 FSWAP F. F.

0.0600000 1.0000000 Ok

Результаты по-прежнему верны.

Вы можете спросить зачем такие сложности? Код становится универсальным, мы отделяем вычисляемую часть от метода вывода данных на экран, его можно включать в свои библиотеки, и использовать в других задачах как отдельную функцию.

Как вы уже могли заметить одно замечательное свойство Форта – его слова-функции не только принимают любое количество аргументов, но также оставляют на стеке желаемое число результатов, не каждый ЯП может этим похвастаться.

Пример 5. Здесь вычисляется объем куба и площадь его боковой поверхности. Вначале приведем работу с целочисленным аргументом.

: B5 ( A -> V S ) DUP 2DUP * * SWAP DUP * 6 * ; \ V=A^3 S=6*A^2

Поясним код:

DUP 2DUP ( A -> A A A A )

2DUP, в отличие от DUP дублирует сразу 2 верхних элемента

* * ( A A A A -> A A*A*A=A^3 )

двойное применение операции умножения дает в результате куб

SWAP ( A A^3 -> A^3 A )

SWAP просто поменял местами два верхних элемента на стеке

DUP * (A^3 A -> A^3 A*A )

возвели в квадрат число на вершине стека

6 * (A^3 A*A -> A^3 6*A^2)

и умножили его на 6, число сторон куба

Вызовем написанное слово с параметром 15 (сторона куба):

15 B5

Ok ( 3375 1350 )

3375=15*15*15 и 1350=6*15*15, все верно, слово работает корректно.

То же самое в вещественных числах:

: B5 ( A -> V S ) \ V=A^3 S=6*A^2

FDUP FDUP FDUP ( A -> A A A A ) \ 2FDUP SP-Forth не понимает

Поделиться:
Популярные книги

Черный Маг Императора 13

Герда Александр
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 13

Муж на сдачу

Зика Натаэль
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Муж на сдачу

Мастер 8

Чащин Валерий
8. Мастер
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Мастер 8

Черный Маг Императора 10

Герда Александр
10. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 10

Кодекс Крови. Книга V

Борзых М.
5. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга V

Как я строил магическую империю 7

Зубов Константин
7. Как я строил магическую империю
Фантастика:
попаданцы
постапокалипсис
аниме
фантастика: прочее
5.00
рейтинг книги
Как я строил магическую империю 7

Баронесса. Эхо забытой цивилизации

Верескова Дарья
1. Проект «Фронтир Вита»
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Баронесса. Эхо забытой цивилизации

Барин-Шабарин 2

Гуров Валерий Александрович
2. Барин-Шабарин
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Барин-Шабарин 2

Бестужев. Служба Государевой Безопасности

Измайлов Сергей
1. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности

Свадьба по приказу, или Моя непокорная княжна

Чернованова Валерия Михайловна
Любовные романы:
любовно-фантастические романы
5.57
рейтинг книги
Свадьба по приказу, или Моя непокорная княжна

Пять попыток вспомнить правду

Муратова Ульяна
2. Проклятые луной
Фантастика:
фэнтези
эпическая фантастика
5.00
рейтинг книги
Пять попыток вспомнить правду

Барон Дубов 6

Карелин Сергей Витальевич
6. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Барон Дубов 6

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Ведьма Вильхельма

Шёпот Светлана
Любовные романы:
любовно-фантастические романы
8.67
рейтинг книги
Ведьма Вильхельма