Полигон - Pascal

Узнай цену своей работы

Формулировка задачи:

В Паскале вот этот "страх" решите пожалуйста) буду оч благодарна... Дан полигон, необязательно выпуклый. Дана точка P с координатами х0 у0. Определяется, находится ли точка Р внутри полигона. файл Пол.тхт содержит в первой строке координаты Р. Во второй количество вершин полигона. и далее координаты вершин. ввод 12 6 16 3 2 3 11 13 11 13 10 7 10 7 9 13 9 13 8 7 8 7 4 11 4 11 6 8 6 8 7 13 7 13 2 вывод ДА
Ребята, что никто не попробует даже?(

Решение задачи: «Полигон»

textual
Листинг программы
program n29;
const
e=0.0001;
 
type
polygon=record
x,y:real;
end;
mas=array[1..50] of polygon;
 
function check (n:integer; x,y:real; a:mas):boolean;
 
function geron (x1,y1,x2,y2,x3,y3:real):real;
 
function d (x1,y1,x2,y2:real):real;
begin
d:=sqrt(sqr(x2-x1)+sqr(y2-y1));
end;
 
var
a,b,c,p:real;
begin
a:=d(x1,y1,x2,y2);
b:=d(x2,y2,x3,y3);
c:=d(x3,y3,x1,y1);
p:=(a+b+c)/2;
geron:=sqrt(p*(p-a)*(p-b)*(p-c));
end;
 
var
i,j:integer;
s,s1:real;
begin
s:=0;s1:=0;
for j:=2 to n-1 do
s:=s+geron(a[1].x,a[1].y,a[j].x,a[j].y,a[j+1].x,a[j+1].y);
for j:=1 to n-1 do
s1:=s1+geron(a[j].x,a[j].y,a[j+1].x,a[j+1].y,x,y);
s1:=s1+geron(a[1].x,a[1].y,a[n].x,a[n].y,x,y);
check:=abs(s1-s)<e;
end;
 
 
var
a:mas;
n,i:integer;
x,y:real;
 
BEGIN
write('‚ўҐ¤ЁвҐ Є®«ЁзҐбвў® бв®а®* ¬*®Ј®гЈ®«м*ЁЄ* n=');
readln(n);
writeln('‚ўҐ¤ЁвҐ Є®®а¤Ё**вл Їа®Ё§ў®«м*®© в®зЄЁ');
readln(x,y);
for i:=1 to n do begin
writeln('‚ўҐ¤ЁвҐ Є®®а¤Ё**вл ',i,' в®зЄЁ ¬*®Ј®гЈ®«м*ЁЄ*');
readln(a[i].x,a[i].y);
end;
writeln(check(n,x,y,a));
readln
END.

Объяснение кода листинга программы

  1. const - объявляются константы e и n
  2. type - объявляется тип данных polygon
  3. var - объявляются переменные a, b, c, p, i, j, s, s1, x, y
  4. function - объявляются функции check, geron, d
  5. begin - начинается выполнение программы
  6. s := 0; s1 := 0; - инициализируются переменные s и s1
  7. for j := 2 to n-1 do - выполняется цикл for j от 2 до n-1 s := s + geron(a[1].x, a[1].y, a[j].x, a[j].y, a[j+1].x, a[j+1].y); - вычисляется значение s for j := 1 to n-1 do - выполняется еще один цикл for j от 1 до n-1 s1 := s1 + geron(a[j].x, a[j].y, a[j+1].x, a[j+1].y, x, y); - вычисляется значение s1 s1 := s1 + geron(a[1].x, a[1].y, a[n].x, a[n].y, x, y); - добавляется последний элемент check := abs(s1 - s) < e; - проверяется условие
  8. end; - завершается цикл
  9. var - объявляются переменные a, b, c, p, i, j, s, s1, x, y
  10. BEGIN - начинается блок BEGIN
  11. write('‚ўҐ¤ЁвҐ Є®«ЁзҐбвў® бв®а® ¬®Ј®гЈ®«мЁЄ n='); - выводится значение переменной n
  12. readln(n); - считывается значение n
  13. writeln('‚ўҐ¤ЁвҐ Є®®а¤Ё*вл Їа®Ё§ў®«м®© в®зЄЁ'); - выводится значение переменной x
  14. readln(y); - считывается значение y
  15. for i := 1 to n do begin - выполняется цикл for i от 1 до n writeln('‚ўҐ¤ЁвҐ Є®®а¤Ё*вл ',i,' в®зЄЁ ¬®Ј®гЈ®«мЁЄ'); - выводится значение переменной i readln(a[i].x, a[i].y); - считывается значение x и y для i-го элемента end; - завершается цикл
  16. writeln(check(n,x,y,a)); - выводится результат проверки
  17. readln(); - считывается символ новой строки
  18. END. - завершается блок BEGIN

Оцени полезность:

7   голосов , оценка 3.571 из 5
Похожие ответы