High Arsen Gonian Academy. Arsen Gonian
Чтение книги онлайн.

Читать онлайн книгу High Arsen Gonian Academy - Arsen Gonian страница 4

Название: High Arsen Gonian Academy

Автор: Arsen Gonian

Издательство: Автор

Жанр:

Серия:

isbn:

isbn:

СКАЧАТЬ 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 СКАЧАТЬ