Similar presentations:
Примеры разработки программ-функций в системе MATHCAD. Лекция 7
1. Примеры разработки программ-функций в системе MATHCAD
Лекция 72. Пример: задача 1.4.2.30
УсловиеНайти суммарную площадь и сумму периметров N правильных шестиугольников,
длины сторон которых образуют последовательность:
a, a 2 , ...,a N .
Состав данных
Имя
Смысл
Тип
Структура
Исходные данные
a
Длина стороны 1-го шестиугольника
Веществ.
Простая переменная
N
Количество шестиугольников
Целый
Простая переменная
Выходные данные
P
Сумма периметров шестиугольников
Веществ.
Простая переменная
S
Сумма площадей шестиугольников
Веществ.
Простая переменная
Промежуточные данные
i
Счетчик шестиугольников
Целый
Простая переменная
b
Длина стороны текущего шестиугольника
Веществ.
Простая переменная
3. Блок-схема
Блоксхемапередача a,N
Определение функции
P=0; S=0
i:=1
6 b
i N
2
да
b a i
P = P + 6b
Примеры вызова функции
S=S+(*)
i=i+1
Периметр шестиугольника: p=6b; площадь
шестиугольника:
передача S,P
s
3 3 2
b
2
(*)
4. Найти вещественные корни квадратного уравнения ax2+bx+c=0
Состав данныхИмя
Смысл
Тип
Структура
Исходные данные
a
b
коэффициенты уравнения
Веществ.
Простая переменная
c
Выходные данные
res
Корни уравнения
Веществ.
Сообщение об отсутствии вещ. корней строковый
Одномерный массив
из двух элементов
Простая переменная
Промежуточные данные
d
Дискриминант уравнения d=b2-4ac
Целый
Простая переменная
альтернатива
5. Блок-схема алгоритма нахождения вещественных корней квадратного уравнения
передача a,b,cd=b2-4ac
d>0
d=0
res=″нет вещ. корней″
b d
2a
b d
res1
2a
res0
да
res
да
b
2a
передача res
6. Программа-функция вычисления вещественных корней квадратного уравнения
Обратитевнимание:
и тип, и
структура
переменной res
выбирается
динамически, в
зависимости от
значения d
Примеры вызовов программы-функции kv_ur1
7. Пример решения задачи со сложным условием продолжения цикла
УсловиеА - начальная стоимость оборудования. В первый
год эксплуатации стоимость оборудования снижается на
В руб., а в каждый следующий год снижение стоимости
уменьшается на р % (относительно предыдущего года).
Определить, через сколько лет стоимость оборудования
станет меньше A/2. Рассматривать срок не более N лет.
8. Состав данных
ИмяA
B
р
N
res
t
At
Bt
Смысл
Тип
Исходные данные
начальная стоимость
вещественный
оборудования
начальное снижение стоимости
вещественный
процентное уменьшение
вещественный
снижения стоимости
максимальное число лет
целый
Выходные данные
искомый номер года
целый
сообщение «срок истек»
строковый
Промежуточные переменные
текущий номер года
целый
текущая стоимость оборудования вещественный
текущее ежегодное снижение
вещественный
стоимости
Структура
простая переменная
простая переменная
простая переменная
простая переменная
простая переменная
простая переменная
простая переменная
простая переменная
9. Блок-схема алгоритма
передачаA,B,p,N
1
да
At=A; Bt=B
At<A/2
t=1
res=t -1
res=“срок истек”
At≥A/2&
t N
да
передача res
At=At - Bt
Bt=Bt-Bt*p/100
t=t+1
1
10. Программа-функция
z1_3_4(A,B,p,N):= At ABt B
t 1
A
) ^ (t≤N)
2
At At-Bt
Bt Bt+0.01 Bt p
t t+1
A
res t-1 if At<
2
res ″срок прошел″ otherwise
res
while (At
Вызов функции:
z1_3_4(1000,100,1,10)=5
z1_3_4(1000,100,1,10)=“срок прошел”
y:=z1_3_4(1000,100,20,10) y=3
11. Решение задачи методом флажка
Промежуточная переменная:1, если цикл надо продолжить
f
0, если надо выйти из цикла
12. Блок-схема алгоритма c использованием метода флажка
передачаA,B,p,N
At=A; Bt=B
t=1; f=1
f
да
да
At<A/2
да
res=t -1
f=0
t>N
At=At - Bt
res=“срок истек”
f=0
Bt=Bt-Bt*p/100
t=t+1
передача res
13. Программа-функция (метод флажка)
z1_3_4_v2(A,B,p,N):= At ABt B
f 1
t 1
while f
if At<A/2
res t-1
f 0
otherwise
if t>N
res ″срок прошел″
f 0
otherwise
At At - Bt
Bt Bt-0.01 p Bt
t t+1
res
14. Решение уравнения методом деления отрезка пополам
передача a,b,нет F
B-A>
+
x:=(A+B)/2
-
F(x)*F(B) 0
B:=x
+
A:=x
x=(A+B)/2
передача x
Как в системе Mathcad
определить функцию,
параметром которой
является функция?
15. Программа-функция
F(x):=x2-0.25Root1(a,b,e):= while b-a>e
a b
2
a x if F(x) F(b)≤0
b x otherwise
a b
x
2
x
x
Вызов программы-функции:
Root1(0.1,1,10-3)=0.5
Функция Root1
вызывает
только
функцию F!
Нет
возможности
подставить
другую
функцию!
16. Встроенная функция root
скалярыroot(Выражение, Имя_переменной) – возвращает
значение переменной, при котором выражение равно
0, с точностью (погрешностью), задаваемой системной
переменной TOL.
Функция root решает уравнение:
Выражение=0
Например,
F(x)=0
Или
x3-6x2+21x-52=0
До вызова функции root переменной x должно быть
присвоено начальное значение (начальное приближение
корня).
17. Установка значений встроенных переменных
Tools / Worksheet Options / Built-in Variables (Сервис /Опции документа / Встроенные переменные)
18. Примеры решения уравнения с помощью root
Пример 1F(x):=x3-6 x2+21 x-52
x:=0
x1:=root(F(x),x)
root может вычислять как
вещественные, так и
комплексные корни
x1=4
Пример 2
G(a,x):=root(exp(x) -a x2, x)
a:=1..5
x0:=0 xa:=G(a, xa-1)
a=
x=
1
0
2
-0.704
3
4
5
-0.54
-0.459
-0.408
-0.371
19. Примеры программ с массивами
Дан массив а из n элементов. Найти максимальноезначение элементов массива.
Состав данных
Имя
n
a
m
i
Смысл
Тип
Структура
Исходные данные
число элементов массива целый
простая переменная
заданный массив
вещественный одномерный массив
Выходные данныв
максимальное значение
вещественный простая переменная
элементов массива
Промежуточные данные
счетчик элементов
целый
простая переменная
массива
20.
Блок-схема алгоритмаСистемная (встроенная)
переменная ORIGIN=0
передача a,n
m=a0
i=1
i<n
да
ai>m
да
m=ai
i=i+1
передача m
21. Код программы-функции
Вызов программы-функцииС помощью панели
«Матрицы»
22. Примеры программ с массивами
Дана матрица а из n строк и m столбцов.Неотрицательные элементы матрицы заменить на 0, а
отрицательные – на 1.
Состав данных
Имя
n
m
a
a
i
j
Смысл
Тип
Структура
Исходные данные
число строк матрицы
целый
простая переменная
число столбцов матрицы
число строк матрицы
заданная матрица
вещественный двумерный массив
Выходные данныв
Измененная матрица
вещественный двумерный массив
Промежуточные данные
счетчик строк
целый
простая переменная
счетчик столбцов
целый
простая переменная
23. Блок-схема алгоритма
Программа-функция и еевызов
ORIGIN=0
Передача n,m,a
i=0
zamena(n,m,a):= for i 0..n-1
i≤n-1
for j 0..m-1
да
ai,j 0 if ai,j 0
j=0
ai,j 1 otherwise
j≤m-1
да
ai,j 0
ai,j =1
да
a
ai,j =0
j=j+1
3 0 2
D : 1 2 3
1 2 3
i=i+1
T:=zamena(3,3.D)
Передача a
1 0 0
T 0 1 0
0 0 0
24. Встроенные функции, определяющие размеры массивов
rows(A) – возвращает число строк в матрице A. ЕслиА – скаляр, возвращается 0.
cols(A) – возвращает число столбцов в матрице A. Если
A – скаляр, возвращается 0.
length(v) – возвращает число элементов вектора v.
last(v) – возвращает индекс последнего элемента в
векторе v.
25. Улучшенный код
Fun2 ( a) :res 0
1. Нет зависимости от
значения ORIGIN.
n rows ( a)
m cols ( a)
if ORIGIN = 0
2. Нет необходимости
задавать размеры матрицы
i1 0
j1 0
n1 n 1
m1 m 1
otherwise
if ORIGIN = 1
i1 1
j1 1
n1 n
m1 m
res "error!"
for
i i1.. n1
for
j j1 .. m1
a
i, j
a
i, j
res a
res
otherwise
0
if a
1
otherwise
if res = 0
i, j
0
26. Еще более совершенный код
Fun3(a):= n rows(a)i1 ORIGIN
1. Нет зависимости от
значения ORIGIN (может быть
ORIGIN 0, ORIGIN 1).
n1 n+ORIGIN-1
2. Еще короче.
m cols(a)
j1 ORIGIN
m1 m+ORIGIN-1
for i i1..n1
for j j1..m1
ai,j 0 if ai,j 0
ai,j 1 otherwise
a
27. Цикл for «для каждого элемента массива»
Sum(a):= s 0for v a
s s+v
s
НО: изменение v не
приводит к изменению
элемента матрицы!
1
1 2 3
x 4 A 1 2 3
5
1 2 3
Sum(x)=10
Sum(A)=6
Одна функция и для
вектора, и для матрицы
28. Выделение подпрограмм в процессе решения задачи
УсловиеПроверить, упорядочены ли по возрастанию элементы
третьего столбца матрицы A(4×6)и элементы пятого
столбца матрицы B(5×5)
Решали эту задачу на языке MATLAB
29. 1 шаг решения: выбираем, какую подпрограмму (в MATHCAD программу-функцию) надо разработать: подпрограмма должна вызываться
несколько раз сразными данными.
Для нашей задачи: функция определяет, упорядочены ли
по возрастанию q-го столбца произвольной матрицы X.
Вход функции: матрица X, номер столбца q.
Выход функции : F – признак упорядоченности элементов
q-го столбца:
1, если элементы q - го столбца у порядочены;
F
0, если нет.
2 шаг - Пишем заголовок функции:
upor_stolb(X,q):=
30. 3 шаг. Состав данных функции upor_stolb
ИмяСмысл
Тип
Структура
Входные данные (передаваемые из вызывающего кода в функцию)
Х
Заданная матрица
q
Номер столбца
вещественный
целый
двумерный массив
простая переменная
Выходные данные (передаваемые из функции вызывающий код)
F
Признак упорядоченности
столбца
целый
(логический)
простая переменная
Промежуточные данные
n
Число строк матрицы
целый
простая переменная
m
Число столбцов матрицы
целый
простая переменная
p
Счетчик строк матрицы
целый
простая переменная
31. 4 шаг. Блок-схема алгоритма функции
4q шаг. Блок-схема алгоритма функцииЧто исправили по
сравнению с
матлабом?
Передача Х,q
p
n=rows(X)
F=1
p=0
p ≤ n-2 && F
X(p,q)≥X(p+1,q)
p=p+1
нет
да
F=0
Передача F
32. 5 шаг. Код функции upor_stolb
Upor_stolb(X,q):=n rows(X)
F 1
p 0
while (p≤n-2) ^ F
F 0
if Xp,q>Xp+1,q
p p+1 otherwise
F
Вызов функции – самостоятельно!