18+
реклама
18+
Бургер менюБургер меню

Arsen Gonian – Язык программирования Форт (Forth). Решение задач по программированию. Версия 2. (страница 14)

18

S" lib\include\float2.f" INCLUDED

VARIABLE A VARIABLE B VARIABLE C      \ Часто используемые переменные

FVARIABLE FA FVARIABLE FB FVARIABLE FC

: DEG>RAD ( A{DEG} -> X{RAD} )            \ X=A*Pi/180 – градусы в радианы

314E-2 F*      \ A -> 3.14*A

180E F/            \ 3.14*A -> 3.14*A/180

;

: RAD>DEG ( A{RAD} -> X{DEG} )            \ 180*A/Pi – радианы в градусы

180E F*            \ A -> 180*A

314E-2 F/      \ 180*A -> 180*A/Pi

;

Назовите файл как вам нравится, но обязательно с расширением «.F», тогда его можно будет запустить и он откроется в SP-Forth, при условии, что он у вас установлен. Тогда вам не придется каждый раз выполнять рутинные задачи, которые вы включите в этот файл.

Чтобы упростить интерфейс взаимодействия с написанными словами, например, вывод результатов расчета для слов со множеством выходных данных, можно применить уже описанную выше методику.

Рассмотрим пример №28.

2E B28 F. F. F. F. F.

Здесь «B28 F. F. F. F. F.» заменяем на слово

: B28. ( A^2 A^3 A^5 A^10 A^15 -> ) B28 F. F. F. F. F. ;

Такой вариант предпочтительный не только из-за упрощения, но и исходя из того, что вы со временем забудете, как работает слово, а разбираться в работе слове каждый раз не разумно, да и зачем перегружать мозг бесполезными мелочами? Оператор «.» – точка в Форте всегда связана с печатью на экран, поэтому «Name.» – логично означает печать результатов слова «Name». Только не забудьте написать соответствующее слово перед ее выполнением, автоматически слова в Форте не пишутся. Так же можно включать словесное описание результатов, например,

: B28. ( A^2 A^3 A^5 A^10 A^15 -> ) B28

.” A^15= “ F. CR             \ CR – это оператор перевода на новую строку

.” A^10= “ F. CR

.” A^5= “ F. CR

.” A^3= “ F. CR

.” A^2= “ F. CR

;

Окончательно вызов слова B28 будет выглядеть, с учетом упрощения, так:

2E B28.

Так мы разделяем алгоритм работы слова с его примитивным интерфейсом вывода результатов на экран. В таком случае при необходимости что-то доработать, одно не помешает другому и, разумеется, код становится более лаконичным и понятным. Оригинал «B28» можно использовать в других словах, библиотеках, и это никак не помешает по-прежнему пользоваться примером 28. Так же при решении сложной задачи, можно писать аналогичные промежуточные слова «Name.» для отладки и контроля промежуточного состояния сложной системы слов, когда не понятно на каком этапе возникает ошибка.

рис 48

BEGIN 31-40

Пример 31. Перевести температуру в Фаренгейтах в градусы Цельсия. Сперва для целых значений температуры.

: B31 ( TF-> TC )             \ TC=(TF-32)*5/9

32 – 5 * 9 /

;

32 B31             \ 32 град Фаренгейта = 0 град Цельсия, 32-32=0, 0*5/9=0

Ok ( 0 )

35 B31             \ 35 град Фаренгейта = 1 град Цельсия (35-32)=3, 3*5=15, 15/9=1 – целая часть

Ok ( 0 1 )

40 B31             \ 40 град Фаренгейта = 4 град Цельсия (40-32)=8, 8*5=40, 40/9=4 – целая часть

Ok ( 0 1 4 )

рис 49

С незначительными изменениями мы сможем переписать код для вещественных значений температуры.

: B31 ( TF-> TC )            \ TC=(TF-32)*5/9

32E F-

5E F* 9E F/

;

32E B31 F.       \ как и в первом варианте, только результат в вещественном формате

0.0000000 Ok

321E-1 B31 F.

0.0555555 Ok

рис 50

Пример 32. Обратная к предыдущему примеру задача. Перевести температуру из Цельсия в Фаренгейты.

: B32 ( TC -> TF )       \ TF= TC*9/5+32

9 * 5 / 32 + ;

0 B32                   \ 0 град Цельсия = 32 град Фаренгейта

Ok ( 32 )

–18 B32

Ok ( 32 0 )             \ -18 град Цельсия = 0 град Фаренгейта

рис 51

Для вещественного аргумента.

: B32 ( TC -> TF )       \ TF= TC*9/5+32

9E F* 5E F/ 32E F+ ;

0E B32 F.              \ 0 град Цельсия = 32 град Фаренгейта

32.000000 Ok

–18E B32 F.             \ -18 град Цельсия = -0,4 град Фаренгейта