Принадлежит ли точка треугольнику программа на паскале

Дана точка А (х, у). Определить, принадлежит ли она треугольнику с вершинами в точках (x1, y1), (x2, y2), (x3, y3) (Pascal)

Много занимаюсь спортом, не могу решить задачу по паскалю, помогите пожалуйста

Дана точка А (х, у). Определить, принадлежит ли она треугольнику с вершинами в точках (x1, y1), (x2, y2), (x3, y3).

Форумчанин
Регистрация: 15.10.2011
Сообщений: 306

var x1,x2,x3,x, y1,y2,y3,y, A,B,S:integer; begin read(x1,x2,x3,y1,y2,y3,x,y); S:=(x1-x3)*(y2-y3)-(x2-x3)*(y1-y3); if S=0 then writeln(‘Треугольник не существует. ‘) else begin A:=(x-x3)*(y2-y3)-(x2-x3)*(y-y3); B:=(x1-x3)*(y-y3)-(x-x3)*(y1-y3); if (S<0) and (S<=A) and (A<=0) and (S<=B) and (B<=0) or (S>0) and (S>=A) and (A>=0) and (S>=B) and (B>=0) then writeln(‘Да’) else writeln(‘Нет’) end end.
Если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое.
Форумчанин
Регистрация: 19.09.2013
Сообщений: 597

ну вот блин написал,а потом присмотрелся к вводу. и увидел что сначала вводятся х1,х2,х3 потом у1,у2,у3 и потом Х и У.

33 Задача: Принадлежит ли точка кругу с центром в начале координат?

Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь.
Последний раз редактировалось SaLoKiN; 31.10.2013 в 05:31 .
Регистрация: 09.01.2008
Сообщений: 26,238

McFrey, попытался распознать ваш алгоритм (выбирая среди этих)
вижу только, что коэффиценты наклона линий вычисляете и сравниваете.

долго вводил разные значения. в 99% случаев всё работало как надо. Но интуиция меня не обманула.. Алгоритм оказался не без бага.
Попробуйте ввести координаты точек треугольника (7,3),(3,-4),(-3,1) и координаты красной точки (5, -3) (иммено в такой последовательности: 7 3 -3 3 -4 1 5 -3.
Ваша программа говорит, что точка принадлежит треугольнику. А, как мы видим, это не так.
треугольник.gif

Регистрация: 17.11.2010
Сообщений: 19,042

Много занимаюсь спортом, не могу решить задачу по паскалю

Дык и учиться нужно в учебное заведение с уклоном в физкультуру, а не в паскаль

Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Форумчанин
Регистрация: 19.09.2013
Сообщений: 597

7 -3 3 3 1 -4 5 -3

Serge_Bliznykov а если так допилить?

var x1,x2,x3,x, y1,y2,y3,y, A,B,C,S:integer; begin read(x1,x2,x3,y1,y2,y3,x,y); S:=(x1-x3)*(y2-y3)-(x2-x3)*(y1-y3); if S=0 then writeln(‘Треугольник не существует. ‘) else begin A:=(x-x3)*(y2-y3)-(x2-x3)*(y-y3); B:=(x1-x3)*(y-y3)-(x-x3)*(y1-y3); C:=(x-x2)*(y1-y2)-(x1-x2)*(y-y2); if (S<0) and (S<=A) and (A<=0) and (S<=B) and (B<=0)and (S<=C) and (C<=0) or (S>0) and (S>=A) and (A>=0) and (S>=B) and (B>=0) and (S>=C) and (C>=0)then writeln(‘Да’) else writeln(‘Нет’) end end.
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь.
Последний раз редактировалось SaLoKiN; 31.10.2013 в 09:55 .

Читайте также:
Установить программу билайн ТВ

Источник: www.programmersforum.ru

Уроки программирования на языке Pascal. Разветвляющиеся алгоритмы. Лежит ли точка на прямой?

Sample Code

Выведите количество вариантов расстановки ладьи на шахматной доске, чтобы ни одна из них не угрожала другой

2016-04-17 11:29:32

Выведите количество вариантов расстановки ладьи на шахматной доске, чтобы ни одна из них не угрожала другой. Размер доски NxN (n вводится пользователем). Предусмотрите возможность вывода и самих вариантов расстановки.

Дан текст из строчных латинских букв, за которым следует точка. Определить каких букв-гласных (a,e,o,i,u) или согласных — больше в этом тексте

2016-04-17 11:27:41
Использовать множество, при выполнении этого задания.

Найдите значения функции y=x2+1,для x=0.2,0.4,0.6. 20

2016-04-17 11:25:18

Задайте форматированный вывод для X всего 5 знаков, из них после запятой-один. Для Y всего восемь знаков, из них после запятой-два.

Вычислить значение функции: y=sin(x/(3+x^5))+lg(1,3x+x^3)

2016-04-17 11:22:13

Дана последовательность целых чисел (от -100 до 100) записанных через пробел. Требуется построить эту последовательность по возрастанию

2016-04-17 11:20:38

Дана последовательность целых чисел (от -100 до 100) записанных через пробел. Требуется построить эту последовательность по возрастанию. Входные данные: в первой строке записано целое число N, во вторйо строке последовательность чисел через пробел. Выходные данные: в единственной строке записать последовательность чисел по возрастанию.

Кодирование методом контроля чётности

2016-04-17 11:18:45

Вводится k — число символов в блоке и последовательность двоичных символов, длина которой кратна (k-1). Если кратность нарушается, то последние символы последовательности игнорируются. Для каждой комбинации из (k-1) символов по методу контроля четности определяется значение k-ого, контрольного, символа и вся комбинация из k символов добавляется в результирующую последовательность, выводимую на экран по окончании кодирования всей входной последовательности символов.

Вывести на экран сумму или произведение чисел в зависимости от условия

2016-04-14 15:10:23

Написать программу, запрашивающую 3 целых числа и выводящая сумму этих чисел на экран, если максимум этих чисел больше 12. Вывод на экран произведения этих чисел, если минимум этих чисел меньше или равен 12.

Источник: samplecode.ru

Принадлежит ли точка треугольнику программа на паскале

Помогите пожалуйста с написанием программы на Паскале)

Разработка программы «Треугольник и точка»
Дана точка А(х, у). Определить, принадлежит ли она треугольнику с вершинами в точках (х1,у1), (х2, у2), (х3,у3). Сделать рисунок.

Регистрация: 08.03.2016
Сообщений: 0
Vladimir_S
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,809
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях

Репутация: 113184

Помогите пожалуйста с написанием программы на Паскале)

Разработка программы «Треугольник и точка»
Дана точка А(х, у). Определить, принадлежит ли она треугольнику с вершинами в точках (х1,у1), (х2, у2), (х3,у3). Сделать рисунок.

Извольте. Правда, сколь я припоминаю, у Вас АВС, и потому с графикой помочь не могу, ну а само решение — вот (обозначения приведены на рисунке):

Читайте также:
Как сохранить значок программы

Var x1,x2,x3,y1,y2,y3,x,y,a,b,c,c1,c2,c3:Real; Sum:Integer; Function ArcCos(z:Real):Real; begin if Round(z*10000000)=10000000 then ArcCos:=0 else if Round(z*10000000)=-10000000 then ArcCos:=Pi else ArcCos:=(Pi/2)-ArcTan(z/SQRT(1-z*z)); end; Function RadGr(t:Real):Real; begin RadGr:=(t/Pi)*180; end; Function Angle(d1,d2,d3:Real):Real; begin Angle:=ArcCos((Sqr(d1)+Sqr(d2)-Sqr(d3))/(d1*d2*2)); end; Begin Write(‘x1 = ‘); Readln(x1); Write(‘y1 = ‘); Readln(y1); Write(‘x2 = ‘); Readln(x2); Write(‘y2 = ‘); Readln(y2); Write(‘x3 = ‘); Readln(x3); Write(‘y3 = ‘); Readln(y3); a:=Sqrt(Sqr(x2-x3)+Sqr(y2-y3)); b:=Sqrt(Sqr(x1-x3)+Sqr(y1-y3)); c:=Sqrt(Sqr(x1-x2)+Sqr(y1-y2)); Writeln(‘Point:’); Write(‘x = ‘); Readln(x); Write(‘y = ‘); Readln(y); Writeln; c1:=Sqrt(Sqr(x-x1)+Sqr(y-y1)); c2:=Sqrt(Sqr(x-x2)+Sqr(y-y2)); c3:=Sqrt(Sqr(x-x3)+Sqr(y-y3)); Sum:=Round(RadGr(Angle(c1,c2,c)+Angle(c2,c3,a)+Angle(c1,c3,b))); Writeln(Sum=360); Readln; End.

triang.jpg

Регистрация: 16.12.2011
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10

Извольте. Правда, сколь я припоминаю, у Вас АВС, и потому с графикой помочь не могу, ну а само решение — вот

О, спасибо огромное) да я уже ABC поменяла на free pascal — невозможно прям, то одно он не понимает, то другое не распознает)

Регистрация: 16.12.2011
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Только вот с рисунком теперь не могу разобраться, как бы правильно сделать(((
Vladimir_S
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург

Сообщений: 27,809
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184

О, спасибо огромное) да я уже ABC поменяла на free pascal — невозможно прям, то одно он не понимает, то другое не распознает)

Очень правильное решение!
Только вот с рисунком теперь не могу разобраться, как бы правильно сделать(((
Постараюсь помочь, но быстро не обещаю: с графикой возни много.
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Vladimir_S
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,809
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
Ну вот, как-то так. Только уж извините — с координатной сеткой возиться не стал. Очень много мороки.

Uses Graph, CRT; Var x1,x2,x3,y1,y2,y3,x,y,a,b,c,c1,c2,c3:Real; Sum:Integer; Xmax,Ymax,Xmin,Ymin,Kx,Ky:Real; Function ArcCos(z:Real):Real; begin if Round(z*10000000)=10000000 then ArcCos:=0 else if Round(z*10000000)=-10000000 then ArcCos:=Pi else ArcCos:=(Pi/2)-ArcTan(z/SQRT(1-z*z)); end; Function RadGr(t:Real):Real; begin RadGr:=(t/Pi)*180; end; Function Angle(d1,d2,d3:Real):Real; begin Angle:=ArcCos((Sqr(d1)+Sqr(d2)-Sqr(d3))/(d1*d2*2)); end; Procedure Search_MinMax(v1,v2,v3,v4:real; var Vmin:real; var Vmax:real); begin Vmin:=v1; if v2Vmax then Vmax:=v2; if v3>Vmax then Vmax:=v3; if v4>Vmax then Vmax:=v4; end; Begin Write(‘x1 = ‘); Readln(x1); Write(‘y1 = ‘); Readln(y1); Write(‘x2 = ‘); Readln(x2); Write(‘y2 = ‘); Readln(y2); Write(‘x3 = ‘); Readln(x3); Write(‘y3 = ‘); Readln(y3); a:=Sqrt(Sqr(x2-x3)+Sqr(y2-y3)); b:=Sqrt(Sqr(x1-x3)+Sqr(y1-y3)); c:=Sqrt(Sqr(x1-x2)+Sqr(y1-y2)); Writeln(‘Point:’); Write(‘x = ‘); Readln(x); Write(‘y = ‘); Readln(y); Writeln; c1:=Sqrt(Sqr(x-x1)+Sqr(y-y1)); c2:=Sqrt(Sqr(x-x2)+Sqr(y-y2)); c3:=Sqrt(Sqr(x-x3)+Sqr(y-y3)); Sum:=Round(RadGr(Angle(c1,c2,c)+Angle(c2,c3,a)+Angle(c1,c3,b))); Writeln(Sum=360); Writeln(‘Press «Enter» to show the picture. ‘); Readln; Search_MinMax(x1,x2,x3,x,Xmin,Xmax); Search_MinMax(y1,y2,y3,y,Ymin,Ymax); InitGraph(. ); Kx:=0.8*GetMaxX/(Xmax-Xmin); Ky:=0.8*GetMaxY/(Ymax-Ymin); SetLineStyle(SolidLn,0,ThickWidth); MoveTo(Round(0.1*GetMaxX+(x1-Xmin)*Kx),Round(0.9*GetMaxY-(y1-Ymin)*Ky)); LineTo(Round(0.1*GetMaxX+(x2-Xmin)*Kx),Round(0.9*GetMaxY-(y2-Ymin)*Ky)); LineTo(Round(0.1*GetMaxX+(x3-Xmin)*Kx),Round(0.9*GetMaxY-(y3-Ymin)*Ky)); LineTo(Round(0.1*GetMaxX+(x1-Xmin)*Kx),Round(0.9*GetMaxY-(y1-Ymin)*Ky)); Circle(Round(0.1*GetMaxX+(x-Xmin)*Kx),Round(0.9*GetMaxY-(y-Ymin)*Ky),2); ReadKey; CloseGraph; End.

tr_1.jpg tr_2.jpg

Регистрация: 16.12.2011
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Ну вот, как-то так. Только уж извините — с координатной сеткой возиться не стал. Очень много мороки.

Uses Graph, CRT; Var x1,x2,x3,y1,y2,y3,x,y,a,b,c,c1,c2,c3:Real; Sum:Integer; Xmax,Ymax,Xmin,Ymin,Kx,Ky:Real; Function ArcCos(z:Real):Real; begin if Round(z*10000000)=10000000 then ArcCos:=0 else if Round(z*10000000)=-10000000 then ArcCos:=Pi else ArcCos:=(Pi/2)-ArcTan(z/SQRT(1-z*z)); end; Function RadGr(t:Real):Real; begin RadGr:=(t/Pi)*180; end; Function Angle(d1,d2,d3:Real):Real; begin Angle:=ArcCos((Sqr(d1)+Sqr(d2)-Sqr(d3))/(d1*d2*2)); end; Procedure Search_MinMax(v1,v2,v3,v4:real; var Vmin:real; var Vmax:real); begin Vmin:=v1; if v2Vmax then Vmax:=v2; if v3>Vmax then Vmax:=v3; if v4>Vmax then Vmax:=v4; end; Begin Write(‘x1 = ‘); Readln(x1); Write(‘y1 = ‘); Readln(y1); Write(‘x2 = ‘); Readln(x2); Write(‘y2 = ‘); Readln(y2); Write(‘x3 = ‘); Readln(x3); Write(‘y3 = ‘); Readln(y3); a:=Sqrt(Sqr(x2-x3)+Sqr(y2-y3)); b:=Sqrt(Sqr(x1-x3)+Sqr(y1-y3)); c:=Sqrt(Sqr(x1-x2)+Sqr(y1-y2)); Writeln(‘Point:’); Write(‘x = ‘); Readln(x); Write(‘y = ‘); Readln(y); Writeln; c1:=Sqrt(Sqr(x-x1)+Sqr(y-y1)); c2:=Sqrt(Sqr(x-x2)+Sqr(y-y2)); c3:=Sqrt(Sqr(x-x3)+Sqr(y-y3)); Sum:=Round(RadGr(Angle(c1,c2,c)+Angle(c2,c3,a)+Angle(c1,c3,b))); Writeln(Sum=360); Writeln(‘Press «Enter» to show the picture. ‘); Readln; Search_MinMax(x1,x2,x3,x,Xmin,Xmax); Search_MinMax(y1,y2,y3,y,Ymin,Ymax); InitGraph(. ); Kx:=0.8*GetMaxX/(Xmax-Xmin); Ky:=0.8*GetMaxY/(Ymax-Ymin); SetLineStyle(SolidLn,0,ThickWidth); MoveTo(Round(0.1*GetMaxX+(x1-Xmin)*Kx),Round(0.9*GetMaxY-(y1-Ymin)*Ky)); LineTo(Round(0.1*GetMaxX+(x2-Xmin)*Kx),Round(0.9*GetMaxY-(y2-Ymin)*Ky)); LineTo(Round(0.1*GetMaxX+(x3-Xmin)*Kx),Round(0.9*GetMaxY-(y3-Ymin)*Ky)); LineTo(Round(0.1*GetMaxX+(x1-Xmin)*Kx),Round(0.9*GetMaxY-(y1-Ymin)*Ky)); Circle(Round(0.1*GetMaxX+(x-Xmin)*Kx),Round(0.9*GetMaxY-(y-Ymin)*Ky),2); ReadKey; CloseGraph; End.
Спасибо)) вы меня спасли))
Регистрация: 16.12.2011
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10

Читайте также:
Какой вид программ обеспечивает интерфейс командной строки в linux

Function ArcCos(z:Real):Real;
begin
if Round(z*10000000)=10000000 then ArcCos:=0 else
if Round(z*10000000)=-10000000 then ArcCos:=Pi else
ArcCos:=(Pi/2)-ArcTan(z/SQRT(1-z*z));
end;

Function RadGr(t:Real):Real;
begin
RadGr:=(t/Pi)*180;
end;

Function Angle(d1,d2,d3:Real):Real;
begin
Angle:=ArcCos((Sqr(d1)+Sqr(d2)-Sqr(d3))/(d1*d2*2));
end;

Procedure Search_MinMax(v1,v2,v3,v4:real; var Vmin:real; var Vmax:real);
begin
Vmin:=v1;
if v2 if v3 if v4 Vmax:=v1;
if v2>Vmax then Vmax:=v2;
if v3>Vmax then Vmax:=v3;
if v4>Vmax then Vmax:=v4;
end;

А можно хотя бы вкратце пояснить, что в каком действии выполняется? я запуталась совсем)
Vladimir_S
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,809

Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
А можно хотя бы вкратце пояснить, что в каком действии выполняется? я запуталась совсем)

Можно. Как я понимаю, только в приведенном фрагменте? Ну пожалуйста.
Прежде всего, на чем основан алгоритм? А вот: соединим, как показано на рисунке в сообщении #2, проблемную точку (обозначим ее т.0) со всеми тремя вершинами треугольника. Теперь если т.0 находится внутри треугольника, то сумма углов с вершиной в т.0 составит 360°, если же вне — то меньше. Вот это и проверяется. Углы ищем по теореме косинусов.

Но для этого нужно иметь функцию арккосинус, в списке стандартных функций Паскаля отсутствующую.
Function ArcCos(z:real):Real; восполняет этот пробел.
Проверять условие равенства суммы углов 360° удобнее, если углы выражены в градусах, а не в радианах. Перевод из радианов в градусы осуществляет функция
Function RadGr(t:real):Real;
Функция
Function Angle(d1,d2,d3:real)Real;
решает задачу нахождения значения угла между сторонами треугольника d1 и d2 по значению этих сторон, а также третьей d3, по теореме косинусов.
И, наконец, о процедуре
Procedure Search_MinMax(v1,v2,v3,v4:real; var Vmin:real; var Vmax:real);
Смысл ее прост: из четырех чисел она находит наименьшее и наибольшее. Нужна она исключительно для оптимального размещения треугольника и точки т.0 на графическом экране, так, чтобы всё это во-первых, поместилось, а во-вторых, чтобы изображение не было мелким, смещенным в сторону и т.п., для чего и надо из координат трех вершин треугольника и точки т.0 найти наибольшую и наименьшую горизонтальные и вертикальные координаты, и уже исходя из них поставить «рамки» и определить масштабный коэффициент для построения изображения.

Вот как-то так. Если еще вопросы появятся, задавайте.

Источник: www.tehnari.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru