uses graph,crt; var d,r,r1,r2,rr,k,x1,y1,x2,y2,x01,y01:integer; xasp,yasp:word; begin {initziiruem grafiku} d:=detect; InitGraph (d,r, ' '); k:=GraphResult; if k<>grOK then writeln (GraphErrorMSG (k)) else begin {Opredelyayem otnoshenie storon i razmery ekrana} x1:=getmaxX div 2; y1:=getmaxY div 2; GetAspectRatio(Xasp,Yasp); {vychislyaem radiusy:} r:=round(3*GetMaxY*Yasp/8/Xasp); r1:=round(0.9*r); {chasovye deleniya} r2:=round(0.95*r); {minutnye deleniya} {izobrazhayem tziferblat:} Circle(x1,y1,r); {pervaya vneshnyaya okruzhnost} Circle(x1,y1,round(1.02*r)); {vtoraya okruzhnost} for k:=0 to 59 do {deleniya tziferblata} begin if k mod 5=0 then rr:=r1 {chasovye deleniya} else rr:=r2; {minutnye deleniya} x01:=x1+Round(rr*sin(2*pi*k/60)); y01:=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) {vyvodim deleniye} end; {gotovim vyvod strelok:} SetWriteMode(XORPut); SetLineStyle(SolidLn,0,ThickWidth); r:=0; {schetchik minut v odnom chase} {tzikl vyvoda strelok:} repeat for k:=0 to 59 do {k=minuty} if not KeyPressed then begin {koordinaty chasovoy strelki:} 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); {koordinaty minutnoy strelki:} x01:=x1+Round(r2*sin(2*pi*k/60)); y01:=y1-Round(r2*Xasp*cos(2*pi*k/60)/Yasp); {izobrazhayem strelki:} Line(x1,y1,x2,y2); Line(x1,y1,x01,y01); Delay (60000); {realnyy rezhim vremeni} Delay (60000); Delay (60000); {dlya udaleniya strelok:} Line(x1,y1,x01,y01); Line(x1,y1,x2,y2); {naraschivayem i korrektiruem schyotchik minut v chase:} inc(r); if r=12*60 then r:=0 end until KeyPressed; if ReadKey=#0 then k:=ord(ReadKey); CloseGraph end end.