Оценить:
 Рейтинг: 0

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

Автор
Год написания книги
2023
Теги
<< 1 2 3 4 5 6 ... 11 >>
На страницу:
2 из 11
Настройки чтения
Размер шрифта
Высота строк
Поля

5 ^2

25 Ok

Получаем правильный ответ. Копировать код нужно аккуратно, так при копировании первого слова, возведения в квадрат, получаем сообщение об ошибке

: ^2 ( A -> A^2 ) DUP * . ;\ возведение числа в квадрат

^ -2003 WORD OR FILE NOT FOUND

При «Копи пасте» куда-то делись символы табуляции между «;» и комментарием, вследствие видим сообщение об ошибке, из-за нарушения синтаксиса. Наверное, это особенность системы.

Также, вместо ^2, можно слово назвать **2, в стиле python:

: **2 ( A -> A^2 ) DUP * . ;            \ возведение числа в квадрат

5 **2

25 Ok

В итоге получаем тот же ответ, но стилистика программы изменилась.

Для начала этого достаточно. Далее при решении конкретных задач, в среде программирования SP-Forth, процесс станет более понятным и осознанным.

BEGIN 1-10

Начать нашу практику программирования мы будем с задач из книги М. Э. Абрамян "1000 задач по программированию Часть I Скалярные типы данных, управляющие операторы, процедуры и функции" 2004. Автор пишет, что получить задачник можно по e-mail: mabr@math.rsu.ru или за подробностями обращайтесь к веб ресурсу ptaskbook.com. Текст задач я приводить не буду, дабы исключить плагиат. Думаю, пояснения к коду с описанием слов (функций-программ) должно быть достаточно, в противном случае обращайтесь к первоисточнику за текстом задач.

Пример 1. Итак, начнем, (для простоты вначале мы будем рассматривать все входные параметры как целые числа, далее мы перепишем код для вещественных аргументов, где об этом указано в условии задачи). Вот и решение первой задачи:

: B1 ( A -> P ) 4 * ; \ P=4*A

B – это сокращение от BEGIN, что обозначает первую группу заданий (мы и далее будем использовать такой вид названий в последующих группах заданий), затем слитно пишется номер примера. Сразу после имени в скобках пишется комментарий стековой нотации. Так принято в Форте. В данном случае Слово-функция B1 берет один параметр A (четырехбайтовое целое число и оставляет другое того же типа). A – сторона квадрата – вход функции, P – его периметр – возвращаемое функцией значение. Тело – очень короткое, просто умножает число на вершине стека на 4 (не забываем, что в Форте обратная польская нотация, сначала идут операнды, затем операция).

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

3 B1 .

12 Ok

Точка «.» – это стандартное форт слово, которое печатает число на вершине стека на экран.

Напомним, общий вид определения нового слова в Форте:

: Название-Слова ( стек до выполнение –> после ) Код-Тела-Функции ; \ комментарий

Пример 2. Нам нужно посчитать площадь квадрата:

: B2 ( A -> S ) DUP * ; \ S=A^2

Мы просто дублируем содержимое на вершине стека число (для чего используем оператор языка Форт – DUP) и умножаем его на себя. Данный пример можно оформить более красиво для использования в ваших будущих программах:

: SQR ( A -> A^2 ) DUP * ;      \ A^2 – вычисление квадрата числа, или

: ^2 ( A -> A^2 ) DUP * ;            \ или

: **2 ( A -> A^2 ) DUP * ;      \ отличие только в названии

Какой нравится, тот и можете использовать. Или все сразу, так тоже можно.

Пример 3. По сторонам прямоугольника нужно вычислить его Площадь и Периметр:

: B3 ( A B -> S P ) \ ( S=A*B P=2*(A+B) )

2DUP ( A B -> A B A B )            \ Слово 2DUP, дублирует сразу два числа

* ( A B A B -> A B A*B=S )      \ Площадь вычислен – это просто произведение сторон

ROT ROT ( A*B=S A B ) \ оператор ROT вытаскивает 3-ий от вершины параметр на вершину

\ применив его два раза на вершине мы получаем A B и вычисленный под ним Площадь

+ 2* ; \ складываем A и B, и умножив на 2, оператором 2*, получаем периметр

Слово «2*» делает тоже самое что и два слова «2 *», только короче и проще.

В итоге на стеке мы получаем Площадь и Периметр. Чтобы напечатать результаты на экран из примеров нужно просто ввести точку с клавиатуры «.» и затем нажать «Enter». Сначала напечатается вершина, т. е. периметр, в данном примере, затем повторив действия площадь. Чтобы изменить порядок печати, можно набрать слово SWAP, который меняет местами 2 числа на вершине стека ( A B -> B A), т.е., например чтобы вычислить площадь и периметр прямоугольника со сторонами 1 и 2 введём следующее:

1 2 B3 SWAP . .

2 6 Ok

Площадь равна 1*2=2, а периметр равен 2*(1+2)=6. Слово работает корректно и вычисляются площадь и периметр соответственно стековой нотации, а выводятся по условию задачи.

Пример 4. Нужно вычислить длину круга зная его диаметр:

: B4 ( D -> L ) 314 * ; \ L=Pi*D*100

Ответ буде в 100 раз больше для целочисленных данных, таким образом избавимся от дробной части. Перепишем код, чтобы можно было работать с вещественными числами. Для этого в SP-Forth нужно подключить соответствующие библиотеки. Скопируйте и вставьте следующие две строчки:

S" lib\include\float.f" INCLUDED

S" lib\include\float2.f" INCLUDED

Но можно только вторую строчку.

Теперь чтобы ввести вещественное число, скажем 0,5, нужно набрать на клавиатуре следующее:

5E-1
<< 1 2 3 4 5 6 ... 11 >>
На страницу:
2 из 11

Другие аудиокниги автора Arsen Gonian