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

Пожалуйста, помогите составить программу в Pascal.

В первой строке задано N(1≤N≤1000) - количество треугольников.
Во второй строке заданы два числа X и Y координаты точки.
В последующих N строках задано шесть чисел X1i,Y1i,X2i,Y2i,X3i,Y3i - три пары координат вершин i-го треугольника.
Вывести нужно одно число - количество треугольников, которым принадлежит точка.
ПОМОЖЕТ НИЖЕ

{ геометрические алгоритмы: Лежит ли точка внутри треугольника? Вариант 1 }
{ ------------------------------------------------------------------------}
{ Идея: обходим треугольник по часовой стрелке. }
{ Точка должна лежать справа от всех сторон, если она внутри }
{ ------------------------------------------------------------------------}

(* функция определеяет положение точки относительно вектора *)
Function WherePoint(ax,ay,bx,by,px,py:real):integer;
var s :real;
begin
s:=(bx-ax)*(py-ay)-(by-ay)*(px-ax);
if s>0 then WherePoint:=1
else if s<0 then WherePoint:=-1
else WherePoint:=0;
end;

(* функция определеяет относительное положение точки: внутри или нет *)
Function PointInsideTreangle(ax,ay,bx,by,cx,cy,px,py:real):boolean;
var s1,s2,s3 :integer;
begin
PointInsideTreangle:=FALSE;
s1:=WherePoint(ax,ay,bx,by,px,py);
s2:=WherePoint(bx,by,cx,cy,px,py);
if s2*s1<=0 then EXIT;
s3:=WherePoint(cx,cy,ax,ay,px,py);
if s3*s2<=0 then EXIT;
PointInsideTreangle:=TRUE;
end;

Begin (* Тело основной программы *)
writeln(PointInsideTreangle(1,1,8,1,1,8,2,2)); {TEST1, Inside}
writeln(PointInsideTreangle(1,1,8,1,1,8,6,6)); {TEST2, Outside}
End.

{ геометрические алгоритмы: Точка внутри треугольника? Вариант 2 }
{ ------------------------------------------------------------------------}
{ Идея: Пусть есть треугольник ABC и точка P. Если Площадь ABC равна сумме }
{ площадей треугольников ABP,BCP,CAP, то точка внутри треугольника. }
{ ------------------------------------------------------------------------}

(* функция вычисляет расстояние между точками *)
Function Distance(ax,ay,bx,by:real):real;
begin
Distance := sqrt(sqr(ax-bx)+sqr(ay-by));
end;

(* функция вычисляет площадь треугольника по формуле Герона *)
Function SqrGeron(ax,ay,bx,by,cx,cy:real):real;
var p,a,b,c :real;
Begin
a:=Distance(cx,cy,bx,by);
b:=Distance(ax,ay,cx,cy);
c:=Distance(ax,ay,bx,by);
p:=(a+b+c)/2;
SqrGeron:=sqrt(p*(p-a)*(p-b)*(p-c));
End;

(* функция определеяет относительное положение точки: внутри или нет *)
Function PointInsideTreangle(ax,ay,bx,by,cx,cy,px,py:real):boolean;
const error = 1.000001;
var s,s1,s2,s3 :real;
begin
PointInsideTreangle:=TRUE;
s :=SqrGeron(ax,ay,bx,by,cx,cy);
s1:=SqrGeron(ax,ay,bx,by,px,py);
s2:=SqrGeron(bx,by,cx,cy,px,py);
s3:=SqrGeron(cx,cy,ax,ay,px,py);
if s*error>s1+s2+s3 then PointInsideTreangle:=TRUE
else PointInsideTreangle:=FALSE;
end;

Begin (* Тело основной программы *)
writeln(PointInsideTreangle(1,1,8,1,1,8,2,2)); {TEST1, Inside}
writeln(PointInsideTreangle(1,1,8,1,1,8,6,6)); {TEST2, Outside}
End.
Сын Дагестана
Сын Дагестана
91 434
Лучший ответ
сформируй массив 6 столбцов и Н строк (кол-во треугольников) и примени вышеприведенную теорию (мне больше нравится равенство площадей)
Dmitriy Portnyagin
Dmitriy Portnyagin
95 955
Сын Дагестана Вычислительная сложность больше. Всякие корни не простая операция, проще все же умножение и меньше действий. Конечно правильнее бы собрать программу и проверить затраты времени запустим там миллион таких вычислений в цикле.