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

Полная версия

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

Язык: Русский
Год издания: 2023
Добавлена:
Настройки чтения
Размер шрифта
Высота строк
Поля
На страницу:
4 из 4

: I6. I6 SWAP . . ;

Теперь окончательно задача будет решаться просто вызовом одного слова с одним аргументом:

45 I6.

4 5 Ok

Результат тот же, но решение выглядит более профессионально и красиво.

Разумеется, эти два слова можно объединить в одно по схеме:

: I6. 10 /MOD SWAP SWAP . . ;

: I6. 10 /MOD . . ;

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

Пример 7. Вычислить сумму и произведение цифр двузначного числа. Дальнейшее развитие предыдущего примера.

: I7 ( AB -> A+B A*B )

10 /MOD      \ AB -> A B

2DUP +            \ A B -> A B A+B

ROT ROT *      \ A B A+B -> A+B A*B

;

45 I7

Ok ( 9 20 )

Сумма цифр числа 45 равна 4+5=9, а произведение 4*5=20, тест корректен.

Если вас не удовлетворяет результат на стеке, то можете аналогично предыдущему примеру написать слово для вывода на экран.

Пример 8. Перестановка местами цифр в двузначном числе.

: I8 ( AB -> BA )

10 /MOD SWAP 10 * +

;

45 I8

Ok ( 54 )

Разделяем десятки и единицы с помощью «/MOD», затем собираем, умножив единицы на десять, таким образом, сделав их десятками, и прибавляем число десятков в исходном числе, как единицы в выходном результате.

Пример 9. Вывести число сотен в трехзначном числе.

: I9 ( ABC -> A )

100 /

;

578 I9

Ok ( 5 )

Все верно. Число сотен в числе 578 равно 5.

Пример 10. Аналогичен предыдущему. Выводим сначала число единиц затем десятков.

: I9 ( ABC ->C B )

10 /MOD 10 MOD

;

123 I9

Ok ( 3 2 )

Пример 11. Вычислить сумму и произведение цифр трехзначного числа.

: I11 ( ABC -> A+B+C A*B*C )

10 /MOD 10 /MOD      \ ABC -> C B A

DUP 2OVER + +            \ C B A -> C B A A+C+B

SWAP 2SWAP * *      \ C B A A+C+B -> A+C+B A*C*B

;

456 I11

Ok ( 15 120 )

Сумма 4+5+6=15, а произведение 4*5*6=120.

Пример 12. Перевернуть трехзначное число справа на лево.

: I12 ( ABC -> CBA )

10 /MOD 10 /MOD      \ ABC -> C B A

SWAP 10 * +            \ C B A -> C BA

SWAP 100 * +            \ C BA -> CBA

;

123 I12

Ok ( 321 )

Вот так просто Форт переворачивает трехзначное число «задом наперед».

Пример 13. В трехзначном числе сотни перенести в крайнее правое положение, вместо единиц.

: I13 ( ABC -> BCA )

100 /MOD      \ ABC -> BC A

SWAP 10 * +      \ BC A -> BCA

;

123 I13

Ok ( 231 )

Пример 14. Аналогичен предыдущему. Довольно несложная задачка.

: I14 ( ABC -> CAB )

10 /MOD      \ ABC -> C AB

SWAP 100 * +      \ C AB -> CAB

;

123 I14

Ok ( 312 )

Пример 15. В трехзначном числе переставить цифры сотен и десятков местами.

: I15 ( ABC -> BAC )

10 /MOD 10 /MOD      \ ABC -> C B A

10 * SWAP 100 * + +      \ C B A -> BAC

;

123 I15

Ok ( 213 )

Как и прежде, сначала разбираем число на цифры, затем собираем, в требуемом для условии задачи порядке.

Пример 16. Поменять местами десятки и единицы в трехзначном числе.

: I16 ( ABC -> ACB )

10 /MOD 10 /MOD      \ ABC -> C B A

100 * + SWAP 10 * +      \ C B A -> ACB

;

123 I16

Ok ( 132 )

Пример 17. Довольно тривиальная задачка. В числе, большем 999, определить число сотен. Сначала отсекаем часть числа до сотен, поделив на 1000 и взяв только остаток. Затем поделив, полученное число на 100, и взяв целую часть, узнаем количество сотен.

: I17 ( A -> X )      \ X – число сотен

1000 MOD 100 /

;

123456 I17

Ok ( 4 )

Пример 18. Абсолютно идентична предыдущему примеру и также примитивна. В аналогичном числе найти число тысяч (1000 заменяется на 10000, а 100 на 1000).

: I18 ( A -> X )      \ X – число тысяч

10000 MOD 1000 /

;

123456 I18

Ok ( 3 )

Пример 19. Дано S секунд перевести в количество полных минут M.

: I19 ( S -> M )      \ M – результат в минутах

60 /

;

179 I19

Ok ( 2 )

Пример 20. Аналогична предыдущему. Переводим секунды S в число полных часов H.

: I20 ( S -> H )      \ H – результат в часах

3600 /

;

7201 I20

Ok ( 2 )

Конец ознакомительного фрагмента.

Текст предоставлен ООО «Литрес».

Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.

Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.

Конец ознакомительного фрагмента
Купить и скачать всю книгу
На страницу:
4 из 4