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

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

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2010, 15:26   #1
VovanZ
Веб-разработчик
Форумчанин
 
Регистрация: 23.05.2009
Сообщений: 279
По умолчанию Олимпиадное программирование

Вторую неделю бьюсь над задачей на Тимусе. Задача элементарнейшая, но почему-то мой код упорно не проходит третий тест.
Код:
program project1;
var
  n, i : byte;
  r, res, x, y, x1, y1, x0, y0 : extended;
begin
{$IFNDEF ONLINE_JUDGE}
   assign(input, 'input.txt');
   assign(output, 'output.txt');
   reset(input);
   rewrite(output);
{$ENDIF}
  readln(n, r);
  readln(x, y);
  x0:=x;
  y0:=y;
  res:=2*pi*r;
  i:=1;
  for i:=1 to (n-1) do begin
    readln(x1, y1);
    res:=res+sqrt(sqr(x1-x)+sqr(y1-y));
    y:=y1;
    x:=x1;
  end;
  res:=res+sqrt(sqr(x1-x0)+sqr(y1-y0));
  write(res:1:2);
{$IFNDEF ONLINE_JUDGE}
   close(input);
   close(output);
{$ENDIF}
end.
Хоть намекните где мой фейл?

Последний раз редактировалось VovanZ; 01.03.2010 в 15:48.
VovanZ вне форума Ответить с цитированием
Старый 01.03.2010, 15:35   #2
Indian
Форумчанин
 
Регистрация: 23.02.2010
Сообщений: 107
По умолчанию

i:=i+1; //удалить.
Результат выдает правильный: 14.28.
Indian вне форума Ответить с цитированием
Старый 01.03.2010, 15:50   #3
VovanZ
Веб-разработчик
Форумчанин
 
Регистрация: 23.05.2009
Сообщений: 279
По умолчанию

Цитата:
Сообщение от Indian Посмотреть сообщение
i:=i+1; //удалить.
Результат выдает правильный: 14.28.
Сорри, это осталось после того как я пытался использовать while вместо for. Когда я отправлял там этого не было.
Результат у меня тоже правильный, все тесты которые я смог придумать решает правильно, поэтому и не могу понять где ошибка.....
VovanZ вне форума Ответить с цитированием
Старый 01.03.2010, 19:03   #4
Indian
Форумчанин
 
Регистрация: 23.02.2010
Сообщений: 107
По умолчанию

http://acm.timus.ru/forum/thread.asp...57890059555068
При n=1, цикл не обсчитывается.
Тогда при координатах не равных 0:0.
res:=res+sqrt(sqr(x1-x0)+sqr(y1-y0));
Прибавляется расстояние от начала координат, т.к. x1:y1=0:0.

Последний раз редактировалось Indian; 01.03.2010 в 19:07.
Indian вне форума Ответить с цитированием
Старый 02.03.2010, 13:43   #5
VovanZ
Веб-разработчик
Форумчанин
 
Регистрация: 23.05.2009
Сообщений: 279
По умолчанию

Спасибо, исправил, всё заработало.....
Код:
program project1;
var
  n, i : byte;
  r, res, x, y, x1, y1, x0, y0 : extended;
begin
{$IFNDEF ONLINE_JUDGE}
   assign(input, 'input.txt');
   assign(output, 'output.txt');
   reset(input);
   rewrite(output);
{$ENDIF}
  readln(n, r);
  readln(x, y);
  x0:=x;
  y0:=y;
  res:=2*pi*r;
  i:=1;
  for i:=1 to (n-1) do begin
    readln(x1, y1);
    res:=res+sqrt(sqr(x1-x)+sqr(y1-y));
    y:=y1;
    x:=x1;
  end;
  res:=res+sqrt(sqr(x-x0)+sqr(y-y0));
  write(res:1:2);
{$IFNDEF ONLINE_JUDGE}
   close(input);
   close(output);
{$ENDIF}
end.
VovanZ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программирование фамил Свободное общение 10 23.09.2009 14:28
программирование Brakus Помощь студентам 6 07.05.2009 00:51
Олимпиадное задание) AleX CODER Общие вопросы Delphi 12 02.12.2008 21:26