![]() |
|
|
#1
|
|||
|
|||
|
Помогите плиз отредактировать задачу!
Условие: На форму поместить N точек (каждая точка помещается на форму по нажатию правой кнопки мыши и имеет номер 1..N). Найти точку, минимально удаленную от точки, последней помещенной на форму по нажатию левой кнопки мыши. Начало работы алгоритма по нажатию определенной клавиши на клавиатуре, результат выдать в окно диалога. Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormKeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Var
Xs,Ys : array of real;
i,k,n : word;
Rmin,R,min : real;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
If Button=mbRight then
begin
SetLength (Xs,k+1);
SetLength (Ys,k+1);
Xs[k]:=x;
Ys[k]:=y;
Form1.Canvas.TextOut(X, Y,
'Правая('+IntToStr(X)+','+
IntToStr(Y)+')');
k:=k+1;
end;
end;{Proc}
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
begin
Rmin:= sqrt(sqr(Xs[1]-Xs[0])+sqr(Ys[1]-Ys[0]));
min:=Rmin;
n:=2;
For i:=2 to (k-1) do
begin
R:= sqrt(sqr(Xs[k-1]-Xs[i])+sqr(Ys[k-1]-Ys[i]));
If R < Rmin then begin
min:=R; n:=n+2; end;
end;
end;
ShowMessage('Точка №'+FloatToStr(n));
end; {Proc}
end.Последний раз редактировалось Irusik-best1991, 29.04.2010 в 18:13. |
|
#2
|
||||
|
||||
|
Без тегов даже читать влом...
Эх... ну, какбЭ, в чём проблема-то? Какой кусок программы не работает? |
|
#3
|
|||
|
|||
|
Она не правильную точку выдаёт.....
|
|
#4
|
||||
|
||||
|
А формула-то правильная? проверь на досуге...
![]() Цитата:
![]() Последний раз редактировалось PhoeniX, 29.04.2010 в 18:23. |
|
#5
|
|||
|
|||
|
Теорема Пифагора!
|
|
#6
|
||||
|
||||
|
Я поправил сообщение, и объяснил, почему неправильная
![]() |
|
#7
|
|||
|
|||
|
Какая разницы что больше х1 или х2, все равно же в квадрате.
|
|
#8
|
||||
|
||||
|
sqr разве квадрат?? OoLoL
![]() ![]() ![]() |
|
#9
|
|||
|
|||
|
А что разве нет?
|
|
#10
|
||||
|
||||
|
OMG, чёт я попутал
![]() Типа, сори. Ну тогда ща посмотрю, что ещё тут может быть не так... Хм... ты трассировал функцию? Всё везде правильно проверяет и вычисляет? |
|
#11
|
||||
|
||||
|
Эх... кривой код - беда проверщика.
1. Переменные, которые используются только "на территории" процедуры, лучше объявлять в ней же. 2. Нафига при выводе переменной типа Word юзать FloatToStr, если есть IntToStr? 3. Смущают строчки Код:
n:=2; ... If R < Rmin then begin min:=R; n:=n+2; end; Код:
n:=1; ... If R < Rmin then begin min:=R; n:=i+1; end; Последний раз редактировалось PhoeniX, 29.04.2010 в 18:51. |