Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите найти ошибку, Вроде все правильно.... 
:(
    Опции темы
Vitiligo
Дата 29.5.2006, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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.
 
PM MAIL ICQ   Вверх
bems
Дата 30.5.2006, 03:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



а ты сравнивай не углы стрелок, а минуты и секунды (без пи) 


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Vitiligo
Дата 30.5.2006, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 29.5.2006
Где: Сергиев Посад

Репутация: нет
Всего: нет



Да это, собственно, понятно(я уже так сделал), меня больше интересует - почему не работает именно этот вариант?? Ведь вроде все правильно! 
PM MAIL ICQ   Вверх
sergejzr
Дата 30.5.2006, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 1
Всего: 360



Модератор: Название темы должно отражать ее суть! 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
bems
Дата 30.5.2006, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



сравнение чисел с плавающей точкой - дело мутное smile  


--------------------
Обижено школьников: 8
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1065 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.