Forum of Computer Science Faculty of Baku State University

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Forum of Computer Science Faculty of Baku State University » Programming » Дачник . Геометрическая задача .


Дачник . Геометрическая задача .

Сообщений 1 страница 5 из 5

1

http://acmp.ru/?main=task&id_task=12

Также ведут разбор на : http://www.programmersforum.ru/showthre … mp;page=2.

+1

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.

0

3

Нашёл ошибку (при чтении и записи забывал с логическим файлом связать), теперь программа выдаёт ответ, НО неправильный.

Код:
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.

0

4

Всё! Детально всё проверил. Алгоритм неверный. НЕ хотел по их алгоритму решать, а мой пока неправильный.

(Зато красивое решение было. А тут то ли плакать, то ли смеяться)

0

5

Решена!  :cool:
И даже способом отчасти отличным от представленного. Использовал свои глубокие познания в аналитической геометрии.  :)

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.

+1


Вы здесь » Forum of Computer Science Faculty of Baku State University » Programming » Дачник . Геометрическая задача .