Просмотр полной версии : Задача по програмированию
Помогите пожалуйста написать программу по программированию, желательно на паскале или бейсике
программа такая: "Интересные точки"
Задан многоугольник, вершины которого находятся в точках с целоцисленными координатами.Назавём точку интересной, если хотя бы одна из её координат является целой.
Необходимо найти число интересных точек, которые находятся на границе заданного многоугольника.
Прошу написать программу, срочно нужна, заранее благодарен.
VelvetDust
10.01.2009, 23:25
Есть такая “формула Пика (клик на Вику) (http://ru.wikipedia.org/wiki/Теорема_Пика_(комбинаторная_геометрия))”: если вершины многоугольника расположены в точках с целочисленными координатами (твои “интересные точки”), то выполняется следующее равенство: S = K + M/2 – 1, где S — площадь многоугольника, K — число целых точек, лежащих внутри многоугольника, M — число целых точек, лежащих на границе многоугольника. Зная координаты вершин многоугольника, ты можешь подсчитать S и M, то есть требуемый ответ к задаче, по формуле Пика. О том, как найти площадь S многоугольника, зная координаты его вершин, смотри ниже. Что касается нахождения числа M, оно вроде является суммой НОД(Δx, Δy) для всех сторон многоугольника (Δx и Δy — разности абсцисс и ординат концов отрезка)
P/S - Поправьте, если где наврал...
VelvetDust
10.01.2009, 23:46
Паскаль плохо помню, наверняка чо не так написал... Компилятора нету.
<<< Как найти площадь 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
Спасибо, помог, но немного не понял как найти саму "М" или "К"...не силён я к математике..