Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Pascal
Перезагрузить страницу Вывести в графическое окно не результат расчета, а сам расчет интеграла?
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Max$$ Max$$ вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 16.10.2017
По умолчанию Вывести в графическое окно не результат расчета, а сам расчет интеграла? - 17.12.2017, 15:42

Одним из пунктов лабораторной по работе с графикой нужно либо заштриховать вычисляемую площадь фигуры, либо вывести сам численный расчет интеграла. То, что получается на графике, не понимаю как штриховать - кривая не замкнута. А как вывести сам расчет -не понимаю, как это сделать. Помогите, если кто знает. Вот программа:
Pascal Код:
uses GraphABC;
const
  x1 = -4.33;

var
  a, b: real;
  n, k: integer;
  Int: real;

function f(x: real): real;
begin
  f := 4 * x * x * x + 43 * x * x + 404 * x + 1269;
end;

function P(x: real): real;

begin
 
  P := 4 * x * x * x * x / 4 + 43 * x * x * x / 3 + 404 * x * x / 2 + 1269 * x;
 
end;

procedure vvod(var a: real; var b: real; var n: integer);
begin
  Writeln('Нижний предел: ');
  Readln(a);
  Writeln('Верхний предел: ');
  Readln(b);
  Writeln('Количество разбиений: ');
  Readln(n);
end;

function raschet(a, b, Int: real; n: integer): real;
var
  h: real;
  i: integer;
begin
  h := (b - a) / n;
  Int := 0;
  for i := 1 to n - 1 do
    Int := Int + f(a + i * h);
  Int := Int * h;
  Result := Int;
end;

var
  m: char;
  s, s0, R: real;
  x, mx, my, kx, ky: real;
  gx, gy, a1, b1, ymx, x0, y0, i, x2, y2: integer;
  //s: string;

begin
  //LockDrawing;
  while (true) do
  begin
    writeln('Выберите действие:');
    writeln('0 - выход из программы');
    writeln('1 - Ввод пределов интегрирования');
    writeln('2 - Вывести результаты расчетов');
    writeln('3 - Вывести график функции');
    readln(m);
    case m of
      '0': break;
      '1': begin vvod(a, b, n); end;
      '2':
        begin
          if ((x1 < a) and (a < b) and (n > 0)) or ((a < b) and (b < x1) and (n > 0)) then begin
            s0 := P(b) - P(a);
            writeln('Площадь фигуры, ограниченной кривой: ', s0:0:4);
           
            s := raschet(a, b, Int, n);
            Writeln('Площадь фигуры методом левых прямоугольников: ', s:0:4);
           
            R := abs(s - s0);
           
            writeln('Расчет погрешности: ' + floattostr(R));
            Readln;
          end
          else  begin
            if (a < x1) and (x1 < b) and (n > 0) then begin
              s0 := (P(b) - P(x1)) + (P(x1) - P(a));
              writeln('Площадь фигуры, ограниченной кривой: ', s0:0:4);
              s := (raschet(x1, b, Int, n)) + (raschet(a, x1, Int, n));
             
              Writeln('Площадь фигуры методом левых прямоугольников: ', s:0:4);
             
              R := abs(s - s0);
             
              writeln('Расчет погрешности: ' + floattostr(R));
              Readln;
            end
           
            else
              writeln('Расчёта не будет - не все данные введены');
           
          end;
        end;
      '3':
       
        begin
          writeln('Введите масштаб по X: ');
          readln(kx);
          writeln('Введите масштаб по Y: ');
          readln(ky);
          writeln('Введите пределы интегрирования: ');
          readln(a1);
          readln(b1);
         
          ClearWindow;
          LockDrawing;  
         
          begin
            gx := 900;
            gy := 700;
            setwindowsize(gx, gy);  //устанавливает размер клиентской части графического окна.
            centerwindow;  //устанавливает графическое окно в центре экрана.        
            a := -5;
            b := 5;
           // a1 := -5;
           // b1 := 1;
           
            ymx := 1500;
            x0 := gx - 300;//начало координат
            y0 := gy - 250;
           
           
            mx := kx * (x0 - 30) / -a;//масштаб по Х: отступаем от края на 30 пикселей и делим на 5
            my := ky * (y0 - 50) / ymx;//по Y
            line(0, y0, gx, y0);//ось Х
            line(x0, 0, x0, gy);  //ось Y
           
           
         
            for i := 1 to trunc(-a * 5) do//создаем ось Х
            begin
              line(gx, y0, gx - 10, y0 + 10);//стрелка на координате x
              line(gx, y0, gx - 10, y0 - 10);//стрелка на координате x
              line(x0 - round(i * mx / 5), y0 - 3, x0 - round(i * mx / 5), y0 + 3); //засечки
              textout(x0 - round(i * mx / 5) - 5, y0 + 10, floattostr(-i / 5));//подписи
              textout(x0 + round(i * mx / 5) - 5, y0 + 10, floattostr(i / 5));//подписи
            end;
            for i := 1 to trunc(ymx / 50) + 1 do//создаем ось Y
            begin
              line(x0, 0, x0 - 10, 10);//стрелка на координате y
              line(x0, 0, x0 + 10, 10);//стрелка на координате y
              line(x0 - 3, y0 - round(i * my * 50), x0 + 3, y0 - round(i * my * 50)); //засечки на оси Y
              textout(x0 + 15, y0 - round(i * my * 50) - 5, inttostr(i * 50)); //подписи
              textout(x0 + 15, y0 + round(i * my * 50) - 5, inttostr(-i * 50)); //подписи
            end;
            //центр
            textout(x0 + 5, y0, '0');
            //подписи концов осей
            textout(15, y0 - 25, 'X');
            textout(x0 + 10, 10, 'Y');
            //график
            SetPenWidth(5);
            x := a1;
            setpencolor(clgreen);
            Line(x0 + trunc(a1 * mx), 0, x0 + trunc(a1 * mx), gy); // линия через х=а
            x := b1;
            setfontcolor(clgreen);
            Line(x0 + trunc(b1 * mx), 0, x0 + trunc(b1 * mx), gy); // линия через точку х=в
           
            setpencolor(clRed);
            x := a;
            i := 0;
            while x <= b do
            begin
              x := x + 0.001;
              if F(x) >= -300 then
              begin
                inc(i);
                if i = 1 then moveto(x0 + round(x * mx), y0 - round(F(x) * my))
                else lineto(x0 + round(x * mx), y0 - round(F(x) * my));
              end;
            end;
            {x2 := trunc((a1 + 10) * mx);
            y2 := trunc((y0 + 10) * my);
           
            FloodFill(x2, y2, ClCyan);}

           
            //название
            setfontsize(12);
            setfontcolor(clBlue);
            textout(35, 10, 'График кривой: y=4*х^3+43х^2+404*x+1269');
          end;
          Redraw;
        end;
    end;
  end;
end.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести результат в двоичном и шестнадцатеричном виде hack7 Assembler 2 27.08.2017 20:13
Как с помощью winapi вывести в окно ветки реестра, как regedit? vellfall WinAPI 1 22.11.2016 08:49
Простая задачка про шахматы как вывести результат kost Игры разума 8 16.08.2010 11:17
Корректировка вывода как вывести результат Евгений А. С/С++ 3 29.12.2009 13:45
Метке присваиваем Caption равно 1 как вывести результат Sputni_ck C++ Builder 11 13.01.2007 12:19
Как вывести ToolBar в диалоговое окно typic Visual C++ 3 11.01.2007 16:38
Как можно вывести на экран графическое изображение bmp, jpg blur Visual C++ 5 03.04.2005 18:27
Как вывести результат дизасма windsurfer Assembler 0 21.12.2004 20:10
Как вывести точку в окно по команде из другого окна abi Visual C++ 3 22.06.2004 23:21
Как вывести в окно messages результат работы goal Anonymous Prolog 29 05.01.2004 18:55
cout в графическое окно Sergio Visual C++ 1 08.09.2003 21:29
Как вывести окно с уведомлением и кнопочкой ОК imported_Alek Visual C++ 2 01.08.2003 20:05



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов