- Регистрация
- 1 Мар 2015
- Сообщения
- 1,467
- Баллы
- 155
Сегодня один из подписчиков у меня попросил помощи решить задачу,а я решил написать по этому поводу урок.
---- Результат: ------
Макс.расстояние = 240.788 точки: 8 и 10
- Координаты точек - обычно числа вещественные. Пусть они будут не более 100 - по модулю. Чтобы не тратить время на ввод данных, используем генератор случайных чисел. Функция random возвращает случайные числа, равномерно распределенные в диапазоне 0..1. Чтобы они были не более 100 по модулю, естественно применить преобразование: (random - 0.5)*200. Чтобы каждый запуск программы давал новую серию случайных чисел, в начале программы вызовем процедуру randomize.
- Опишем константу Nmax=20 - количество точек и массивы координат
const NMax=20;
var X,Y: array [1..Nmax] of double; - Будем применять оператор цикла
for ii:=1 to Nmax - чтобы выполнить какое-либо действие для всех точек. - Расстояние между ii-ой и jj-ой точками вычислим по формуле Пифагора:
Rast := sqrt(sqr(X[ii] - X[jj])+sqr(Y[ii] - Y[jj]));
(Здесь каждая разность есть катет треугольника). - Поиск максимума выполним последовательным сравнением расстояний между точками ii-ой и jj-ой, где для ii=1 jj будет меняться от 2..Nmax; для ii=2 jj будет меняться от 3..Nmax; и т д - для ii=Nmax-1 jj будет равно Nmax;
- Вначале примем RMax = <расстояние между точками 1 и 2>, Na=1 и Nb=2; Это стандартный приём при вычислении максимума последовательности значений: вначале принять за максимум первое из значений.
- Каждое вычисленное расстояние будем сравнивать с RMax, и если оно больше, чем RMax - присвоим RMax:=<это новое расстояние> и также обновим номера Na и Nb.
- Программа должна показать координаты всех точек, округленные до сотых, номера максимально удаленных взаимно точек и расстояние между ними. Для проверки полезно вывести на экран все расстояния между точками.
Код:
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