Основными инструментами работы в Mathcad являются математические выражения, переменные и функции. Нередко записать формулу, использующую ту или иную внутреннюю логику (например, возвращение различных значений в зависимости от условий), в одну строку не удается. Назначение программных модулей как раз и заключается в определении выражений, переменных и функций в несколько строк, часто с применением специфических программных операторов.
Принцип программирования в Mathcad
При помощи элементов программирования можно определять переменные и функции (как показано в листинге 1.19).
Листинг 1.19. Функция условия, определенная с помощью программы
Традиционное программирование, упрощенный вариант которого применен в Mathcad и осуществляется при помощи панели инструментов Programming (Программирование), имеет ряд существенных преимуществ, которые в ряде случаев делают документ более простым и читаемым:
- возможность применения циклов и условных операторов;
- простота создания функций и переменных, требующих нескольких простых шагов;
- возможность создания функций, содержащих закрытый для остального документа код, включая преимущества использования локальных переменных и обработку исключительных ситуаций.
Программирование в Mathcad 13. Написание простейших циклов и условий. Урок 24
Как видно из листинга 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) . Рассмотрим работу каждой строки кода этого листинга.
2. Условие второй строки х>о выполнено, поэтому выполняются обе следующие строки, объединенные короткой вертикальной чертой в общий фрагмент.
3. Функции f(x) присваивается значение f (x)=»positive» .
4. Условие х> 1000 не выполнено, поэтому значение » big positive » не присваивается f (х) , она так и остается равной строке » positive «.
5. Последняя строка не выполняется, т. к. одно из условий ( х> 0 ) оказалось истинным, и оператор otherwise (т. е., «иначе») не понадобился.
Таким образом, основной принцип создания программных модулей заключается в правильном расположении строк кода. Ориентироваться в их действии довольно легко, т. к. фрагменты кода одного уровня сгруппированы в программе с помощью вертикальных черт.
Язык программирования Mathcad не был бы эффективным, если бы не позволял создавать внутри программных модулей локальные переменные, которые «не видны» извне, из других частей документа. Присваивание в пределах программ, в отличие от документов Mathcad, производится с помощью оператора Local Definition (Локальное присваивание), который вставляется нажатием кнопки с изображением стрелки (
Ни оператор присваивания :=, ни оператор вывода = в пределах программ применять не разрешается.
В Mathcad 12 переменным, которые впервые появляются в программных модулях, по умолчанию присваивается значение 0. В прежних версиях программы использование переменных в программах без предварительного присваивания им значений приводило к генерации ошибки (как в расчетах на рабочей области документов Mathcad).
Локальное присваивание иллюстрируется листингом 1.21. Переменная z существует только внутри программы, выделенной вертикальной чертой. Из других мест документа получить ее значение невозможно. На этом же листинге вы видите пример применения оператора цикла for .
Листинг 1.21. Локальное присваивание в программе
Источник: radiomaster.ru
Создание программ
Программа Mathcad есть частный случай выражения Mathcad. Подобно любому выражению, программа возвращает значение, если за ней следует знак равенства. Точно так же, как переменную или функцию можно определить через выражение, их можно определить и с помощью программы.
Главным различием между программой и выражением является способ задания вычислений. При использовании выражения алгоритм получения ответа должен быть описан одним оператором. В программе может быть использовано столько операторов, сколько нужно. Можно рассматривать программу как «‘составное выражение» .
Следующий пример показывает, как написать простую программу для вычисления функции
Хотя этот пример настолько прост, что, может быть, и программа в этом случае не нужна, он позволяет показать, как нужно отделять друг от друга операторы, и как использовать локальный’оператор присваивания » «.
Введите левую часть определения функции и знак равенства «: Add Line» или на клавиатуре клавишу ]. Появится вертикальный столбец с двумя полями ввода дл» занесения операторов, образующих программу. Поля ввода для дополнительных операторов открываются с помощью щелчка по кнопке «Add Line».
Перейдите в верхнее поле ввода, нажав клавишу [Tab]. Напечатайте z и нажмите кнопку » » на панели программирования или клавишу для того, чтобы ввести » «.
В поле ввода справа от «
Последнее поле ввода предназначено для задания возвращаемого функцией значения log(z).
Теперь эту функцию можно использовать точно так же, как любую другую функцию. На рис. 31 эта функция показана вместе с функцией, ей эквивалентной, но определенной на одной строке вместо двух. Отметим, что переменная z не определена вне программы. Определение z внутри программы является локальным и действительно только внутри этой программы.
Программа может состоять из любого числа операторов. Чтобы прибавить оператор, нужно щёлкнуть по кнопке «Add Line» на панели программирования. Mathcad добавляет поле ввода внизу выделенного к этому моменту оператора. Чтобы исключить позицию ввода, ее нужно выделить, заключив в выделяющую рамку, и нажать клавишу [Del].
Рис. 31 .Определение одной и той же функции с помощью программы и через выражение
На рис. 32 приведен несколько более сложный пример с формулой для корня квадратного уравнения. Хотя вычисление этого корня может быть описано одной формулой, как это показано в верхней половине рисунка, однако удобнее вычислять его с помощью последовательности простых операторов, как показано в нижней половине рисунка. Это позволяет избежать редактирования громоздких формул.
Рис. 32. Определение более сложной функции в виде выражения и в виде программы
Таким образом, программа Mathcad есть выражение, состоящее из последовательности операторов, каждый из которых является, в свою очередь, выражением. Как и любое другое выражение, программа Mathcad возвращает значение. Этим значением является значение последнего выражения, выполненного программой.
Источник: vuzlit.com
Программирование в среде MathCAD
Вплоть до появления 7 версии системы MathCAD возможности программирования в них были крайне ограниченными. Фактически MathCAD позволяла реализовать лишь линейные программы, в основе которых лежит понятие функции. Функция if и ранжированные переменные в отдельных случаях могли заменить условные выражения и циклы, но с серьезными ограничениями. Отсутствовала возможность задания завершенных программных модулей.
Вы уже знаете о суперспособностях современного учителя?
Тратить минимум сил на подготовку и проведение уроков.
Быстро и объективно проверять знания учащихся.
Сделать изучение нового материала максимально понятным.
Избавить себя от подбора заданий и их проверки после уроков.
Наладить дисциплину на своих уроках.
Получить возможность работать творчески.
Просмотр содержимого документа
«Программирование в среде MathCAD»
РЕФЕРАТ НА ТЕМУ:
Программирование в среде MathCAD
Выполнила студентка группы МДФ-112 Шибаева О. Н.
Задание операторов пользователя
Первым признаком программирования является задание новых операторов пользователя. Такой оператор задается практически так же, как функция пользователя, но вместо имени выбирается какой-либо подходящий знак. Например, можно задать оператор деления в виде:
— задание нового оператора деления;
+(6,2) =3 — применение функции деления;
+6+2 = 3 — применение нового оператора деления.
При кажущейся простоте такого задания здесь есть проблемы. Встроенные в систему операторы нельзя переопределить. Поэтому набор доступных знаков для обозначения новых операторов ограничен. К примеру, нельзя задать новый оператор деления знаком / (он уже использован), но можно взять знак + поскольку этот символ как знак деления системой не используется.
Вторая проблема связана с вводом символа нового оператора. Скорее всего, его напрямую ввести нельзя. Придется воспользоваться типовыми приемами ввода новых символов в документы Windows. Один из этих приемов — использование приложения, выдающего таблицу символов, с возможностью его экспорта из этой таблицы в документ другого приложения (в нашем случае — в документ MathCAD).
Можно также воспользоваться подходящим знаком из набора Extra Math Symbol, имеющегося в составе шпаргалок QuickSheet, доступ к которым дает центр ресурсов. Для переноса знака можно скопировать его в буфер обмена с помощью операции Copy, а затем ввести в документ, используя операцию Paste.
После того как оператор задан, его можно использовать и как функцию и как оператор. Для применения нового оператора надо вывести его шаблон с помощью панели математических знаков. В нашем случае следует нажать кнопку xfy этой панели — она выводит особый шаблон вида . Введите операнды, например 6 и 2, в крайние прямоугольники, а символ оператора — в средний. Поставив после этой конструкции знак равенства, увидите результат — число 3.
Разумеется, можно задать и другие операторы, например, для работы с одним операндом. Так можно задать оператор для пересчета значения температуры по шкале Цельсия в температуру по шкале Фаренгейта, следующим образом
°С (х):=
х+32 °F.=1
Затем, используя кнопку xf наборной панели символов отношения, можно выполнять операцию пересчета в виде.
Проще и естественней задать нужную операцию с помощью функции пользователя. Однако есть области математики и физики, где задание новых операторов необходимо, поскольку является частью специфического языка их описания. Те, кто работает в этих областях, по достоинству оценят предоставляемую возможность, несмотря на определенные неудобства, связанные с назначением новых операторов и их использованием
Задание программных модулей
Вплоть до появления последних версий системы MathCAD возможности программирования в них были крайне ограниченными.
Фактически система MathCAD позволяла реализовать лишь линейные программы, в основе которых лежит понятие функции. Функция if и ранжированные переменные в отдельных случаях могли заменить условные выражения и циклы, но с серьезными ограничениями. Отсутствовала возможность задания завершенных программных модулей.
Возможность задания программных блоков (модулей) появилась в версии MathCAD PLUS 6. 0 PRO и в расширенном варианте имеются в описываемой версии MathCAD 2000 PRO. Они сосредоточены в палитре программных элементов.
Как видно на рисунке, программный модуль в системе MathCAD превратился в самостоятельный модуль, выделяемый в тексте документа жирной вертикальной чертой. Он может вести себя как безымянная функция, не имеющая параметров, но возвращающая результат — первый пример на вычисление квадратного корня из числа 12. Программный модуль может выполнять и роль тела функции пользователя с именем и параметрами — второй пример.
Обзор инструкций
Нетрудно заметить, что набор программных элементов для создания программных модулей весьма ограничен и содержит следующие элементы:
Add Line — создает и при необходимости расширяет жирную вертикальную линию, справа от которой в шаблонах задается запись программного блока;
— символ локального присваивания (в теле модуля);
if — условная инструкция;
for — инструкция задания цикла с фиксированным числом повторений;
while — инструкция задания цикла типа «пока» (цикл выполняется, пока выполняется некоторое условие);
otherwise — инструкция иного выбора (обычно применяется с if);
break — инструкция прерывания;
continue — инструкция продолжения;
return — инструкция возврата;
оn error — инструкция обработки ошибок.
Инструкция Add Line
Инструкция Add Line выполняет функции расширения программного блока. Расширение фиксируется удлинением вертикальной черты программных блоков или их древовидным расширением. Благодаря этому в принципе можно создавать сколь угодно большие программы.
Оператор внутреннего присваивания
Оператор выполняет функции локального внутреннего присваивания. Например, выражение х 123 присваивает переменной х значение 123. Локальный характер присваивания означает, что такое значение переменной х сохраняется только в теле программы. За пределами тела программы значение переменной х может быть неопределенным либо равным значению, которое задается операторами локального: = или глобального = присваивания вне программного блока.
Не следует путать оператор внутреннего присваивания с оператором символьного вывода , у которого стрелка направлена в другую сторону. Эти операторы решают совершенно разные задачи.
Условная инструкция if
ператор if является оператором условного выражения. Он задается в виде:
Выражение if Условие
Если Условие выполняется, то возвращается значение Выражения. Совместно с этим оператором часто используются инструкция прерывания break и инструкция иного выбора otherwise.
Инструкция for
Инструкция for служит для организации циклов с заданным числом повторений. Он записывается в виде:
for Var Nmin.. Nmax
Эта запись означает, что если переменная Var меняется с шагом + 1 от значения Nmin до значения Nmax, то выражение, помещенное в шаблон, будет выполняться. Переменную счетчика Var можно использовать в выражениях программы.
Инструкция while
Инструкция while служит для организации циклов, действующих до тех пор, пока выполняется некоторое Условие. Эта инструкция записывается в виде:
while Условие
Выполняемое выражение записывается в расположенное ниже место ввода..
Инструкция otherwise
Инструкция иного выбора otherwise обычно используется совместно с оператором if. Это поясняет следующая программная конструкция:
f (x): = 1 if х0 возвращает 1, если х О
-1 otherwise возвращает -1 во всех иных случаях
Инструкция break
Инструкция break вызывает прерывание работы программы всякий раз, когда она встречается. Чаще всего она используется совместно с оператором условного выражения if и операторами циклов while и for, обеспечивая переход в конец тела цикла.
Инструкция continue
Инструкция continue используется для продолжения работы после прерывания программы. Обычно она применяется совместно с операторами задания циклов while и for, обеспечивая возвращение в точку прерывания и продолжение вычислений.
Инструкция return
Инструкция return прерывает выполнение программы и возвращает значение операнда, стоящего следом за ней. Например, в приведенном ниже случае
return 0 if x
будет возвращаться значение 0 при любом х
Инструкция on error
Инструкция on error позволяет создавать процедуры обработки ошибок. Эта инструкция задается в виде:
Выражение_1 on error Выражение_2
Если при выполнении Выражения_1 возникает ошибка, то выполняется Выражение_2. С инструкцией on error связана функция error, которая обычно используется для возврата текстового сообщения об ошибке.
Примеры программирования
Несмотря на скромный набор программных средств, они дают системе MathCAD именно следующие возможности: задание функций с аппаратом локальных переменных, задание различных видов циклов (в том числе вложенных), упрощение алгоритмов с помощью операций присваивания и реализация по классическим алгоритмам итерационных и рекурсивных процедур. Изучить эти возможности на следующем примере:
Обратите особое внимание на второй пример вычисления факториала. Здесь использовано задание одного программного модуля внутри другого. Вообще говоря, для нескольких подмодулей, которые должны выполняться в составе циклов, надо использовать их объединение в виде жирной вертикальной черты. Для этого, как и для исходного задания блока, служит команда Add Line, добавляющая в модуль дополнительную вертикальную черту для подмодуля.
Программный модуль, в сущности, является функцией, но описанной с применением упомянутых сугубо программных средств. Эта функция может возвращать значение, определяемое последним оператором. Это значит, что после такого модуля, выделенного как целый блок, можно поставить знак равенства для вывода значения функции. В блоке могут содержаться любые операторы и функции входного языка системы. Для передачи в блок значений переменных можно использовать переменные документа, которые ведут себя в блоке как глобальные переменные.
Обычно модулю присваивается имя со списком переменных, после которого идет знак присваивания: =. Переменные в списке являются локальными, и им можно присваивать значения при вызове функции, заданной модулем Локальный характер таких переменных позволяет присваивать им те же имена, что и глобальным переменным документа. Однако лучше этого не делать и использовать разные имена для локальных переменных программных модулей и переменных документа.
Обработка ошибок в программных модулях
На рисунке показано применение операторов on error и return, а также действие функции error, задающей вывод надписи в желтом прямоугольнике при активизации мышью выражения, содержащего ошибку.
В этих примерах надо обратить внимание на два момента. Первый — возможность применения оператора on error вне программного блока для задания функции y (x) =sin (x)/x с исключительным значением 1 при х=0.
Таким образом, инструкция on error фактически играет роль процедуры обработки ошибок. Она позволяет создавать программные модули, защищенные от грубых ошибок.
Задание программных модулей позволяет реализовать любые специальные приемы программирования и может служить мощным средством расширения системы путем задания новых функций.
Следует также отметить, что система MathCAD допускает расширение путем включения в нее новых функций, написанных на языке Си или Си++.
При выполнении вычислений возможны ошибки. Система выводит сообщения об ошибках, закрашивая ошибочные имена идентификаторов в ярко-красный цвет
Ниже представлен список основных сообщений об ошибках:
array size mismatch — несоответствие размера массива;
cannot be defined — не может быть определено;
cannot take subscript — не содержит верхних (нижних) индексов, definition stack overflow — переполнение стека определений;
did not find solution — решение не найдено;
dimension to non real power — размерность массива — не целое число;
domain error — ошибка области определения;
duplicate — дублирование;
equation too large — слишком большое выражение;
error in constant — ошибка в константе;
error in list — ошибка в списке;
error in solve block — ошибка в блоке;
file error — ошибка в файле;
file not found — файл не найден;
illegal array operation — неверная операция с массивом;
illegal context — неверный контекст;
illegal factor — неверный множитель;
illegal function name — неверное имя функции;
illegal ORIGIN — неверное употребление ORIGIN;
illegal range — неправильный диапазон;
illegal tolerance — некорректная точность аппроксимации;
incompatible units — несовместимые единицы;
index out of bounds — индекс вне границ;
interrupted — решение прервано;
invalid order — неверный порядок;
list too long — длинный входной список;
misplased comma — неуместная запятая;
missing operand — пропущенный операнд;
missing operator — пропущенный знак операции;
must be 3-vector — должен быть трехмерный вектор;
must be array — должен быть массив;
must be dimensionless — должен быть безразмерным;
must be increasing — должен быть возрастающим;
must be integer — должен быть целым;
must be nonzero — должен быть ненулевым;
must be positive — должен быть положительным;
must be range — должен быть диапазон;
must be real — должен быть вещественным;
must be scalar — должен быть скаляром;
must be vector — должен быть вектором;
nested solve block — следующий блок решения;
no matching Given — нет соответствующего Given;
no scalar value — нескалярная величина;
not a name — не является именем;
not converging — не конвертируется;
only one array allowed — допустим только один массив;
overflow — переполнение;
significance lost — потеряны значащие цифры;
singularity — деление на нуль;
stack overflow — переполнение стека;
subscript too large — слишком большой нижний индекс;
too few arguments — слишком мало аргументов;
too few constraints — слишком мало ограничений;
too few elements — слишком мало элементов;
too few subscripts — мало нижних индексов;
too large to display — слишком велико, чтобы быть отображенным;
too many arguments — слишком много аргументов;
too many constraints — слишком много ограничений;
too many points — слишком много точек;
too many subscripts — слишком много индексов;
undefindet — не определено;
unmatched parenthesis — дисбаланс скобок;
wrong size vector — неверный размер вектора.
Сообщения об ошибках кратки, но их анализ не вызывает особых затруднений. Заметим, что приведенный список содержит далеко не все ошибки, а лишь наиболее распространенные.
Источник: kopilkaurokov.ru