и умножили его на 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 не понимает

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

FSWAP                  ( A A^3 -> A^3 A )

FDUP F*            (A^3 A -> A^3 A*A )

6E F* ;                  (A^3 A*A -> A^3 6*A^2)

Проверим написанный код, возьмем куб со стороной 1,5:

15E-1 B5 F. F.

13.500000 3.3750000 Ok      \ 6*1.5^2 = 13.5 1.5^3 = 3.375

Помните, что оператор «F.» печатает то, что лежит на вершине стека. Если вам нужен другой порядок можно применить FSWAP, так при необходимости вывести сперва объем, как в стековой нотации, можно набрать следующее:

15E-1 B5 FSWAP F. F.

3.3750000 13.500000 Ok

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

: B6 ( A B C -> S V )      \ S=2*(A*B+B*C+A*C) V=A*B*C )

DUP 2OVER      \ A B C -> A B C C A B

DUP 2OVER      \ A B C C A B -> A B C C A B B C A

ROT *            \ A B C C A B B C A -> A B C C A B C A*B

ROT ROT * +      \ A B C C A B C A*B -> A B C C A (A*B+B*C)

ROT ROT *      \ A B C C A A*B+B*C -> A B C (A*B+B*C) C*A

+ 2*            \ A B C (A*B+B*C) C*A -> A B C (A*B+B*C+C*A)*2

SWAP 2SWAP      \ A B C (A*B+B*C+C*A)*2 -> (A*B+B*C+C*A)*2 C A B

* * ;            \ (A*B+B*C+C*A)*2 (C*A*B)

Где (A*B+B*C+C*A)*2 – это площадь поверхности, а (C*A*B) – объем.

В данном примере появляется 3 параметра, что не слишком усложняет задачу, и по-прежнему мы не будем использовать переменные в явном виде, манипулируя только с числами на стеке.

В коде для вещественных чисел надо, чтобы число элементов не превышало максимума, из-за его ограниченности произойдет ошибка. Проверим сколько вмещает наша система, для этого наберем следующие команды:

FDEPTH            \ Это слово возвращает количество элементов в вещественном стеке

Ok ( 0 )            \ 0 элементов

5E-1 FDEPTH      \ введем 1-ое число

Ok ( 0 1 )      \ 1 элемент на вещественном стеке

5E-1 FDEPTH      \ введем 2-ое число

Ok ( 0 1 2 )      \ 2 элемента

5E-1 FDEPTH      \ введем 3-е число

Ok ( 0 1 2 3 )      \ 3

5E-1 FDEPTH      \ введем 4-ое число

Ok ( 0 1 2 3 4 )      \ 4

5E-1 FDEPTH      \ введем 5-ое число

Ok ( [6].. 1 2 3 4 5 )

5E-1 FDEPTH      \ введем 6-ое число

Ok ( [7].. 2 3 4 5 6 )

5E-1 FDEPTH      \ введем 7-ое число

Ok ( [8].. 3 4 5 6 7 )

5E-1 FDEPTH      \ ошибка !!!

Если после ошибки ввести «F.» получим:

infinity Ok

После ошибки лучше перезапустить SP-Forth. Так же не забывайте о подключении библиотек заново для работы с вещественными числами. Существует слово DEPTH для обычного стека, которое также оставляет количество его элементов, не считая возвращаемый параметр.

Теперь перепишем Пример 6 для вещественных чисел.

: B6 ( A B C -> S V )      \ S=2*(A*B+B*C+A*C) V=A*B*C )

FOVER FOVER F+      \ A B C -> A B C (B+C)

FROT FROT F*            \ A B C (B+C) -> A (B+C) B*C

FROT                  \ A (B+C) B*C -> (B+C) B*C A

FOVER FOVER F*      \ (B+C) B*C A -> (B+C) B*C A B*C*A

F.                  \ 1-ый результат – объем

FROT F* F+ 2.E F*      \ (B+C) B*C A -> B*C+A*(B+C)

F.                  \ 2-ой результат S=2*(A*B+B*C+A*C)

;

Теперь можно проверить как работает написанное слово:

1E-1 2E-1 3E-1 B6

0.0060000 0.2200000 Ok

Объем прямоугольного параллелепипеда 0,006=0,1*0,2*0,3 и площадь его поверхности 0,22=2*(0,1*0,2+0,2*0,3+0,1*0,3).

Пример 7. Зная радиус окружности, посчитаем его длину и площадь.