Нарисовать график в Паскале, используя модуль GraphABC - PascalABC.NET
Формулировка задачи:
Нужно создать программу, которая будет рисовать график, данный на рисунке, а также вычислять по введенному значению аргумента значение функции. Параметр R задается константой.
Решение задачи: «Нарисовать график в Паскале, используя модуль GraphABC»
textual
Листинг программы
uses graphABC; var r,x,y,m:real; w,h,xc,yc,k,n:integer; s:string; begin repeat writeln('Введите радиус от 2 до 10 r='); readln(r); until(r>=2)and(r<=10); repeat writeln('Введите ',-2*r:0:2,'<x<',4*r,' x='); readln(x); until(x>=-2*r-1)and(x<=4*r); if x<=-r then y:=r else if x<=r then y:=-sqrt(r*r-x*x)+r else if x<=2*r then y:=-2*x+3*r else y:=x-3*r; h:=300; m:=(h-40)/2/r; w:=round(6*r*m)+50; setwindowsize(w,h); centerwindow; clearwindow; xc:=w div 3; yc:=h div 2; line(0,yc,w,yc); line(xc,0,xc,h); if r<6 then k:=1 else k:=2; n:=trunc(4*r); if frac(r)<>0 then n:=n+1; for var i:=1 to n do if i mod k=0 then begin line(xc+round(i*m),yc-3,xc+round(i*m),yc+3); textout(xc+round(i*m)-5,yc+10,inttostr(i)); end; n:=trunc(2*r); if frac(r)<>0 then n:=n+1; for var i:=1 to n do if i mod k=0 then begin line(xc-round(i*m),yc-3,xc-round(i*m),yc+3); textout(xc-round(i*m)-5,yc+10,inttostr(-i)); end; n:=trunc(r); if frac(r)<>0 then n:=n+1; for var i:=1 to n do if i mod k=0 then begin line(xc-3,yc-round(i*m),xc+3,yc-round(i*m)); textout(xc-20,yc-round(i*m)-5,inttostr(i)); line(xc-3,yc+round(i*m),xc+3,yc+round(i*m)); textout(xc-20,yc+round(i*m)-5,inttostr(-i)); end; setpenwidth(2); line(xc-round(2*r*m),yc-round(r*m),xc-round(r*m),yc-round(r*m)); arc(xc,yc-round(r*m),round(r*m),180,360); line(xc+round(r*m),yc-round(r*m),xc+round(2*r*m),yc+round(r*m)); line(xc+round(2*r*m),yc+round(r*m),xc+round(4*r*m),yc-round(r*m)); str(y:0:2,s); textout(20,h-40,'x='+floattostr(x)+' y='+s); setpenwidth(1); setpencolor(clRed); circle(xc+round(x*m),yc,2); circle(xc+round(x*m),yc-round(y*m),2); line(xc+round(x*m),yc,xc+round(x*m),yc-round(y*m)); end.
Объяснение кода листинга программы
- Заголовок: uses graphABC; Описание: Ввод и вывод данных, а также рисование графиков обычно выполняются с использованием модуля GraphABC в языке программирования Pascal.
- Заголовок: var r,x,y,m:real; Описание: В этой части кода объявлены четыре переменные типа real: r, x, y и m. Переменная r представляет радиус, x и y - координаты, а m - масштаб.
- Заголовок: var w,h,xc,yc,k,n:integer; Описание: Здесь объявлены шесть переменных типа integer: w, h, xc, yc, k и n. Переменные w и h представляют ширину и высоту окна соответственно, xc и yc - координаты центра окна, k - номер рисунка, а n - количество точек для рисования.
- Заголовок: var s:string; Описание: Здесь объявлена одна переменная типа string: s. Эта переменная используется для хранения строки, которая будет отображена на графике.
- Заголовок: begin
Описание: Код в этом блоке выполняет следующие действия:
- Повторяет запрос на ввод радиуса до тех пор, пока пользователь не введет значение в диапазоне от 2 до 10.
- Повторяет запрос на ввод координат x до тех пор, пока значение не будет в допустимом диапазоне.
- Вычисляет значение y на основе введенных значений x и r.
- Вычисляет значения w и h на основе введенного радиуса r.
- Устанавливает размеры окна и его положение в центре экрана.
- Очищает окно.
- Вычисляет координаты xc и yc центра окна.
- Рисует горизонтальную и вертикальную линии через центр окна.
- Если r меньше или равно 6, то рисует горизонтальные линии с интервалом k и отображает соответствующие значения i.
- Если r больше 6, то рисует вертикальные линии с интервалом k и отображает соответствующие значения i.
- Вычисляет значения w и h на основе введенного радиуса r.
- Устанавливает толщину пера на 2.
- Рисует окружность с центром в точке (xc,yc) и радиусом r.
- Рисует линию между точками (xc,yc) и (xc,yc-r).
- Рисует линию между точками (xc,yc) и (xc-r,yc).
- Рисует линию между точками (xc,yc) и (xc+r,yc).
- Отображает строку с координатами (x,y) в правом нижнем углу окна.
- Устанавливает цвет пера на красный.
- Рисует окружность с центром в точке (xc,yc) и радиусом r.
- Рисует линию между точками (xc,yc) и (xc,yc-r).
- Рисует линию между точками (xc,yc) и (xc-r,yc).
- Рисует линию между точками (xc,yc) и (xc+r,yc).
- Заголовок: end. Описание: Код в этом блоке завершает выполнение программы.