Программалау тілдері оқулық Қазақстан Республикасы Білім жəне ғылым министрлігі бекіткен Алматы, 2011



Pdf көрінісі
бет14/24
Дата03.12.2019
өлшемі1,6 Mb.
#52901
түріПрограмма
1   ...   10   11   12   13   14   15   16   17   ...   24
Байланысты:
Программалау учебник


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. 

Достарыңызбен бөлісу:
1   ...   10   11   12   13   14   15   16   17   ...   24




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет