High Arsen Gonian Academy. Arsen Gonian
Чтение книги онлайн.

Читать онлайн книгу High Arsen Gonian Academy - Arsen Gonian страница 7

Название: High Arsen Gonian Academy

Автор: Arsen Gonian

Издательство: Автор

Жанр:

Серия:

isbn:

isbn:

СКАЧАТЬ элементов на стеке. Обычные скобки в данном случае применять нельзя, так как они обозначают комментарий и являются зарезервированными словами Форта и системы программирования SP-Forth в частности.

      Тест на корректность работы написанных слов произведите самостоятельно.

      Пример 12. Вычислить гипотенузу и периметр прямоугольного треугольника по его катетам. Так как мы имеем дело с квадратным корнем, сразу приведем код для случая вещественного аргумента.

      : B12 ( A B -> C P )      \ C=Квадратный_Корень(A^2+B^2) P=A+B+C

      FOVER FDUP F*            \ A B -> A B A^2

      FOVER FDUP F*            \ A B A^2 -> A B A^2 B^2

      F+ FSQRT            \ A B A^2 B^2 -> A B Квадратный_Корень(A^2+B^2)=C

      FROT FROT F+            \ A B C -> C A+B

      FOVER F+            \ C A+B -> C A+B+C=P

      ;

      Проверим на прямоугольном треугольнике с катетами 3 и 5:

      3E 4E B12 F. F.                  \ вызываем нашу подпрограмму и печатаем результат

      12.000000 5.0000000 Ok

      3^2+4^2=25. Квадратный корень из 25=5. 5+3+4=12– что является истиной. В данном случае специально подобрана Пифагорова тройка, для простоты проверки. Проверим общий случай:

      3E 5E B12 F. F.

      13.830952 5.8309519 Ok

      Можете самостоятельно проверить истинность теста.

      Пример 13. Найти площади двух кругов (с общим центром) и кольца между ними. Даны радиусы R1 и R2, причем R1 > R2. Как и ранее сперва напишем слово для целочисленных чисел. Если не совсем понятно почему не написать сразу универсальный вариант для вещественных данных, то поясняю: отладка в этом случае наиболее проста для сложных слов и для начинающих программистов, так как все данные на стеке видны сразу после их ввода, то удается проверить и понять работу кода вводя команду за командой. Этого преимущества лишены операторы для работы с вещественными числами. После написания слова с целыми аргументами не сложно перевести его код для работы с вещественными и получить результат того же типа.

      : B13 ( R1 R2 -> S1 S2 S3)            \ S1=Pi*R1^2 S2= Pi*R2^2 S3=S1-S2

      SWAP DUP * 314 *      \ R1 R2 -> R2 (Pi*R1^2)=S1

      SWAP DUP * 314 *      \ R2 S1 -> S1 (Pi*R2^2)=S2

      2DUP –                  \ S1 S2 -> S1 S2 (S1-S2)=S3

      ;

      Запустим наше слово на примере двух кругов с радиусами 25 и 15 соответственно.

      25 15 B13

      Ok ( 196250 70650 125600 )

      Выше приведен вариант кода с целочисленными аргументами, причем все 3 площади больше в 100 раз из-за того, что мы приняли Пи равным 314. Перепишем пример для случая вещественных аргументов.

      : 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. Тестирование прошло успешно. Не забываем про обратный порядок печати со стека. Написанное слово работает правильно, соответственно стековой нотации. Если вам необходим другой порядок вывода, то можете самостоятельно скорректировать слово, добавив код после вызова «B13» и до вывода «F. F. F.».

      Пример 14. Определить радиус окружности и площадь круга, через ее длину. Сразу составим программку для вещественного СКАЧАТЬ