Математические задачи в пакете MathCAD 12



1.3.5. Программирование



Основными инструментами работы в Mathcad являются математические выражения, переменные и функции. Нередко записать формулу, использующую ту или иную внутреннюю логику (например, возвращение различных значений в зависимости от условий), в одну строку не удается. Назначение программных модулей как раз и заключается в определении выражений, переменных и функций в несколько строк, часто с применением специфических программных операторов.

Принцип программирования в Mathcad

При помощи элементов программирования можно определять переменные и функции (как показано в листинге 1.19).
Листинг 1.19. Функция условия, определенная с помощью программы


Традиционное программирование, упрощенный вариант которого применен в Mathcad и осуществляется при помощи панели инструментов Programming (Программирование), имеет ряд существенных преимуществ, которые в ряде случаев делают документ более простым и читаемым:

  •  возможность применения циклов и условных операторов;
  •  простота создания функций и переменных, требующих нескольких простых шагов;
  •  возможность создания функций, содержащих закрытый для остального документа код, включая преимущества использования локальных переменных и обработку исключительных ситуаций.


Как видно из листинга 1.19, программный модуль обозначается в Mathcad вертикальной чертой, справа от которой последовательно записываются операторы языка программирования. Чтобы начать создание программного модуля, следует (в случае листинга 1.19 после символа присваивания) нажать на панели Programming (Программирование) кнопку Add One (Добавить линию). Затем, если приблизительно известно, сколько строк кода будет содержать программа, можно создать нужное количество линий повторными нажатиями кнопки Add Line (Добавить линию) (рис. 1.18).



Рис. 1.18. Начало создания программного модуля


В появившиеся местозаполнители введите желаемый программный код, используя программные операторы. В рассматриваемом примере в каждый местозаполнитель вводится строка, например, в средний — "positive" (рис. 1.19). Затем нажимается кнопка If (Если) на панели Programming (Программирование) и в возникший местозаполнитель вводится выражение х>0. После того как программный модуль полностью определен, и ни один местозаполнитель не остался пустым, функция может использоваться обычным образом, как в численных, так и в символьных расчетах.

ВНИМАНИЕ!

Не вводите с клавиатуры имена программных операторов. Для их вставки можно применять лишь сочетания клавиш, которые приведены в тексте всплывающей подсказки (рис. 1.18 и 1.19).




Рис. 1.19. Вставка программного оператора


Добавление строк программного кода

Вставить строку программного кода в уже созданную программу можно в любой момент с помощью той же самой кнопки Add Line (Добавить линию). Для этого следует предварительно поместить на нужное место внутри программного модуля линии ввода. Например, расположение линии ввода на строке, показанной на рис. 1.18, приведет к появлению новой линии с местозаполнителем перед этой строкой. Если передвинуть вертикальную линию ввода из начала строки (как это показано на рис. 1.20) в ее конец, то новая линия появится после строки. Если выделить строку не целиком, а лишь некоторую ее часть (рис. 1.20), то это повлияет на положение в программе новой строки кода (результат нажатия кнопки Add Line показан на рис. 1.21).

СОВЕТ

Не забывайте, что для желаемого размещения линий ввода внутри формулы можно использовать не только мышь и клавиши со стрелками, но и пробел. С помощью последовательных нажатий пробела линии ввода "захватывают" разные части формулы.




Рис. 1.20. Положение линий ввода влияет на положение создаваемой строки программы


Зачем может потребоваться вставка новой линии в положение, показанное на рис. 1.21? Новая вертикальная черта с двумя линиями выделяет фрагмент программы, который относится к условию х>0, находящемуся в его заголовке. Пример возможного дальнейшего программирования показан в листинге 1.20.



Рис. 1.21. Результат вставки новой линии в программу (из положения рис. 1.20)

Листинг 1.20. Пример усовершенствования программы


В режиме выполнения программы, а это происходит при любой попытке вычислить f (х), выполняется последовательно каждая строка кода. Например, в предпоследней строке листинга 1.20 вычисляется f (1). Рассмотрим работу каждой строки кода этого листинга.

1. Поскольку х=1, то условие х<0 не выполнено, и в первой строке ничего не происходит.

2. Условие второй строки х>о выполнено, поэтому выполняются обе следующие строки, объединенные короткой вертикальной чертой в общий фрагмент.

3. Функции f(x) присваивается значение f (x)="positive".

4. Условие х>1000 не выполнено, поэтому значение "big positive" не присваивается f (х), она так и остается равной строке "positive".

5. Последняя строка не выполняется, т. к. одно из условий (х>0) оказалось истинным, и оператор otherwise (т. е., "иначе") не понадобился.

Таким образом, основной принцип создания программных модулей заключается в правильном расположении строк кода. Ориентироваться в их действии довольно легко, т. к. фрагменты кода одного уровня сгруппированы в программе с помощью вертикальных черт.

Локальное присваивание (<—)

Язык программирования Mathcad не был бы эффективным, если бы не позволял создавать внутри программных модулей локальные переменные, которые "не видны" извне, из других частей документа. Присваивание в пределах программ, в отличие от документов Mathcad, производится с помощью оператора Local Definition (Локальное присваивание), который вставляется нажатием кнопки с изображением стрелки (<-) на панели Programming (Программирование).

ВНИМАНИЕ!

Ни оператор присваивания :=, ни оператор вывода = в пределах программ применять не разрешается.

В Mathcad 12 переменным, которые впервые появляются в программных модулях, по умолчанию присваивается значение 0. В прежних версиях программы использование переменных в программах без предварительного присваивания им значений приводило к генерации ошибки (как в расчетах на рабочей области документов Mathcad).



Локальное присваивание иллюстрируется листингом 1.21. Переменная z существует только внутри программы, выделенной вертикальной чертой. Из других мест документа получить ее значение невозможно. На этом же листинге вы видите пример применения оператора цикла for.

Листинг 1.21. Локальное присваивание в программе