181
x1:= GetMaxX div 4;
y1:= GetMaxY div 4;
x2:= 3*x1;
y2:= 3*y1;
Rectangle(x1,y1,x2,y2);
SetViewPort(x1+1,y1+1,x2-1,y2-
1,ClipOn);
{“Жұлдыз” салып, олардың координаталарын есте
сақтаймыз}
for k:=1 to N do with a[k] do begin
x:=Random(x2-x1);
у:=Random(y2-y1)
end;
{Шығару циклы}
repeat
for k:=1 to N do
with a[k] do {“Жұлдызды”
жағамыз}
PutPixel(x,y,white);
if not KeyPressed then
for k:=N downto 1 do with a[k] do
{“Жұлдызды” өшіреміз}
PutPixel(x,y,black)
until KeyPressed;
while KeyPressed do k :=
ord(ReadKey);
CloseGraph
end;
end.
GetPixel функциясы координатасы берілген пикселдің түсі
көрсетілген Word типті мəнді қайтарады. Функция тақырыбы :
Function GetPixel(X,Y: Integer): Word;
мұндағы X, Y – пиксел координатасы
Line процедурасы бастапқы жəне соңғы коодинаталары
берілген түзу сызады. Процедура тақырыбы:
Procedure Line (X1,Y1,X2,Y2: Integer);
182
Мұндағы XI ... Yl – түзудің басының ( XI, Y1) жəне соңының
(Х2, Y2) координаталары.
Түзу ағымдағы стиль жəне түспен салынады. Келесі про-
граммада экран ортасында терезе салынып, терезе кездейсоқ
түзулермен толтырылады. Программадан шығу үшін кез келген
пернені басу керек.
Uses CRT, Graph;
var
d,r,e: Integer;
x1,y1,x2,y2: Integer;
begin
Графиканы іске қосамыз}
d:=Detect;InitGraph(d, r, '');
e:=GraphResult;
if e <> grOk then
WriteLn(GraphErrorMsg(e))
else
begin
{Экран ортасында терезе саламыз}
x1:=GetMaxX div 4;
y1:=GetMaxY div 4;
x2:=3*x1;
y2:=3*y1;
Rectangle(x1,y1,x2,y2);
SetViewPort(x1+1,y1+1,x2-1,y2-
1,ClipOn);
{Кездейсоқ түзулер циклы}
repeat
SetColor(succ(Random(16)));{Кездейсоқ
түс}
Line(Random(x2-x1), Random(y2-y1),
Random(x2-x1), Random(y2-y1))
until KeyPressed;
if ReadKey=#0 then d:= ord(ReadKey);
CloseGraph
end
end.
183
LineTo процедурасы курсордың ағымдағы позициясынан
бастап, берілген жаңа координатасына дейін түзу сызады. Про-
цедура тақырыбы:
Procedure LineTo(X,Y: Integer);
мұндағы X, Y – курсордың жаңа координаталары, ол түзудің
соңғы коор динатасы болып табылады.
LineRel процедурасы курсордың ағымдағы позициясынан,
оның координаталарының берілген өсімшесі сəйкес түзу сызады.
Процедура тақырыбы:
Procedure LineKel (DX, DY;integer);
мұндағы DX, DY – курсордың жаңа координатасының өсім-
шелері. LineTo жəне LineRel процедураларында түзу ағым дағы
стиль жəне түспен салынады.
SetLineStyle процедурасы салынатын түзудің жаңа стилін
анықтайды. Процедура тақырыбы:
Procedure SetLineStyle(type,Pattern,Thick: Word)
мұндағы type, Pattern, Thick – сəйкесінше, түзудің типі, үлгісі
жəне қалыңдығы.
Түзу типін төмендегі тұрақтылардың көмегімен беруге
болады:
const
SolidLn= 0;{Біркелкі түзу}
dottedLn= 1;{Нүктелі түзу}
CenterLn= 2;{Штрих-пунктирлі түзу}
DashedLn= 3;{Пунктирлі түзу}
UserBitLn= 4;{Түзу түрін тұтынушы анықтайды}
Pattern параметрі түрін тұтынушы анықтайтын түзулер үшін
ғана қолданылады (тек Туре = UserBitLn болған жағдайда). Pattern
параметрінің екі байты түзу үлгісін анықтайды: сөздің əр бірге
тең биті, түзудің жанып көрсетілетін пикселіне сəйкес келеді,
нөлге тең бит – жанбайтын пикселге сəйкес болады. Сонымен,
Pattern параметрі ұзындығы 16 пикселге тең кесінді салады. Осы
үлгі түзудің ұзындығы бойымен қайталанып отырады.
Thick параметрі келесі екі мəннің бірін қабылдайды:
const
NormWidth = 1;{Қалыңдығы бір пиксел}
ThickWidth = 3;{ Қалыңдығы үш пиксел}
184
мұндағы процедура орнатқан түзу стилі (ағымдағы стиль) тік-
бұрыш, көпбұрыш жəне басқада фигураларды салғанда қолда-
нылады.
Келесі мысалда барлық стандартты стилдермен түзулер
салынады, сонан кейін экранда үлгі аты шығады да, экран осы
үлгідегі түзумен толтырылады (7.5-сурет). Программадан шығу
үшін нөлді енгізіңіз.
7.5-сурет. Түзу сызықтар түрлері
Uses CRT, Graph;
const
style:array [0..4]of String[9]=(‘SolidLn’,
‘dottedLn’,’CenterLn’,’DashedLn’,’UserBitLn’);
var
d,r,e,i,j,dx,dy: Integer;
p: Word;
begin
{Графиканы іске қосамыз}
d:=Detect;InitGraph(d, r, ‘’);
e:=GraphResult;
if e <> grOk then
WriteLn (GraphErrorMsg(e))
else
begin
{Түзу ығысуын есептейміз}
dx:=GetMaxX div 6;
dy:=GetMaxY div 10;
{стандартты түзулерді шығарамыз}
185
for j:=0 to 1 do {Екі қалыңдық үшін}
begin
for i:=0 to 3 do {Түзутің төрт типі}
begin
SetLineStyle(i, 0, j*2+1);
Line(0,(i+j*4+l)*dy,dx,(i+j*4+l)*dy);
OutTextXY(dx+10,(i+j*4+l)*dy,style [i])
end
end;
{Үлгіні енгізіп, түзу саламыз}
j:=0;
dy:=(GetMaxY+1) div 25;
repeat
OutTextXY(320,j*dy,’Pattern:’);
GotoXY(50,j+1);
ReadLn(p);
if p<> 0 then
begin
SetLineStyle(UserBitLn,p,NormWidth);
Line(440,j*dy+4, 600, j*dy+4);
inc(j)
end
until p=0;
CloseGraph;
end
end.
GetLineSettings процедурасы. Түзудің ағымдағы стилін қай-
тарады. Процедура тақырыбы:
Procedure GetLineSettings(var Stylelnfo: LineSettingstype)
Мұндағы Stylelnfo – ағымдағы стилді қайтаратын, LineSet-
tingstype типті айнымалы.
LineSettingstype типі Graph модулінде төмендегідей анық-
талған:
type
LineSettingstype = record
LineStyle: Word;{Түзу типі}
Pattern : Word;{Үлгі}
186
Thickness: Word {Қалыңдығы}
end;
SetWriteMode процедурасы. Жағадан салынатын түзу мен
экранда бұрын салынған түзулер арасындағы қатынас тəсілін
орнатады. Процедура тақырыбы:
Procedure SetWriteMode(Mode);
Мұндағы Mode – салынатын бейнелі түзулер арасындағы
қатынас тəсілін анықтайтын, Integer типті өрнек.
Егер Mode параметрінің мəні 0 болса, онда салынатын түзу
экранда бар түзудің үстіне салынады (орталық процессордың
MOV нұсқауы). Егер мəн 1 болса, онда жаңа түзу салу XOR
логикалық операциясының көмегімен орындалады (ерекше
ИЛИ): жаңа түзу мен экрандағы түзудің қилысу нүктелерінде
пикселдің жануы инверсияланады, сондықтан бірінен соң бірі са-
лынатын екі түзу экрандағы түзудің түсін өзгертпейді.
SetWriteMode процедурасы орнатқан режим, Drawpoly, Line,
LineRel, LineTo жəне Rectangle процедураларына да таралады.
Mode параметрін беру үшін модульде анықталған төмендегі
тұрақтыларды қолдануға болады:
const
CopyPut = 0;{ MOV операциясымен салу}
XORPut = 1;{ XOR операциясымен салу }
Келесі мысалда, экранда сағат циферблаты салынады (7.6-су-
рет). Көрнекі болу үшін сағат жүрісі 600 есе жылдамдатыл-
ған (Delay (100) операторын қараңыз). Қалауыңызша програм-
маны жүйелік сағатқа қосып жəне секунд стрелкасын салып,
7.6-сурет. Сағат циферблаты
187
күрделетуіңізге болады. Программадан шығу үшін кез келген
пернені басыңыз.
Uses Graph, CRT;
var
d,r,r1,r2,rr,k,
x1,y1,x2,y2,x01,y01: Integer;
Xasp,Yasp : Word;
begin
{Графиканы іске қосамыз}
d:=detect;InitGraph(d, r,'');
k:=GraphResult;
if k <> grOK then
WriteLn(GraphErrorMSG(k))
else
begin
{Экран көлемі мен жақтаулар қатынасын
анықтаймыз}
x1:=GetMaxX div 2;
y1:=GetMaxY div 2;
GetAspectRatio(Xasp, Yasp);
{Радиусты есептейміз:}
r:=round(3*GetMaxY*Yasp/8/Xasp);
r1:=round(0.9*r);{Сағат бөліктері}
r2:=round(0.95*r);{Минут бөліктері}
{Циферблатты бейнелейміз}
Circle(x1,y1,r);{Бірінші сыртқы дөңгелек}
Circle(x1,y1,round(1.02*r) );{Екінші
дөңгелек}
for k := 0 to 59 do {Циферблат бөліктері}
begin
if k mod 5=0 then
rr := r1 {Сағат бөліктері}
else
rr : = r2;{Минут бөліктері}
{Бөліктер соңының координатасын анықтаймыз}
x0l:=x1+Round(rr*sin(2*pi*k/60));
188
y0l:=y1-Round(rr*Xasp*cos(2*pi*k/60)/
Yasp);
x2:=x1+Round(r*sin(2*pi*k/60));
y2:=y1-Round(r*Xasp*cos(2*pi*k/60)/Yasp);
Line(x01,y01,x2,y2) {Бөліктерді шығарамыз}
end;
{Стрелкаларды шығаруға дайындаймыз}
SetWriteMode(XORPut);
SetLineStyle(SolidLn,0,ThickWidth);
{Бір сағаттағы минут санауышы}
{k = минуты}
r:=0;
{Стрелкаларды шығару циклы}
repeat
for k:=0 to 59 do
if not KeyPressed then begin
{Сағат стрелкаларының координаталары}
x2:=x1+Round(0.85*r1*sin(2*pi*r/60/12));
y2:=y1-Round(0.85*r1*Xasp*cos(2*pi*r/60/12)/
Yasp);
{Минут стрелкаларының координаталары }
x01:=x1+Round(r2*sin(2*pi*k/60));
y01:=y1-Round(r2*Xasp*cos(2*pi*k/60)/
Yasp);
{Стрелкаларды бейнелейміз}
Line(x1,y1,x2,y2);
Line(x1,y1,x01,y01);
Delay(100);{Нақты жылдамдықты көрсету
үшін кешігу 60000 болуы керек}
{Стрелкаларды өшіру үшін оларды тағы да
шығарамыз!}
Line(x1,y1,x01,y01);
Line(x1,y1,х2,у2);
{Сағаттағы минут санауышын түзетіп, өсіреміз}
inc(r);
if r=12*60 then r:=0
end
189
until KeyPressed;
if ReadKey=#0 then k:=ord(ReadKey);
CloseGraph
end
end.
Көпбұрыштар
Rectangle процедурасы. Бұрыштарының координатасы бой-
ынша тікбұрыш салпды. Процедура тақырыбы:
Procedure Rectangle(X1,Y1,X2,Y2: Integer);
мұндағы X1... Y2 – тікбұрыштың сол жақ жоғарғы бұрышының
(X1, Y1) жəне оң жақ төменгі бұрышының координатасы (Х2,
Y2). Тікбұрыш ағымдағы түс жəне түзу стилімен салынады.
Келесі мысалда экранда бірінің ішіне бірі кірістірілген 10
тікбұрыш салынады.
Uses Graph, CRT;
var
d,r,e,xl,yl, x2,y2,dx,dy: Integer;
begin
{Графиканы іске қосамыз}
d:=Detect; InitGraph(d, r, ‘ ‘);
e:=GraphResult;
if e <> grOK then
WriteLn(GraphErrorMsg(e))
else
begin
{Жақтаулардың өсімшесін анықтаймыз}
dx:=GetMaxX div 20;
dy:=GetMaxY div 20;
{Кіріктірілген тікбұрыштар саламыз}
for d:=0 to 9 do
Rectangle(d*dx,d*dy,GetMaxX-d*dx,GetMaxY-
d*dy);
if ReadKey=#0 then d:=ord(ReadKey);
CloseGraph
end
end.
190
DrawPoIy процедурасы сыну нүктесінің координаталары
бойынша, еркін сынық сызық салады.
Procedure DrawPoly(N: Word; var Points)
мұндағы N – екі шеткі нүктемен бірге алғандағы сыну нүктелері-
нің саны; Points – сыну нүктелерінің координатасы көрсетілген,
Pointtype типті айнымалы.
Сыну нүктелерінің координатасы Word типті екі мəн арқы-
лы беріледі: біріншісі көлденең, екіншісі тік координатасы. Олар
үшін модульде анықталған келесі типті қолдануға болады:
type
Pointtype=record
х, у: Word
end;
Сызу кезінде ағымдағы түс пен түзу стилі қолданылады. Осы
процедураның көмегімен экранға синустың графигін саламыз:
Uses Graph;
const
N=100;{График нүктелерінің саны}
var
d, r, e: Integer;
m: array [O..N+1] of Pointtype;k : Word;
begin
{Графиканы іске қосамыз}
d:=Detect;InitGraph(d, r, ‘’);
e:=GraphResult;
if e <> grOk then
WriteLn(GraphErrorMsg(e))
else
begin
{График координаталарын есептейміз}
for k:=0 to N do with m[k] do
begin
x:=trunc(k*GetMaxX/N);
у:=trunc(GetMaxY*(-sin(2*Pi*k/N)+1)/2);
end;
{Графикті түзу сызықпен аяқтаймыз}
191
m[succ(N)].x:=m[0].x;
m[succ(n)].y:=m[0].у;
DrawPoly(N + 2, m);
ReadLn;
CloseGraph
end
end.
Бұл мысалда, көлденең сызық сызу үшін сынық сызықтың
бастапқы жəне соңғы нүктелерін біріктіреміз. Сыну нүктелері-
нің саны N Word типті өрнек болғанымен, процедура ішінде
бұл параметрге қолданылатын буфер жадысының көлеміне бай-
ланысты шектеулер қойылады. Сіз бұны алдыңғы мысалдағы N
өзгерту арқылы байқауыңызға болады: егер N=678 болса, онда
график экранға шықпайды, ал GraphResult функциясына – 6 мəні
қайтарылады (аудандарды көру үшін жады көлемі жетпейді).
Сонымен, бұл программа үшін сыну нүктелерінің саны 679 аспауы
кеек. Алайда, төмендегі программа үшін сыну нүктелерінің саны
510. Бұл программада сынық сызық бірінің үстіне бірі бірнеше
рет сызылатын диагональ түзулер түрінде берілген.
Uses Graph;
const
N=510;{Экрандағы диагональ түзулер көрініп
тұратын шекті мəн }
var
d,k: Integer;
Coo: array [1..N] of Pointtype;
begin
d:=Detect;InitGraph(d,k,’ ‘) ;
for k:=1 to N do with Coo[k] do
if odd(k) then
begin
X:=0;
Y:=0
end
else
begin
192
X:=GetMaxX;
Y:=GetMaxY
end;
DrawPoly(N,Coo);
ReadLn;
CloseGraph
end.
Доғалар, дөңгелектер, эллипстер
Circle процедурасы дөңгелек сызады. Тақырыбы:
Procedure Circle(X,Y: Integer;R: Word);
мұндағы X, Y – центрдің координатасы; R – пикселмен берілген
радиус.
Дөңгелек ағымдағы түспен сызылады. Сызықтың қалың ды-
ғы ағымдағы стилмен анықталады, ал түрі əрқашан SolidLn (бір-
келкі) болып келеді. Процедура, радиустың графикалық экран
жақтауларына бағытталуына байланысты сызықтық көлемінің
өзгеруін, демек, GetAspectRatio коэффициентін есепке ала оты-
рып, дұрыс дөңгелек сызады. Сондықтан R параметрі көл денең
бағыттағы пикселдер санын анықтайды.
Келесі мысалда экран ортасында терезе салынып, ол біртіндеп
кездейсоқ дөңгелектермен толтырылады. Программадан шығу
үшін кез келген пернеге басыңыз.
Uses Graph, CRT;
var
d,r,e,x,y: Integer;
begin.
{Графиканы іске қосамыз}
d:=Detect;InitGraph(d,r,’’);
e:=GraphResult;
if e <> grOK then
WriteLn(GraphErrorMsg(e))
else
begin
{Экран ортасында терезе саламыз}
х:=GetMaxX div 4;
193
у:=GetMaxY div 4;
Rectangle(х,у,3*х,3*у);
SetViewPort(x+1,y+1,3*x-1,3*y-
1,ClipOn);
{кездейсоқ дөңгелектер сызу циклы}
repeat
SetColor(succ(Random(white)));{Кездейсоқ
түс}
SetLineStyle(0,0,2*Random(2)+1);{жəне сызық
стилі}
х:=Random(GetMaxX);{Кездейсоқ орналасу}
у:=Random(GetMaxY);{Дөңгелек центрі}
Circle(х,у,Random(GetMaxY div 4));
until KeyPressed;
if ReadKey=#0 then x:=ord(ReadKey);
CloseGraph
end
end.
Arc процедурасы доға сызады. Тақырыбы:
Procedure Arc (x,y: integer; ВеgА, endA,R: word);
мұндағы X, Y – центр координатасы; ВеgА, endA – сəйкесінше,
доғаның бастапқы жəне соңғы бұрыштары; R – радиус.
7.7-сурет. Arc процедурасын пайдалану
Бұрыштар сағат жүрісіне қарсы саналып, градуспен көрсе-
тіледі. Нөл бұрыш вектордың көлденең, солдан оңға қарайғы
бағытына сəйкес келеді. Егер бастапқы бұрышты 0 жəне соңғы
бұрышты – 359 градус деп берсе, онда толық дөңгелек сызылады.
13–1618
194
Дөңгелек доғасын сызғанда, сызықтар мен радиус үшін Circle
про цедурасындағы қатынастар қолданылады.
Бріншісінің бұрыштары 0 жəне 90, екіншісінің – 270 жəне 540
градус доғалардың көрнісі (7.7-сурет):
Келесі программа осы бейнені экранға шығарады:
Uses Graph, CRT;
var
d,r,е: Integer;
Xasp,Yasp: Word;
begin
{Графиканы іске қосамыз}
d:=Detect;
InitGraphtd, r, '');
e:=GraphResult;
if e <> grOK then
WriteLn(GraphErrorMsg(e))
else
begin
GetAspectRatio(Xasp,Yasp);
{R = 1/5 экранның тік көлемінен}
r:=round(Yasp*GetMaxY/5/XAsp);
d:=GetMaxX div 2;{Екінші графиктің
ығысуы}
e:= GetMaxY div 2;{Көлденең осьтің
орны}
{Сол жақ графикті саламыз}
Line(0,e,5*r div 2,e);{ Көлденең ось}
Line(5*r div 4,e div 2,5*r div 4,3*e div 2) ;
Arc (5*r div 4,e,0,90,R);{Доға}
OutTextXY(0,e+e div 8,'0 - 90');{Жазу}
{Оң жақ график}
Line(d,e,d+5*r div 2,e);
Line(d+5*r div 4,e div 2,d+5*rdiv4,3*e div 2);
Arc (d+5*r div 4,e,270,540,R);
OutTextXY(d,e+e div 8,'270 - 540');
{Кез келген перненің басылуын күтеміз}
195
if ReadKey=#0 then d:=ord(ReadKey);
CloseGraph
end
end.
GetArcCoords процедурасы доғаның бастапқы, соңғы жəне
центрінің координаталарын қайтарады. Тақырыбы:
Procedure GetArcCoords( var Coords: ArcCoordstype);
мұндағы Coords – процедура доғаның бастапқы, соңғы жəне
центрінің координаталарын қайтаратын, ArcCoordstype типті
айнымалы.
ArcCoordstype типі Graph модулінде төмендегідей анықталған:
type
ArcCoordstype=record
X,Y: Integer;{Центр координатасы}
Xstart,Ystart: Integer;{Доғаның басы}
Xend,Yend: Integer;{Доғаның соңы}
end;
Arc жəне GetArcCoords процедураларын бірге қолдану, екі
түзудің доға арқылы түйіндесуін сызуға мүмкіндік береді. Келесі
бұрыштары дөңгеленген тікбұрыш сызатын мысалда, радиус
ұзындығының түзетілуіне назар аударыңыз.
Uses Graph,CRT;
const
RadX=50;{Көлденең радиус}
lx=400;{Ені}
ly=100;{Биіктігі}
var
d,r,e: Integer;
coo: ArcCoordstype;
x1,y1: Integer;
xa,ya: Word;
RadY: Integer;{Тік радиус}
begin
{Графиканы іске қосамыз}
d:=Detect;InitGraph(d,r,’’) ;
196
e:=GraphResult;
if e <> grOK then
WriteLn(GraphErrorMsg(e))
else
begin
GetAspectRatio(xa,ya);{Жақтаулар қатынасын
аламыз}
{Тік радиус пен экран жақтауларына қатысты
фигураның орналасуын есептейміз}
RadY:=round (RadX *(xa /ya));
x1:=(GetMaxX-lx) div 2;
y1:=(GetMaxY-2*RadY-ly) div 2;
{Фигураны сызамыз}
Line(x1,y1,x1+lx,y1);{Жоғарғы көлденең түзу}
Arc (x1+lx,y1+RadY,0,90,RadX);{Дөңгелектеу}
GetArcCoords(coo);
with coo do
begin
Line(Xstart,Ystart,Xstart,Ystart+ly);
{Оң жақ тік түзу}
Arc(Xstart-
RadX,Ystart+ly,270,0,RadX);
GetArcCoords (coo);
Line(Xstart,Ystart,Xstart-lx,Ystart);
{Төменгі көлденең түзу}
Arc(Xstart-lx,Ystart-
RadY,180,270,RadX);
GetArcCoords(coo);
Line(Xstart,Ystart,Xstart,Ystart-ly);
Arc(Xstart+RadX,Ystart-ly,90,180,RadX)
end;
if ReadKey=#0 then d:=ord(ReadKey);
CloseGraph
end
end.
Ellipse процедурасы эллипстік доға сызады. Тақырыбы:
Procedure Ellipse(X,Y: Integer;BegA,endA,RX,RY: Word);
197
мұндағы X, Y – центр координатасы; ВеgА, endA – сəйкесінше,
доғаның бастапқы жəне соңғы бұрыштары; RX, RY – эллипстің
пикселмен берілген көлденең жəне тік радиусы.
Эллипстік доғаны сызғанда, Circle процедурасындағы тү-
зуге қатыс
ты келісімдер мен Arc процедурасындағы бұрышқа
қатысты келісімдер қолданылады. Егер радиустарды CetAspec-
tRatio масштаб тық коэффициентті ескере отырып алсақ, дұрыс
дөңгелек сызылады.
Келесі программада радиус қатынастары əр түрлі үш эллипс-
тік доға сызылады (7.8-сурет). Экран мүмкіндігі неғұрлым жо-
ғары болса, соғұрлым жақтаулар арасындағы қатынас бірге жақын
жəне бірінші графиктің үшінші графиктен айырмашылығы аз
болады.
Uses Graph, CRT;
7.8-сурет. Эллипстік доғалар
var
d,r,e: Integer;
xa,ya: Word;
begin
{Графиканы іске қосамыз}
198
d:=Detect;InitGraph(d,r,'');
e:=GraphResult;
if e <> grOK then
WriteLn(GraphErrorMsg(e))
else
begin
{Бірінші график}
OutTextXY(5 0,4 0,'RX = RY');{Жазу}
Line (0,100,160,100);{Ось X}
Line (80,55,80,145);{Ось Y}
Ellipse (80,100,180,90,40,40);
{Екінші график}
OutTextXY(260,40,'RX = 5*RY');
Line (190,100,410,100);
Line (300,55,300,145);
Ellipse (300,100,0,359,100,20);
{Үшінші график}
OutTextXY(465,40,'Aspect Ratio');
Line (440,100,600,100);
Line (520,55,520,145);
GetAspectRatio(xa, ya);
Ellipse (520,100,0,270,40,round(40*(xa/
ya)));
if ReadKey=#0 then
d:=ord(ReadKey);
CloseGraph
end
end.
Достарыңызбен бөлісу: |