Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Type
- {Структура для хранения одной точки.}
- tPoint = Record
- fXP: Real; {Координата X}
- fYP: Real; {Координата Y}
- fZP: Real; {Координата Z}
- fMaxDistance: Real; {Дистанция до самой удаленной точки от этой}
- fMaxDistancePointIndex: Integer; {Индекс самой удаленной точки от этой}
- End;
- Const
- N = 15; {Количество точек}
- Range = 500; {Диапазон возможного расстояния от нулевой}
- {координаты для каждой оси }
- Var
- gaPoints: Array [1..N] Of tPoint; {Массив с точками}
- I, J, CurIndex: Integer; {Индексы массива}
- {Вспомогательные переменные - текущее максимальное расстояние и расстояние}
- CurMaxDistance, CurDistance: Real;
- {Функция считает по данной тобой формуле расстояние между двумя точками}
- Function CalcDistance(Var aFirstPoint: tPoint; Var aSecPoint: tPoint): Real;
- Begin
- With aFirstPoint Do Begin
- CalcDistance:= Sqrt(
- Sqr(fXP - aSecPoint.fXP) +
- Sqr(fYP - aSecPoint.fYP) +
- Sqr(fZP - aSecPoint.fZP)
- );
- End;
- End;
- Begin
- Randomize; {Задаем сид для генератора случайных чисел}
- {Заполняем массив точек, высчитывая координаты каждой точки случайно}
- For I:= 1 To N Do With gaPoints[I] Do Begin
- fXP:= Range - Random(Range * 2);
- fYP:= Range - Random(Range * 2);
- fZP:= Range - Random(Range * 2);
- fMaxDistancePointIndex:= 0; {Пока не нашли, поэтому нули}
- fMaxDistance:= 0;
- End;
- {А теперь самое главное: Для каждой точки массива мы прокручиваем во внутреннем
- цикле по I все остальные точки, кроме нее же, пытаясь обнаружить точку, самую
- отдаленной от точки с индексом J}
- For J:= 1 To N Do Begin
- CurMaxDistance:= 0; {Пока дистанцию занулим}
- For I:= 1 To N Do Begin {И пройдемся по остальным точкам}
- If I = J Then Continue; {Если наткнулись на эту же точку, то незачем
- проверять, насколько она удалена от самой себя - перейдем к следующей точке}
- CurDistance:= CalcDistance(gaPoints[I], gaPoints[J]); {Узнаем дистанцию}
- {Если текущая максимальная дистанция, которую мы обнаружили меньше, чем
- та, которую мы посчитали, то значит, мы нашли точку более удаленную от точки
- J, и следует обновить для этой точки информацию о ее самой далекой соседке}
- If CurMaxDistance < CurDistance Then With gaPoints[J] Do Begin
- CurMaxDistance:= CurDistance;
- fMaxDistancePointIndex:= I;
- fMaxDistance:= CurMaxDistance;
- End;
- End;
- End;
- {Итак, после кода, который был выше, каждая точка знает, какая точка дальше всех
- от нее. Она знает ее номер в массиве и дистанцию до этой точки.
- Остается найти такую точку, у которой дистанция ее самой далекой соседки максимальна}
- CurMaxDistance:= gaPoints[1].fMaxDistance;
- For I:= 1 To N Do With gaPoints[I] Do Begin
- If CurMaxDistance > fMaxDistance Then Begin
- CurMaxDistance:= fMaxDistance;
- CurIndex:= I;
- End;
- End;
- WriteLn('Points #', CurIndex, ' and #',
- gaPoints[CurIndex].fMaxDistancePointIndex,
- ' has maximum distance between each other');
- End.
Advertisement
Add Comment
Please, Sign In to add comment