: B15 ( S -> D L ) \ D=Квадратный_Корень(4*S/Pi) L=Pi*D
4E F* \ S -> 4*S
314E-2 F/ \ 4*S -> 4*S/Pi
FSQRT \ 4*S/Pi -> Квадратный_Корень(4*S/Pi)=D
FDUP 314E-2 F* \ D -> D D*Pi=L
;
Посчитаем диаметр и длину круга площадью равной 12,345.
12345E-3 B15 F. F.
12.452036 3.9656166 Ok
Квадратный корень из (12,345*4/3.14) равно 3,965616, а 3,965616*3,14=12,4520, то ест ь ИСТИНА. Пример довольно простой и нет других причин писать код для целочисленного варианта аргументов. В случае необходимости несложно самостоятельно решить эту задачу.
Пример 16. Вычислим расстояние между двумя точками на числовой оси, зная координаты.
: B16 ( X1 X2 -> |X1-X2| )
– ABS \ X1 X2 -> |X1-X2|
;
Для вещественных аргументов.
: B16 ( X1 X2 -> |X1-X2| )
F- FABS \ X1 X2 -> |X1-X2|
;
31E-1 -12E1 B16 F.
123.10000 Ok \ |3.1-(-120)|=123.1
Пример 17. По трем координатам на числовой оси (X1, X2, X3) вычислить следующие расстояния: |x1-x3|, |x2-x3| и их сумму. Сперва для целых чисел.
: B17 ( X1 X2 X3 -> |x1-x3| |x2-x3| {|x1-x3|+|x2-x3|} )
SWAP OVER \ X1 X2 X3 -> X1 X3 X2 X3
– ABS \ X1 X3 X2 X3 -> X1 X3 |X2-X3|
ROT ROT – ABS SWAP \ X1 X3 |X2-X3| -> | X1-X3| |X2-X3|
2DUP + \ | X1-X3| |X2-X3|-> | X1-X3| |X2-X3| (| X1-X3|+|X2-X3|)
;
Для вещественных.
: B17 ( X1 X2 X3 -> |x1-x3| |x2-x3| {|x1-x3|+|x2-x3|} )
FSWAP FOVER \ X1 X2 X3 -> X1 X3 X2 X3
F- FABS \ X1 X3 X2 X3 -> X1 X3 |X2-X3|
FROT FROT F– FABS FSWAP \ X1 X3 |X2-X3| -> | X1-X3| |X2-X3|
FOVER FOVER F+ \ | X1-X3| |X2-X3|-> | X1-X3| |X2-X3| (| X1-X3|+|X2-X3|)
;
Тест на координатах
–1E1 1E-1 3E2 B17 F. F. F.
609.90000 299.90000 310.00000 Ok
|X1-X3|=|-10-300|=310; |X2-X3|=|0.1-300|=299.9; (|X1-X3|+|X2-X3|)=310+299.9=609.9.
Пример 18. Схож с предыдущей задачей. Сумма заменяется произведением.
: B18 ( X1 X2 X3 -> {|x1-x3|*|x2-x3|} )
SWAP OVER \ X1 X2 X3 -> X1 X3 X2 X3
– ABS \ X1 X3 X2 X3 -> X1 X3 |X2-X3|
ROT ROT – ABS * \ X1 X3 |X2-X3| -> {|x1-x3|*|x2-x3|}
;
–5 2 7 B18
Ok ( 60 )
|-5-7|*|2-7|= 12*5=60
Для вещественных чисел.
: B18 ( X1 X2 X3 -> {|x1-x3|*|x2-x3|} )
FSWAP FOVER \ X1 X2 X3 -> X1 X3 X2 X3
F- FABS \ X1 X3 X2 X3 -> X1 X3 |X2-X3|
FROT FROT F– FABS F* \ X1 X3 |X2-X3| -> {|x1-x3|*|x2-x3|}
;
–1E1 2E-1 23E1 B18 F.
55152.000 Ok
|-10-230|*|0.2-230|=240*229.8=55152
Пример 19. По координатам противоположенных вершин прямоугольника вычислить его периметр и площадь, стороны параллельны координатным осям.
: B19 ( X1 Y1 X2 Y2 -> P S ) \ P=2*[A+B] S=A*B
ROT – ABS \ X1 Y1 X2 Y2 -> X1 X2 |Y2-Y1|
SWAP ROT – ABS \ X1 X2 |Y2-Y1| -> |Y2-Y1|=A |X2-X1|=B
2DUP + 2* \ A B -> A B 2*(A+B)=P
ROT ROT * \ A B P -> P A*B=S
;
1 3 7 8 B19 . .
30 22 Ok
A=|1-7|=6 B=|3-8|=5. P=2*(A+B)=2*(6+5)=22. S=A*B=6*5=30.
Вариант с вещественными СКАЧАТЬ