| 
| 
 | Вопрос # 3 591/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!
 N точек заданы своми координатами на площине: массив X[i]- абсциссы точек, массив  Y[i]- ординаты. Найти 2 точки расстояние между которыми наибольшее.
 Помогите решить. Заранее большое спасибо!
 
|  |   Вопрос задал: LDO (статус: Посетитель)Вопрос отправлен: 27 декабря 2009, 18:11
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: min@y™ А вот:
 type
  TVector = array[0..n - 1] of Single; // Тип массива точек
 
function GetLength(const X, Y: Single): Single;
begin
  Result:= Sqrt(Sqr(X) + Sqr(Y));
end;
 
var
  X, Y: TVector;
  i, j: Integer;
  L, Max: Single;
 
begin
  for i:= 0 to n - 1 do
    begin
      // <--- заполнение массивов
      X[i]:= Random(100);
      Y[i]:= Random(100);
    end;
 
  // Поиск максимального расстояния
  Max:= 0.0;
  for i:= 0 to n - 1 do
    for j:= 0 to n - 1 do
      begin
        L:= GetLength(X[i], Y[i]);
        if L > Max
          then Max:= L;
      end;
 
  // Вывод максимального расстояния
  WriteLn(' Max = ', Max: 3: 3);
  ReadLn;
end;
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 27 декабря 2009, 19:12
 
 |  
 Мини-форум вопросаВсего сообщений: 3; последнее сообщение — 27 декабря 2009, 21:32; участников в обсуждении: 3. 
|   | Валя (статус: 1-ый класс), 27 декабря 2009, 18:58 [#1]:Вероятнее всего необходимо попарно сравнивать координаты всех точек. 
  maxlen:=0;
 for i:=0 to n-1 do
   for j:=i+1 to n do
     if sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]))>maxlen then begin
       maxlen:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]));
       t1:=i;
       t2:=j;
       end; |  
|   | Егор (статус: 10-ый класс), 27 декабря 2009, 19:55 [#2]:мужики, нафиг вы корни извлекаете? проще надо быть, проще: 
 ...
if sqr(x[i]-x[j])+sqr(y[i]-y[j])>maxlen then... Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.— Donald E. Knuth.
 |  
|   | Ерёмин А.А. (статус: *Администратор), 27 декабря 2009, 21:32 [#3]: Цитата (min@y™): function GetLength(const X, Y: Single): Single;begin
 Result:= Sqrt(Sqr(X) + Sqr(Y));
 end;
 Здесь явно ошибка, т.к. считается расстояние от начала координат. Хотя автор и сам переделает (надеюсь).
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |