Переход между модулями 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.
Объяснение кода листинга программы
В этом коде используются функции и переменные, как в математике, так и в программировании. Он создает графическое представление функции и позволяет пользователю взаимодействовать с графиком. Вот список функций и переменных, упомянутых в коде, с номерами:
- F(x4:real):real; - Определяет значение функции для заданного значения x4.
- a, b, fmin, fmax, x1, y1, mx, my, dx, dy, num, x11, x22, bls, zx, nl: real; - Эти переменные используются для хранения значений, связанных с функцией и графиком.
- i: byte; - Используется для итерации в цикле.
- s: string; - Используется для хранения строки, которая отображается на графике.
- W, H: integer; - Используются для определения размера окна.
- xLeft, yLeft, xRight, yRight: integer; - Используются для определения границ области графика на экране.
- n: integer; - Используется для хранения количества делений на графике.
- razb: integer; - Используется для хранения количества разбиений, указанных пользователем.
- x0, y0, x, y, xLeft, yLeft, xRight, yRight: integer; - Используются для определения координат на экране, соответствующих точкам на графике.
- vst: integer; - Используется для временного хранения значения функции во время рисования линии. Следующие действия происходят в коде:
- Определяются константы и переменные.
- Пользователю предлагается ввести значения для a, b, и разбиений.
- Пользователю предлагается ввести значения для x1, x2, и y1.
- Вычисляются значения fmax и fmin на основе значения b.
- Вычисляются значения mx и my на основе значений xLeft, xRight, yLeft, и yRight.
- Вычисляются значения x0, y0 на основе значений mx, my, a, и b.
- Рисуется горизонтальная линия от x0 до xRight+10 и вертикальная линия от y0 до yRight.
- Рисуется точка (xRight, y0) и подписывается
X
. - Рисуется точка (x0, yLeft) и подписывается
Y
. - Рисуется линия от (x0, y0) до (x0+round(x1mx), y0-round(y1my)) и подписывается
0
. - Рисуется линия от (x0, y0) до (x0+round(x22mx), y0-round(F(x22)my)) и подписывается
0
. - Рисуется вертикальная линия от x0 до x0+round(nl*mx) и подписывается
0
. - Рисуется горизонтальная линия от y0 до y0-round(F(x11)*my)) и подписывается
0
. - Рисуется горизонтальная линия от y0 до y0-round(F(x22)*my)) и подписывается
0
. - Рисуется вертикальная линия от x0 до x0+round(dx*(n-1)) и подписывается
0
. - Рисуется горизонтальная линия от y0 до y0-round(dy*(n-1)) и подписывается
0
. - Рисуется точка (x0, y0) и подписывается
0
. - Код завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д