|
В его основе, как уже сказано, лежит понятие стека,
в ячейках которого допускается размещение данных, чисел, строк,
массивов, процедур.
Кроме того, в ПостСкрипте есть некоторое (довольно
большое) число стандартных слов, которые можно назвать командами,
действиями, операторами, функциями или процедурами языка. Мы будем
пользоваться этими названиями как синонимами, так как, например,
слово add, описывающее сложение, нам естественно
назвать операцией, слово sin, вычисляющее синус, -
функцией, а установку ширины линии - действием или командой.
Основные действия, естественно, производятся с
элементами стека. Например, программный текст
32 0.5 43 17 add mul sub
исполняется так: положить в стек число 32, выше 0.5, затем 43, затем 17, после этого выполнить
действие add (сложение), затем mul
(умножение), затем sub (вычитание). Поскольку вы
уже знакомы со стековой арифметикой, то легко получите результат -
2.
Вот еще несколько действий, допускаемых языком:
деление div, деление нацело idiv,
остаток от деления mod, а также одноместные
операции изменения знака neg и нахождения
абсолютного значения abs.
Имеются операции вычисления некоторых стандартных
функций (не всех) от одного аргумента:
| exp |
Вычисление экспоненты |
| log |
Десятичный логарифм |
| ln |
Натуральный логарифм |
| sqrt |
Квадратный корень |
| cos |
Косинус угла, аргумент задается в градусах |
| sin |
Синус угла |
Отдельно следует назвать функцию atan, вычисляющую арктангенс. Эта функция имеет два
аргумента - числитель и знаменатель. Как вы думаете, почему?
Кстати говоря, ваше знакомство с другими языками
программирования может вызвать еще один, вполне резонный, вопрос: а
как быть с типизацией аргументов? Что ж, мы ведь не ставим
перед вами цель немедленно перейти к программированию на
ПостСкрипте, поэтому будем считать, что в нашем контексте этот
вопрос не актуален. А более заинтересованному читателю предлагаем
обратиться к другим источникам (например, PostScript Language
Manual, Adobe Systems).
| Упражнение #1. |
| a) |
Напишите, как организовать на языке
ПостСкрипт вычисления для выражения, с которым мы уже
манипулировали в предыдущем занятии:
|
| b) |
Интервал времени задан в секундах. Переведите
его средствами языка ПостСкрипт в часы-минуты-секунды.
|
| c) |
По заданным сторонам A
и B треугольника и углу между ними Alpha вычислить (на ПостСкрипте!) его
площадь:
|
| d) |
Для заданных сторон треугольника a, b, c вычислить его площадь по формуле
известной как
формула Герона
(древнегреческого ученого I в. н. э. из Александрии)
|
Надо полагать, первые три упражнения не доставили
вам хлопот. Но вот четвертое заставляет задуматься: как быть в
ситуациях, требующих многократного использования параметров и
сохранения промежуточных результатов?
С этой целью в ПостСкрипте введено несколько
операций манипулирования со стеком. Приведем их в табличной форме: в
первом столбце название действия, во втором -
объяснение, в третьем и четвертом - пример данных в стеке
до и после выполнения действия.
| dup |
Копирует вершину стека |
31 75 43 |
31 75 43 43 |
| push |
Добавляет вершину стек |
31 75 43 |
31 75 43 23 |
| pop |
Удаляет вершину стека |
31 75 43 |
31 75 |
| exch |
Переставляет два верхних элемента |
31 75 43 |
31 43 75 |
| roll |
Снимает со стека два параметра, m и n, в оставшейся части
стека выделяет группу из n элементов и верхние m из них
опускает вниз |
31 75 43 12 61 5 2 |
12 61 31 75 43 |
| index |
Снимает со стека параметр n и копирует элемент,
находящийся на месте n, считая вершину нулевым элементом |
31 75 43 12 61 2 |
31 75 43 12 61 43 |
| copy |
Снимает со стека параметр n и копирует n верхних элементов
оставшейся части стека |
31 75 43 12 61 2 |
31 75 43 12 61 12 61 |
А теперь маленькое упражнение: вычислим по паре
чисел a и b корень из суммы их
квадратов. Это знакомое нам вычисление гипотенузы по катетам, очень
важное действие. В следующем ниже постскриптовском тексте есть
примечания. Примечанием считается часть строки от знака процента до
конца строки. Часто мы будем записывать в примечании состояние стека
после выполнения действия.
% a b это исходное состояние стека
% (интересующей нас части)
dup % a b b
mul % a b´b
exch % b´b a
dup % b´b a´a
add % b´b+a´a
sqrt % желанный результат
Назад
|