Задание:
Даны координаты N точек на плоскости: X[1], Y[1], ..., X[N], Y[N] (N = 20). Найти номера двух точек, расстояние между которыми наибольшее (считать, что такая пара точек единственная).
Решение этой же задачи в Делфи см здесь.
Обсудим план решения.
Текст программы
Program POints;
const NMax=20;
var x,y:array[1..NMax] of double; ii,jj,Na,Nb: integer;
RMax,Rast: double;
begin randomize;
writeln(' Таблица координат');
writeln('№':4,' X ':8,' Y ':8 );
{форматирование при выводе - для правильного
вида таблицы}
for ii:=1 to NMax do
begin
{заполняю массив координат
случайными числами -100..100 и
печатаю таблицу координат}
X[ii]:= (random - 0.5)*200;
Y[ii]:= (random - 0.5)*200;
writeln(ii:4,X[ii]:8:2,Y[ii]:8:2);
end;
RMax:= 0;
for ii:=1 to NMax do
for jj:=ii+1 to NMax do
begin
Rast:= sqrt(sqr(X[ii]-X[jj])+sqr(Y[ii]-Y[jj]));
if (ii=1) and (jj=2) then RMax:=Rast;
if Rast >= RMax then
begin
RMax:= Rast; Na:=ii; Nb:=jj;
{запомнили наибольшее расстояние и номера
точек - очередных кандидатов в наиболее
удалённые друг от друга точки}
write('+')
end else write('-');
writeln(ii:4,jj:4,Rast:8:3);
end;
writeln('---- Результат: ------ ');
writeln('Макс.расстояние = ',RMax:8:3,' точки: ',Na:3,' и ',Nb);
readln;
end.
---- Результат: -------
Таблица координат
№ X Y
1 -23.24 85.80
2 8.91 38.03
3 51.95 1.56
4 -37.44 -48.25
5 -57.27 90.04
6 -79.94 -83.79
7 -93.48 -65.79
8 64.55 -98.71
9 -51.44 -17.32
10 -79.32 94.36
11 35.86 16.64
. . . . . . . . . . .
- 7 17 140.172
- 7 18 68.696
- 7 19 29.550
- 7 20 213.315
- 8 9 141.702
+ 8 10 240.788
- 8 11 118.863
- 8 12 112.911
- 8 13 217.281
- 8 14 175.785
. . . . . . . . .
---- Результат: ------
Макс.расстояние = 240.788 точки: 8 и 10