06 - Программирование
.pdfПрограммирование
Пример 6.11.
Немного изменим условия предыдущего примера, а именно: значения х, для которых вычисляется функция y(x), задается вектором x, имеющим n проекций. Для каждой проекции вектора х вычислить значение функции f(x)=e-x Cos ( 2x ) и записать это значение в соответствующую проекцию вектора y.
Описание программы-функции, решающую эту задачу имеет вид :
form_tab1(n,x) |
|
|
for |
i 1.. n |
.cos 2.x |
|||||||
|
||||||||||||
|
|
|
|
|
z |
|
|
|
exp |
|
x |
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
i |
i |
|
|
|
|
|
yi |
|
|
z |
|
|||
|
|
|
|
|
|
|
|
|||||
|
|
|
y |
|
|
|
|
|
|
|
|
|
Здесь формальным параметром |
являются: n |
– число элементов вектора x; |
х – вектор, состоящий из n элементов.
Обращение к описанной программе-функции можно осуществить с помощью конструкций:
m 5 i 1.. 5
y form_tab1(m,z)
1
1.414
z = 1.732
2
2.236
zi |
|
i |
|
|
Формирование фак- |
|
|
|
|
тического параметра – |
|||
|
||||||
|
1.516 |
|
|
вектор z |
||
|
|
|
|
|
||
|
3.84 |
|
|
|
|
|
y = |
|
Сформированный |
|
|||
5.169 |
|
|
||||
|
|
вектор у |
|
|||
|
3.696 |
|
|
|
|
|
|
|
|
|
|
||
|
1.702 |
|
|
|
|
Программирование итерационных циклов
Для программирования таких циклов используется оператор цикла while. Для ввода этого оператора необходимо выполнить следующие действия:
щелкнуть на кнопке while панели Программирования. На экране появляются элементы, показанные на Рис. 6.7.
Поле 2 while
Поле 3
Рис. 6.7. Структура оператора цикла while
в поле 1 ввести условие выполнения цикла;
89
Лабораторная работа №6
в поле 2 ввести операторы тела цикла. В теле цикла должны присутствовать операторы, делающие условие цикла ложным, иначе цикл будет продолжаться бесконечно.
Оператор цикла while выполняется следующим образом: обнаружив оператор while, MathCAD проверяет указанное условие. Если оно истинно, то выполняется тело цикла и снова проверяется условие. Если оно ложно, то цикл заканчивается.
Пример 6.12.
Составим программу-функцию для вычисления n! (n фактори-
ал):
F(n) |
f 1 |
|
while n n 1 |
|
f f (n 1) |
f
Проверка программы вычисления факториала:
F(8) 4.032 104
8 4.032 104
Цикл условия целесообразно использовать, когда хотите остановить выполнение условия выполнения выражений при действии заданного условия или условий, но не знаете точно, сколько итераций необходимо для этого, в противном случае используйте оператор for.
Иногда необходимо досрочно завершить цикл, т.е. не по условию в его заголовке, а в некоторой строке в теле цикла. Для этого предназначен оператор break.
Пример 6.13.
|
|
|
|
|
|
|
Оператор break внутри цикла for и while |
|||||||||||
x |
|
|
|
z 0 |
k |
|
|
|
z 0 |
|||||||||
|
|
|
|
|||||||||||||||
|
|
|
|
for i 0 5 |
|
|
|
|
while z 10 |
|||||||||
|
|
|
|
|
|
|
z z 1 |
|
|
|
|
|
|
|
|
z z 1 |
||
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
break if i |
|
2 |
|
|
|
|
|
|
|
|
break if z 5 |
|
|
|
|
|
||||||||||||||
|
|
|
|
|
||||||||||||||
|
|
|
|
z |
|
|
|
|
z |
|||||||||
x 3 |
|
|
|
|
|
|
|
|
k 6 |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
90 |
|
|
|
|
|
|
|
|
Программирование
Оператор continue
Чтобы четче обозначить границы завершения тела цикла, в его конце может использоваться дополнительная строка с оператором continue. Этот оператор может использоваться для продолжения выполнения цикла путем возврата в начало тела цикла (поле оператора указывается условие).
Пример 6.14.
x |
z 0 |
k |
z 0 |
|||
|
for i 0 5 |
|
while z 10 |
|||
|
|
z z 1 |
|
|
|
z z 1 |
|
|
|
|
|||
|
|
continue |
|
|
|
continue |
x 6 |
|
|
k 10 |
Пример 6.15.
Составим программу-функцию, формирующую новый вектор из положительных проекций исходного вектора.
В теле программы-функции используется функция last(v), определяющая индекс
последнего элемента массива v. |
|
|
form_vec(v) |
i 0 |
|
|
j 0 |
|
|
while i last(v) |
|
|
|
i i 1 |
|
|
|
|
|
continue if vi 0 |
|
|
j j 1 |
|
|
wj vi |
w
Обращение к этой программе-функции имеет вид:
91
Лабораторная работа №6
i 1 5
xi |
|
Исходный вектор |
|
|
||||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
0 |
|
|
Сформированный |
3 |
|
|
|
|
2 |
|
|
вектор |
|
|
form_vec(x) |
|
|
|
|
||
5 |
|
|
8 |
|
|
|
||
8 |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
Если очередной элемент vi не больше нуля, то пропускаются все нижележащие операторы тела цикла (в нашем случае - два оператора, формирующие очередную проекцию вектора w) и тело цикла повторяется при новом значении параметра цикла i.
Возврат значений (return)
Если для определения переменной или функции применяется программный модуль, то его строки исполняются последовательно при вычислении в документе этой переменной или функции. Соответственно, по мере выполнения программы рассчитываемый результат претерпевает изменения. В качестве окончательного результата выдается последнее присвоенное значение. Чтобы подчеркнуть возврат программным модулем определенного значения, можно делать это в последней строке программного модуля (примеры 6.10…6.12).
Вместе с тем, можно прервать выполнение программ в любой ее точке (например, с помощью условного оператора) и выдать некоторое значение, применив оператор return. В этом случае при выполнении указанного условия (пример 6.15) значение, введенное в местозаполнитель после return, возвращается в качестве результата, а никакой другой код больше не выполняется.
Пример 6.16.
Применение оператора return
f(x) |
z x2 |
|
|
|
|
|
|
return |
"zero" |
if x |
|
0 |
|
|
|
|
||||
|
|
|
||||
|
return |
"minus" |
if |
x |
0 |
z
f(2) 4
f(0) "zero" f( 2) "minus"
92
Программирование
6.6. Порядок выполнения лабораторной работы №6
Выполнить приведенные примеры 6.1 … 6.17
Пример 6.17.
Составить блок для нахождения вектора значений функции y(x)=x2, если начальной значение а = 1, шаг h = 0,1, число шагов n = 5.
|
|
|
y(x) x2 |
|
|
|
1 |
|
|
|
|
|
|
|
|||
p |
|
for i 0 5 |
|
|
|
1.21 |
|
|
|
|
|
||||||
|
|
|
x 1 0.1 i |
|
|
|
1.44 |
|
|
|
|
Вектор значений: |
p |
|
|
||
|
|
|
pi y(x) |
|
1.69 |
|
||
|
|
|
|
|
||||
|
|
p |
|
|
|
1.96 |
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
||||
|
|
|
|
|
|
|
2.25 |
|
Вектор значений можно определить как функцию нескольких переменных:
|
y(x) x2 |
|
|
|
|
1 |
|
|||
|
|
|
|
|
|
|
|
|||
p(a h n) |
|
for i 0 n |
|
|
|
|
1.21 |
|
||
|
|
|
|
|||||||
|
|
|
|
x a h i |
|
|
|
|
1.44 |
|
|
|
|
|
Функция: |
p(1 0.1 5) |
|
|
|
||
|
|
|
|
pi y(x) |
|
1.69 |
|
|||
|
|
|
|
|
|
|
||||
|
|
|
p |
|
|
|
|
1.96 |
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
2.25 |
|
Если необходимо вывести не вектор, а таблицу значений, то решение:
|
P |
for i 0 5 |
|
|
|
x 1 |
0.1 i |
P i |
|
x |
|
|
|
|
|
|
|
|
|
y(x) |
|
|
1 |
1.1 |
1.2 |
1.3 |
1.4 |
1.5 |
|
|
|
|
||||||||
|
|
|
|
P |
|
|
|
|
|
|
P |
|
|
|
|
1 |
1.21 |
1.44 |
1.69 |
1.96 |
2.25 |
93
Лабораторная работа №6
6.7.Контрольные вопросы
1.Программа-функция. Локальный оператор присваивания.
2.Локальная переменная.
3.Формальный параметр.
4.Логические операции.
5.Условный оператор if.
6.Операторы цикла.
7.Оператор return.
94