Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Moskovsky_aviatsionnyy_institut.doc
Скачиваний:
5
Добавлен:
18.11.2019
Размер:
690.69 Кб
Скачать
  1. Набор тестов

Тест 1. Проверка подпрограммы-процедуры нахождения численного значения интеграла.

Пусть входные данные имеют следующие значения: нижний предел интегрирования C=65; верхний предел интегрирования D=-0.04.

Результаты контрольного просчёта: численное значение интеграла B=-0.654.

Тест 2. Проверка ветви, вычисляющей значении функции при X>0.

Пусть входные данные имеют следующие значения: параметр функции A=-3; аргумент X=0,8.

Результаты контрольного просчёта: численное значение интеграла B=-0.654; значение функции Y=1,984.

Тест 3. Проверка ветви, вычисляющей значении функции при X<0.

Пусть входные данные имеют следующие значения: параметр функции A=-3; аргумент X=-0,8.

Результаты контрольного просчёта: численное значение интеграла B=-0.654; аргумент функции имеет отрицательное значение, что не позволяет извлечь квадратный корень вещественного типа и найти значение функции при данном значении аргумента.

  1. Текст программы на языке программирования Pascal и результаты её выполнения

program TabRgr;

{Студент: Молоцило Я.Е., группа: 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:=12runk((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. Выводы

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]