Другие языки программирования и технологии
составить программу в борланд паскале
которая просит пользователя ввести число 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.
Набирал прямо здесь, поэтому может где-то допустил небольшие ошибочки и не стал делать форматирование при выводе результата!
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.
Набирал прямо здесь, поэтому может где-то допустил небольшие ошибочки и не стал делать форматирование при выводе результата!
200 р на вебмани. Номер в личку
За деньги напишу.
Похожие вопросы
- Составьте программу на языке паскаль
- Составьте программу на языке Паскаль! Нужна программа по переводу чисел из десятичной системы счисления в любую другую.
- Как составить программу на языке Паскаль,если задано следующее условие
- Помогите составить программу на Турбо Паскале! ПЛИЗЗ!!
- помогите пожалуйста, нужно составить программу на языке Паскаль
- Составить программу на языке паскаль
- Помогите составить программу на паскале!
- Составьте программы и проверьте их выполняемость на Паскале
- найти все семизначные числа, которые делятся на 15 и записываются только цифрами 0 и 1. Составить программу на паскале
- составить программу вычисление 2**64(два в шестьдесят четвёртой степени), на паскале, с помощтью циклов