Pers.narod.ru. Обучение. Лекции по MathCAD. 11. Модульное програмирование в пакете MathCAD

ПОДПРОГРАММА-ФУНКЦИЯ: ОПИСАНИЕ И ВЫЗОВ

 

Описание подпрограммы-функции (П-Ф) и локальный оператор присваивания

 

Описание П-Ф размещается в рабочем документе перед ее вызовом и включает в себя имя подпрограммы-функции,  список формальных параметров (который может  отсутствовать) и тело подпрограммы-функции. Для ввода конструкций в тело П-Ф используется палитра инструментов ПРОГРАММИРОВАНИЕ, приведенная на рис. 1.

 

Рис. 1. Палитра  ПРОГРАММИРОВАНИЕ

 

Каждая П-Ф Mathcad имеет оригинальное имя, посредством  которого осуществляется обращение к ней. Через это же имя  (и только через это имя) «возвращается»  результат выполнения П-Ф.

 

После имени П-Ф идет список формальных параметров, заключенный в круглые скобки. Через формальные параметры «внутрь»  П-Ф «передаются»  данные, необходимые для выполнения вычислений внутри программы, т.е. все формальные параметры являются входными.

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

 

Замечание 1. П-Ф может не иметь  формальных параметров, и тогда данные передаются через имена переменных, определенных  выше  описания П-Ф.

 

Тело подпрограммы-функции включает любое число операторов:  локальных операторов присваивания, условных операторов и операторов цикла, а также вызов других  П-Ф и функций пользователя.

 

Порядок описания подпрограммы-функции Mathcad.

 

Для ввода в рабочий документ описания П-Ф необходимо выполнить следующие действия:

·     ввести имя П-Ф и список формальных параметров, заключенный в круглые скобки

·     ввести символ “:” – на экране отображается как “: =”;

·     открыть палитру Программирования и щелкнуть кнопкой Add line (см. рис. 1). На экране появится вертикальная черта и вертикальный столбец с двумя полями для ввода операторов, образующих тело   П-Ф (см. рис. 2);

 

           

Рис. 2. Структура подпрограммы-функции

 

·     перейти в поле 1 (щелкнув на нем мышью или нажав клавишу [Tab]) и ввести первый оператор тела П-Ф.

·     затем ввести второй, третий и т.д. операторы, добавляя  пустые поля с помощью щелчка на кнопке Add line палитры программирование.

 

·     заполнить самое нижнее поле ввода, введя туда выражение, определяющее возвращаемое через имя П-Ф (см. рис. 3).

Рис. 3.  Окончательная структура подпрограммы-функции

 

Замечание 2. Если результатом работы П-Ф являются несколько величин, то из них в теле П-Ф необходимо сформировать массив и его имя поместить в последней строке тела П-Ф.

 

Локальный оператор присваивания

 

Для задания внутри программы значения какой-либо переменной используется так  называемый локальный оператор присваивания, имеющий вид:

< имя  переменной >  < выражение > .

Обращение к подпрограмме-функции Mathcad

 

            Для выполнения П-Ф необходимо обратиться к ее имени  с указанием списка фактических параметров (если в описании программы присутствует список формальных параметров), т.е.:

 

< имя П-Ф > (< список фактических параметров >) .

 

Фактические параметры отделяются друг от друга  запятой.

 

·     Очевидно, что между фактическими и формальными параметрами должно быть соответствие по количеству, порядку следования и типу.

 

Замечание 3. Обращение к П-Ф должно находиться после ее описания, и к моменту обращения  фактические параметры должны быть определены.

 

Пример 4. Обращение к программе f(x), приведенной на рис. 4.1.4, может иметь следующий вид:

 

Заметим, что переменная z никак не связана с «локальной» переменной   z, используемой внутри тела П-Ф.¨

 

Замечание 4. Передать данные внутрь П-Ф можно, используя внутри подпрограммы  переменные, определенные до описания П-Ф (см. пример на рис. 4.2.1).

                

Рис. 4. Подпрограмма-функция без формальных параметров

 

 

Программирование  АЛГОРИТМОВ в  подпрограмме-функции  MathCAD

Программирование  линейных алгоритмов в  подпрограмме-функции

Операторы, реализующие этот алгоритм, в теле П-Ф также размещаются последовательно и выполняются все, начиная с первого и заканчивая  последним.

 

            Пример 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. Описание П-Ф и ее вызовы приведены на рисунке.

 

 

 

Рейтинг@Mail.ru

 

вверх гостевая; E-mail
Hosted by uCoz