Программа
Program Integral;
{ Вычисление интеграла по
4-м вариантам разбиения,
сравнение с точным
значением, запись
результатов в файл,
вывод графика
подынтегральной ф-ии }
Uses
Graph,Crt;
Const
a=0; { Левая граница интервала интегрирования }
b=3; { Правая граница интервала интегрирования }
ScaleX=180; { Масштабный коэффициент по оси X }
ScaleY=100; { Масштабный коэффициент по оси Y }
DifferenceX0=-270; { Смещение оси X относительно центра экрана }
DifferenceY0=60; { Смещение оси Y относительно центра экрана }
DriverPath=''; { Путь к графическому драйверу }
Var
i,k:integer; { i - счетчик-параметр при вычислении суммы
k - счетчик }
h,Exact,Sum:real; { h - шаг разбиения
Exact - значение интеграла, вычисленное аналитически
Sum - переменная для набора интегральной суммы }
S:text; { Файловая переменная }
GraphDriver,GraphMode:integer; { Графический драйвер и режим }
Function F(x:real):real; { Вычисление подынтегральной функции }
Begin
F:=(Sqr(x)-x)/(x+1)
End;
Function F0(x:real):real; { Вычисление первообразной }
Begin
F0:=0.5*Sqr(x)-2*x+2*Ln(abs(x+1))
End;
BEGIN
{ Вычисление интеграла и запись результатов в файл }
Assign(S,'result.pas');
{ Связывание файловой переменной с файлом result.pas }
Exact:=F0(b)-F0(a); { Вычисление интеграла по первообразной }
Rewrite(S); { Открытие файла }
writeln(S,' =',Exact); { Запись значения интеграла в файл }
for k:=1 to 4 do { Вычисление интеграла по приближенной формуле
по четырем вариантам разбиения }
Begin
Sum:=0; { Обнуление суммы }
h:=(b-a)/(k*50); { Вычисление шага разбиения}
for i:=0 to k*50-1 do Sum:=Sum+F(a+i*h)+F(a+i*h+h); { Набор суммы }
writeln(S,'n=',k*50:3,' ў',h*Sum/2,
' погрешность ',abs(Exact-h*Sum/2));
{ Вычисление интеграла и вывод результата в файл }
End;
Close(S); { Закрытие файла }
{ Построение графика функции }
GraphDriver:=Detect; { Автоматическое определение драйвера }
InitGraph(GraphDriver,GraphMode,DriverPath);
{ Инициализация графического режима }
SetColor(White); { Установка белого цвета }
SetLineStyle(SolidLn,0,NormWidth);
{ Установка сплошной линии нормальной толщины }
Line(Round(GetMaxX/2)+DifferenceX0,0,Round(GetMaxX/2)+DifferenceX0,GetMaxY);
{ Ось X }
Line(0,Round(GetMaxY/2)+DifferenceY0,GetMaxX,Round(GetMaxY/2)+DifferenceY0);
{ Ось Y }
SetLineStyle(SolidLn,0,ThickWidth);{ Установка сплошной толстой линии}
MoveTo(a*ScaleX+Round(GetMaxX/2)+DifferenceX0,
Round(GetMaxY/2)+DifferenceY0-Round(F(a)*ScaleY));
{ Помещение указателя в первую точку графика }
for i:=a*ScaleX to b*ScaleX do { Построение графика }
LineTo(i+Round(GetMaxX/2)+DifferenceX0,
Round(GetMaxY/2)+DifferenceY0-Round(F(i/ScaleX)*ScaleY));
while not KeyPressed do; { Задержка до нажатия клавиши }
CloseGraph { Закрытие графического режима }
END.
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию