Предмет: Информатика, автор: naticris10

Дана точка А (х,у). Определить, принадлежит ли она прямоугольнику с вершинами в точках (х1,у1), (х2,у2), (х3,у3), (х4,у4) 

На Паскале


naticris10: Никто не дал правильный ответ, всё непонятно. Очень нужно!
naticris10: Очень прошу решение с помощью case? if, else и всё
srzontmp: Ваше case, if, else подойдет только для случая, когда стороны прямоугольника параллельны осям координат, и только.
naticris10: Можете написать?

Ответы

Автор ответа: srzontmp
0
function sq(var x1,y1,x2,y2,x3,y3: real):real;
begin
// вычисляем площадь треугольника с помощью 
// векторного произведения 
  sq:=abs((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1))/2;
end;
// основная программа
var x,y,x1,y1,x2,y2,x3,y3,x4,y4,st,sp:real;
begin
  write('координаты 4 вершин x1 y1 x2 y2 x3 y3 x4 y4 через пробел:  ');
  readln(x1,y1,x2,y2,x3,y3,x4,y4);
  sp:=2*sq(x1,y1,x2,y2,x3,y3);
  write('координаты точки x y через пробел:  '); readln(x,y);
  st:=sq(x1,y1,x2,y2,x,y) + sq(x2,y2,x3,y3,x,y) +
        sq(x3,y3,x4,y4,x,y) + sq(x4,y4,x1,y1,x,y);
  if abs(sp-st)<1.0e-9 then
     writeln('точка принадлежит прямоугольнику')
  else writeln('точка не принадлежит прямоугольнику');   
end.

координаты 4 вершин x1 y1 x2 y2 x3 y3 x4 y4 через пробел:  1 4 6 9 9 6 4 1
координаты точки x y через пробел:  4 7
точка принадлежит прямоугольнику

координаты 4 вершин x1 y1 x2 y2 x3 y3 x4 y4 через пробел:  1 4 6 9 9 6 4 1
координаты точки x y через пробел:  1.5 1.6
точка не принадлежит прямоугольнику


naticris10: что такое abs, sp, st и sq?
srzontmp: abs - это функция, вычисляющая модуль (абсолютное значение) числа, abs(- 5) = 5, sp - это имя функции, вычисляющей площадь треугольника по координатам трех вершин треугольника, переменная st - для хранения суммы площадей 4 треугольников, если точка (x,y) внутри прямоугольника, переменная sp - для хранения площади прямоугольника. Если точка внутри прямоугольника, то сумма площадей 4 треугольников равна площади прямоугольника.
Автор ответа: Аноним
2
// PascalABC.NET 3.3, сборка 1627 от 27.01.2018
// Внимание! Если программа не работает, обновите версию!

begin
  var n:=4;
  var xp:=new real[n];
  var yp:=new real[n];
  Writeln('Введите парами координаты четырех вершин');
  for var i:=0 to n-1 do Read(xp[i],yp[i]);
  var (x,y):=ReadReal2('Введите координаты точки:');
  var (i,j,c):=(0,n-1,False);
  while i<n do begin
    if ((yp[i]<=y) and (y<yp[j]) or (yp[j]<=y) and (y<yp [i]))
      and (x<(xp[j]-xp[i])*(y-yp[i])/(yp[j]-yp[i])+xp[i]) then c:=not c;
    j:=i;
    i+=1;
    end;
  if c then Writeln('Внутри')
  else Writeln('Не внутри')
end.

Примеры
Введите парами координаты четырех вершин
 1 4 6 9 9 6 4 1
Введите координаты точки: 1.5 1.6
Не внутри

Введите парами координаты четырех вершин
1 4 6 9 9 6 4 1
Введите координаты точки: 4 7
Внутри

naticris10: Ничего не поняла и, видимо, не пойму. Что тогда вместо отладочного писать, если его убираем? Почему не используем остальные координаты (х1,у1), (х2,у2), (х3,у3), (х4,у4)? Откуда Arr? Я про Паскаль, который изучают в школе и ничего такого мы не проходили.
srzontmp: Это разговор ниочем, кроме самой программы "пришивается" еще куча всякого "барахла".
srzontmp: Вы оттранслировали программу под платформу .NET, получили якобы загрузочный модуль с расширением .exe и вы считаете, что это действительно загрузочный модуль? Это не модуль с командами для процессора, это модуль с кодами псевдоязыка, т.к. это под NET платформу. Если действительно хотите сравнить длину исполняемого кода, то сравните занимаемые области оперативной памяти после загрузки программ.
srzontmp: Мне просто смешно! Как легко можно "завести" человека.
Похожие вопросы
Предмет: Математика, автор: xxaltvxpxxirinchinov
Предмет: Биология, автор: bsg74
Предмет: Литература, автор: 121настя121