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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2019, 20:23   #1
Irina29
Новичок
Джуниор
 
Регистрация: 18.12.2019
Сообщений: 2
По умолчанию Помогите найти ошибку! Целый день ищем!

Код:
program fuyp;
var x1,x2,x3,y1,y2,y3,ax,ay,bx,by,r,sk:real;
begin  read(x1,y1,x2,y2,x3,y3);
  ax:=x1-x2; bx:=x3-x2; 
  ay:=y1-y2; by:=y3-y2; 
  if ((x1=x3) and (y1=y3))or ((x1=x2) and (y1=y2)) or ((x2=x3) and (y2=y3)) then r:=0 else
    begin
  
  
  sk:=(ax*bx+ay*by)/sqrt((ax*ax)+(ay*ay))/sqrt((bx*bx)+(by*by));
  if (sk<=0) then r:=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)) else
  begin
    r := sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
    r:=r*(sqrt(1-sk*sk));
  end;end;
  writeln (r);
  
end.

В Паскале АВС работает, но когда тестируем в системе проходит 30 тестов на 31 пишет runtime error. Нужно найти расстояние от точки до луча.

Последний раз редактировалось Irina29; 18.12.2019 в 20:26.
Irina29 вне форума Ответить с цитированием
Старый 18.12.2019, 21:49   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Попробуйте точность увеличить.
Ну или b в нуле обе координаты.
Какое условие?
Black Fregat вне форума Ответить с цитированием
Старый 18.12.2019, 22:14   #3
Irina29
Новичок
Джуниор
 
Регистрация: 18.12.2019
Сообщений: 2
По умолчанию

Спасибо. Условие: просто найти расстояние от точки до луча, даны 6 чисел - координаты точки и вектора, задающего луч.
Irina29 вне форума Ответить с цитированием
Старый 19.12.2019, 22:37   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Какой то сложный алгоритм выбран для решения.
Пусть координаты концов отрезка, определяющего луч:
A(xa,ya) и B(xb,yb).
Координаты точки: M(xm, ym).
После переноса системы координат в точку A получим координаты концов отрезка:
A(0,0) и B(dx, dy),
где dx = xb - xa, dy = yb - ya.
Уравнение отрезка примет вид:
y = (dy/dx)*x
или
dy*x - dx*y = 0.

Координаты точки в новой системе координат:
xt = xm - xa
yt = ym - ya

Расстояние точки от отрезка:
D = (dy*xt -dx*yt) / sqrt(dx*dx + dy*dy).

D может быть больше нуля, ноль или меньше нуля. Знак определяет положение точки относительно прямой.
Если надо знать только расстояние, то D = abs(D).

И к чему тут логические выражения и условные операторы?
Думаю, что записать уравнение для D на Паскале для вас не будет проблемой.
Как-то так, ...

Последний раз редактировалось ViktorR; 19.12.2019 в 22:45.
ViktorR вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C++] найти сумму ряда , посчитать функцию ch(x) и найти абсолютную и относительную погрешности. Помогите найти ошибку! Vladonna Помощь студентам 2 13.09.2018 22:07
Найти те даты, когда день рождения попадает на тот же день Дюша Метелкин Паскаль, Turbo Pascal, PascalABC.NET 8 23.06.2016 11:16
Найти седловые точки в матрице(помогите найти ошибку) - pascal tdsotm Помощь студентам 0 20.11.2014 18:57
приложение, работающее целый день ryouzaki Помощь студентам 10 15.02.2014 22:42
Помогите найти ошибку - StrToFloat выдаёт ошибку EConvertError для ячеек StringGrid (Delphi) Artsiom Помощь студентам 10 18.12.2013 14:10