Помогите плиз отредактировать задачу!
Условие: На форму поместить 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.
Admin: Пользуемся тегами!