Читать книгу Язык программирования Форт (Forth). Решение задач по программированию. Версия 2. (Arsen Gonian) онлайн бесплатно на Bookz (4-ая страница книги)
bannerbanner
Язык программирования Форт (Forth). Решение задач по программированию. Версия 2.
Язык программирования Форт (Forth). Решение задач по программированию. Версия 2.
Оценить:
Язык программирования Форт (Forth). Решение задач по программированию. Версия 2.

3

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

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

: 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 Кошелек, бонусными картами или другим удобным Вам способом.

Вы ознакомились с фрагментом книги.

Для бесплатного чтения открыта только часть текста.

Приобретайте полный текст книги у нашего партнера:


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

Всего 10 форматов

bannerbanner