Читать «Решение задач по программированию на языке Форт (Forth). Версия 3» — Arsen Gonian онлайн
Страница 7 из 7
2050 I3
Ok ( 2 )
2050 B – это 2 полных kB.
рис 64
Пример 4. Так же простейшая задачка на целочисленное деление.
Для определенности A>B, результат равен A/B.
: I4 ( A B -> A/B ) / ;
15 4 I4
Ok ( 3 )
рис 65
В отрезке длиной 15 размещается 3 целых отрезка длиной 4.
Пример 5. Отличается от предыдущего примера заменой целочисленного деления на взятие остатка от деления.
: I5 ( A B -> остаток{A/B} ) MOD ;
15 4 I5
Ok ( 3 )
15/4 – остаток равен 3 – все верно, результат теста корректный.
рис 66
Примеры 1-5 настолько просты, что даже нет необходимости создавать соответствующие слова. Можно просто ввести число-операнд затем тело слова. Результат получите в скобках на стеке. Чтобы распечатать его и не засорять стек нажмите «.» и «Enter». Перепишем эти примеры для наглядности.
«503 100 / .»
«12683 1000 / .»
«2050 1024 / .»
«15 4 / .»
«15 4 MOD .»
рис 67
Но если вы будете часто пользоваться написанным кодом, крайне желательно создавать отдельные слова-функции, также дайте им легко запоминающиеся осмысленные названия.
Пример 6. Вывести число десятков и единиц двузначного числа. Для этого используем операцию /MOD, которая одновременно вычисляет и целую часть, и остаток от деления.
: I6 ( AB -> A B ) 10 /MOD SWAP ;
45 I6
Ok ( 4 5 )
Чтобы вывести в таком же порядке как на стеке слегка изменим код (помним, что сначала напечатается вершина стека, поэтому перед выводом используем команду SWAP)
45 I6 SWAP . .
4 5 Ok
Теоретически, последним штрихом, будет оформление вывода в отдельное слово, как говорилось ранее в предыдущей группе задач, по схеме:
: I6. I6 SWAP . . ;
Теперь окончательно задача будет решаться просто вызовом одного слова с одним аргументом:
45 I6.
4 5 Ok
рис 68
Результат тот же, но решение выглядит более профессионально и красиво.
Разумеется, эти два слова можно объединить в одно по схеме:
: 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, тест корректен.
Конец ознакомительного фрагмента.
Текст предоставлен ООО «Литрес».
Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.
Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.