
Полная версия:
Язык программирования Форт (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 форматов