![]() |
|
#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
|
||||
|
||||
![]() Без тегов даже читать влом...
Эх... ну, какбЭ, в чём проблема-то? Какой кусок программы не работает? Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#3
|
|||
|
|||
![]() Она не правильную точку выдаёт.....
|
#4
|
||||
|
||||
![]() А формула-то правильная? проверь на досуге...
![]() Цитата:
![]() Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj Последний раз редактировалось PhoeniX, 29.04.2010 в 18:23. |
#5
|
|||
|
|||
![]() Теорема Пифагора!
|
#6
|
||||
|
||||
![]() Я поправил сообщение, и объяснил, почему неправильная
![]() Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#7
|
|||
|
|||
![]() Какая разницы что больше х1 или х2, все равно же в квадрате.
|
#8
|
||||
|
||||
![]() sqr разве квадрат?? OoLoL
![]() ![]() ![]() Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#9
|
|||
|
|||
![]() А что разве нет?
|
#10
|
||||
|
||||
![]() OMG, чёт я попутал
![]() Типа, сори. Ну тогда ща посмотрю, что ещё тут может быть не так... Хм... ты трассировал функцию? Всё везде правильно проверяет и вычисляет? Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#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; Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj Последний раз редактировалось PhoeniX, 29.04.2010 в 18:51. |