Элементы программирования в MathCad 15
Для примера рассмотрим пример заполнения матрицы-вектора в автоматическом режиме. Предположим, что нам нужно заполнить матрицу случайными числами. Размер матрицы 10 элементов. Заполнение в ручную такой матрицы безусловно отнимет массу времени
В свободном поле mathcad введите имя вашей будущей матрицы M. Поставте знак присвоить «: ]». В место привычного маркера возникнет вертикальная черная черта с двумя маркерами. Удерживая клавишу Alt введите еще несколько раз символ «]» так, чтобы увеличить число свободных маркеров. Можно также воспользоваться кнопкой «Add Line» на панели Programming. В этих маркерах записываются строки кода
Рис. 1. Подготовка к написанию кода
Поместите курсор в первый маркер и на панели Programming нажмите кнопку с надписью «for». Вы увидите заготовку для формирования цикла FOR с маркером для ввода «тела цикла», который несколько отстоит от основных маркеров
Рис. 2. Запись безусловного цикла FOR
Теперь нужно ввести переменную-счетчик (пусть это будет «i»), которая будет менять свое значение от 1 до 10. Диапазон от 1 до 10 задается с помощью ранжированной переменной, которую можно найти на панели Matrix
Рис. 3. Настройка параметров цикла for в mathcad 15
Цикл for в этом примере будет перебирать значения счетчика i от 1 до 10 c шагом 1. При каждом значении i элементу матрицы с соответсвующим индексом будет присваиваться случайное число с помощью стандартной функции rnd(m). Функция rnd присваивает переменной значение в диапазоне от 0 до «m»
Операция присваивания осуществляется при помощи операции Local difinition с панели Programming. Опрерация присваивания отображена в виде стрелочки «←». Чтобы присвоить какое либо значение элементу матрицы нужно указать соответсвующий индекс матрицы. Это делается с помощью кнопки Subscript на панели Matrix.
Операция присваиваивания должна осуществляться в «теле цикла». То есть, все действия, которые должны повторяться по мере работы счетчика циклы, должны находиться в соответсвующих маркерах. После завершения работы цикла в последний маркер тела программы нужно ввести имя матрицы, над заполнением которой мы работали. В нашем случае это M. См. рисунок 4
Рис. 4. Синтаксис программы по заполнению матрицы-вектора случайными числами в mathcad 15
Теперь можно посмотреть на результат. Введем имя матрицы M и поставим знак равно » /static/images/mathcad/coding_5.JPG»>
Рис. 5. Результат работы программы в mathcad 15
Можно изменить программу таким образом, чтобы заполнить квадратную матрицу. Для этого нам нужно ввести еще один счетчик и еще один цикл for с индексом j. Таким образом один цикл будет выполняться внутри другого, формируя столбцы и строки матрицы
Рис. 6. Программа для заполнения квадратной матрицы в mathcad 15
Программы в mathcad могут использовать значения переменных, находящихся вне тела программы. Например, на рисунке ниже видно, как можно конечные значения счетчиков цикла связать со значениями переменных из вне
Рис. 7. Программа для заполнения квадратной матрицы в mathcad 15
Условные операторы «IF» в mathcad 15
Чтобы посмотреть, как работает условный оператор «if» в mathcad 15 рассмотрим простой пример. Заполним квадратную матрицу G размером 5 х 5 элементов случайными числами и затем обнулим все элементы, которые меньше 10
На рисунке 8 приведен уже знакомый код заполнения матрицы случайными числами
Рис. 8. Программа для заполнения квадратной матрицы случайными числами
Для обнуления элементов, значение которых меньше 10, запишем второй участок кода с использованием условного оператора «If». Для проверки каждого элемента на выполнение этого условия нам опять потребуется два вложенных цикла «for» с счетчиками i и j. См. рис. 9. Обратите внимание, в теле второго цикла оставлено два свободных маркера
Рис. 9. Заготовка для применения условного оператора
Результат работы программы для удобства будет записываться в матрицу P. Поместите курсор в первый свободный маркер и нажмите на кнопку с надписью «if» на панели Programming. Вы увидите заготовку для записи условного оператора
Рис. 10. Заготовка для условного оператора
В этой заготовке выполним обнуление элемента матрицы G если значение этого элемента менее 10. Присвоение элементу матрицы значение нуля осуществляется символом «←» . Буквально логика данной операции следующая: «присвоить элементу матрицы P с текущим индексом i и j значение 0 если елемент матрицы G с тем же индексом меньше 10»
Рис. 11. Ввод условного оператора в mathcad 15
Теперь запишем второе условие, по которому все элементы матрицы G, которые больше либо равны 10 попадают в матрицу P без изменеий на те же «мееста». Буквально логика данной операции следующая: «присвоить элементу матрицы P с текущим индексом i и j значение елемента матрицы G с тем же индексом если значение элемента больше либо равно 10». Сразу же после текста программы можно вывести результат. См. рис. 12.
Рис. 12. Ввод условного оператора в mathcad 15
Теперь можно наглядно увидеть, как изменилась матрица после ее обработки условными операторами
Рис. 13. Результат работы условного оператора
Цикл «WHILE» в mathcad 15
Цикл While является условным циклом. То есть повторение его тела осуществляется до тех пор пока верно условие.
Рассмотрим простой пример заполнения матрицы-столбца с использованием цикла while. В качестве условия работы цикла будем проверять верно ли равенство m < 7. Переменную m будем изменять в теле цикла, так что бы в какой то момент условие не выполнилось и цикл завершился. Также в тело цикла введем закон изменения значений элементов нашей матрицы-столбца. На рис. 14 приведен синтаксис цикла while.
Рис. 14. Цикл WHILE в mathcad
В теле цикла могут находиться абсолютно любые команды и операторы: арифметические вычисления, открытие, анализ, обработка и запись данных в файл, запуск скриптов и приложений и т.д. Одним словом программирование это очень полезный и весьма универсальный инструмент, который позволяет реализовать любую идею в инженерной деятельности
Обратите внимание на то, что если в процессе выполнения программы условие запуска цикла «while» всегда оказывается верным, то цикл не завершится. Произойдет так называемое «зацикливание» программы и придется прерывать процесс счета вручную и искать ошибку

Donec eget ex magna. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque venenatis dolor imperdiet dolor mattis sagittis. Praesent rutrum sem diam, vitae egestas enim auctor sit amet. Pellentesque leo mauris, consectetur id ipsum sit amet, fergiat. Pellentesque in mi eu massa lacinia malesuada et a elit. Donec urna ex, lacinia in purus ac, pretium pulvinar mauris. Curabitur sapien risus, commodo eget turpis at, elementum convallis elit. Pellentesque enim turpis, hendrerit tristique.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis dapibus rutrum facilisis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam tristique libero eu nibh porttitor fermentum. Nullam venenatis erat id vehicula viverra. Nunc ultrices eros ut ultricies condimentum. Mauris risus lacus, blandit sit amet venenatis non, bibendum vitae dolor. Nunc lorem mauris, fringilla in aliquam at, euismod in lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In non lorem sit amet elit placerat maximus. Pellentesque aliquam maximus risus, vel venenatis mauris vehicula hendrerit.
Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque venenatis dolor imperdiet dolor mattis sagittis. Praesent rutrum sem diam, vitae egestas enim auctor sit amet. Pellentesque leo mauris, consectetur id ipsum sit amet, fersapien risus, commodo eget turpis at, elementum convallis elit. Pellentesque enim turpis, hendrerit tristique lorem ipsum dolor.
Функция if
Функция if используется для определения функции, которая ведет себя по-разному слева и справа от некоторой точки. Эта точка разрыва определяется первым аргументом, cond. Другие два аргумента позволяют определить поведение функции по обе стороны от точки разрыва.
if (cond, tval, fval)
Возвращает значение tval, если cond отличен от 0 (истина) Возвращает значение fval, если cond равен 0 (ложь).
Хотя аргумент cond может быть любым выражением, обычно удобнее использовать какое-либо булево выражение из таблицы, приведенной ниже. В этой таблице через x и y обозначены вещественные скаляры, а через w и z — комплексные скаляры.
Условие
Как ввести
Описание
[Ctrl]=
Булево равенство возвращает 1, если операнды равны; иначе 0
[Ctrl]0
Больше либо равно.
[Ctrl]9
Меньше либо равно.
[Ctrl]3
Обратите внимание, что булевы выражения, включая неравенства, не могут использоваться с комплексными числами, поскольку бессмысленно говорить относительно одного комплексного числа, что оно является большим или меньшим, чем другое.
Чтобы сохранить время, Mathcad вычисляет только те выражения, которые необходимо. Например, если cond есть ложь, нет нужды вычислять tval, так как его значение не будет возвращено. Из-за этого ошибки в невычисляемом выражении могут выпасть из поля зрения. Например, Mathcad никогда не обнаружит, что в выражении ниже ln(0) не определён:
if(|x| < 0 , ln(0) , ln(x))
Рисунок 5 показывает некоторые формулы, использующие функцию if. Вы можете объединять булевы операторы, чтобы записать более сложные условия. Например, условие
(x < 1) (x > 0)
действует подобно логическому “и”, возвращающему 1, только если x заключено между 0 и 1. Аналогично, выражение
(x > 1)+(x < 0)
действует подобно логическому “или”, возвращающему 1, если или x>1, или x< 0, но не если x заключено между 0 и 1.

Рисунок 5: Условные выражения в Mathcad.
Функция until
Функция until позволяет останавливать вычисления, когда выполняется определенное условие. Её первый аргумент должен включать дискретную переменную. Mathcad будет выполнять вычисления для последовательных значений дискретного аргумента, пока первый аргумент until не станет отрицательным. Когда это случается, Mathcad останавливает вычисления.
Возвращает z, пока выражение x не становится отрицательным; x должно содержать дискретный аргумент.
Не используйте функции until в формулах с несколькими дискретными аргументами (например, в кратных суммах). Mathcad будет останавливать все вычисления по всем дискретным аргументам, как только первый аргумент until станет отрицателен. Это обычно не дает желаемого результата.

Рисунок 6: Использование функции until для остановки вычислений.
Функция until полезна в итерационных процессах с определенным условием сходимости. Например, Рисунок 6 показывает, как использовать функцию until, чтобы проверить итерационный процесс на сходимость. Вычисления по формуле для продолжаются, пока не попадет внутрь интервала полуширины err с центром в точке a. Рисунок 6 также показывает, как использовать функцию last, чтобы обнаружить, когда вычисления были остановлены, и вычислить размер возникающего в результате массива. При использовании функции until убедитесь, что значение первого аргумента изменяется где-нибудь в процессе итерации. Иначе можно оказаться в бесконечном цикле. Если это случится, нажмите [Esc], чтобы прервать вычисления.
Импульсные и ступенчатые функции
Эти две функции используют функцию if. Cтупенчатая функция Хэвисайда эквивалентна следующей:
F (x) := if(x < 0,0,1)
Для целых m и n символ Кронекера эквивалентен функции
d (m, n):= if(m = n, 1,0)
Cтупенчатая функция Хэвисайда. Возвращает 1, если x 0; иначе 0.
Символ Кронекера. Возвращает 1, если m=n; иначе 0. Оба аргумента должны быть целочисленными.
Ступенчатая функция Хэвисайда может быть использована для создания импульса шириной w:
pulse(x,w):= Ф(x) — Ф(x-w)
Можно определить также две полезные функции lowpass и highpass. Они обе являются фильтрами — умножение на них какого-либо сигнала вырезает из этого сигнала кусок вокруг точки x, имеющий ширину 2w. Разница состоит в том, что lowpass оставляет только вырезанный кусок, highpass — всё, кроме вырезанного куска.
lowpass(x,w):= pulse(x+w,2*w)
highpass(x,w):= 1 — pulse(x+w,2*w)
Рисунок 7 иллюстрирует использование ступенчатой функции Хэвисайда для создания фильтров.

Рисунок 7: Использование ступенчатой функции Хэвисайда для фильтрации.
— функция
Аргументы этой функции — три целых числа между 0 и 2 включительно. Она определяет, сколько раз необходимо сделать перестановку двух аргументов, чтобы вернуться к последовательности [0, 1, 2] из той последовательности [i, j, k], которая передана ей в качестве аргументов.
Конкретно: (i, j, k) = 1, если [i, j, k]— четная перестановка [0, 1, 2], и (i, j, k) = -1, если [i, j, k]- нечетная перестановка . Это объясняет, почему (0, 1, 2) = 1.
Например, (2, 0, 1) = 1, поскольку, чтобы перейти из [2, 0, 1] обратно к [0, 1, 2], требуется дважды менять аргументы местами. С другой стороны, (0, 2, 1) = -1, поскольку чтобы перейти из [0, 2, 1] обратно к [0, 1, 2], необходимо менять аргументы местами один раз. Если два аргумента одинаковы, например (0, 1, 1), нельзя вернуться к [0, 1, 2], поэтому функция возвращает 0.
Хотя эта функция используется не очень часто, она незаменима, когда нужно посчитать перестановки. Очень трудно выполнить эту замысловатую операцию, используя комбинации любых других функций Mathcad.
Полностью антисимметричный тензор ранга 3. i, j и k должны быть целыми числами между 0 и 2 включительно (или между ORIGIN и ORIGIN + 2 включительно, если ORIGIN 0). Результат 0, если любые два аргумента одинаковы, 1 для четных перестановок,-1 для нечетных перестановок.
Как написать простую программу. Локальный оператор присваивания.
Выполнение операторов в зависимости от условий.
Использование циклов “while” и “for” для повторяющихся вычислений.
Программы в программах
Использование подпрограмм и рекурсии в программе.
Примеры программ, иллюстрирующие полезные приемы программирования и показывающие мощь программного аппарата Mathcad.
Программа Mathcad есть частный случай выражения Mathcad. Подобно любому выражению, программа возвращает значение, если за ней следует знак равенства. Точно так же, как переменную или функцию можно определить через выражение, их можно определить и с помощью программы.
Главным различием между программой и выражением является способ задания вычислений. При использовании выражения алгоритм получения ответа должен быть описан одним оператором. В программе может быть использовано столько операторов, сколько нужно. Можно рассматривать программу как “составное выражение.”
Следующий пример показывает, как написать простую программу для вычисления функции

Хотя этот пример настолько прост, что, может быть, и программа в этом случае не нужна, он позволяет показать, как нужно отделять друг от друга операторы, и как использовать локальный оператор присваивания “ ”.
Введите левую часть определения функции и знак равенства “:=” и удостоверьтесь в том, что появилось поле ввода.

Теперь нужно открыть панель программирования, щёлкнув по кнопке программирования в панели управления. Затем нужно нажать на панели кнопку“Add Line” или на клавиатуре клавишу ]. Появится вертикальный столбец с двумя полями ввода для занесения операторов, образующих программу. Поля ввода для дополнительных операторов открываются с помощью щелчка по кнопке “Add Line”.

Перейдите в верхнее поле ввода, нажав клавишу [Tab]. Напечатайте z и нажмите кнопку “ ” на панели программирования или клавишу для того, чтобы ввести “ ”.

В поле ввода справа от “ ” введите x/w.

Последнее поле ввода предназначено для задания возвращаемого функцией значения log(z).

Теперь эту функцию можно использовать точно так же, как любую другую функцию. На Рисунке 1 эта функция показана вместе с функцией, ей эквивалентной, но определенной на одной строке вместо двух. Отметим, что переменная z не определена вне программы. Определение z внутри программы является локальным и действительно только внутри этой программы.
Программа может состоять из любого числа операторов. Чтобы прибавить оператор, нужно щёлкнуть по кнопке “Add Line” на панели программирования. Mathcad добавляет поле ввода внизу выделенного к этому моменту оператора. Чтобы исключить позицию ввода, ее нужно выделить, заключив в выделяющую рамку, и нажать клавишу [Del].

Рисунок 1: Определение одной и той же функции с помощью программы и через выражение.
На Рисунке 2 приведен несколько более сложный пример с формулой для корня квадратного уравнения. Хотя вычисление этого корня может быть описано одной формулой, как это показано в верхней половине рисунка, однако удобнее вычислять его с помощью последовательности простых операторов, как показано в нижней половине рисунка. Это позволяет избежать редактирования громоздких формул.

Рисунок 2: Определение более сложной функции в виде выражения и в виде программы.
Таким образом, программа Mathcad есть выражение, состоящее из последовательности операторов, каждый из которых является, в свою очередь, выражением. Как и любое другое выражение, программа Mathcad возвращает значение. Этим значением является значение последнего выражения, выполненного программой. Возвращаться может просто число, как на Рисунках 1 и 2, или массив чисел, как на Рисунке 6, или даже их комбинация, описанная в разделе “Составные массивы” .
Нижеследующие разделы описывают использование условных операторов и различных конструкций операторов цикла для управления ходом выполнения программы.
Обычно Mathcad выполняет операторы программы в порядке сверху вниз. Могут встретиться случаи, в которых какой-нибудь оператор нужно выполнить только в случае выполнения некоего условия. Этого можно добиться с помощью оператора “if”. Ниже приводится пример определения функции, задаваемой разными аналитическими соотношениями на разных участках области определения:
Введите левую часть определения функции и знак равенства “:=” и удостоверьтесь в том, что появилось поле ввода.

Нажмите кнопку “Add Line” на панели программирования или клавишу ]. Появится вертикальный столбец с полями ввода для операторов программы.

Перейдите в верхнее поле ввода и щёлкните по кнопке “if” на панели программирования, либо нажмите клавишу >.

Правое поле ввода предназначено для булевого выражения. Левое поле ввода предназначено для значения, которое будет иметь выражение, если логическое выражение в правом поле истинно.

Выделите оставшееся поле ввода и нажмите кнопку “otherwise” на панели программирования.

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

На Рисунке 3 показан график этой функции. Она имеет только два варианта возвращаемого значения и поэтому легко может быть определена с помощью встроенной функции if, как на Рисунке 3. Если же число вариантов больше двух, то использование встроенной функции if быстро становится обременительным, пример чего приведен на Рисунке 4.

Рисунок 3: Использование оператора “if” для задания кусочно-непрерывной функции.

Рисунок 4: Сравнение программного оператора “if” со встроенной функцией “if”.
Одним из величайших преимуществ программирования является возможность многократного выполнения некоторой последовательности операторов в цикле. Mathcad предлагает два вида циклов, отличающихся по способу определения условия завершения цикла.
Если заранее точно известно необходимое число выполнений цикла, то целесообразно использовать цикл типа for.
Если цикл должен завершиться по выполнении некоторого условия, причем момент выполнения этого условия заранее не известен, то целесообразно использовать цикл типа while.
Проверка условий в программах.
Программы в MathCAD могут быть не только линейными, но и разветвленными. Одним из вариантов ветвления в программах является проверка условия. Условия могут проверять значения как локальных, так и глобальных переменных, а также выражений, содержащих эти переменные.
Для проверки условий в программах MathCAD служит оператор if . В поле ввода справа нужно ввести условие. Для ввода условий служит панель Boolean. На этой панели есть кнопки, предназначенные для проверки условий , а также кнопки, предназначенные для вставки логических операций (логическое отрицание, операция «и», операция «или», операция «исключающее или»). Вторые позволяют создавать сложные условия. В поле ввода слева нужно ввести строку программы, которая должна выполняться, если введенное условие истинно.
Если для условия «истинно» необходимо выполнение нескольких строк программы, надо воспользоваться кнопкой




Если невыполнение условия должно привести к выполнению какого-либо иного программного кода, можно в строке, следующей за оператором if, вставить оператор . В поле ввода слева от этого оператора необходимо ввести строку программы, которая будет выполняться только в том случае, если не выполнилось условие, заданное в операторе if.
Следует помнить, что если в программе введено подряд несколько строк с оператором if
то выражение слева от оператора otherwise будет выполнено только в том случае, если не выполняются условия, заданные во всех операторах if.
Создание циклов.
Другим очень важным элементом при создании нелинейных программ являются циклы. Циклы позволяют повторять несколько раз выполнение одного и того же программного блока. Для создания циклов в MathCAD предусмотрено два оператора for и while.
Цикл for — цикл со счетчиком.
В таких циклах создается некоторая переменная-счетчик, значение которой изменяется после каждого выполнения тела цикла. Выход из цикла происходит при достижении этой переменной заданного значения. Этот оператор вводится с панели Programming клавишей for . В поле ввода после слова for следует указать имя переменной — счетчика. Это может быть любое имя, которое не использовалось ранее в программе. Внутри цикла можно использовать эту переменную в любых выражениях, нельзя только присваивать ей никакого значения. В поле ввода после знака следует указать диапазон значений переменной-счетчика. Вводить диапазон в данном случае следует так же, как и при создании ранжированной переменной. Вместо диапазона в данном поле ввода можно указать имя некоторого массива (вектора или матрицы). В этом случае переменная-счетчик будет последовательно принимать значения всех элементов этого массива. Возможность перебора элементов массива не может быть реализована с помощью цикла while, поэтому именно в таких случаях цикл for и является незаменимым. В поле ввода под словом for следует ввести тело цикла.
Пример: Заполнить вектор числами от xнач до xкон с шагом h. Затем определить сумму элементов этого вектора и найти их среднее арифметическое значение.
Цикл while — цикл, который выполняется до тех пор, пока выполняется определенное условие.
В поле ввода справа от слова while следует ввести условие. Это условие строится по тем же правилам, что и в операторе if. Оно будет проверяться после каждого выполнения тела цикла и в тот момент, когда условие перестанет выполняться, повторение тела цикла прекратится. В поле ввода ниже слова while следует ввести тело цикла (напомним, что для ввода нескольких строк в теле цикла надо воспользоваться кнопкой Add Line).
Пример1: Вычислить сумму с точностью е.






Пример2: Найти первый элемент, превышающий определенный порог.
Использование операторов break и continue.
Иногда возникает необходимость повлиять на выполнение цикла некоторым образом, например, прервать его выполнение по какому-либо условию или выполнять некоторые итерации не так, как другие. Для этого и служат операторы break и continue.
Оператор break, если он расположен внутри цикла, означает немедленное прекращение выполнения текущей итерации и выход из цикла. Если есть необходимость прекратить выполнение цикла по какому-либо условию, то следует использовать конструкцию следующего вида break if (условие).
Пример: Выделить из массива все элементы от начала и до первого вхождения в него заданного числа.
Оператор continue используется для того, чтобы немедленно перейти в начало цикла и начать следующую итерацию. Этот оператор также обычно используется в составе конструкции вида continue if (условие). Оператор continue используется в случаях, когда необходимо чтобы некоторые вычисления производились для одних итераций и не производились для других.
Пример: Требуется заполнить элементы квадратной матрицы в шахматном порядке.
Оператор return (возврат значения).
Как мы уже указывали, результат выполнения программного модуля помещается, как правило, в последней его строке. Но можно прервать выполнение программы в любой ее точке (например, с помощью условного оператора) и выдать некоторое значение, применив оператор return. В этом случае при выполнении указанного условия значение, введенное в поле ввода после return, возвращается в качестве результата, и никакой другой код больше не выполняется. Вставляется в программу оператор return с помощью одноименной кнопки панели Programming . Пример:
ПОДПРОГРАММА-ФУНКЦИЯ: ОПИСАНИЕ И ВЫЗОВ
Описание подпрограммы-функции ( П-Ф ) и локальный оператор присваивания
Описание П-Ф размещается в рабочем документе перед ее вызовом и включает в себя имя подпрограммы-функции, список формальных параметров (который может отсутствовать) и тело подпрограммы-функции. Для ввода конструкций в тело П-Ф используется палитра инструментов ПРОГРАММИРОВАНИЕ, приведенная на рис. 1.

Рис. 1. Палитра ПРОГРАММИРОВАНИЕ
Каждая П-Ф Math cad имеет оригинальное имя, посредством которого осуществляется обращение к ней. Через это же имя (и только через это имя) «возвращается» результат выполнения П-Ф.
После имени П-Ф идет список формальных параметров, заключенный в круглые скобки. Через формальные параметры «внутрь» П-Ф «передаются» данные, необходимые для выполнения вычислений внутри программы, т.е. все формальные параметры являются входными.
В качестве формальных параметров могут использоваться имена простых переменных, массивов и функций. Формальные параметры отделяются друг от друга запятой.
Замечание 1. П-Ф может не иметь формальных параметров, и тогда данные передаются через имена переменных, определенных выше описания П-Ф.
Тело подпрограммы-функции включает любое число операторов: локальных операторов присваивания, условных операторов и операторов цикла, а также вызов других П-Ф и функций пользователя.
Порядок описания подпрограммы-функции Math cad .
Для ввода в рабочий документ описания П-Ф необходимо выполнить следующие действия:
· ввести имя П-Ф и список формальных параметров, заключенный в круглые скобки
· ввести символ “:” – на экране отображается как “: =”;
· открыть палитру Программирования и щелкнуть кнопкой Add line (см. рис. 1). На экране появится вертикальная черта и вертикальный столбец с двумя полями для ввода операторов, образующих тело П-Ф (см. рис. 2);

Рис. 2. Структура подпрограммы-функции
· перейти в поле 1 (щелкнув на нем мышью или нажав клавишу [Tab]) и ввести первый оператор тела П-Ф.
· затем ввести второй, третий и т.д. операторы, добавляя пустые поля с помощью щелчка на кнопке Add line палитры программирование .
· заполнить самое нижнее поле ввода, введя туда выражение, определяющее возвращаемое через имя П-Ф (см. рис. 3).

Рис. 3. Окончательная структура подпрограммы-функции
Замечание 2. Если результатом работы П-Ф являются несколько величин, то из них в теле П-Ф необходимо сформировать массив и его имя поместить в последней строке тела П-Ф.
Локальный оператор присваивания
Для задания внутри программы значения какой-либо переменной используется так называемый локальный оператор присваивания, имеющий вид:
< имя переменной > < выражение > .
Обращение к подпрограмме-функции Math cad
Для выполнения П-Ф необходимо обратиться к ее имени с указанием списка фактических параметров (если в описании программы присутствует список формальных параметров), т.е.:
< имя П-Ф > (< список фактических параметров >) .
Фактические параметры отделяются друг от друга запятой.
· Очевидно, что между фактическими и формальными параметрами должно быть соответствие по количеству, порядку следования и типу.
Замечание 3. Обращение к П-Ф должно находиться после ее описания, и к моменту обращения фактические параметры должны быть определены.
Пример 4. Обращение к программе f ( x ), приведенной на рис. 4.1.4, может иметь следующий вид:
Заметим, что переменная z никак не связана с «локальной» переменной z , используемой внутри тела П-Ф. ¨
Замечание 4. Передать данные внутрь П-Ф можно, используя внутри подпрограммы переменные, определенные до описания П-Ф (см. пример на рис. 4.2.1).

Рис. 4. Подпрограмма-функция без формальных параметров
Программирование АЛГОРИТМОВ в подпрограмме-функции M ath CAD
Программирование линейных алгоритмов в подпрограмме-функции
Операторы, реализующие этот алгоритм, в теле П-Ф также размещаются последовательно и выполняются все, начиная с первого и заканчивая последним .
Пример 6 . Оформим в виде П-Ф вычисление корней квадратного уравнения ax 2 + bx +c = 0 по формуле
Описание П-Ф root _ poly 2 и обращение к ней приведено на рис. 5.5.1. П-Ф имеет три входных формальных параметра – коэффициенты квадратного уравнения. Выходом является вектор с двумя компонентами. Заметим, что величины x 1, x 2 являются простыми переменными, а не элементами одномерного массива. Поэтому нижние индексы в их именах вводятся после нажатия клавиши [.] – «десятичная точка».
Подпрограмма-функция реализует линейный алгоритм – все операторы выполняются всегда строго последовательно.
Пример программирования линейного алгоритма
Программирование разветвляющихся алгоритмов в подпрограмме-функции
Для программирования разветвляющихся алгоритмов в подпрограмме-функции Math cad можно использовать:
§ условную функции
§ условный оператор 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 (2 x ) и сформировать из этих значений вектор 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, Math cad проверяет указанное в операторе условие. Если оно равно 1 (т.е. выполняется), то выполняется тело цикла, и снова проверяется условие. Если условие принимает значение 0, то цикл заканчивается.
Пример 11 . Составим П-Ф, реализующую итерационную процедуру приближенного вычисления корня квадратного , используя итерационную процедуру:
В качестве приближенного значения принимается , удовлетворяющее условию:
где – заданная точность вычисления корня квадратного.
Нет необходимости хранить в памяти все приближенные решения x0, x1, x2,. .. Достаточно хранить предыдущее («старое») значение (обозначим его как xc ) и последующее («новое») значение xn.
К сожалению, организация итерационного цикла с помощью оператора while без дополнительных средств контроля может привести к зацикливанию, т.е. повторению тела цикла «бесконечное» число раз. Например, задав при обращении к П-Ф < 0 , получаем зацикливание.
Поэтому в Math cad имеется специальный оператор 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 . Описание П-Ф и ее вызовы приведены на рисунке.