Вычислительная техника и программирование. В 2 ч. Ч. 1. Программирование в среде TURBO PASCAL 7
.0.pdf
Схема алгоритма решения задачи представлена на рис.1.
1
начало
|
2 |
a,b,n |
ввод исходных данных |
|
|
||
|
3 a,b,n |
вывод исходных данных |
|
4k = 0 ,5 |
вычисление полусуммы значений подинте- |
||
z |
= |
fa + fb |
гральной функции на границах отрезка |
2 |
интегрирования (начальное значение суммы) |
||
|
|
|
|
5
x = b − a n
6
x=a
7
i=1, n−1
8x=x+ x z=z+f(x)
9
i
10
z=z× x
11
zt=π/2
12
разбиение отрезка интегрирования на n
частей для определения шага аргумента х
присвоение аргументу левого конца отрезка интегрирования
цикл увеличения аргумента х и суммирования текущей ординаты f(x)
вычисление приближенного значения интеграла
вычисление точного значения интеграла
51
11
|
12 |
|
|
|
|
|
вычисление относительной погрешности в |
|
úz -zú |
||||||
|
|
t |
|
|
|
процентах |
|
Dz= ¾¾¾100 |
|
|
|
|
|||
|
|
|
|
||||
|
|
zt |
|
|
|
|
|
13z,zt,Dz |
вывод результатов |
|
14конец
Рис. 1.
Программа, реализующая схему алгоритма (рис. 1), имеет вид:
Program PRIM5a; {Лабораторная работа № 5a}
{студент группы ***** Иванов И.И.}
Var A, B, K, X, Z, ZT, DZ, DX :real; N, I:integer;
Begin
Writeln(‘ Введите A,B,N ‘ ); Read(A,B,N); {Ввод исходных данных} Writeln(‘Вывод исходных данных’); Writeln(‘A=‘, A, ‘B=‘, B, ‘N=‘, N); K:=0,5;
Z:=(SQR(SIN(A))/(1+2 K COS(A)+K K)+SQR(SIN(B))/(1+ +2 K COS(B)+K K))/2; {Начальное значение суммы}
DX:=(B-A)/N; X:=A; {Определение шага аргумента
и присвоение ему значения а} For i:=1 to N-1 do {Организация цикла суммирования}
begin
X:=X+DX;
Z:=Z+SQR(SIN(X))/(1+2 K COS(X)+K K)
end |
|
|
|
Z:=Z DX; |
ZT:=PI/2; {Вычисление приближенного и точного |
||
DZ:=ABS(ZT-Z) 100/ZT; |
|
значения интеграла} |
|
{Вычисление относительной |
|||
|
|
|
погрешности} |
Writeln(‘Приближенное значение Z=‘, Z:9:5 ); {Вывод |
|||
Writeln(‘Точное значение ZT=‘, ZT:9:5); |
результатов} |
||
52
Writeln(‘Относительная погрешность ‘, DZ:9:4)
End.
Задание Б.
Вычислить на ЭВМ наибольший элемент массива x1,x2,...,xn и его порядковый номер; n≤30. Проверить правильность программы на тесте при n=3 и следующих элементах массива (1.5, 4.3, 2.4). При выполнении зада- ния необходимо использовать прием нахождения наибольшего. Для этого перед циклом следует задать начальное значение наибольшего, равное пер- вому элементу массива, а в цикле сравнивать наибольший с текущим эле- ментом массива; в том случае, если текущий элемент больше наибольшего из предыдущих, то считать его наибольшим. Для нахождения порядкового
номера наибольшего элемента массива необходимо перед циклом задать его начальное значение, равное 1, а в цикле всякий раз, когда текущий эле- мент массива больше наибольшего, считать номером наибольшего номер текущего элемента массива. Схема алгоритма решения представлена на рис. 2.
Программа, реализующая алгоритм (рис.2), имеет вид:
Program PRIM5b; {Лабораторная работа № 5b}
{студент группы ***** Иванов И.И.}
Const NN=30;
Var
N,I,IMAX:integer; |
|
|
||
XMAX:real; |
|
|
|
|
X:array [1..NN] |
of |
real; |
|
|
Begin |
|
|
|
|
Write(‘Введите значение N‘); |
|
|||
Read(N); |
{Ввод размерности массива} |
|||
For i:=1 |
to N |
do Read(X[i]); |
{Ввод массива} |
|
Writeln(‘Вывод исходных данных:’); |
||||
Writeln(N); |
|
|
|
|
For i:=1 to N do |
Writeln(X[ i ]); |
{Вывод массива} |
||
XMAX:=X[1]; {Начальное значение наибольшего элемента |
||||
|
|
|
массива} |
|
IMAX:=1; {Начальное значение порядкового номера |
||||
|
наибольшего элемента массива} |
|||
For i:=2 to N do {Цикл перебора элементов массива} |
||||
if X[i]>XMAX |
then |
|
||
|
begin |
|
|
|
|
XMAX:=X[i]; |
|
|
|
|
IMAX:=i |
|
|
|
|
end; |
|
|
|
Write(‘XMAX=‘,XMAX,‘‘:4,‘IMAX=‘,IMAX) {Вывод результатов}
53
End.
1
начало
2
n,x(n) 
3
n,x(n)
4
xmax=x1,
imax=1
5
i=2, n
Нет 6
xi >xmax
7
Да xmax=xi, imax=i
8
i
ввод размерности и значений элементов массива Х
вывод исходных данных
задание начальных значений наибольшего элемента массива и его порядкового номера
цикл перебора элементов массива для поиска наибольшего и его порядкового номера
9xmax, imax
вывод результатов
10 |
Рис. 2. |
конец
54
Л а б о р а т о р н а я р а б о т а № 6 “Программирование алгоритмов со структурой вложенных циклов”
Цель работы - овладение навыками алгоритмизации и програм- мирования вычислительных структур с вложенными циклами.
Задание для самостоятельной подготовки
Задание А.
1. Изучить:
-организацию вычислительных структур с вложенными циклами;
-возможности языка программирования по организации таких струк-
тур;
- прием программирования для вычисления определенного интеграла с заданной точностью.
2.Разработать алгоритм решения задачи в соответствии с заданием А.
3.Составить программу решения задачи.
Задание Б. 1. Изучить:
- прием программирования - нахождение экстремума функции с за- данной точностью.
2.Разработать алгоритм решения в соответствии с заданием Б.
3.Составить программу решения задачи.
4.Для контроля вычислить точное значение экстремума заданной функции (в таблице указано точное значение аргумента х, при котором достигается экстремум).
Задание к работе
Задание А.
Вычислить на ЭВМ с заданной точностью ε значение опреде-ленного
интеграла |
b |
z |
= ò f( x) dx, |
приведенного в табл. 1, лаб. №5. Исходнымиa данными для решения считать значения отрезка интегрирования [α,b], точность вычисления ε и метод численного решения. Включить в программу вычисление точного значения интеграла по первообразной функции из табл. 2, лаб. №5, оценить абсо- лютную погрешность метода.
Примечание. Значение числа разбиений, указанное в табл. 1, лаб. №5, в данной работе не используется.
Задание Б.
55
Вычислить на ЭВМ с заданной точностью ε экстремум функции, при- веденной в таблице ниже (в соответствии с вариантом задания). На печать вывести вычисленное конечное значение экстремума и значение аргумента, при котором оно достигается.
Т а б л и ц а
Вар. |
|
|
|
|
|
|
|
|
Вид |
Диапазон |
“Грубое” |
Точность |
Вид функции |
|
|
изменения |
значение |
вычисле- |
|||||||
зада- |
|
|
экстремума |
|||||||||
|
y = f (x) |
|
|
|
аргумента |
шага |
ния |
|||||
ния |
|
|
|
|
|
|
|
|
|
[α,b] |
h |
экстрему- |
|
|
|
|
|
|
|
|
|
|
|
|
ма ε |
1 |
|
|
2 |
|
|
|
|
|
3 |
4 |
5 |
6 |
|
|
|
|
|
|
|
|
|
|
|||
1 |
2 + x − x 2 |
|
|
Максимум |
[0; 1,0] |
0,15 |
10-5 |
|||||
|
|
|
|
|
|
|
|
|
0,5 |
|
|
|
2 |
|
(1 − x)4 |
|
|
Минимум |
[0,2; 1,5] |
0,25 |
0,5.10-4 |
||||
|
|
|
|
|
|
|
|
|
1,0 |
|
|
|
3 |
cos x + ch x |
|
|
Минимум |
[−0.8; 0,4] |
0,25 |
10-5 |
|||||
|
|
|
|
|
|
|
|
|
0,0 |
|
|
|
4 |
x1/ 3(1− x)2/ 3 |
|
|
Максимум |
[0,1; 0,6] |
0,1 |
10-5 |
|||||
|
|
|
|
|
|
|
|
|
0,333333 |
|
|
|
5 |
x3 − 6x2 |
+ 9x + 4 |
|
|
Максимум |
[0,2; 1,5] |
0,3 |
10-5 |
||||
|
|
|
|
|
|
|
|
|
1,0 |
|
|
|
6 |
x3 − 6x2 + 9x + 4 |
|
|
Минимум |
[2; 4] |
0,3 |
0,5.10-5 |
|||||
|
|
|
|
|
|
|
|
|
3,0 |
|
|
|
7 |
|
2x2 |
− x4 |
|
|
Минимум |
[-2; 0,8] |
0,15 |
10-4 |
|||
|
|
|
|
|
|
|
|
|
0,0 |
|
|
|
|
|
x2 − 3x + 2 |
|
|
Минимум |
[1; 2] |
0,15 |
0,5.10-4 |
||||
8 |
|
|
|
|
|
1,4 |
|
|
|
|||
|
x2 + 2x − 1 |
|
|
|
|
|
||||||
9 |
|
x3 x − 1 |
|
|
Минимум |
[0,1; 1,2] |
0,2 |
10-5 |
||||
|
|
|
|
|
|
|
|
|
0,75 |
|
|
|
10 |
|
xe− x |
|
|
|
|
Максимум |
[0,1; 1,5] |
0,25 |
10-5 |
||
|
|
|
|
|
|
|
|
|
1,0 |
|
|
|
11 |
|
(ln2 x)/ |
x |
|
|
Максимум |
[6; 8] |
0,15 |
10-5 |
|||
|
|
|
|
|
|
|
|
|
7,389 |
|
|
|
12 |
|
x + 1/ |
x |
|
|
Минимум |
[0,1; 1,5] |
0,2 |
10-4 |
|||
|
|
|
|
|
|
|
|
|
1,0 |
|
|
|
|
arctg x − |
1 |
ln(1 + x |
2 |
) |
Максимум |
[0,15; 1,5] |
0,2 |
10-5 |
|||
13 |
2 |
|
1,0 |
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
56
П р о д о л ж е н и е т а б л и ц ы
1 |
|
2 |
|
|
|
|
3 |
|
4 |
5 |
6 |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
|
|
x |
|
e− |
|
x −1 |
|
|
|
Максимум |
[-2; -0,5] |
0,15 |
10-5 |
||
|
|
|
|
|
||||||||||||
|
|
|
||||||||||||||
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
-1,0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
15 |
|
(ln2 x)/ x |
|
Минимум |
[0,1; 1,9] |
0,2 |
10-4 |
|||||||||
|
|
|
|
|
|
|
|
|
|
1,0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Пример |
|
выполнения |
работы |
|
|
||
|
Задание А. |
|
|
|
|
|
|
|
||||||||
|
Вычислить на ЭВМ методом трапеций значение интеграла |
|
||||||||||||||
|
|
|
|
|
|
|
|
|
b |
|
sin2 x |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
z = ò |
|
|
|
|
dx |
|
|
|
|
|
|
|
|
|
|
|
1 + 2k cos x + k |
2 |
|
|
||||
|
|
|
|
|
|
|
|
|
a |
|
|
|
|
|||
с точностью ε=10-4 для а=0; b=π; k=0,5. Для контроля вычислить точное значение интеграла и оценить абсолютную погрешность вычисления.
В примере выполнения лабораторной работы № 5 приведены оценка точного значения данного интеграла, схема алгоритма и программа вычис- ления для фиксированного значения числа разбиений n отрезка интегриро-
вания. Схема алгоритма решения по методу удвоения числа разбиений n |
|
приведена на рис. 1. |
|
1 |
|
начало |
|
2 |
|
a,b,ε |
ввод исходных данных |
3 a,b,ε |
вывод исходных данных |
4 |
|
n=5 |
задание первоначального значения n |
5 |
|
z1=0 |
начальное значение интеграла |
6
57
5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
fa + fb |
|
|
|
|
|
|
|
|
начальное значение суммы |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
z2 |
= |
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x = |
b− a |
|
|
|
|
|
|
определение шага аргумента |
|||||||
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
n |
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8
x=a
присвоение аргументу значения а
9
i=1, n−1 |
|
|
цикл увеличения аргумента и суммирования |
|
|
|
текущей ординаты f(x) |
10
x=x+Dx z2=z2+f(x)
11
i
12
вычисляется модуль разности между предыду- d= ½z1-z2½
щим значением интеграла и новым
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
|
|
|
|
|
|
|
|
присвоение нового значения интеграла |
|||
|
|
z1=z2 |
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
предыдущему |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
|
|
|
|
|
|
|
|
число разбиений отрезка интегрирования |
||
|
|
|
n=2n |
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
удваивается |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
|
|
|
|
|
|
проверка точности вычисления интеграла |
||
|
|
|
d<e |
|
|
|
|||||||
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
||||||
z2
16
z2=z2×Dx вычисление приближенного значения
интеграла
17
58
16
|
17 |
|
|
|
|
|
|
|
|
zt=p/2 |
|
|
вычисление точного значения интеграла |
||||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
|
|
|
|
|
|
|
|
z=½zt-z2½ |
|
|
|
||||
|
D |
|
вычисление абсолютной погрешности |
|||||
|
|
|
|
|
|
|
|
|
|
19 |
|
|
|
|
|
|
|
|
|
|
z2,zt, z |
|
|
вывод результатов |
||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
20
конец
Рис.1.
Программа, реализованная в соответствии с алгоритмом (рис. 1), име- ет вид:
Program PRIM6а; {Лабораторная работа № 6a}
{Cтудент группы ****** Иванов И.И.}
Var A, B, K, X, Z1, Z2, Z3:real; DZ, DELTA, DX, ZT, EPS:real; N, I:integer;
Begin
Writeln(‘Введите А,В,EPS ‘ ); Read(A,B,EPS); {Ввод исходных данных} Writeln(‘Вывод исходных данных ’,A,B,EPS);
K:=0.5; N:=5; {Число разбиений отрезка интегрирования} Z1:=0; {Начальное значение интеграла}
Repeat {Цикл проверки точности вычисления интеграла} Z2:=(SQR(SIN(A))/(1+2 K COS(A)+K K)+ {Начальное значение
+SQR(SIN(B))/(1+2 K COS(B)+K K))/2; суммы} DX:=(B-A)/N; {Определение шага аргумента}
X:=A; {Присвоение аргументу значения а}
For i:=1 to N-1 do {Организация цикла суммирования} begin
X:=X+DX;
Z2:=Z2+SQR(SIN(X))/(1+2 K COS(X)+K K)
end;
DELTA:=ABS(Z1-Z2); {Вычисление модуля разности}
Z1:=Z2; {Присвоение нового значения интеграла предыдущему}
59
N:=N 2 {Удвоение числа разбиений отрезка интегрирования}
Until DELTA<EPS; {Проверка точности вычисления интеграла} Z2:=Z2 DX; {Приближенное значение интеграла}
ZT:=PI/2; {Вычисление точного значения интеграла} DZ:=ABS(ZT-Z2); {Вычисление абсолютной погрешности} Writeln(‘Приближенное значение Z= ‘, Z2:9:5); {Вывод Writeln(‘Точное значение ZT= ‘, ZT:9:5); результатов} Writeln(‘Абсолютная погрешность ‘, DZ:9:4)
End.
Задание Б.
Вычислить на ЭВМ с заданной точностью ε=10-5 экстремум функции у=х (х-1)2 (х-2)3 на интервале [-0,3; 0,5]. Вид экстремума - минимум. “Гру- бое” значение шага изменения аргумента принять равным 0,15. На печать вывести вычисленное значение экстремума и значение аргумента, при ко- тором оно достигается. Схема алгоритма решения приведена на рис. 2.
1
начало
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
a,b |
|
|
|
|
|
ввод исходных данных |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
a,b |
|
|
|
|
|
вывод исходных данных |
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
ε=10-5 |
|
|
|
|
|
задание точности поиска экстремума и |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
h=0,15 |
|
|
|
|
|
“грубого” шага изменения аргумента |
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
x0=a |
|
|
|
|
|
задание начального значения аргумента |
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
6 |
|
|
|
|
|
|
|
|
|
|
|
|
присвоение начальному значению экстремума |
|||||||||
|
min=1010 |
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
y |
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
x=x |
|
|
|
|
большого числа при поиске минимума и |
|||||
0 |
|
|
|
|
|
|
|
малого числа при поиске максимума |
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
7 |
|
|
|
|
|
|
|
|
|
|
||||||||||||
60
