Программа
Program Integral;
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; { Графический драйвер и режим }
Ch:char; { Переменная для работы с клавиатурой }
TextAttrRAM:integer; { Переменная для хранения атрибутов текста }
St:String; { Переменная для обработки выводимого в графике текста }
Procedure Stop;
Begin
TextAttrRAM:=TextAttr; { Сохранение текущих атрибутов текста }
TextAttr:=143;{ Установка атрибутов: мерцание, черный фон, белый символ }
GoToXY(31,24);
write('Нажмите клавишу'); { Вывод приглашения }
TextAttr:=TextAttrRAM; { Востановление атрибутов текста }
Ch:=ReadKey; { Задержка до нажатия клавиши }
End;
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;
Procedure Poster1;
Begin
ClrScr;
GoToXY(15,2);
Write('БАЛТИЙСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ');
GoToXY(25,6);
Write('Курсовая работа по ИНФОРМАТИКЕ');
GoToXY(48,15);
Write('Студент: ЖИГУЛИНА ЮЛИЯ');
GoToXY(48,17);
Write('Группа: Н252');
GoToXY(48,19);
Write('Преподаватель: МАРТЫНОВА И.В.');
Stop
End;
Procedure Poster2;
Begin
ClrScr;
Writeln('Данная программа служит для вычисления определенного интеграла');
Writeln('по методу Симпсона. Кроме того, она вычисляет абсолютные');
Writeln('погрешности. ');
Writeln('При желании пользователь может посмотреть график кривой, нажав');
Writeln('клавишу.');
Writeln('Результаты работы программы записываются также в файл RESUL.TXT.');
Writeln('Для продолжения нажмите пожалуйста любую клавишу.');
Ch:=ReadKey;
End;
Procedure Draw;
Begin
{ Построение графика функции }
GraphDriver:=Detect; { Автоматическое определение драйвера }
InitGraph(GraphDriver,GraphMode,DriverPath);
{ Инициализация графического режима }
SetColor(White); { Установка белого цвета }
SetLineStyle(SolidLn,0,NormWidth);
{ Установка сплошной линии нормальной толщины }
Line(Round(GetMaxX/2)+DifferenceX0,0,Round(GetMaxX/2)+DifferenceX0,GetMaxY);
{ Ось X }
OutTextXY(Round(0.47*GetMaxX)+DifferenceX0,3,'Y'); { Подпись оси Y }
Line(Round(GetMaxX/2)+DifferenceX0,0,Round(0.494*GetMaxX)+DifferenceX0,
Round(0.03*GetMaxY)); { Вывод стрелки на оси Y }
Line(Round(GetMaxX/2)+DifferenceX0,0,Round(0.506*GetMaxX)+DifferenceX0,
Round(0.03*GetMaxY));
Line(0,Round(GetMaxY/2)+DifferenceY0,GetMaxX,Round(GetMaxY/2)+DifferenceY0);
{ Ось Y }
OutTextXY(GetMaxX-2-TextWidth('X'), { Подпись оси X }
Round(0.47*GetMaxY)-TextHeight('X')+DifferenceY0,'X');
OutTextXY(GetMaxX div 2+DifferenceX0-3-TextWidth('0'),
GetMaxY div 2+DifferenceY0+4,'0');
{ Вычисление ширины символа "0" }
Line(Round(0.98*GetMaxX),Round(0.491*GetMaxY)+DifferenceY0,
GetMaxX,Round(GetMaxY/2)+DifferenceY0); { Вывод стрелки на оси X }
Line(Round(0.98*GetMaxX),Round(0.509*GetMaxY)+DifferenceY0,
GetMaxX,Round(GetMaxY/2)+DifferenceY0);
for i:=-1 to 1 do { Разметка оси Y }
if i<>0 then { Исключение нуля }
begin
line(Round(0.49*GetMaxX)+DifferenceX0,
Round(GetMaxY/2)+DifferenceY0-Round(i*ScaleY),
Round(0.51*GetMaxX)+DifferenceX0,
Round(GetMaxY/2)+DifferenceY0-Round(i*ScaleY));
{ Прорисовка штрихов на оси Y }
Str(i,St); { Преобразование числа в строковую переменную }
OutTextXY(Round(0.48*GetMaxX)+DifferenceX0-1-TextWidth(St),
Round(GetMaxY/2)+DifferenceY0-Round(i*ScaleY)
-TextHeight(St) div 2,St) { Вывод значения }
end;
for i:=-2 to 3 do { Разметка оси X }
if i<>0 then { Исключение нуля }
begin
line(Round(0.5*GetMaxX)+DifferenceX0+Round(i*ScaleX),
Round(0.49*GetMaxY)+DifferenceY0,
Round(0.5*GetMaxX)+DifferenceX0+Round(i*ScaleX),
Round(0.51*GetMaxY)+DifferenceY0);
{ Прорисовка штрихов на оси X }
Str(i,St); { Преобразование числа в строковую переменную }
OutTextXY(Round(0.5*GetMaxX)+DifferenceX0-TextWidth(St) div 2+
Round(i*ScaleX),
Round(0.53*GetMaxY)+DifferenceY0,St) { Вывод значения }
end;
OutTextXY(Round(0.9*GetMaxX)+DifferenceX0,
Round(0.15*GetMaxY)+DifferenceY0,'F=(Sqr(x)-x)/(x+1)');
{ Подпись графика }
SetLineStyle(4,21845,1);
for i:=a*ScaleX to b*ScaleX do { Построение графика }
begin
if Odd(i) then SetLineStyle(4,21845,1)
else SetLineStyle(4,21845*2,1);
Line(i+Round(GetMaxX/2)+DifferenceX0,
Round(GetMaxY/2)+DifferenceY0-Round(F(i/ScaleX)*ScaleY),
i+Round(GetMaxX/2)+DifferenceX0,Round(GetMaxY/2)+DifferenceY0)
end;
SetFillStyle(1,0);
while not KeyPressed do
begin
OutTextXY((GetMaxX-TextWidth('PRESS ANY KEY'))div 2,
GetMaxY-TextHeight('PRESS ANY KEY'),'PRESS ANY KEY');
delay(350);
Bar((GetMaxX-TextWidth('PRESS ANY KEY'))div 2,
GetMaxY-TextHeight('PRESS ANY KEY'),
(GetMaxX+TextWidth('PRESS ANY KEY'))div 2,
GetMaxY);
delay(200)
end;
Ch:=ReadKey; { Задержка до нажатия клавиши }
CloseGraph; { Закрытие графического режима }
End;
Procedure Work;
Begin
{ Вычисление интеграла и запись результатов в файл }
ClrScr; { Очистка экрана }
Assign(S,'result.pas');
{ Связывание файловой переменной с файлом result.pas }
Exact:=F0(b)-F0(a); { Вычисление интеграла по первообразной }
Rewrite(S); { Открытие файла }
{ Оформление шапки таблицы }
writeln('╔═════════════════════╦════════════════════╦═══════════════════╗');
writeln(S,
'╔═════════════════════╦════════════════════╦═══════════════════╗');
writeln('║ Разбиение,n ║Вычисленное значение║ Погрешность ║');
writeln(S,
'║ Разбиение,n ║Вычисленное значение║ Погрешность ║');
writeln('╠═════════════════════╬════════════════════╬═══════════════════╣');
writeln(S,
'╠═════════════════════╬════════════════════╬═══════════════════╣');
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( '║ ',k*50:3,' ║ '
,h*Sum/2,' ║ ',abs(Exact-h*Sum/2),' ║');
{ Вычисление интеграла и вывод результата на экран }
writeln(S,'║ ',k*50:3,' ║ '
,h*Sum/2,' ║ ',abs(Exact-h*Sum/2),' ║');
{ Вычисление интеграла и вывод результата в файл }
End;
writeln( '║аналитическое решение║ ',Exact,' ║ ║');
{ Вывод значения интеграла на экран }
writeln(S,'║аналитическое решение║ ',Exact,' ║ ║');
{ Запись значения интеграла в файл }
writeln('╚═════════════════════╩════════════════════╩═══════════════════╝');
writeln(S,
'╚═════════════════════╩════════════════════╩═══════════════════╝');
Close(S); { Закрытие файла }
Stop
End;
BEGIN
Poster1;
Poster2;
Draw;
Work;
writeln
END.
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию