Примеры программирования
Несмотря на столь скромный набор программных средств, они дают системе MathCAD именно те возможности, которые ранее попросту отсутствовали: задание функций с аппаратом локальных переменных, задание различных видов циклов (в том числе вложенных), упрощение алгоритмов с помощью операций присваивания и реализация по классическим алгоритмам итерационных и рекурсивных процедур. Рекомендуется внимательно изучить рис. 12. 10, на котором показана часть этих возможностей.
Обратите особое внимание на второй пример вычисления факториала. Здесь использовано задание одного программного модуля внутри другого. Вообще говоря, для нескольких подмодулей, которые должны выполняться в составе циклов, надо использовать их объединение в виде жирной вертикальной черты. Для этого, как и для исходного задания блока, служит
Рис. 12. 10 Примеры задания программных блоков
команда Add Line,
добавляющая в модуль дополнительную вертикальную черту для подмодуля.
Программный модуль в сущности является функцией, но описанной с применением упомянутых сугубо программных средств. Эта функция может возвращать значение, определяемое последним оператором. Это значит, что после такого модуля, выделенного как целый блок, можно поставить знак равенства для вывода значения функции. В блоке могут содержаться любые операторы и функции входного языка системы. Для передачи в блок значений переменных можно использовать переменные документа, которые ведут себя в блоке как глобальные переменные.
Обычно модулю присваивается имя со списком переменных, после которого идет знак присваивания: =. Переменные в списке являются локальными,
Рис. 12. 11 Применение директив on error и return
и им можно присваивать значения при вызове функции, заданной модулем Локальный характер таких переменных позволяет присваивать им те же имена, что и глобальным переменным документа. Однако лучше этого не делать и использовать разные имена для локальных переменных программных модулей и переменных документа.
На рис. 12. 11 показано применение операторов on error и return, а также действие функции error, задающей вывод надписи в желтом прямоугольнике при активизации мышью выражения, содержащего ошибку.
В этих примерах надо обратить внимание на два момента. Первый — возможность применения оператора on error вне программного блока для задания функции y (x) =sin (x)/x с исключительным значением 1 при х=0. Второй — применение этого оператора для решения уравнения, имеющего комплексные корни. Когда при таком решении задается действительное начальное приближение для х, то функция root (f, x) дает ошибку. Она исправляется с помощью оператора on error при задании функции RF (f, x), имеющей обработчик ошибок.
Задание программных модулей позволяет реализовать любые специальные приемы программирования и может служить мощным средством расширения системы путем задания новых функций.
Теперь рассмотрим достаточно сложный и поучительный пример применения программного блока. На рис. 12. 12 показан документ, в котором программный модуль вычисляет коэффициенты Фурье для заданной функции — пилообразного импульса (его можно менять).
Рис. 12. 12 Вычисление коэффициентов А и В разложения функции в ряд Фурье
Тут вычисление коэффициентов ряда Фурье выполнено по их классическим интегральным представлениям. Это хорошо иллюстрирует возможность применения в программных блоках весьма мощных средств входного языка системы. Продолжение этого документа, реализующее гармонический синтез, представлено на рис. 12. 13.
На рис. 12. 13 показаны векторы коэффициентов, приведена формула гармонического синтеза исходной функции по ее гармоническому ряду и на графике проведено сопоставление исходной функции с ее представлением рядом Фурье с ограниченным числом гармоник N
Рис. 12. 13 Реализация гармонического синтеза
Еще один пример применения программного модуля для задания точек некоторой функции в трехмерном пространстве показан на рис 12 14 Там же представлено построение этих точек внутри параллелепипеда
Рис. 12. 14 Применение программного модуля для построения точек заданной функции в пространстве
Разумеется, подобные задачи могут в системе MathCAD решаться и без использования в явном виде программных средств Однако эти средства облегчают решение сложных задач, особенно когда имеется описание их программной реализации на каком-либо языке программирования Тогда несложно перевести реализацию решения задачи с этого языка на язык программирования системы MathCAD
Вообще, надо отметить, что проблема включения в документы программных блоков в MathCAD решена изящно и красиво, такие блоки подчас просто украшают документы и позволяют пользоваться всеми средствами не только математически ориентированного входного языка MathCAD, но и классического программирования.
Много интересного и поучительного можно найти в примерах задания и применения программных модулей раздела QuickSheet (Шпаргалки), доступного из центра ресурсов системы. Нельзя не отметить, что характер задания программных модулей в MathCAD весьма удачен: модули прекрасно вписываются в документы, выглядят просто и естественно.
Следует также отметить, что система MathCAD PLUS 7. 0 допускает расширение путем включения в нее новых функций, написанных на языке Си или Си++. Впрочем, возможности системы настолько широки, что трудно себе представить необходимость в таком кардинальном шаге. Это расширение скорее может оказаться полезным для разработчиков системы, чем для подавляющего большинства ее пользователей.
Интересующиеся этой возможностью могут воспользоваться описанием ее в [14].