http://acmp.ru/?main=task&id_task=12
Также ведут разбор на : http://www.programmersforum.ru/showthre … mp;page=2.
Forum of Computer Science Faculty of Baku State University |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » Forum of Computer Science Faculty of Baku State University » Programming » Дачник . Геометрическая задача .
http://acmp.ru/?main=task&id_task=12
Также ведут разбор на : http://www.programmersforum.ru/showthre … mp;page=2.
Впервые работаю с файлом. Предполагаю, что ошика на данной стадии. Хотя компилирует, но потом ..оо..
Алгоритм проверял для одного участак без файла, работает.
В некоторых частях писал программу "некультурно". Извините, время поджимало.
Суть алгоритма в угле наклона прямой, проходящей через данную точку, а именно тангенсе. Надо, чтобы тангенс хотя бы одной "точки", составляющей дачный участок, был больше тангенса рассматриваемой "точки", и наоборот.
VAR MAIN:array [1..1000,1..10] of real; TAN:array [1..5] of real; i,N,q:integer; F:text; j:byte; BEGIN assign(F,'input.txt'); Reset(F); readln(F,N); for i:=1 to N do readln(MAIN[i,1],MAIN[i,2],MAIN[i,3],MAIN[i,4],MAIN[i,5],MAIN[i,6],MAIN[i,7],MAIN[i,8],MAIN[i,9],MAIN[i,10]); close(F); q:=0; for i:=1 to N do begin for j:=1 to 5 do TAN[j]:=MAIN[i,2*j]/MAIN[i,2*j-1]; if ((TAN[1]>TAN[2]) or (TAN[1]>TAN[3]) or (TAN[1]>TAN[4]) or (TAN[1]>TAN[5])) and ((TAN[1]<TAN[2]) or (TAN[1]<TAN[3]) or (TAN[1]<TAN[4]) or (TAN[1]<TAN[5])) then INC(q); end; assign(F,'output.txt'); Rewrite(F); write(q); close(F); END.
Нашёл ошибку (при чтении и записи забывал с логическим файлом связать), теперь программа выдаёт ответ, НО неправильный.
VAR MAIN:array [1..1000,1..10] of real; TAN:array [1..5] of real; i,N,q:integer; F:text; j:byte; BEGIN assign(F,'input.txt'); Reset(F); readln(F,N); for i:=1 to N do readln(F,MAIN[i,1],MAIN[i,2],MAIN[i,3],MAIN[i,4],MAIN[i,5],MAIN[i,6],MAIN[i,7],MAIN[i,8],MAIN[i,9],MAIN[i,10]); close(F); q:=0; for i:=1 to N do begin for j:=1 to 5 do TAN[j]:=MAIN[i,2*j]/MAIN[i,2*j-1]; if ((TAN[1]>TAN[2]) or (TAN[1]>TAN[3]) or (TAN[1]>TAN[4]) or (TAN[1]>TAN[5])) and ((TAN[1]<TAN[2]) or (TAN[1]<TAN[3]) or (TAN[1]<TAN[4]) or (TAN[1]<TAN[5])) then INC(q); end; assign(F,'output.txt'); Rewrite(F); write(F,q); close(F); END.
Всё! Детально всё проверил. Алгоритм неверный. НЕ хотел по их алгоритму решать, а мой пока неправильный.
(Зато красивое решение было. А тут то ли плакать, то ли смеяться)
Решена!
И даже способом отчасти отличным от представленного. Использовал свои глубокие познания в аналитической геометрии.
VAR
A:array [1..1000,1..10] of real;
i,j,N,q:integer;
F:text;FUNCTION s(x1,y1,x2,y2,x3,y3:real):real;
begin
s:=abs((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1))/2;
end;BEGIN
assign(F,'input.txt'); Reset(F);
readln(F,N);
for i:=1 to N do
readln(F,A[i,1],A[i,2],A[i,3],A[i,4],A[i,5],A[i,6],A[i,7],A[i,8],A[i,9],A[i,10]);
close(F);for i:=1 to N do
if 2*s(A[i,3],A[i,4],A[i,5],A[i,6],A[i,7],A[i,8])=
s(A[i,1],A[i,2],A[i,3],A[i,4],A[i,5],A[i,6])+
s(A[i,1],A[i,2],A[i,5],A[i,6],A[i,7],A[i,8])+
s(A[i,1],A[i,2],A[i,7],A[i,8],A[i,9],A[i,10])+
s(A[i,1],A[i,2],A[i,9],A[i,10],A[i,3],A[i,4]) then INC(q);assign(F,'output.txt'); Rewrite(F);
write(F,q);
close(F);
END.
Вы здесь » Forum of Computer Science Faculty of Baku State University » Programming » Дачник . Геометрическая задача .