Pers.narod.ru. Обучение. Лекции по MathCAD. 11. Модульное програмирование в пакете MathCAD |
Описание П-Ф размещается в рабочем документе перед ее вызовом и включает в себя имя подпрограммы-функции, список формальных параметров (который может отсутствовать) и тело подпрограммы-функции. Для ввода конструкций в тело П-Ф используется палитра инструментов ПРОГРАММИРОВАНИЕ, приведенная на рис. 1.
Рис. 1. Палитра ПРОГРАММИРОВАНИЕ
Каждая П-Ф Mathcad имеет оригинальное имя, посредством которого осуществляется обращение к ней. Через это же имя (и только через это имя) «возвращается» результат выполнения П-Ф.
После имени П-Ф идет список формальных параметров, заключенный в круглые скобки. Через формальные параметры «внутрь» П-Ф «передаются» данные, необходимые для выполнения вычислений внутри программы, т.е. все формальные параметры являются входными.
В качестве формальных параметров могут использоваться имена простых переменных, массивов и функций. Формальные параметры отделяются друг от друга запятой.
Замечание 1. П-Ф может не иметь формальных параметров, и тогда данные передаются через имена переменных, определенных выше описания П-Ф.
Тело подпрограммы-функции включает любое число операторов: локальных операторов присваивания, условных операторов и операторов цикла, а также вызов других П-Ф и функций пользователя.
Порядок описания подпрограммы-функции Mathcad.
Для ввода в рабочий документ описания П-Ф необходимо выполнить следующие действия:
· ввести имя П-Ф и список формальных параметров, заключенный в круглые скобки
· ввести символ “:” – на экране отображается как “: =”;
· открыть палитру Программирования и щелкнуть кнопкой Add line (см. рис. 1). На экране появится вертикальная черта и вертикальный столбец с двумя полями для ввода операторов, образующих тело П-Ф (см. рис. 2);
Рис. 2. Структура подпрограммы-функции
· перейти в поле 1 (щелкнув на нем мышью или нажав клавишу [Tab]) и ввести первый оператор тела П-Ф.
· затем ввести второй, третий и т.д. операторы, добавляя пустые поля с помощью щелчка на кнопке Add line палитры программирование.
· заполнить самое нижнее поле ввода, введя туда выражение, определяющее возвращаемое через имя П-Ф (см. рис. 3).
Рис. 3. Окончательная структура подпрограммы-функции
Замечание 2. Если результатом работы П-Ф являются несколько величин, то из них в теле П-Ф необходимо сформировать массив и его имя поместить в последней строке тела П-Ф.
Локальный оператор присваивания
Для задания внутри программы значения какой-либо переменной используется так называемый локальный оператор присваивания, имеющий вид:
< имя переменной > < выражение > .
Для выполнения П-Ф необходимо обратиться к ее имени с указанием списка фактических параметров (если в описании программы присутствует список формальных параметров), т.е.:
< имя П-Ф > (< список фактических параметров >) .
Фактические параметры отделяются друг от друга запятой.
· Очевидно, что между фактическими и формальными параметрами должно быть соответствие по количеству, порядку следования и типу.
Замечание 3. Обращение к П-Ф должно находиться после ее описания, и к моменту обращения фактические параметры должны быть определены.
Пример 4. Обращение к программе f(x), приведенной на рис. 4.1.4, может иметь следующий вид:
Заметим, что переменная z никак не связана с «локальной» переменной z, используемой внутри тела П-Ф.¨
Замечание 4. Передать данные внутрь П-Ф можно, используя внутри подпрограммы переменные, определенные до описания П-Ф (см. пример на рис. 4.2.1).
Рис. 4. Подпрограмма-функция без формальных параметров
Операторы, реализующие этот алгоритм, в теле П-Ф также размещаются последовательно и выполняются все, начиная с первого и заканчивая последним.
Пример 6. Оформим в виде П-Ф вычисление корней квадратного уравнения ax2 + bx +c = 0 по формуле
.
Описание П-Ф root_poly2 и обращение к ней приведено на рис. 5.5.1. П-Ф имеет три входных формальных параметра – коэффициенты квадратного уравнения. Выходом является вектор с двумя компонентами. Заметим, что величины x1, x2 являются простыми переменными, а не элементами одномерного массива. Поэтому нижние индексы в их именах вводятся после нажатия клавиши [.] – «десятичная точка».
Подпрограмма-функция реализует линейный алгоритм – все операторы выполняются всегда строго последовательно.
Пример программирования линейного алгоритма
Для программирования разветвляющихся алгоритмов в подпрограмме-функции Mathcad можно использовать:
§ условную функции
§ условный оператор if.
Используя эти конструкции, можно «изменить» последовательное выполнение операторов.
Условный оператор. Этот оператор используется только в теле П-Ф и для его ввода необходимо щелкнуть на кнопке if палитры программирование. На экране появляется конструкция с двумя полями ввода, изображенная на рисунке.
Структура условного оператора if
В поле 2 вводится логическое выражение УСЛ (в простейшем случае это выражение отношений). В поле 1 вводится конструкция ВЫР1, которая выполняется, если проверяемое логическое выражение принимает значение 1. Если УСЛ = 0, то ВЫР1 не выполняется. Это соответствует условной структуре, называемой ЕСЛИ – ТО.
Для получения условной структуры ЕСЛИ – ТО – ИНАЧЕ используется оператор otherwise, вводимый с палитры ПРОГРАММИРОВАНИЕ, в поле которого размещается конструкция ВЫР2, которая выполняется, если проверяемое логическое выражение принимает значение 0 (см. рисунок). Оператор otherwise непосредственно следует после условного оператора if.
Реализация структуры ЕСЛИ – ТО – ИНАЧЕ
Для ввода ВЫР2 в поле оператора otherwise необходимо:
· выделить поле, стоящее после оператора if;
· щелкнуть на кнопке otherwise палитры программированиЕ;
· в появившееся поле оператора otherwise ввести необходимую конструкцию ВЫР2.
Пример 6. Составим описание П-Ф, вычисляющей функцию y(x), заданную выражением
Описание и вызов П-Ф приведены на рисунке
Реализация разветвляющегося алгоритма
Пример 7. Составим описание П-Ф для вычисления переменной z(t) по формуле
=
Описание П-Ф и ее вызов приведены на рисунке
Реализация разветвляющегося алгоритма
Из описания видно, что функция z(t) получит значение ln(t) только тогда, когда не выполняются условия, записанные в двух вышестоящих строках тела П-Ф.
Внимание! Если в строке 3 ввести просто ln(t), то это выражение будет вычисляться всегда вне зависимости от выполнения заданных выше условных операторов.
Задание 2. Составьте описания П-Ф, реализующих следующие разветвляющиеся алгоритмы:
где .
Вариант 1. При выполнении заданного условия УСЛ необходимо выполнить несколько конструкций MathCAD.
Вариант 2. При невыполнении заданного условия УСЛ необходимо выполнить несколько конструкций MathCAD.
В этом случае необходимо выделить поле оператора otherwise, щелкнуть на кнопке Add line палитры ПРОГРАММИРОВАНИЕ нужное число раз и заполнить появившиеся поля.
Пример 8. Составьте описание П-Ф, вычисляющей значения двух полиномов x(t), y(t) нулевой или первой степени. Порядок полиномов задается переменной n. Если n < 0 или n > 1, то значения полиномов равны 0. Описание П-Ф приведено на рисунке.
Реализация алгоритма примера
Пример 9. Даны два числа x, y. Составить описание П-Ф, которая переменной x присваивает максимальное значение из этих двух чисел, а y – минимальное. Описание приведено на рисунке.
Реализация разветвляющегося алгоритма
Вызов подпрограммы-функции arrangement
Задание 3. Даны три числа a, b, c. Составить П-Ф, реализующую следующий алгоритм. Если , то все числа заменить их квадратами, если , то каждое число заменить максимальным значением из этих трех чисел, в противном случае — сменить знаки у чисел.
Задание 4. Координаты точки на плоскости задаются двумя числами x, y. Составить П-Ф, вычисляющую номер четверти на плоскости, в которую попала точка.
Задание 5. Длина сторон треугольника задается числами a, b, c. Составить П-Ф, вычисляющую значение целой переменной n по следующему правилу: n = 3, если три стороны равны; n = 2, если любые две стороны равны; n = 1, если все три стороны имеют разную длину.
Циклы можно условно разделить на две группы:
· циклы типа арифметической прогрессии;
· итерационные циклы.
Программирование цикла типа арифметической прогрессии
Для программирования таких циклов используется оператор цикла for (часто называемый оператором цикла с параметром). Для ввода такого оператора необходимо выполнить следующие действия:
· щелкнуть на кнопке for палитры ПрограммированиЕ. На экране появятся поля ввода, изображенные на рисунке
Поля оператора цикла for
· в поле ввода 1 ввести имя переменной, являющейся параметром цикла;
· в поле 2 — закон изменения параметра цикла, используя для этого описание дискретной переменной или описание массива;
· в поле 3 — операторы, составляющие тело цикла. Если одной строки недостаточно, то дополнительные поля ввода (дополнительные строки) создаются щелчком на кнопке Add line палитры программированиЕ, и тогда слева от тела цикла появляется вертикальная черта, охватывающая тело цикла.
Пример 9. Составить описание П-Ф, реализующей алгоритм формирование вектора.
Заметим, что значение системной переменной ORIGIN (начальное значение индексного выражения) задается равным 1.
Подпрограмма-функция формирования вектора
Пример 9. Для x меняющегося от -2 до 2 с шагом 0.5 вычислить значение f(x) = e-x. Cos (2x) и сформировать из этих значений вектор y, т.е. y1 = f(-2), y2 = f(-1.5) и т.д.
В этом примере количество повторений тела цикла определяется по формуле
где xk, x0 – конечное и начальное значения параметра цикла, d – шаг его изменения. Подставив значения, получаем (2–(–2))/0.5+1=9.
Следовательно, сформированный вектор y будет содержать 9 элементов.
Описание П-Ф и ее вызов приведены на рисунке. Видно, что в теле цикла выполняется два оператора. Первый оператор формирует элемент массива y, а второй изменяет на 1 значение индекса. ¨
Формирование вектора примера 9
Пример 10. Составить описание П-Ф, где значения параметра цикла задаются вектором.
На рисунке приведено описание такой П-Ф.
Задание 5. Составьте описание П-Ф формирования вектора y примера 9, приняв в качестве параметра цикла переменную i.
Программирование итерационных циклов
Для программирования таких циклов используется оператор цикла while. Для ввода этого оператора необходимо выполнить следующие действия:
· щелкнуть на кнопке while палитры ПрограммированиЕ. На экране появляются элементы, показанные на рисунке
Структура оператора цикла while
· в поле 1 ввести условие выполнения цикла;
· в поле 2 ввести операторы тела цикла. В теле цикла должны присутствовать операторы, которые могут изменить значение условия цикла, иначе цикл будет продолжаться бесконечно.
Оператор цикла while выполняется следующим образом: обнаружив оператор while, Mathcad проверяет указанное в операторе условие. Если оно равно 1 (т.е. выполняется), то выполняется тело цикла, и снова проверяется условие. Если условие принимает значение 0, то цикл заканчивается.
Пример 11. Составим П-Ф, реализующую итерационную процедуру приближенного вычисления корня квадратного , используя итерационную процедуру:
В качестве приближенного значения принимается , удовлетворяющее условию:
,
где – заданная точность вычисления корня квадратного.
Нет необходимости хранить в памяти все приближенные решения x0, x1, x2,... Достаточно хранить предыдущее («старое») значение (обозначим его как xc) и последующее («новое») значение xn.
К сожалению, организация итерационного цикла с помощью оператора while без дополнительных средств контроля может привести к зацикливанию, т.е. повторению тела цикла «бесконечное» число раз. Например, задав при обращении к П-Ф < 0, получаем зацикливание.
Поэтому в Mathcad имеется специальный оператор break, который позволяет выйти из цикла или приостановить исполнение программы при выполнении заданного в операторе break условия.
Оператор break используется в левом поле ввода условного оператор if, а в правом размещается условие, при выполнении которого происходит прекращение работы цикла или программы. Поэтому первоначально вводится оператор if, а затем заполняются поля этого оператора. Следующий пример показывает написание подпрограммы без «зацикливания» с использованием оператора break.
Пример 12.1. Составим П-Ф, реализующую итерационную процедуру вычисления корня квадратного без «зацикливания».
Рис. 5.3.7. Реализация итерационного цикла без «зацикливания»
Пример 12.2 Составить П-Ф, осуществляющую суммирование ряда с бесконечным числом слагаемых. Накопление суммы прекращается, как только очередное слагаемое по абсолютной величине становится меньше заданной погрешности .
Описание П-Ф и ее вызов показаны на рисунке. Заметим, что вторым формальным параметром является имя функции пользователя, определяющей зависимость величины члена ряда от его номера. При вызове этот формальный параметр заменяется фактическим – именем функции пользователя, описанной до обращения к П-Ф.
Программирование двойных циклов
Варианты вложений операторов цикла
Составить описание П-Ф формирующей матрицу по следующему правилу:
.
Описание и вызов П-Ф приведены на рисунке. В этой П-Ф параметром внешнего цикла является переменная i, а параметром внутреннего — переменная j.
Реализация двойного цикла
Оператор continue. Обычно используется для продолжения выполнения цикла путем возврата в начало тела цикла. Следующий пример поясняет работу этого оператора.
Пример 12.3 Составить описание П-Ф, формирующей новый вектор из положительных проекций исходного вектора.
Описание приведено на рисунке
Оператор return. Прерывает выполнение П-Ф и возвращает значение операнда, стоящего в поле 1 (см. рисунок).
Структура оператора return
Пример 13. Составить описание П-Ф, находящей первую положительную проекцию исходного вектора. Возможны два варианта программной реализации алгоритма решения этой задачи. Вариант B представляется более простым и «элегантным».
Вариант А
Вариант B
Оператор on error. Этот оператор является обработчиком возникающих при выполнении тех или иных вычислений ошибок и записывается в виде:
< конструкция 1 > on error < конструкция 2 >.
Оператор выполняется следующим образом. Если при выполнении <конструкция 2> возникает ошибка, то выполняется <конструкция 1>. Если ошибка не возникает, то выполняется <конструкция 2>.
Пример 14. Используем оператор on error для предотвращения появления ошибки «деление на ноль» при вычислении функции angl(x,y). Фрагмент представлен на рисунке
Функция error. Используется для вывода диагностических сообщений при возникновении в вычислениях ошибки и записывается в виде:
error ("< диагностическое сообщение >").
Имя функции вводится с клавиатуры. Функция используется в левом поле условного оператора if, как показано в следующем примере.
Пример 16. Запрограммируем вывод диагностического сообщения при попытке спроецировать вектор v на нулевой вектор w. Описание П-Ф и ее вызовы приведены на рисунке.
гостевая; E-mail |