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

СРОЧНО ПОМОГИТЕ!!! Напишите прогу на паскале

на доске n-ое количество точек.сколько можно сделать равнобедренных треугольников из этих точек.сделать на паскале
Добрго времени суток.

Прав Егор Морозов на счет функции, вычисляющей расстояние между двумя точками. Она может быть такой

function Distance(x1,y1,x2,y2: Integer): Real;
var D : Real;
begin
D := Sqrt(Sqr(x1 - x2) + Sqr(y1 - y2));
Distance := D;
end;

Правда, здесь есть подводный камень. Вещественные числа нельзя сравнивать на равенство. Поэтому нужно или сравнивать абсолютную величину разности двух расстояний с каким-то малым числом и если эта разность будет меньше, считать, что расстояния равны, или сделать функцию целого типа, а результат перед возвращением округлять. Координаты в этом случае должны быть достаточно большими числами (2 - 4 разряда) .

Далее, Егор ошибся, говоря "сравнивает расстояние от третьей точки до 1й -- если да то нашли 1 треуг". Это делать не нужно, т. к. ищется не равносторонний треугольник, а равнобедренный.

Теперь еще вопрос. Допустим, нашли тройку точек (i, j, k), образующих равнобедренный треугольник, но есть еще точка p такая, что (i, j, p) тоже образуют треугольник, удовлетворяющий условию. Он считается? Или точки, образовавшие один треугольник болше в поиске не участвуют?

В общем, задача поставлена не совсем корректно. Если же не учитывать все вышесказанное, то программа будет достаточно простой

CountT := 0; {число возможных треугольников}
for i:=1 to n-2 do
for j:=i+1 to n-1 do
for k:= j+1 to n do
if Distance(x[ i ], y[ i ], x[ j ], y[ j ]) = Distance(x[ j ], y[ j ], x[ k ], y[ k ]) then CountT := CountT + 1;

Объявление переменных, ввод данных и остальное оформление программы сами, пожалуйста.

Удачи!
Эдуард Степанов
Эдуард Степанов
59 612
Лучший ответ
жёсткая задачка.... единственный алгоритм который вижу это перебор O(n^3)

на паскале больше 4 лет не програмил по этому смотри алгоритм мот поможет

создаёшь функцию r (x1,y1,x2,y2) - будет находить длинну от т (x1,y1) до (x2,y2)
(ну там по теореме пифагора сделаешь)

у нас есть массив точек :
1) берём первую находим расстояние до второй запоминаем его
2) берём вторую точку начинаем перебирать по всему массиву и искать запомненное значение
----3а) если нашли то ищем относительно второй третью если нашли
----4а) то сравнивает расстояние от третьей точки до 1й -- если да то нашли 1 треуг.
3) если не нашли то берём следующюю точку

3)
РР
Роман Ромыч
6 169