
- •Программирование на языке Паскаль
- •Содержание
- •Оформление лабораторных работ
- •Линейный алгоритм
- •Экранные меню и циклы Постановка задачи
- •Математическая модель
- •Описание алгоритма
- •Текст программы
- •Процедуры и функции Постановка задачи
- •Математическая модель
- •Описание алгоритма
- •Текст программы
- •Работа с файлами и алгоритмы сортировки Постановка задачи
- •| Фамилия |Дни| Оклад | Зарплата |
- •|Петров | 15| 6300.00| 3937.50| |Иванов | 24| 5600.00| 5600.00|
- •|Итого | 23687.50|
- •Математическая модель
- •Описание алгоритма
- •Текст программы
- •Inc(Cmp); {Подсчет количества сравнений}
- •Inc(Cmp); {Подсчет количества сравнений}
- •Визуальное программирование Постановка задачи
- •Математическая модель
- •Библиографический список
Текст программы
programLab4;
{$APPTYPE CONSOLE}
uses SysUtils;
type
Func=function (x:Real):Real;
function Sum(f:Func;a,b:Real;n:Integer):Real;
var
dx:Real;
i:Integer;
begin
dx:=(b-a)/n;
Result:=0;
for i:=0 to n-1 do
Result:=Result+dx*f(a+i*dx+dx/2);
end;
function Integr(f:Func;a,b,MaxError:Real):Real;
var
n:Integer;
Prev:Real;
begin
n:=8;
Result:=Sum(f,a,b,n);
repeat
Prev:=Result;
n:=n*2;
Result:=Sum(f,a,b,n);
until Abs(Result-Prev)<MaxError;
end;
procedure PrintIntegr(f,G:Func);
var
a,b:Real;
ch:Char;
begin
repeat
Write('Введите отрезок интегрирования: ');
ReadLn(a,b);
Writeln('Приближенное значение интеграла: ',Integr(f,a,b,1e-6):1:6,'+-',1e-6:1:6);
if @G<>nil then
Writeln('Точное значение интеграла: ',G(b)-G(a):1:10);
Write('Продолжить вычисление (Y/N) ?');
Readln(ch);
until UpCase(ch)='N';
end;
function f1(x:Real):Real;
begin f1:=x*sin(x) end;
function G1(x:Real):Real;
begin G1:=sin(x)-x*cos(x) end;
function f2(x:Real):Real;
begin f2:=sqr(cos(x)) end;
function G2(x:Real):Real;
begin G2:=x/2+sin(2*x)/4 end;
function f3(x:Real):Real;
begin f3:=sin(x)/x end;
function f4(x:Real):Real;
begin f4:=exp(sqr(x)) end;
var
n:Integer;
Loop:Boolean;
begin
Loop:=True;
while Loop do
begin
Writeln('Меню:');
Writeln('1. Интеграл функцииx*sin(x)');
Writeln('2. Интеграл функцииsqr(cos(x))');
Writeln('3. Интеграл функцииsin(x)/x');
Writeln('4. Интеграл функцииexp(sqr(x))');
Writeln('5. Выход из программы');
Write('Выберите пункт меню: ');
Readln(n);
Writeln;
case n of
1:PrintIntegr(f1,G1);
2:PrintIntegr(f2,G2);
3:PrintIntegr(f3,nil);
4:PrintIntegr(f4,nil);
5:Loop:=False;
end;
Writeln;
end;
end.
Тест
Сначала необходимо отладить программу на функциях, для которых известна первообразная. В таблице тестов привести приближенные и точные значения интегралов, выдаваемых программой. Они должны совпадать с точностью до выбранной погрешности результата. Пример таблицы тестов приведен далее.
Функция |
a |
b |
Приближенное значение интеграла |
Точное значение интеграла |
x sin x |
0 |
1 |
0.3011680.000001 |
0.3011686789 |
x sin x |
0 |
2 |
1.7415910.000001 |
1.7415910999 |
x sin x |
2 |
3 |
1.3695070.000001 |
1.3695063979 |
x sin x |
0 |
3 |
3.1110980.000001 |
3.1110974979 |
cos2 x |
0 |
1 |
0.7273250.000001 |
0.7273243567 |
cos2 x |
0 |
2 |
0.8107990.000001 |
0.8107993762 |
cos2 x |
2 |
3 |
0.6193470.000001 |
0.6193467493 |
cos2 x |
0 |
3 |
1.4301460.000001 |
1.4301461255 |
sin x/x |
1 |
2 |
0.6593300.000001 |
– |
sin x/x |
2 |
3 |
0.2432390.000001 |
– |
sin x/x |
1 |
3 |
0.9025700.000001 |
– |
ex2 |
0 |
1 |
1.4626520.000001 |
– |
ex2 |
1 |
2 |
14.9899760.000001 |
– |
ex2 |
0 |
2 |
16.4526280.000001 |
– |
Для функций с неизвестными первообразными произвести расчет интеграла для интервалов, приведенных таблице.