Другие языки программирования и технологии

составить программу в борланд паскале

которая просит пользователя ввести число n, а потом n пар вещественных чисел (Xi,Yi), i = [1..n]. Рассматривая пары (Xi,Yi) как координаты точек на плоскости, программе следует найти и вывести номера и координаты 2-х точек, расстояние между которыми наибольшее. Если пар точек, расстояние между которыми наибольшее, больше одной, выведите любую из этих пар.
type PType = ^RType;
RType = record X, Y : Real; N : Word; Next : PType; end;
var First, Last, Max1, Max2 : PType; L : Real;

procedure PInput(N : Word);
var Cur : PType;
begin
New(Cur); Write('X', N, ' = '); ReadLn(Cur^.X); Write('Y', N, ' = '); ReadLn(Cur^.Y); Cur^.N := N; Cur^.Next := nil;
if First = nil then First := Cur else Last^.Next := Cur;
Last := Cur;
end;

function SqrLen(P1, P2 : PType) : Real;
begin
SqrLen := (P1^.X - P2^.X)*(P1^.X - P2^.Y) + (P1^.X - P2^.Y)*(P1^.Y - P2^.Y);
end;

procedure FindL;
var Cur1, Cur2 : PType; LCur : Real;
begin
Cur1 := First;
repeat
Cur2 := Cur1^.Next;
repeat
LCur := SqrLen(Cur1, Cur2);
if LCur > L then begin Max1 := Cur1; Max2 := Cur2; L := LCur; end;
Cur2 := Cur2^.Next;
until Cur2 = nil;
Cur1 := Cur1^.Next;
until Cur1 = Last;
end;

var i, N : Integer;
begin
First := nil;
Write('N = '); ReadLn(N);
if N = 1 then begin WriteLn('Точек должно быть > 1.'); Halt; end;
for i := 1 to N do PInput( i );
Max1 := First; Max2 := First; L := 0;
FindL;
WriteLn('Наибольшее расстояние между точками: ', Max1.N, '(', Max1^.X, ', ', Max1^.Y, ') и ', Max2.N, '(', Max2^.X, ', ', Max2^.Y, ') = ', Sqrt(L));
end.

Набирал прямо здесь, поэтому может где-то допустил небольшие ошибочки и не стал делать форматирование при выводе результата!
Александр Михайлин
Александр Михайлин
95 097
Лучший ответ
200 р на вебмани. Номер в личку
За деньги напишу.