Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2010, 20:49   #1
Ponkole
Форумчанин
 
Регистрация: 02.07.2010
Сообщений: 167
По умолчанию Ск - ко точек(Z; Z) принад. многоуг

Что такое М и S
Многоугольник (не обязательно выпуклый) на плоскости задан координатами своих вершин. Требуется подсчитать количество точек с целочисленными координатами, лежащих внутри него (но не на его границе).

Формат входных данных.
В первой строке содержится N (3 ^ N ^ 1000) —число вершин многоугольника. В последующих N строках идут координаты (Xi, Уi) вершин многоугольника в порядке обхода по часовой стрелке. X и У — целые числа, по модулю не превосходящие 1000000.

Формат выходных данных.
В выходной файл вывести одно число — искомое число точек.

Пример файла input.txt:
4
-1 -1
-1 1
1 1
1 -1
Пример файла output.txt:
1

Пример файла input.txt:
3
0 0
0 2
2 0
Пример файла output.txt:
0
{$N+,E-}
Const
MaxN=1000;
Var
Fi,Fo:Text;
Mn:Array[1..MaxN]Of Record X,Y:LongInt End;
N:Word;
S,M,K:Comp;
Procedure LoadFile;
Var
I:Word;
Begin
Assign(Fi,'e.in');
ReSet(Fi);
Read(Fi,N);
For I:=1 To N Do Begin
Read(Fi,Mn[I].X);
Read(Fi,Mn[I].Y);
End;
Close(Fi);
End;
Procedure CountS;
Var
I:Word;
Begin
S:=0;
For I:=1 To N-1 Do
S:=S+(Mn[I].Y+Mn[I+1].Y+0.0)*(Mn[I].X-Mn[I+1].X);
S:=Abs(S+(Mn[N].Y+Mn[1].Y+0.0)*(Mn[N].X-Mn[1].X));
End;
Procedure CountM;
Var
I:Word;
Function NOD(a,b:LongInt):LongInt;
Var
T:LongInt;
Begin
If a<b Then Begin t:=a;a:=b;b:=t; End;
While B<>0 Do Begin
T:=b;
b:=A Mod B;
A:=T;
End;
NOD:=A;
End;
Begin
M:=0;
For I:=1 To N-1 Do M:=M+NOD(Abs(Mn[I].Y-Mn[I+1].Y),Abs(Mn[I].X-Mn[I+1].X));
M:=M+NOD(Abs(Mn[N].Y-Mn[1].Y),Abs(Mn[N].X-Mn[1].X));
End;
Procedure CountK;
Begin
K:=(S+2-M)/2;
End;
Procedure SaveResult;
Begin
Assign(Fo,'e.out');
ReWrite(Fo);
WriteLn(Fo,K:0:0);
Close(Fo);
End;
Begin
LoadFile;
CountS;
CountM;
CountK;
SaveResult;
End.
Если я тебе помог, помоги и ты мне +ом с комментарием
Ponkole вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
20 точек Dicar Помощь студентам 1 01.04.2010 11:12
множество точек с++ Hecpon Помощь студентам 6 21.12.2009 21:18
определить радиус и центр окружности, на кот. лежит наиб.число точек заданного на плоскости мн-ва точек) kcю Помощь студентам 0 17.11.2009 19:50
множество точек))) kcю Помощь студентам 0 11.11.2009 21:32
множества точек kcю Помощь студентам 13 08.11.2009 11:48