Математический редактор MathCAD
Программирование без программирования
6.1. Программирование без программированияВ ранних версиях Mathcad встроенного языка программирования не было. Чтобы применять привычные операции проверки условий и организовывать циклы, приходилось изобретать причудливую смесь из встроенных функций условия if (листинг 6 1) и until и комбинаций ранжированных переменных (листинг 6.2).
В связи с устоявшимися традициями применения языка программирования функцию until настоятельно не рекомендуется использовать в дальнейшей работе (тем не менее, она действует в Mathcad 11, но отнесена к устаревшим функциям).
Что такое программа?
6.2.1. Что такое программа?Основными инструментами работы в Mathcad являются математические выражения, переменные и функции. Нередко записать формулу, использующую ту или иную внутреннюю логику (например возвращение различных значений в зависимости от условий), в одну строку не удается. Назначение программных модулей как раз и заключается в определении выражений, переменных и функций в несколько строк, часто с применением специфических программных операторов.
Сравните определение функции f (х) из листинга 6.1 с определением f (х) с помощью программного модуля (листинг 6.3).
Создание программы (Add Line)
6.2.2. Создание программы (Add Line)Чтобы создать программный модуль, например, представленный в предыдущем разделе (см. листинг 6.3):
Не вводите с клавиатуры имена программных операторов. Для их вставки можно применять лишь сочетания клавиш, которые приведены в тексте всплывающей подсказки (рис. 6.2 и 6.3).
Разработка программы
6.2.3. Разработка программыВставить строку программного кода в уже созданную программу можно в любой момент с помощью той же самой кнопки Add Line (Добавить линию). Для этого следует предварительно поместить на нужное место внутри программного модуля линии ввода. Например, расположение линии ввода на строке, показанной на рис. 6.5, приведет к появлению новой линии с местозаполнителем перед этой строкой. Если передвинуть вертикальную линию ввода из начала строки (как на рис. 6.5) в ее конец, то новая линия появится после строки. Если выделить строку не целиком, а лишь некоторую ее часть (рис. 6.6), то это повлияет на положение в программе новой строки кода (результат нажатия кнопки Add Line показан на рис. 6.7).
Не забывайте, что для желаемого размещения линий ввода внутри формулы можно использовать не только мышь и клавиши со стрелками, но и пробел. С помощью последовательных нажатий пробела линии ввода "захватывают" разные части формулы.
Локальное присваивание (<—)
6.2.4. Локальное присваивание (<—)Язык программирования Mathcad не был бы эффективным, если бы не позволял создавать внутри программных модулей локальные переменные, которые "не видны" извне, из других частей документа. Присваивание в пределах программ, в отличие от документов Mathcad, производится с помощью оператора Local Definition (Локальное присваивание), который вставляется нажатием кнопки с изображением стрелки <- на панели Programming (Программирование).
Ни оператор присваивания :=, ни оператор вывода = в пределах программ не применяются.
Локальное присваивание иллюстрируется листингом 6.5. Переменная z существует только внутри программы, выделенной вертикальной чертой. Из других мест документа получить ее значение невозможно.
Условные операторы (if, otherwise)
6.2.5. Условные операторы (if, otherwise)Действие условного оператора if состоит из двух частей. Сначала проверяется логическое выражение (условие) справа от него. Если оно истинно, выполняется выражение слева от оператора if. Если ложно — ничего не происходит, а выполнение программы продолжается переходом к ее следующей строке. Вставить условный оператор в программу можно следующим образом (см. рис. 6.8):
Операторы цикла (for, while, break, continue)
6.2.6. Операторы цикла (for, while, break, continue)В языке программирования Mathcad имеются два оператора цикла: for и while. Первый из них дает возможность организовать цикл по некоторой переменной, заставляя ее пробегать некоторый диапазон значений. Второй создает цикл с выходом из него по некоторому логическому условию. Чтобы вставить в программный модуль оператор цикла:
Возврат значения (return)
6.2.7. Возврат значения (return)Если для определения переменной или функции применяется программный модуль, то его строки исполняются последовательно при вычислении в документе этой переменной или функции. Соответственно, по мере выполнения программы рассчитываемый результат претерпевает изменения. В качестве окончательного результата выдается последнее присвоенное значение (примеры можно найти в листингах 6.3—6.12). Чтобы подчеркнуть возврат программным модулем определенного значения, можно взять за правило делать это в последней строке программного модуля (листинг 6.13).
Перехват ошибок (on error)
6.2.8. Перехват ошибок (on error)Программирование в Mathcad позволяет осуществлять дополнительную обработку ошибок. Если пользователь предполагает, что выполнение кода в каком-либо месте программного модуля способно вызвать ошибку (например деление на ноль), то эту ошибку можно перехватить с помощью оператора on error. Чтобы вставить его в программу, надо поместить линии ввода в ней в нужное положение и нажать кнопку с именем оператора on error на панели Programming (Программирование). В результате появится строка с двумя ме-стозаполнителями и оператором on error посередине (рис. 6.10).
Язык программирования Mathcad
6.2. Язык программирования MathcadДля вставки программного кода в документы в Mathcad имеется специальная панель инструментов Programming (Программирование), которую можно вызвать на экран нажатием кнопки Programming Toolbar на панели Math (Математика), как показано на рис. 6.1. Большинство кнопок этой панели выполнено в виде текстового представления операторов программирования, поэтому их смысл легко понятен.
Изложим последовательно основные составные элементы языка программирования Mathcad и рассмотрим примеры его использования.
Примеры программирования
6.3. Примеры программированияРассмотрим два простых примера использования программных модулей в Mathcad для численных (листинг 6.16) и символьных (листинг 6.17) расчетов. В двух приведенных листингах используется большинство операторов, рассмотренных в данной главе. Когда вы станете сами разрабатывать свои программные модули в Mathcad, не забывайте, что операторы программирования вставляются в текст программы с помощью кнопок панели инструментов Programming (Программирование). Их имена нельзя ни в коем случае просто набивать на клавиатуре, поскольку они не будут восприняты Mathcad корректно.
С помощью средств программирования можно создавать намного более сложные программы. Несколько примеров достаточно эффективного применения программирования вы найдете в разд. "Фазовый портрет динамической системы" гл. 11 и разд. "Разностные схемы для ОДУ" гл. 12.
Программирование
Глава 6. ПрограммированиеОператор break внутри цикла while
Листинг 6.10. Оператор break внутри цикла while
Оператор continue в конце цикла while
Листинг 6.11. Оператор continue в конце цикла while
Оператор continue в конце цикла for
Листинг 6.12. Оператор continue в конце цикла for

Применение оператора return
Листинг 6.14. Применение оператора return

Перехват ошибки деления на ноль
Листинг 6.15. Перехват ошибки деления на нольПрограммирование в символьных расчетах
Листинг 6.17. Программирование в символьных расчетах

Функция условия
Листинг 6.1. Функция условияОрганизация цикла при помощи ранжированной переменной
Листинг 6.2. Организация цикла при помощи ранжированной переменной
Функция условия, определенная с помощью программы
Листинг 6.3. Функция условия, определенная с помощью программы
Несмотря на принципиальную эквивалентность определения функций и переменных через встроенные функции Mathcad или программные модули, программирование имеет ряд существенных преимуществ, которые в ряде случаев делают документ более простым и читаемым:
Пример усовершенствования программы
Листинг 6.4. Пример усовершенствования программы
В режиме выполнения программы, а это происходит при любой попытке вычислить f (х), выполняется последовательно каждая строка кода. Например, в предпоследней строке листинга 6.4 вычисляется f(i). Рассмотрим работу каждой строки кода этого листинга.
0 выполнено, поэтому выполняются обе следующие строки, объединенные короткой вертикальной чертой в общий фрагмент.
1000 не выполнено, поэтому значение "big positive" не присваивается f (х), она так и остается равной строке "positive".
0) оказалось истинным, и оператор otherwise (т. е. "иначе") не понадобился.
Локальное присваивание в программе
Листинг 6.5. Локальное присваивание в программе
Опратор цикла while
Листинг 6.8. Опратор цикла while
Оператор break внутри цикла for
Листинг 6.9. Оператор break внутри цикла for
Начало создания программного модуля
Начало создания программного модуля
Панель инструментов Programming
Панель инструментов Programming
Перехват ошибки деления на ноль
Перехват ошибки деления на ноль
Оператор перехвата ошибок удобно применять в комбинации со встроенной функцией error(S). Она приводит к генерации ошибки в обычной для Mathcad форме с сообщением s. Пример усовершенствования листинга 6.15 для такого стиля обработки ошибки деления на ноль показан на рис. 6.11.
Обратите внимание, что сделанные изменения свелись к помещению текста сообщения об ошибке в аргумент функции error.
Положение линий ввода влияет на положение новой линии
Положение линий ввода влияет на положение новой линии
Результат вставки новой линии в программу (из положения рис. 6.6)
Результат вставки новой линии в программу (из положения рис. 6.6)
Зачем может потребоваться вставка новой линии в положение, показанное на рис. 6.7? Новая вертикальная черта с двумя линиями выделяет фрагмент программы, который относится к условию х>0, находящемуся в его заголовке. Пример возможного дальнейшего программирования показан в листинге 6.4.
Вставка новой строки в существующую программу
Вставка новой строки в существующую программу
Вставка оператора цикла
Вставка оператора цикла
Диапазон значений переменной в условии цикла for можно задать как с помощью диапазона ранжированной переменной (листинг 6.6), так и с помощью вектора (листинг 6.7).
Вставка оператора перехода по ошибке
Вставка оператора перехода по ошибке
В правом местозаполнителе следует ввести выражение, которое должно выполняться в данной строке программы. В левом — выражение, которое будет выполнено вместо правого выражения, если при выполнении последнего возникнет ошибка. Приведем пример применения оператора on error (листинг 6.15) в программном модуле, который рассчитывает функцию обратного числа значению n. Если n=0, то и присвоенное значение z=0, поэтому в последней строке программы выполняется правое выражение расчета i/z. Так происходит при расчете f (-2). Если попытаться вычислить f (0) как в конце листинга, то выполнение программы, заложенной в f (n), вызовет ошибку деления на ноль в последней строке программы. Соответственно, вместо выражения справа от оператора on error будет выполнено левое выражение, присваивающее функции f(n) строковое значение "user error: cannot divide by zero" (пользовательская ошибка: деление на ноль невозможно). Конечно, этой строке можно присвоить и текст на русском языке.
Вставка программного оператора
Вставка программного оператора
Вставка условия в программу
Вставка условия в программу
Вставка условного оператора
Вставка условного оператора
Биржевой анализ: Технический анализ - Инструменты - Софт
- Биржевой анализ - Технический анализ
- Обучение техническому анализу
- Индексы технического анализа
- Индикаторы технического анализа
- Методы технического анализа
- Графика в техническом анализе
- Технический анализ рынков
- Российский технический анализ
- Инструменты технического анализа
- Математика в биржевом анализе
- Разновидности биржевого анализа
- Mathematica в биржевом анализе
- MathCAD в биржевом анализе
- Maple в биржевом анализе
- Matlab в биржевом анализе