Даны действительные числа x1,y1,x2,y2,x3,y3. Выяснить, сколько общих точек имеют треугольник с координатами вершин (x1,y1), (x2,y2) и (x3,y3) и оси координат? (возможен ответ “бесконечное множество”) — Pascal(Паскаль)

program triangle;
 
uses crt;
 
{--Функция для проверки принадлежности стороны треугольника одной из осей и
 --для проверки нахождения точки треугольника в пересечении осей--}
function ch(a:real; b:real):boolean;  
begin
if (a=0) and (b=0) then ch:=true
  else ch:=false;
end;
 
{--Функция для проверки (!)пересечения стороны треугольника с одной из осей--}
function int(x1:real;x2:real;y1:real;y2:real):byte;
var 
  res:integer;
begin
  res:=0;
  if x1*x2<0 then inc(res);
  if y1*y2<0 then inc(res);
  int:=res;
end;
 
{--Функция для проверки принадлежности стороны треугольника прямой, проходящей через центр координат--}
function cen(x1:real;x2:real;y1:real;y2:real):boolean;
begin
if (x1=-x2) and (y1=-y2) and (abs(x1)=abs(y1)) and (abs(x2)=abs(y2)) then cen:=true
  else cen:=false;
end;
 
var
  sum:byte;
  x1,x2,x3,y1,y2,y3:real;
 
begin
writeln('Введите координаты точек треугольника: ');
write('x1=',x1);
write('y1=',y1);
write('x2=',x2);
write('y2=',y2);
write('x3=',x3);
write('y3=',y3);
{--Если получилось так, что одна из сторон треугольника лежит на оси}
if ch(x1,x2) or ch(x1,x3) or ch(x2,x3) or ch(y1,y2) or ch(y2,y3) or ch(y1,y3) then
   writeln('Бесконечное множество') {то он имеет бесконечное множество точек пересечения с ними}
else begin  {Иначе это множество конечно и можно считать}
  sum:=0;   {Переменная для хранения результата}
  sum:=int(x1,x2,y1,y2)+int(x2,x3,y2,y3)+int(x3,x1,y3,y1); {Сумма пересечений каждого из отрезков прямыми}
  if ch(x1,y1) or ch(x2,y2) or ch(x3,y3) then {Если есть одна точка которая лежит в центре координатной плоскости
  то больше на осях точек концов отрезков быть не может. Значит прибавляем к результатут единицу}
    sum:=sum+1
  else begin
    {На каждой оси может быть только по одной точке концов отрезков сторон треугольника. Проверяем. Если есть, то 
    Увеличиваем результат на единицу}
    if (x1=0) or (x2=0) or (x3=0) then inc(sum);
    if (y1=0) or (y2=0) or (y3=0) then inc(sum);
  end;
   {Если одна из сторон треугольника лежит на прямой, проходящей через (0;0), то она имеет только одно пересечение
    с осями координат то удалим из результата единицу, которую мы туда написали лишнюю. Заметим такая сторона единственная}
  if cen(x1,x2,y1,y2) or cen(x2,x3,y2,y3) or cen(x1,x3,y1,y3) then dec(sum);
{Разобрали все случаи расположения треугольника, пишем ответ:}
writeln(sum);
end;
readkey;
end.

Leave a Comment

52 − 50 =