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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2012, 20:08   #1
zaira001002
Форумчанин
 
Аватар для zaira001002
 
Регистрация: 13.09.2012
Сообщений: 122
По умолчанию найти расстояние от произвольной точки до ближайшей стороны треугольника. Неправильно находит расстояние

program Treugolnik;

{$APPTYPE CONSOLE}
{Определение длин сторон треугольника по заданным координатам точекю
Найти также медиану, проведенную из наибольшего угла треугольника.
При вычислении длин сторон, под корнем должно быть только целое выражение.
Определить, является ли треугольник тупоугольным. Далее ввести координаты
одной точки и определить, находится ли она внутри треугольника, если да,
то найти расстояние от точки до ближайшей стороны.}
uses
SysUtils;
const
E=0.0001;
var
X1,Y1: Integer; { Координаты точки А }
X2,Y2: Integer; { Координаты точки В }
X3,Y3: Integer; { Координаты точки С }
X4,Y4: Integer; { Координаты произвольной точки }
AB,BC,AC: Real; { Длины сторон треугольника АВС }
K: Real; { Медиана треугольника, проведенная из наибольшего угла }
LA,LB,LC: Real; { Расстояния от произвольной точки до вершин треугольника }
P1,P2,P3: Real; { Полупериметры образовавшихся треугольнков }
S1,S2,S3: Real; { Площади образовавшихся треугольников }
P: Real; { Полупериметр треугольника АВС }
S: Real; { Площадь треугольника АВС }
HAB,HBC,HAC: Real; { Высоты, опущеные из произвольной точки на стороны АВС }
begin
Writeln('Koordinati vershini A');
Write('X1='); Readln(X1);
Write(#10, 'Y1='); Readln(Y1);
Writeln('Koordinati vershini B');
Write(#10, 'X2='); Readln(X2);
Write(#10, 'Y2='); Readln(Y2);
Writeln('Koordinati vershini C');
Write(#10, 'X3='); Readln(X3);
Write(#10, 'Y3='); Readln(Y3);
Writeln('Koordinati proizvolnoi tochki');
Write(#10, 'X4='); Readln(X4);
Write(#10, 'Y4='); Readln(Y4);

AB := Sqrt (Sqr (X2-X1) + Sqr (Y2-Y1)); {Длина стороны АВ}
BC := Sqrt (Sqr (X3-X2) + Sqr (Y3-Y2)); {Длина стороны ВС}
AC := Sqrt (Sqr (X3-X1) + Sqr (Y3-Y1)); {Длина стороны АС}

Writeln('AB= ', AB:6:4);
Writeln('BC= ', BC:6:4);
Writeln('AC= ', AC:6:4);

{ Находим полупериметр и площадь треугольника АВС }
P := (AB+BC+AC)/2;
S := Sqrt(P*(P-AB)*(P-BC)*(P-AC));

{ Находим медиану , проведенную из большего угла треугольника АВС, зная,
что больший угол лежит против большей стороны }

if (AC>=BC) AND (AB>=AC) THEN
K:=Sqrt(Sqr(((X2+X1)/2)-X3)+Sqr(((Y2+Y1)/2))-Y3)
else
if (BC>=AB) and (BC>=AC) then
K:=Sqrt(Sqr(((X2+X3)/2)-X1)+Sqr(((Y2+Y3)/2))-Y1)

else
if (AC>=AB) and (AC>=BC) then
K:=Sqrt(Sqr(((X3+X1)/2)-X2)+Sqr(((Y3+Y1)/2))-Y2);

Writeln('Mediana, provedennya is bolshego ygla treygolnuka ABC= ', K:6:4);

{Определение является ли треугольник ABC тупоугольным }
if ((AB * AB) + (AC * AC) < (BC *BC)) then
WriteLn('Treygolnuk ABC typoygolnyi' )
else
WriteLn('Treygolnuk ABC ne tupougolnyi');

{ Расстояние от произвольной точки до вершины А }
LA := Sqrt (Sqr (X1-X4) + Sqr (Y1-Y4));

{ Расстояние от произвольной точки до вершины B }
LB := Sqrt (Sqr (X2-X4) + Sqr (Y2-Y4));

{ Расстояние от произвольной точки до вершины C }
LC := Sqrt (Sqr (X3-X4) + Sqr (Y3-Y4));

{ Нахождение полупериметра каждого получившегося треугольника при проведении
L1,L2,L3 }
P1 := (AB+LA+LB)/2;
S1 := Sqrt (Abs(P1*(P1-AB)*(P1-LA)*(P1-LB)));

P2 := (BC+LB+LC)/2;
S2 := Sqrt (Abs(P2*(P1-BC)*(P1-LB)*(P1-LC)));

P3 := (AC+LA+LC)/2;
S3 := Sqrt (Abs(P3*(P1-AC)*(P1-LA)*(P1-LC)));

{Проверяем лежит точка в треугольнике или нет}
if Abs((S1 + S2 + S3)-S) <= E then
Writeln ('Tochka vne treygolnika')
else
begin
Writeln ('Tochka vnytri treygolnika');
{ Находим высоты треугольника ,проведенные от произвольной точки }
HAB:= (2*S1)/ AB;
Writeln ('HAB=',HAB);
HBC:= (2*S2)/ BC;
Writeln ('HBC=',HBC);
HAC:= (2*S3)/ AC;
Writeln ('HAC=',HAC);
if (HAB>=HBC) AND (HAB>=HAC ) then
Writeln('Rasstoyanie do bligzaishei storoni=',HAB:6:4)
else
if (HBC>=HAB) AND (HBC>=HAC ) then
Writeln('Rasstoyanie do bligzaishei storoni=',HBC:6:4)
else
if (HAC>=HBC) and (HAC>=HAB) then
Writeln('Rasstoyanie do bligzaishei storoni=',HAC:6:4)
end;

Readln;

end.
zaira001002 вне форума Ответить с цитированием
Старый 05.11.2012, 20:13   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Во-первых, используйте кнопочку # для оформления кода.
Во-вторых, в этих строчках кода ошибка:
Код:
P2 := (BC+LB+LC)/2;
S2 := Sqrt (Abs(P2*(P1-BC)*(P1-LB)*(P1-LC)));

P3 := (AC+LA+LC)/2;
S3 := Sqrt (Abs(P3*(P1-AC)*(P1-LA)*(P1-LC)));
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 05.11.2012, 20:52   #3
zaira001002
Форумчанин
 
Аватар для zaira001002
 
Регистрация: 13.09.2012
Сообщений: 122
По умолчанию

там вроде все правильно вычисляет...ошибка в самом последнем цикле...вроде знаки '<=' должны стоять...но и так неправильно находит...
zaira001002 вне форума Ответить с цитированием
Старый 05.11.2012, 20:54   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Ох, ну ошибка-то плевая, из-за "копипасты".
Должно быть:
Код:
P2 := (BC+LB+LC)/2;
S2 := Sqrt (Abs(P2*(P2-BC)*(P2-LB)*(P2-LC)));

P3 := (AC+LA+LC)/2;
S3 := Sqrt (Abs(P3*(P3-AC)*(P3-LA)*(P3-LC)));
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 05.11.2012, 20:55   #5
zaira001002
Форумчанин
 
Аватар для zaira001002
 
Регистрация: 13.09.2012
Сообщений: 122
По умолчанию

о...да....простите....бывает...не видят глаза...пока не отвыкнешь от работы....
zaira001002 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
минимальное расстояние от точки до функции С++ Алинка Общие вопросы C/C++ 1 20.04.2012 00:43
Паскаль. Расстояние от точки до начала координат с использованием массивов. OFFSET Паскаль, Turbo Pascal, PascalABC.NET 5 25.11.2011 23:12
Определить расстояние от точки до центра координат sektor2011 Помощь студентам 3 23.01.2011 19:50
кратчайшее расстояние от заданной точки до ближайщей стороны треугольника ddeman666 Помощь студентам 1 03.05.2010 14:47
Расстояние точки до поверхности Mikhail Bakurov Общие вопросы Delphi 9 20.01.2009 23:05