Программа


Program Trapezium;
{ Вывод трапеции,
  ограниченной 2-я
  ф-ями и границами
  интервала, вычисление
  площади по приближенной
  формуле, сравнение с
  точным значением,
  вывод результатов в файл }
Uses
  Graph,Crt;
Const
  a=-1.5;                        { Левая граница интервала интегрирования }
  b=1.5;                         { Правая граница интервала интегрирования }
  N=100;                         { Разбиение }
  ScaleX=166;                    { Масштабный коэффициент по оси X }
  ScaleY=95;                     { Масштабный коэффициент по оси Y }
  DifferenceX0=0;                { Смещение оси X относительно центра экрана }
  DifferenceY0=0;                { Смещение оси Y относительно центра экрана }
  DriverPath='C:\PROGRA~1\BP\BGI';                 { Путь к графическому драйверу }
Var
  i:integer;                     { Счетчик }
  Otv,OtvP:real;                 { Точный ответ, приближенный ответ }
  Step:real;                     { Шаг интегрирования }
  GraphDriver,GraphMode:integer; { Графический драйвер и режим }
  F:text;                        { Файловая переменная }
  St:String;  { Переменная для обработки выводимого в графике текста }
Function F1(x:real):real;        { Первая функция }
  Begin
    F1:=1-Sqr(x)
  End;
Function F1Proto(x:real):real;   { Первообразная первой функции }
  Begin
    F1Proto:=x*(3-Sqr(x))/3
  End;
Function F2(x:real):real;        { Вторая функция }
  Begin
    F2:=Sqr(x)-1
  End;
Function F2Proto(x:real):real;   { Первообразная второй функции }
  Begin
    F2Proto:=x*(Sqr(x)-3)/3
  End;
BEGIN
  GraphDriver:=Detect; { Автоматическое определение драйвера }
  InitGraph(GraphDriver,GraphMode,DriverPath);
  { Инициализация графического режима }
  SetColor(White); { Установка белого цвета }
  SetLineStyle(SolidLn,0,NormWidth);
  { Установка сплошной линии нормальной толщины }
  Line(Round(a*ScaleX)+Round(GetMaxX/2)+DifferenceX0,
       Round(GetMaxY/2)+DifferenceY0-Round(F1(a)*ScaleY),
       Round(a*ScaleX)+Round(GetMaxX/2)+DifferenceX0,
       Round(GetMaxY/2)+DifferenceY0-Round(F2(a)*ScaleY));
       { Левая граница трапеции }
  for i:=Round(a*ScaleX) to Round(b*ScaleX) do  { Построение трапеции }
   Begin
     if odd(i) then   SetLineStyle(4,$AAAA,1)
               else   SetLineStyle(4,$5555,1);
(*    Line(i+Round(GetMaxX/2)+DifferenceX0,
           Round(GetMaxY/2)+DifferenceY0-Round(F1(i/ScaleX)*ScaleY),
           i+1+Round(GetMaxX/2)+DifferenceX0,
           Round(GetMaxY/2)+DifferenceY0-Round(F1((i+1)/ScaleX)*ScaleY));
           { График первой функции }
      Line(i+Round(GetMaxX/2)+DifferenceX0,
           Round(GetMaxY/2)+DifferenceY0-Round(F2(i/ScaleX)*ScaleY),
           i+1+Round(GetMaxX/2)+DifferenceX0,
           Round(GetMaxY/2)+DifferenceY0-Round(F2((i+1)/ScaleX)*ScaleY))
           { График второй функции }                              *)
      Line(i+Round(GetMaxX/2)+DifferenceX0,
           Round(GetMaxY/2)+DifferenceY0-Round(F2((i+1)/ScaleX)*ScaleY),
           i+Round(GetMaxX/2)+DifferenceX0,
           Round(GetMaxY/2)+DifferenceY0);
      Line(i+Round(GetMaxX/2)+DifferenceX0,
           Round(GetMaxY/2)+DifferenceY0-Round(F1((i+1)/ScaleX)*ScaleY),
           i+Round(GetMaxX/2)+DifferenceX0,
           Round(GetMaxY/2)+DifferenceY0)
    End;
  SetLineStyle(SolidLn,0,NormWidth);
  { Установка сплошной линии нормальной толщины }
  Line(Round(b*ScaleX)+Round(GetMaxX/2)+DifferenceX0,
       Round(GetMaxY/2)+DifferenceY0-Round(F1(b)*ScaleY),
       Round(b*ScaleX)+Round(GetMaxX/2)+DifferenceX0,
       Round(GetMaxY/2)+DifferenceY0-Round(F2(b)*ScaleY));
       { Правая граница трапеции }
(*  SetFillStyle(InterleaveFill,White);
  { Установка заполнения частой сеткой,белый цвет }
  FloodFill(Round(GetMaxX/2)+DifferenceX0+Round((a+b)/2*ScaleX),
            Round(GetMaxY/2)+DifferenceY0
            -Round((F1((a+b)/2)+F2((a+b)/2))/2*ScaleY),
            White); { Заполнение трапеции указанием ее средней точки }  *)
  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(Round(GetMaxX/2)+DifferenceX0,0,Round(GetMaxX/2)+DifferenceX0,GetMaxY);
  { Ось Y }
  Line(0,Round(GetMaxY/2)+DifferenceY0,GetMaxX,Round(GetMaxY/2)+DifferenceY0);
  { Ось X }
  OutTextXY(GetMaxX-2-TextWidth('X'),  { Подпись оси X }
            Round(0.47*GetMaxY)-TextHeight('X')+DifferenceY0,'X');
  SetFillStyle(SolidFill,Black); { Выбор заполнения черным цветом }
  Bar(GetMaxX div 2+DifferenceX0-7-TextWidth('0'),
      GetMaxY div 2+DifferenceY0+2,
      GetMaxX div 2+DifferenceX0-2,
      GetMaxY div 2+DifferenceY0+4+TextHeight('0'));
      { Закрашивание фона под "0" }
  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); { Преобразование числа в строковую переменную }
  Bar(Round(0.48*GetMaxX)+DifferenceX0-4-TextWidth(St),
      Round(GetMaxY/2)+DifferenceY0-Round(i*ScaleY)
      +TextHeight(St) div 2+2,
      Round(0.48*GetMaxX)+DifferenceX0,
      Round(GetMaxY/2)+DifferenceY0-Round(i*ScaleY)
      -TextHeight(St) div 2-2);
      { Закрашивание фона под значением }
      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 2 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.52*GetMaxX)+DifferenceX0,
            Round(0.2*GetMaxY)+DifferenceY0,'F=1-Sqr(x)'); { Подпись функций }
    OutTextXY(Round(0.52*GetMaxX)+DifferenceX0,
              Round(0.8*GetMaxY)+DifferenceY0,'F=Sqr(x)-1');
  Assign(F,'otvet.txt');
  { Связывание файловой переменной с файлом result.pas }
  Rewrite(F); { Открытие файла }
  Otv:=(F1Proto(b)-F1Proto(a))-(F2Proto(b)-F2Proto(a));
  { Вычисление точного значения }
  Writeln(F,'Точное значение        ',Otv); { Вывод точного значения в файл }
  Step:=(b-a)/N; { Вычисление шага разбиения }
  OtvP:=0;  { Обнуление интегральной суммы }
  for i:=0 to N-1  do  { Набор итегральной суммы по формуле прямоугольников }
  OtvP:=OtvP+Step*(F1(a+Step*(i+0.5))-F2(a+Step*(i+0.5)));
  Writeln(F,'Приближенное значение  ',OtvP);
  { Вывод приближенного значения в файл }
  Writeln(F,'Погрешность вычисления ',abs(Otv-OtvP));
  { Вычисление и вывод в файл погрешности вычисления }
  Close(F);  { Закрытие файла }
  if ReadKey=' ' then; { Задержка до нажатия клавиши }
  CloseGraph { Закрытие графического режима }
END.


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