Другие языки программирования и технологии
Программа, определяющая принадлежность точек к прямой(язык программирования С)
Необходимо написать программу в С, которая по трем заданным точкам в 2Д плоскости определит, лежат ли они на одной прямой. Точки заданы как 2 целых числа. Также программа должны контролировать правильность вводимых данных, указывать какая точка находится посередине(если лежат на одной прямой), учитывать что 2 точки могут совпадать. Заранее благодарен тем, кто хоть чем то сможет помочь, только начал учиться программированию и это мое первое задание)
Должно выполняться условие (x1 - x2) / (y1 - y2) - (x1 - x3) / (y1 - y3) = 0
Не забывай про погрешность при операциях с плавающей точкой и то, что С для целых чисел будет использовать целочисленное деление (т. е. 5 / 2 = 2 в С. (double) 5 / 2 = 2.5)
Не забывай про погрешность при операциях с плавающей точкой и то, что С для целых чисел будет использовать целочисленное деление (т. е. 5 / 2 = 2 в С. (double) 5 / 2 = 2.5)
Пусть точки - начальная и конечные точки отрезка. clip_image004- произвольная точка на плоскости.
Вектор с началом в точке clip_image006 и концом в точке clip_image008будет иметь координаты (x2-x1, y2-y1).
Если P(x, y) – произвольная точка, то координаты вектора clip_image010равны: (x-x1, y – y1).
Точка Р будет принадлежать отрезку если:
Векторы в clip_image010[1] и clip_image015 коллинеарны (равно нулю их векторное произведение):
clip_image017, т. е. (x-x1)(y2-y1)-(y-y1)(x2-x1) = 0
Абсцисса точки P удовлетворяет условию: clip_image019 или clip_image021. Иначе точка будет находиться на прямой левее или правее отрезка.
Program geom3;
Const _Eps: Real = 1e-3; {точность вычислений}
var x1,y1,x2,y2,x,y:real;
Function RealEq(Const a, b:Real):Boolean; {строго равно}
begin
RealEq := Abs(a-b)<= _Eps
End; {RealEq}
Function RealMoreEq(Const a, b:Real):Boolean; {больше или равно}
begin
RealMoreEq := a - b >= _Eps
End; {RealMoreEq}
Function EqPoint(x1,y1,x2,y2:real):Boolean;
{Совпадают ли две точки на плоскости}
begin
EqPoint:=RealEq(x1,x2)and RealEq(y1,y2)
end; {EqPoint}
Function AtOtres(x1,y1,x2,y2,x,y:real):Boolean;
{Проверка принадлежности точки P отрезку P1P2}
Begin
If EqPoint( x1,y1,x2,y2)
Then AtOtres:= EqPoint( x1,y1,x,y)
{точки P1 и P2 совпадают, результат определяется совпадением точек P1 и P}
Else
AtOtres := RealEq((x-x1)*(y2-y1)- (y-y1)*(x2-x1),0)and (RealMoreEq(x,x1)and
RealMoreEq( x2,x)Or RealMoreEq(x,x2)and RealMoreEq( x1,x))
end; {AtOtres}
begin {main}
writeln(Введите координаты точек: x1,y1,x2,y2,x,y');
readln( x1,y1,x2,y2,x,y);
if AtOtres(x1,y1,x2,y2,x,y)
then writeln('Да.')
else writeln('Нет.);
end. {main}
Результаты выполнения программы.
Введите координаты точек: x1, y1, x2, y2, x,y
0.5 1 2.5 2.8 1.203 1.633
Да.
Вектор с началом в точке clip_image006 и концом в точке clip_image008будет иметь координаты (x2-x1, y2-y1).
Если P(x, y) – произвольная точка, то координаты вектора clip_image010равны: (x-x1, y – y1).
Точка Р будет принадлежать отрезку если:
Векторы в clip_image010[1] и clip_image015 коллинеарны (равно нулю их векторное произведение):
clip_image017, т. е. (x-x1)(y2-y1)-(y-y1)(x2-x1) = 0
Абсцисса точки P удовлетворяет условию: clip_image019 или clip_image021. Иначе точка будет находиться на прямой левее или правее отрезка.
Program geom3;
Const _Eps: Real = 1e-3; {точность вычислений}
var x1,y1,x2,y2,x,y:real;
Function RealEq(Const a, b:Real):Boolean; {строго равно}
begin
RealEq := Abs(a-b)<= _Eps
End; {RealEq}
Function RealMoreEq(Const a, b:Real):Boolean; {больше или равно}
begin
RealMoreEq := a - b >= _Eps
End; {RealMoreEq}
Function EqPoint(x1,y1,x2,y2:real):Boolean;
{Совпадают ли две точки на плоскости}
begin
EqPoint:=RealEq(x1,x2)and RealEq(y1,y2)
end; {EqPoint}
Function AtOtres(x1,y1,x2,y2,x,y:real):Boolean;
{Проверка принадлежности точки P отрезку P1P2}
Begin
If EqPoint( x1,y1,x2,y2)
Then AtOtres:= EqPoint( x1,y1,x,y)
{точки P1 и P2 совпадают, результат определяется совпадением точек P1 и P}
Else
AtOtres := RealEq((x-x1)*(y2-y1)- (y-y1)*(x2-x1),0)and (RealMoreEq(x,x1)and
RealMoreEq( x2,x)Or RealMoreEq(x,x2)and RealMoreEq( x1,x))
end; {AtOtres}
begin {main}
writeln(Введите координаты точек: x1,y1,x2,y2,x,y');
readln( x1,y1,x2,y2,x,y);
if AtOtres(x1,y1,x2,y2,x,y)
then writeln('Да.')
else writeln('Нет.);
end. {main}
Результаты выполнения программы.
Введите координаты точек: x1, y1, x2, y2, x,y
0.5 1 2.5 2.8 1.203 1.633
Да.
Похожие вопросы
- Люди как сделать легкую программу на паскале, и вобще какой язык программирования лучше для новичка
- На каком простом языке программирования можно создать такую программу?
- Как создать программу, зная язык программирования?
- Будут ли программисты когда нибуть для создания программ использовать русскоязычные языки программирования?
- Помогите написать программу на любом языке программирования
- Какие программы нужны, и какие языки программирования нужно знать для того..
- На каком языке программирования проще всего писать программы?
- Какой язык программирования использует программа PureBusic? Какой язык программирования использует программа PureBusic?
- почему процессор компьютера не может исполнять программы написанные на языке программирования Basic или Pascal
- Какие программы написаны на языках программирования?