
Новичок
Профиль
Группа: Участник
Сообщений: 18
Регистрация: 29.5.2006
Где: Сергиев Посад
Репутация: нет Всего: нет
|
Задача такая: Часовщик сделал часы, но перепутал минутную и часовую стрелки, надо найти сколько раз за сутки они показывают правильное время... Моя программа рисует двое часов: первые - правильные, вторые - с перепутанными стрелками. При этом каждый ход происходит сравнивание: Если (Минутная первых часов = Минутная вторых) и (Часовая первых = Часовая вторых) тогда Переменная_показывающая_кол-во_совпадений := ППКС(она же) + 1; По идее в таком случае неправильные часы показывают то же что и правильные! Но ничего не происходит!! При этом переменные содержащие углы стрелок точно показывают одно и тоже время(Какое то число умноженное на Pi) В чем может быть проблема????? Вот исходники: Код | unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Math;
type TForm1 = class(TForm) Timer1: TTimer; Button1: TButton; Edit1: TEdit; Button2: TButton; Button3: TButton; procedure Button3Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Clock(clhour,clmin:TColor;ha,ma:real); procedure Clock2(clhour,clmin:TColor;ha,ma:real); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormPaint(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1; cx,cy:integer;//центр окружности циферблата часов r:integer;//радиус для рисок циферблата hl,ml:integer;//длина часовой и минутной стрелок h1,h2,m1,m2,ms:word;//переменные хранящие текущее значение системного времени ha1,ma1,ha2,ma2:real;//значения углов наклона стрелок в радианах Sum:integer;//Значение совпадений времени msch:integer;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject); begin close;//закрытие приложения end;
procedure TForm1.FormCreate(Sender: TObject); begin cx:=form1.ClientWidth div 5; cy:=cx; r:=cx-24; hl:=r-35; ml:=r-25; // m:=0; // h:=5; Timer1.Interval:=1; Timer1.Enabled:=false; //вызов процедуры прорисовки стрелок end;
procedure TForm1.FormPaint(Sender: TObject); var i:integer; begin
begin //рисование циферблата with form1.Canvas do begin //установка атрибутов пера pen.Color:=clBlue; pen.Width:=3; //цвет заливки Brush.Color:=clWhite; //рисуем квадратный циферблат Rectangle(18,20,30+2*r,28+2*r); //вывод рисок Pen.Width:=1; Pen.Color:=clSilver; for i:= 0 to 59 do begin MoveTo(cx+Round((r-2)*sin(i/30*Pi)),cy-Round((r-2)*cos(i/30*Pi))); LineTo(cx+Round((r-1)*sin(i/30*Pi)),cy-Round((r-1)*cos(i/30*Pi)));
end; Pen.Width:=2; Pen.Color:=clBlue; for i:=0 to 11 do begin MoveTo(cx+Round((r-9)*sin(i/6*Pi)), cy-Round((r-9)*cos(i/6*Pi))); LineTo(cx+Round((r-1)*sin(i/6*Pi)), cy-Round((r-1)*cos(i/6*Pi))); end; //надпись цифр font.Height:=10; font.Color:=clBlue; Brush.Color:=form1.Color; TextOut(cx+r-24,cy-TextHeight('3'),'3'); TextOut(cx-r+17,cy-TextHeight('9'),'9'); TextOut(cx-TextWidth('12')div 2,cy-r+TextHeight('12')+2,'12'); TextOut(cx-TextWidth('6')div 2,cy+r-27,'6'); end;
end;
begin //рисование циферблата with form1.Canvas do begin //установка атрибутов пера pen.Color:=clBlue; pen.Width:=3; //цвет заливки Brush.Color:=clWhite; //рисуем квадратный циферблат Rectangle(418,20,430+2*r,28+2*r); //вывод рисок Pen.Width:=1; Pen.Color:=clSilver; for i:= 0 to 59 do begin MoveTo(cx+400+Round((r-2)*sin(i/30*Pi)),cy-Round((r-2)*cos(i/30*Pi))); LineTo(cx+400+Round((r-1)*sin(i/30*Pi)),cy-Round((r-1)*cos(i/30*Pi)));
end; Pen.Width:=2; Pen.Color:=clBlue; for i:=0 to 11 do begin MoveTo(cx+400+Round((r-9)*sin(i/6*Pi)), cy-Round((r-9)*cos(i/6*Pi))); LineTo(cx+400+Round((r-1)*sin(i/6*Pi)), cy-Round((r-1)*cos(i/6*Pi))); end; //надпись цифр font.Height:=10; font.Color:=clBlue; Brush.Color:=form1.Color; TextOut(cx+400+r-24,cy-TextHeight('3'),'3'); TextOut(cx+400-r+17,cy-TextHeight('9'),'9'); TextOut(cx+400-TextWidth('12')div 2,cy-r+TextHeight('12')+2,'12'); TextOut(cx+400-TextWidth('6')div 2,cy+r-27,'6'); end;
end;
end;
procedure TForm1.Clock(clhour,clmin:TColor;ha,ma:real); begin with Form1.Canvas do begin Pen.Color:=clhour;//часовая стрелка MoveTo(cx,cy); Pen.Width:=3; LineTo(cx+Round(hl*sin(ha)),cy-Round(hl*cos(ha))); MoveTo(cx,cy); Pen.Width:=2;//минутная стрелка LineTo(cx+Round(ml*sin(ma)),cy-Round(ml*cos(ma))); end; end;
procedure TForm1.Clock2(clhour,clmin:TColor;ha,ma:real); begin with Form1.Canvas do begin Pen.Color:=clhour;//часовая стрелка MoveTo(cx+400,cy); Pen.Width:=3; LineTo(cx+400+Round(hl*sin(ha)),cy-Round(hl*cos(ha))); MoveTo(cx+400,cy); Pen.Width:=2;//минутная стрелка LineTo(cx+400+Round(ml*sin(ma)),cy-Round(ml*cos(ma))); end; end;
procedure TForm1.Timer1Timer(Sender: TObject); var i:integer; begin
if ma1>(2*pi) then begin ma1:=ma1-(2*pi); ha2:=ha2-(2*pi); end; if ma2>(2*pi) then begin ma2:=ma2-(2*pi); ha1:=ha1-(2*pi); end; Clock(clWhite,clBlue,ha1,ma1); Clock2(clWhite,clBlue,ha2,ma2); if (ma1=ma2) and (ha1=ha2) then begin sum:=sum+1; edit1.Text:=IntToStr(sum); end; ma1:=ma1+2*pi/60; ha2:=ha2+2*pi/60; msch:=msch+1; i:=i+1; if msch=12 then begin msch:=0; ha1:=ha1+2*pi/60; ma2:=ma2+2*pi/60; end; Clock(clRed,clBlue,ha1,ma1); Clock2(clBlue,clBlue,ha2,ma2); end;
procedure TForm1.Button1Click(Sender: TObject); var msch:integer; begin h1:=0;h2:=0;m1:=0;m2:=0;msch:=0; sum:=0; Clock(clRed,clBlue,ha1,ma1); Clock2(clBlue,clBlue,ha2,ma2); Timer1.enabled:=true; end;
procedure TForm1.Button3Click(Sender: TObject); begin timer1.Enabled:=false; end;
end.
|
|