![]() |
Задача по програмированию
Помогите пожалуйста написать программу по программированию, желательно на паскале или бейсике
программа такая: "Интересные точки" Задан многоугольник, вершины которого находятся в точках с целоцисленными координатами.Назавём точку интересной, если хотя бы одна из её координат является целой. Необходимо найти число интересных точек, которые находятся на границе заданного многоугольника. Прошу написать программу, срочно нужна, заранее благодарен. |
ап пля
|
Есть такая “формула Пика (клик на Вику)”: если вершины многоугольника расположены в точках с целочисленными координатами (твои “интересные точки”), то выполняется следующее равенство: S = K + M/2 – 1, где S — площадь многоугольника, K — число целых точек, лежащих внутри многоугольника, M — число целых точек, лежащих на границе многоугольника. Зная координаты вершин многоугольника, ты можешь подсчитать S и M, то есть требуемый ответ к задаче, по формуле Пика. О том, как найти площадь S многоугольника, зная координаты его вершин, смотри ниже. Что касается нахождения числа M, оно вроде является суммой НОД(Δx, Δy) для всех сторон многоугольника (Δx и Δy — разности абсцисс и ординат концов отрезка)
P/S - Поправьте, если где наврал... |
Паскаль плохо помню, наверняка чо не так написал... Компилятора нету.
<<< Как найти площадь S многоугольника, зная координаты его вершин >>> program ploschad(input,output); var i,n:integer; x,y,x1,y1,x2,y2,r,a,b,c,p:real; begin writeln('Number of vertices? '); read(n); { Многоугольник разбиваем на кусочки: первая вершина и каждые две соседних образуют треугольник; площадь каждого вычисляем по формуле Герона, сумма всех треугольников даст целиком многоугольник } write('Vertice 1 (x,y): '); read(x,y); write('Vertice 2 (x,y): '); read(x1,y1); r:=0; for i:=3 to n do begin write('Vertice ',i,' (x,y): '); read(x2,y2); a:=sqrt(sqr(x-x1)+sqr(y-y1)); b:=sqrt(sqr(x-x2)+sqr(y-y2)); c:=sqrt(sqr(x2-x1)+sqr(y2-y1)); p:=(a+b+c)/2; r:=r+sqrt(p*(p-a)*(p-b)*(p-c)); x1:=x2; y1:=y2; end; writeln('S = ',r); end |
Спасибо, помог, но немного не понял как найти саму "М" или "К"...не силён я к математике..
|
Часовой пояс GMT +3, время: 10:34. |
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot