program grafik_ortamda_dijital_ve_analog_saat;
uses dos,crt,graph;
const acisabit =pi/180;
akrepibrekatsayi =0.6;
yelkovanibrekatsayi=0.75;
saniyeibrekatsayi =0.85;
akreprenk =red;
yelkovanrenk =blue;
saniyerenk =magenta;
anlgsaatrakamrenk =lightred;
djtlsaatyazirenk =lightblue;
var grfsurucu,grfmodu :integer;
djtlsaatyazx,djtlsaatyazy,
anlgsaatmerkezx,anlgsaatmerkezy,anlgsaatyaricap,
akrepibreboy,akrebsonx,akrebsony,
yelkovanibreboy,yelkovansonx,yelkovansony,
saniyeibreboy,saniyesonx,saniyesony:word;
function sayidancumleye(sayi:longint):string;
var st:string[10];
begin
st:=''; str(sayi,st);
if length(st)<=1 then st:='0'+st;
sayidancumleye:=st;
end;
function sinusdegerix(katsayi:real;aci:word):word;
begin sinusdegerix:=anlgsaatmerkezx+round(katsayi*sin(acisabit*aci));end;
function cosinusdegeriy(katsayi:real;aci:word):word;
begin cosinusdegeriy:=anlgsaatmerkezy-round(katsayi*cos(acisabit*aci));end;
procedure saatilkislemler;
procedure saatrakamlariniyaz;
var eskirenk,aci,k:word;
eskiyazistili:textsettingstype;
begin
eskirenk:=getcolor;
setcolor(anlgsaatrakamrenk);
gettextsettings(eskiyazistili);
settextstyle(gothicfont,horizdir,3);
settextjustify(centertext,centertext);
for k:=1 to 12 do
begin
aci:=30*k;
line (sinusdegerix(anlgsaatyaricap,aci),
cosinusdegeriy(anlgsaatyaricap,aci),
sinusdegerix(0.95*anlgsaatyaricap,aci),
cosinusdegeriy(0.95*anlgsaatyaricap,aci));
outtextxy(sinusdegerix(1.1*anlgsaatyaricap,aci),
cosinusdegeriy(1.1*anlgsaatyaricap,aci),sayidancumleye(k));
end;{for k}
with eskiyazistili do
begin
settextstyle(font,direction,charsize);
settextjustify(horiz,vert);
end;
setcolor(eskirenk);
end;
procedure ibreilkislemler(var ibreboy,sonx,sony:word; ibrekatsayi:real);
begin
ibreboy:=round(anlgsaatyaricap*ibrekatsayi);
sonx:=anlgsaatmerkezx;
sony:=anlgsaatmerkezy;
end;
begin
settextstyle(sansseriffont,horizdir,3);
setusercharsize(2,1,1,1);
setcolor(djtlsaatyazirenk);
setlinestyle(solidln,0,thickwidth);
djtlsaatyazx:=(getmaxx-textwidth('99:99:99')) div 2;
djtlsaatyazy:=getmaxy-round(1.2*textheight('9'));
rectangle(0,0,getmaxx,djtlsaatyazy);
rectangle(0,djtlsaatyazy,getmaxx,getmaxy);
anlgsaatmerkezx:=getmaxx div 2;
anlgsaatmerkezy:=djtlsaatyazy div 2;
anlgsaatyaricap:=round(anlgsaatmerkezy*0.80);
circle(anlgsaatmerkezx,anlgsaatmerkezy,anlgsaatyaricap div 20);
circle(anlgsaatmerkezx,anlgsaatmerkezy,anlgsaatyaricap);
saatrakamlariniyaz;
ibreilkislemler(akrepibreboy,akrebsonx,akrebsony,akrepibrekatsayi);
ibreilkislemler(yelkovanibreboy,yelkovansonx,yelkovansony,yelkovanibrekatsayi);
ibreilkislemler(saniyeibreboy,saniyesonx,saniyesony,saniyeibrekatsayi);
end;
procedure dijitalanalogsaatleriguncelle;
var aktifsaat,aktifdakika,aktifsaniye,
salise,oncekisaniye,oncekidakika :word;
oncesaatdakikasaniye,simdisaatdakikasaniye:string[8];
procedure dijitalsaatiguncelle;
begin
setcolor(djtlsaatyazirenk);
outtextxy(djtlsaatyazx,djtlsaatyazy,oncesaatdakikasaniye);
simdisaatdakikasaniye:=sayidancumleye(aktifsaat)+':'+
sayidancumleye(aktifdakika)+':'+
sayidancumleye(aktifsaniye);
outtextxy(djtlsaatyazx,djtlsaatyazy,simdisaatdakikasaniye);
oncesaatdakikasaniye:=simdisaatdakikasaniye;
end;
procedure analogsaatiguncelle;
procedure ibrehareket(var sonx,sony:word; renk,ibreboy,aci:word);
begin
setcolor(renk);
line(anlgsaatmerkezx,anlgsaatmerkezy,sonx,sony);
sonx:=sinusdegerix(ibreboy,aci);
sony:=cosinusdegeriy(ibreboy,aci) ;
line(anlgsaatmerkezx,anlgsaatmerkezy,sonx,sony)
end;
begin
if aktifdakika<>oncekidakika then
begin
ibrehareket(akrebsonx,akrebsony,akreprenk,akrepibreboy,
aktifsaat*30+round(aktifdakika/2));
ibrehareket(yelkovansonx,yelkovansony,yelkovanrenk,
yelkovanibreboy,aktifdakika*6);
oncekidakika:=aktifdakika;
end;
ibrehareket(saniyesonx,saniyesony,saniyerenk,saniyeibreboy,aktifsaniye*6);
end;
begin
oncekisaniye:=61; oncekidakika:=61; oncesaatdakikasaniye:='';
setwritemode(xorput);
repeat
gettime(aktifsaat,aktifdakika,aktifsaniye,salise);
if aktifsaniye<>oncekisaniye then
begin
dijitalsaatiguncelle;
analogsaatiguncelle;
oncekisaniye:=aktifsaniye
end;
until keypressed and (readkey=#27);
end;
begin
grfsurucu:=detect;
initgraph(grfsurucu,grfmodu,'C:\BP\bgi');
if graphresult<>grok then exit;
saatilkislemler;
dijitalanalogsaatleriguncelle;
closegraph;
end.