Программа


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.


Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию