Читайте также:
|
|
{Студент: Молоцило Я.Е., группа: 4О-110Б, дата: 27.11.11}
{Программа табулирования функции Y=f(A,B,X), где аргумент X принимает N значений, изменяясь от начального значения Xn на шаг Dx, параметр A изменяется от начального An до конечного Ak значения с шагом Da, а параметр B равен численному значению определённого интеграла функции 1/sqrt(exp(2*x)+exp(x)+5) с верхней границей интегрирования, равной -0.04, и нижней - 65, при заданной погрешности Eps}
uses crt;
const Nmax=20;
type Tmy=array [1..Nmax,1..Nmax] of real;
Tmx=array [1..Nmax] of real;
Ter=array [1..Nmax,1..Nmax] of integer;
var A,Mx:Tmx;
My:Tmy;
Er:Ter;
Xn,Dx,An,Ak,Da,B,Eps,Z,C,D:real;
N,M,Err,Km:integer;
{Текст подпрограммы-процедуры заполнения массива значений параметра функции A}
Procedure DataIn (An,Ak,Da:real; var A:Tmx);
var i:integer;
At:real;
begin
At:=An;
i:=0;
Repeat
i:=i+1;
If At<Ak Then begin
A[i]:=At;
At:=At+Da;
end
Else A[i]:=Ak;
Until (A[i]=Ak);
end;
{Текст подпрограммы-процедуры табулирования функции}
procedure Tab (Xn,Dx,B:real; N,M:integer; A:Tmx; var Mx:Tmx; var My:Tmy; var Er:Ter);
var i,j:integer;
X,Y:real;
begin
For j:=1 to M do begin
X:=Xn;
For i:=1 to N do begin
Mx[i]:=X;
Er[i,j]:=0;
If X>0 Then begin
Y:=A[j]*B*sin(2*Pi*X)*sin(2*Pi*X)/sqrt(X);
My[i,j]:=Y;
end
Else Er[i,j]:=1;
X:=X+Dx;
end;
end;
end;
{Текст подпрограммы-функции}
Function F(X:real):real;
begin
F:=1/sqrt(exp(2*x)+exp(x)+5);
end;
{Текст подпрограммы-процедуры нахождения численного значения определенного интеграла методом Симпсона}
procedure Integral(C,D,Eps:real; Km:integer; var Z:real; var Err:integer);
var H,W,Z0:real;
i,j,K:integer;
begin
Err:=1;
K:=2;
j:=1;
Z0:=0;
While j<Km do begin
Z:=F(C)+F(D);
H:=(D-C)/K;
For i:=1 to K-1 do If Odd(i) Then Z:=Z+4*F(C+i*H)
Else Z:=Z+2*F(C+i*H);
Z:=Z*H/3;
W:=Abs(Z0-Z);
If w<Eps Then begin
Err:=Err-1;
j:=Km;
end
Else begin
Z0:=Z;
j:=j+1;
K:=K*2;
end;
end;
end;
{Текст подпрограммы-процедуры вывода данных}
Procedure RezOut (Mx,A:Tmx; N,M:integer; My:Tmy; Er:Ter);
var i,j:integer;
begin {Вывод результатов выполнения программы}
For j:=1 to M do begin
writeln (‘ A[‘,j,’]=’,A[j]:6:3);
writeln (‘ X Y’);
For i:=1 to N do If Er[i,j]=0 Then writeln (Mx[i]:6:3,’ ‘,My[i,j]:6:3)
Else writeln (Mx[i]:6:3,’ ошибка данных’);
writeln;
end;
end;
begin {Начало главной программы}
clrscr;
writeln ('Введите значения переменных: Xn,Dx,N.');
read (Xn,Dx,N);
writeln (‘Xn=’,Xn:6:3,’, Dx=’,Dx:6:3,’, N=’,N:3,’.’);
writeln ('Введите значения переменных: An,Da,Ak.');
read (An,Da,Ak);
writeln (‘An=’,An:6:3,’, Da=’,Da:6:3,’, Ak=’,Ak:6:3,’.’);
writeln ('Введите значения: нижнего предела интегрирования C, верхнего предела интегрирования D.');
read (C,D);
writeln (‘C=’,C:6:3,’, D=’,D:6:3,’.’);
writeln ('Введите значения: погрешности Eps, предельного числа повторения циклов Km.');
read (Eps,Km);
writeln (‘Eps=’,Eps:6:5,’, Km=’,Km:3,’.’);
DataIn (An,Ak,Da,A); {Вызов подпрограммы-процедуры заполнения массив значений параметра функции A}
Integral (C,D,Eps,Km,Z,Err); {Вызов подпрограммы-процедуры нахождения численного значения определенного интеграла методом Симпсона}
If Err=0 Then begin
M:=runk((Ak-An)/Da)+1;
B:=Z;
writeln ('Численное значение определенного интеграла B=',B:4:3,'.');
Tab (Xn,Dx,B,N,M,A,Mx,My,Er); {Вызов подпрограммы-процедуры табулирования функции}
RezOut (Mx,A,N,M,My,Er); {Вызов подпрограммы-процедуры вывода данных}
end
Else writeln ('Численное значение интеграла не найдено за ',Km:2,' итераций.');
end.
Результат выполнения программы.
Выводы
Анализ результатов выполнения программы показывает, что полученные значения функции совпадают с результатами, полученными для контрольный тестовых примеров с помощью калькулятора, что подтверждает работоспособность программы. Следовательно, программа правильно вычисляет заданную функцию по всем ветвям алгоритма и может быть использована для других значений аргументов и параметров функции.
Список использованной литературы
1. Кошелькова Л.В., Заковряшин А.И. Решение алгебраических задач численными методами в среде DELPHI: Учебное пособие к расчётной работе. – М.: Изд-во МАИ-ПРИНТ, 2008. – 88 с.: ил.
2. http://ru.wikipedia.org – свободная общедоступная мультиязычная универсальная интернет-энциклопедия.
Дата добавления: 2015-10-30; просмотров: 64 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Схемы алгоритмов | | | Главы (лекции) 1 и 2 добавлены в качестве лекций для студентов, но первоначально в учебное пособие не входили. |