В однамерном массиве с четным количеством элементов (2N) находяться координаты N точек плоскости. Они располагаються в следующем порядке: x1, y1, x2, y2, x3, y3 и т.д. Определить номера точек, которые могут являться вершинами равнобедренного треуголника.
(формула sqrt(sqr(x1-x2)+sqr(y1-y2)))
| Код | const N = 10; Eps = 0.0000001;
function dist(x1, y1, x2, y2: real): real; begin // попробуйте написать сами. функция должна возвращать // расстояние между точками (x1,y1) и (x2,y2) // по Вами же указанной формуле end;
function on_the_same_line(x1,y1,x2,y2,x3,y3:real):boolean; begin // функция возвращает true, если точки лежат на одной прямой // вспомните школу end;
var A: array[1..2*N] of real; res: array[1..2*N*(2*N-1)*(2*N-2) div 6, 1..3] of integer; {номера подходящих троек} i,j,k,m : integer;
begin writeln('Введите точки указанным образом'); // здесь вы вводите точки в массив A i := 1; m:=1; while i < 2*N-4 do begin j := i + 2; while j < 2*N-2 do begin k := j + 2; while k < 2*N do begin if ((abs(dist(A[i],A[i+1],A[j],A[j+1])-dist(A[i],A[i+1],A[k],A[k+1])) < Eps) or (abs(dist(A[i],A[i+1],A[j],A[j+1])-dist(A[j],A[j+1],A[k],A[k+1])) < Eps) or (abs(dist(A[i],A[i+1],A[k],A[k+1])-dist(A[j],A[j+1],A[k],A[k+1])) < Eps)) and (not on_the_same_line(A[i],A[i+1],A[j],A[j+1],A[k],A[k+1])) then begin res[m][1]:=i div 2 + 1; res[m][2]:=j div 2 + 1; res[m][3]:=k div 2 + 1; inc(m); end; inc(k,2); end; inc (j,2); end; inc (i,2); end; for i:=1 to m-1 do writeln(res[i][1],' ',res[i][2],' ',res[i][3]); readln; end.
| |