Переход между модулями graphabc и crt - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Есть программа для подсчета определенного интеграла, в которой ввод данных осуществляется с помощью консольного меню. Нужно дополнить её режимом визуализации. Проблема заключается в том, что графическое окно должно вызываться при выборе соответствующего пункта меню. Можно ли как-нибудь осуществить подобное?

Решение задачи: «Переход между модулями graphabc и crt»

textual
Листинг программы
Program punkt5;
uses graphabc;
var x0,y0,x,y,xLeft,yLeft,xRight,yRight,n,razb,vst:integer;
a,b,fmin,fmax,x1,y1,mx,my,dx,dy,num,x11,x22,bls,zx,nl:real;
i:byte;
s:string;
const W=800; H=800;
  function F(x4:real):real;
  begin
  F:=1*x4*x4*x4-12*x4*x4+273*x4+3951;
  end;
begin
SetWindowSize(W,H);
xLeft:=50;
yLeft:=50;
xRight:=W-50;
yRight:=H-50;
 
 
SetFontSize(18);
writeln('max X');
readln(b);
ClearWindow;
writeln('Кол-во разбиений');
readln(razb);
ClearWindow;
writeln('x1 и x2');
readln(x11);
readln(x22);
ClearWindow;
 
 
a:=-b;
  if b<=10000 then fmax:=1250000000000;
  if b<=1000 then fmax:=1500000000; 
  if b<=100 then fmax:=1200000;
  if b<=20 then fmax:=16000;
 
fmin:=-fmax;
dx:=b/10;
dy:=fmax/10;
mx:=(xRight-xLeft)/(b-a);
my:=(yRight-yLeft)/(fmax-fmin);
 
x0:=trunc(abs(a)*mx)+xLeft;
y0:=yRight-trunc(abs(fmin)*my);
line(xLeft,y0,xRight+10,y0);
line(x0,yLeft-10,x0,yRight);
SetFontSize(12);
SetFontColor(clRed);
TextOut(xRight+20,y0,'X');
TextOut(x0-10,yLeft-30,'Y');
x1:=a;
  while x1<=b do
  begin
  y1:=F(x1);
  x:=x0+round(x1*mx);
  y:=y0-round(y1*my);
  if (y>=yLeft) and (y<=yRight) then SetPixel(x,y,clPurple);
  x1:=x1+0.01;
  end;
 
  SetBrushColor (clBlue);
  bls:=(x22-x11)/razb;
  zx:=round(x11);
  while zx<=(x22-bls) do begin
  vst:=round(F(zx));
  if (abs(F(zx)))>(abs(F(zx+bls))) then vst:=round(F(zx+bls));
  FillRect(x0+round(zx*mx),y0,x0+round(zx*mx+bls*mx),y0-round(vst*my));
  zx:=zx+bls;
  end;
 
line(x0+round(x11*mx),y0,x0+round(x11*mx),y0-round(F(x11)*my),clPurple);
line(x0+round(x22*mx),y0,x0+round(x22*mx),y0-round(F(x22)*my),clPurple);
 
  nl:=x11;
  while nl<x22 do begin
  line(x0+round(nl*mx),y0,x0+round(nl*mx),y0-round(F(nl)*my),clPurple);
  nl:=nl+(mx/5);
  end;
  
  
SetBrushColor (clWhite);
 
SetFontSize(8);
SetFontColor(clRed);
n:=round((b-a)/dx)+1;
  for i:=1 to n do
  begin
  num:=a+(i-1)*dx;
  x:=xLeft+trunc(mx*(num-a));
  Line(x,y0-3,x,y0+3);
  str(Num:0:1,s);
  if abs(num)>1E-15 then 
  TextOut(x-TextWidth(s) div 2,y0+10,s)
  end;
n:=round((fmax-fmin)/dy)+1;
    for i := 1 to n do
    begin
    num:=fMin+(i-1)*dy;
    y:=yRight-trunc(my*(num-fmin));
    Line(x0-3,y,x0+3,y);
    str(num:0:0,s);
    if abs(num) > 1E-15 then
    TextOut(x0+7,y-TextHeight(s) div 2,s)
    end;
TextOut(x0-10,y0+10,'0');
SetFontColor(clPurple);
TextOut(x0+round(x11*mx)+7,y0-20,x11);
TextOut(x0+round(x22*mx)+7,y0-20,x22);
line(x0,yLeft-10,x0,yRight);
end.

Объяснение кода листинга программы

В этом коде используются функции и переменные, как в математике, так и в программировании. Он создает графическое представление функции и позволяет пользователю взаимодействовать с графиком. Вот список функций и переменных, упомянутых в коде, с номерами:

  1. F(x4:real):real; - Определяет значение функции для заданного значения x4.
  2. a, b, fmin, fmax, x1, y1, mx, my, dx, dy, num, x11, x22, bls, zx, nl: real; - Эти переменные используются для хранения значений, связанных с функцией и графиком.
  3. i: byte; - Используется для итерации в цикле.
  4. s: string; - Используется для хранения строки, которая отображается на графике.
  5. W, H: integer; - Используются для определения размера окна.
  6. xLeft, yLeft, xRight, yRight: integer; - Используются для определения границ области графика на экране.
  7. n: integer; - Используется для хранения количества делений на графике.
  8. razb: integer; - Используется для хранения количества разбиений, указанных пользователем.
  9. x0, y0, x, y, xLeft, yLeft, xRight, yRight: integer; - Используются для определения координат на экране, соответствующих точкам на графике.
  10. vst: integer; - Используется для временного хранения значения функции во время рисования линии. Следующие действия происходят в коде:
  11. Определяются константы и переменные.
  12. Пользователю предлагается ввести значения для a, b, и разбиений.
  13. Пользователю предлагается ввести значения для x1, x2, и y1.
  14. Вычисляются значения fmax и fmin на основе значения b.
  15. Вычисляются значения mx и my на основе значений xLeft, xRight, yLeft, и yRight.
  16. Вычисляются значения x0, y0 на основе значений mx, my, a, и b.
  17. Рисуется горизонтальная линия от x0 до xRight+10 и вертикальная линия от y0 до yRight.
  18. Рисуется точка (xRight, y0) и подписывается X.
  19. Рисуется точка (x0, yLeft) и подписывается Y.
  20. Рисуется линия от (x0, y0) до (x0+round(x1mx), y0-round(y1my)) и подписывается 0.
  21. Рисуется линия от (x0, y0) до (x0+round(x22mx), y0-round(F(x22)my)) и подписывается 0.
  22. Рисуется вертикальная линия от x0 до x0+round(nl*mx) и подписывается 0.
  23. Рисуется горизонтальная линия от y0 до y0-round(F(x11)*my)) и подписывается 0.
  24. Рисуется горизонтальная линия от y0 до y0-round(F(x22)*my)) и подписывается 0.
  25. Рисуется вертикальная линия от x0 до x0+round(dx*(n-1)) и подписывается 0.
  26. Рисуется горизонтальная линия от y0 до y0-round(dy*(n-1)) и подписывается 0.
  27. Рисуется точка (x0, y0) и подписывается 0.
  28. Код завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5
Похожие ответы