Главная / Информатика / Конспект по информатике на тему "Программирование в системе компьютерной математики MathCad"

Конспект по информатике на тему "Программирование в системе компьютерной математики MathCad"

hello_html_190e626f.gifhello_html_m2a7690f7.gifВплоть до появления 7 версии системы MathCAD возможности программирования в них были крайне ограниченными. Фактически MathCAD позволяла реализовать лишь линейные программы, в основе которых лежит понятие функции. Функция if и ранжированные переменные в отдельных случаях могли заменить условные выражения и циклы, но с серьезными ограничениями. Отсутствовала возможность задания завершенных программных модулей.

http://detc.ls.urfu.ru/assets/amath0021/im/PanProg.gif

Эти возможности в расширенном варианте появились в MathCAD 7.0 Pro и имеются в описываемой версии MathCAD 2001 PRO. Они сосредоточены в наборной панели программных элементов Programming (показана на рисунке), включаемой кнопкойhttp://detc.ls.urfu.ru/assets/amath0021/im/knprog.gif на панели Math.

Отметим, что возможность составлять программы реализована только в версии Professional. Все эти MathCAD-программы с точки зрения программиста представляют собой подпрограммы-функции, которые могут возвращать в качестве результата число, вектор или матрицу. Функции могут вызывать сами себя (рекурсивно определенные функции) или другие подпрограммы-функции, определенные выше в том же MathCAD-документе.

Эти подпрограммы-функции составляются так же, как и определения функций. Рассмотрим простой пример вычисления суммы: Sum(n)=1+2+3+..+n:

  • Задайте сначала имя функции Sum, вслед за которым введите список параметров (n) и оператор присваивания :=

  • Введите начальное значение s <-- 0 и отметьте его целиком. Стрелка служит оператором присваивания в теле программы, вводитя клавишей { (открывающая фигурная скобка) или выбором кнопки со срелкой с панели.

  • Создайте новую строку программы (вставка вертикальной черты) при помощи кнопки Add Line ( клавиша -] (закрывающая квадратная скобка)). На экране появится вертикальная черта и пустая ячейка.

  • Выполните щелчок на кнопке for, чтобы ввести оператор цикла. Перед символом принадлежности введите переменную i, а после него - промежуток изменения переменной 1..n. В находящейся ниже ячейке введите присваивание s <- s+i. Программа готова.

Ниже в таблице приведены операторы, находящиеся на кнопках панели программирования.

Команды панели Symbolic (символы)

Команда

Функция

Пример

Add Line

Добавляет новую строку под/над (зависит от выделения) текущей строкой.


http://detc.ls.urfu.ru/assets/amath0021/im/knarr.gif

Присваивание значения локальной переменной.

http://detc.ls.urfu.ru/assets/amath0021/im/pr1.gif

if

Условный оператор (оператор ветвления)if; условие должно стоять после if, а оператор, который исполняется, если выполнено заданное условие,- перед if.

http://detc.ls.urfu.ru/assets/amath0021/im/pr2.gif

otherwise

Обозначает оператор, который должет быть исполнен, если условие оператора if не выполняется.

http://detc.ls.urfu.ru/assets/amath0021/im/pr2.gif

for

Цикл for; за ключевым словом for следует переменная-счетчик, а после символа принадлежности вводится промедуток изменения этой переменной. Внутренние операторы цикла сдвинуты немного вправо.

http://detc.ls.urfu.ru/assets/amath0021/im/pr3.gif

while

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

http://detc.ls.urfu.ru/assets/amath0021/im/pr4.gif

break

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

http://detc.ls.urfu.ru/assets/amath0021/im/pr5.gif

continue

Служит для преждевременного завершения текущей итерации цикла; сам цикл при этом продолжается.

http://detc.ls.urfu.ru/assets/amath0021/im/pr6.gif

retutn

Преждевременное завершение программы; указанное в ячейке значение будет возвращено.

http://detc.ls.urfu.ru/assets/amath0021/im/pr7.gif

on error

Если при вычислении выражения expr2 возникла ошибка, вычисляется выражение expr1.

http://detc.ls.urfu.ru/assets/amath0021/im/pr8.gif





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

будет возвращаться значение 0 при любом х < 0.

Инструкция on error

Инструкция on error позволяет создавать процедуры обработки ошибок. Эта инструкция задается в виде:

Выражение_1 on error Выражение_2

Если при выполнении Выражения_1 возникает ошибка, то выполняется Выражение_2. С инструкцией on error связана функция error, которая обычно используется для возврата текстового сообщения об ошибке.



Примеры программ.

Условный оператор if и оператор otherwise.Рассмотрим пример программного блока, вычисляющего факториал с использованием рекурсии

http://detc.ls.urfu.ru/assets/amath0021/im/PR9.gif

В данном примере 1 возвращается, только если n=0 или n=1. Обратите внимание на задание некольких условий - со знаком плюс, каждое условие в скобках. В остальных случаях, учитывая формулу
n!=n*(n-1)!, вызывается fakt(n-1) и умножается на n.
При помощи функции 
error можно вывести сообщение об ошибке при неправильном вводе аргумента.

Для демонстрации работы цикла for рассмотрим ту же задачу, но вычисление факториала осуществим при помощи цикла.

http://detc.ls.urfu.ru/assets/amath0021/im/PR10.gif

Если n=0 или n=1, возвращается 1, в противном случае при помощи цикла for вычисляется произведение n!=1*2*3...*n. Вычисленное последним значение pвозвращается автоматически.


В следующем примере при помощи алгоритма Евклида определяется наибольший общий делитель. Для реализации алгоритма используется цикл с ключевым словом while

http://detc.ls.urfu.ru/assets/amath0021/im/PR11.gif

Прерывание цикла при помощи операторов break и continue. Оператор return .Первый пример - релизация метода касательных Ньютона для определения нулей функции. На основе начального значения x вычисляется новое улучшенное значение x, расположенное ближе к искомому нулю функции. При этом итерации повторяются до тех пор, пока значение функции не станет меньше заданной точности (в примере 10-6).

http://detc.ls.urfu.ru/assets/amath0021/im/PR12.gif

При помощи оператора return организовано завершение программы в нужный момент. В данном примере если число итераций больше или равно 10, то происходит прерывание программы и выдается сообщение о том, что слишком много итераций. Здесь также отслеживаются случаи, когда производная в знаменателе близка к нулю и выдается об этом сообщение.


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

В примере справа ключевое слово continue используется для выявления всех нулей функции на заданном интервале. При этом в примере производится разбиение интервала на n равных подинтервалов и ищутся те из них, на которых функия меняет знак. При обнаружении такого поинтервала вызывается функия, реализующая метод касательных Ньютона, с начальным значением, находящимся в середине подинтервала.

http://detc.ls.urfu.ru/assets/amath0021/im/PR13.gif

Обратите внимание, по завершении работы программы выдается вектор значений.

Ниже приводится программа, вычисляющая коэффициенты Фурье функции, причем в результате выдается матица значений: нулевая по счету строка содержит коэффициенты Аn, а первая - коэффициенты Bn. Для выделения этих коэффициентов выдавемая матрица транспонируется и из нее выбирается нулевой столбец для коэффициентов Аn, и первый - для Bn.

http://detc.ls.urfu.ru/assets/amath0021/im/PR14.gif



Обработка ошибок в программных модулях


На рисунке показано применение операторов on error и return, а также действие функции error, задающей вывод надписи в желтом прямоугольнике при активизации мышью выражения, содержащего ошибку.

В этих примерах надо обратить внимание на два момента. Первый — возможность применения оператора on error вне программного блока для задания функции y (x) =sin (x)/x с исключительным значением 1 при х=0.


hello_html_606f3cae.gif


Таким образом, инструкция 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 — неверный размер вектора.

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



11


Конспект по информатике на тему "Программирование в системе компьютерной математики MathCad"
  • Информатика
Описание:

Вплоть до появления 7 версии системы MathCAD возможности программирования в них были крайне ограниченными. Фактически MathCAD позволяла реализовать лишь линейные программы, в основе которых лежит понятие функции. Функция if и ранжированные переменные в отдельных случаях могли заменить условные выражения и циклы, но с серьезными ограничениями. Отсутствовала возможность задания завершенных программных модулей. Эти возможности в расширенном варианте появились в MathCAD 7.0 Pro и имеются в описываемой версии MathCAD 2001 PRO. Они сосредоточены в наборной панели программных элементов Programming, включаемой кнопкой на панели Math.

Автор Харитонова Екатерина Александровна
Дата добавления 04.01.2015
Раздел Информатика
Подраздел
Просмотров 436
Номер материала 26715
Скачать свидетельство о публикации

Оставьте свой комментарий:

Введите символы, которые изображены на картинке:

Получить новый код
* Обязательные для заполнения.


Комментарии:

↓ Показать еще коментарии ↓