ISBN :
Возрастное ограничение : 12
Дата обновления : 14.12.2023
FY3 F! FX3 F! FY2 F! FX2 F! FY1 F! FX1 F! \ FX1 FY1 FX2 FY2 FX3 FY3 ->
FX1 F@ FY1 F@ FX2 F@ FY2 F@ B20 FDUP FA F! \ A
FX2 F@ FY2 F@ FX3 F@ FY3 F@ B20 FDUP FB F! \ A B
FX1 F@ FY1 F@ FX3 F@ FY3 F@ B20 FDUP FC F! \ A B C
F+ F+ FDUP \ A+B+C=P P
2E F/ \ P (A+B+C)/2=p
FDUP FA F@ F- \ P p p-A
FOVER FDUP FB F@ F- \ P p p-A p p-B
FSWAP FC F@ F- \ P p p-A p-B p-C
F* F* F* FSQRT \ P SQRT{p*(p-A)*(p-B)*(p-C)}=S
;
Строка №1 название слова с комментариями.
Вторая – сохранение координат в соответствующих переменных.
С третьей по пятую – вычисление сторон треугольника с сохранением в переменных A, B, C. Здесь мы не высчитаем расстояния между точками (стороны треугольника), а пользуемся предыдущей задачей, в которой эта проблема решена, просто вызвав ее с параметрами задачи №21.
Шестая строка вычисление периметра и его дублирование
Седьмая вычисление полупериметра.
С восьмой по десятую – вычисление сомножителей в формуле площади.
Одиннадцатая – вычисление площади.
Проверим работу слова на координатах: (1,1; 1,1) (6,1; 1,1) (6,1; 4,1). Это прямоугольный треугольник с катетами 3 и 5.
11E-1 11E-1 61E-1 11E-1 61E-1 41E-1 B21 F. F.
7.5000000 13.830952 Ok
S=3*5/2=15/2=7.5. Гипотенуза равна sqrt(3^2+5^2)= sqrt(9+25)= sqrt(34)= 5,83095. P= 5,83095+3+5= 13,83095.
Что является истиной, то есть задачка запрограммирована корректно.
Если у вас будут проблемы и ошибки введите код в нижеприведенной последовательности.
S" lib\include\float2.f" INCLUDED
: B20 ( X1 Y1 X2 Y2-> R )
FROT F- FDUP F*
FSWAP FROT F- FDUP F*
F+ FSQRT ;
FVARIABLE FX1 FVARIABLE FY1 FVARIABLE FX2 FVARIABLE FY2 FVARIABLE FX3 FVARIABLE FY3
FVARIABLE FA FVARIABLE FB FVARIABLE FC
: B21 ( X1 Y1 X2 Y2 X3 Y3 -> P S ) FY3 F! FX3 F! FY2 F! FX2 F! FY1 F! FX1 F! FX1 F@ FY1 F@ FX2 F@ FY2 F@ B20 FDUP FA F! FX2 F@ FY2 F@ FX3 F@ FY3 F@ B20 FDUP FB F! FX1 F@ FY1 F@ FX3 F@ FY3 F@ B20 FDUP FC F! F+ F+ FDUP S" 2E" >FLOAT DROP F/ FDUP FA F@ F- FOVER FDUP FB F@ F- FSWAP FC F@ F- F* F* F* FSQRT ;
11E-1 11E-1 61E-1 11E-1 61E-1 41E-1 B21 F. F.
Здесь нет комментариев в коде, чтобы избежать ошибок при копировании. Первая строка подключение библиотеки для работы с вещественными числами (тип float2). Далее идет код предыдущего примера, который мы используем (в других языках это называется функция). Затем объявляются переменные где мы сохраняем координаты и вычисляемые длины сторон. И, наконец сжатый код слова, производящий вычисления периметра и площади треугольника, и его вызов с заранее подготовленными параметрами.
Пример 22. Довольно классическая задача по обмену содержимым между двумя переменными. В Форте создание переменных в данном случае даже не обязательна.
: B22 ( A B -> B A) SWAP ;
5 4 B22
Ok ( 4 5 )
Для вещественных аргументов.
: B22 ( A B -> B A) FSWAP ;
Теперь напишем с переменными:
VARIABLE A
VARIABLE B
: B22 ( -> ) \ обмен содержимым двух переменных A и B
A @ B @ A ! B ! ;
Как проверить работу?
15 A ! 50 B ! \ Сначала инициализируем переменные. A=15, B=50
Ok
B22 \ Вызов функции обмена переменных
Ok
A @ . B @ . \ Печатаем содержимое переменных после обмена
50 15 Ok
Обмен вещественных переменных.
FVARIABLE FA
FVARIABLE FB
: B22 ( -> ) \ обмен содержимым для двух переменных A и B
FA F@ FB F@ FA F! FB F! ;
Проверим. Инициализируем переменные, вызовем слово и распечатаем результат. Все по стандартной схеме.
Конец ознакомительного фрагмента.
Текст предоставлен ООО «Литрес».
Прочитайте эту книгу целиком, купив полную легальную версию (https://www.litres.ru/chitat-onlayn/?art=70093276&lfrom=174836202) на Литрес.
Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.
Все книги на сайте предоставены для ознакомления и защищены авторским правом