High Arsen Gonian Academy
Шрифт:
: B13 ( R1 R2 -> S1 S2 S3) \ S1=Pi*R1^2 S2= Pi*R2^2 S3=S1-S2
FSWAP FDUP F* 314E-2 F* \ R1 R2 -> R2 (Pi*R1^2)=S1
FSWAP FDUP F* 314E-2 F* \ R2 (Pi*R1^2)=S1 -> (Pi*R1^2)=S1 (Pi*R2^2)=S2
FOVER FOVER F- \ S1 S2 -> S1 S2 (S1-S2)=S3
;
Тестирование примера 13:
25E-1 15E-1 B13 F. F. F.
12.560000 7.0650000 19.625000 Ok
S1 = 19,625 = 3.14*2.5^2; S2 = 7,065 = 3.14*1.5^2; S3=S1-S2=12,56=19,625-7,065. Тестирование прошло успешно. Не забываем
Пример 14. Определить радиус окружности и площадь круга, через ее длину. Сразу составим программку для вещественного аргумента, ибо целочисленное огрубление будет давать неприемлемый по качеству результат для малых значений длины окружности.
: B14 ( L -> R S ) \ R=L/(2*Pi) S=Pi*R^2
628e-2 F/ \ L -> R=L/6.28 где 6,28=2*Pi=D
FDUP FDUP F* 314e-2 F* \ R -> R Pi*R^2
;
Посчитаем R и S для L=25,37
2537E-2 B14 F. F.
51.244976 4.0398089 Ok
R=25.37/6.28= 4,0398 и S=3,14* 4,0398^2= 51,244. Тест прошел успешно.
Пример 15. Зная площадь круга, вычислить его диаметр и длину.
: 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.
Вариант с вещественными аргументами не сильно отличается от целочисленного.
: B19 ( X1 Y1 X2 Y2 -> P S ) \ P=2*[A+B] S=A*B
FROT F- FABS \ X1 Y1 X2 Y2 -> X1 X2 |Y2-Y1|
FSWAP FROT F– FABS \ X1 X2 |Y2-Y1| -> |Y2-Y1|=A |X2-X1|=B
FOVER FOVER F+ 2E F* \ A B -> A B 2*(A+B)=P
FROT FROT F* \ A B P -> P A*B=S
;
11E-1 15E-1 73E-1 62E-1 B19 F. F.
29.140000 21.800000 Ok
A=|1.5-6.2|=4.7; B=|1.1-7.3|=6.2; P=2*(4.7+6.2)= 21,8; S=A*B=4.7*6.2= 29,14.
Пример 20. Вычислить расстояние между двумя точками на плоскости по их координатам. Так как придется извлекать квадратный корень, то вариант с целочисленными координатами пропускаем.