На оси абцисс найти такую точку, сумма расстояний, которой до точек А и В-наименьшая для всех точек - PascalABC.NET
Формулировка задачи:
Даны действительные числа х1,у1,х2,у2(х1 не равен х2),которые определяют 2 точки А(х1,у1) и В(х2,у2).На оси абцисс найти такую точку,сумма расстояний,которой до точек А и В-наименьшая для всех точек этой оси.
Аналитическая геометрия 9-10 класс,нашёл формулу по нахождению расстояния и получению сумму но результаты совсем не те.
Сначала решил решить при помощи уравнения прямой через 2 точки с нахождением коэффициента и приравниваю к нулю,и последующего нахождения х.
Но выяснилось что такой код неверен и неверно считает коэффициенты.
Немного подправил и в просторах интернета нашёл другую формулу для нахождения точки с суммой расстояний.
И вот здесь интересно ваше мнение,правильно ли я двигаюсь.
или же в 1-ом варианте нужна доработка.
Листинг программы
- program labwork1;
- uses crt;
- var
- x1,y1,x2,y2:real;
- a,c,b,kb:real;
- procedure one();
- begin
- writeln('Введите координаты точки А');
- readln(x1,y1);
- writeln('Введите координаты точки В');
- readln(x2,y2);
- if x1<>x2 then
- begin
- a:= y2-y1;
- b:= x1-x2;
- c:= -x1*(y2-y1)+y1*(x2-x1);
- kb:=c/a;
- writeln('Уравнение прямой: ',a:5:1,'x + ',b:5:1,'y+',c:5:1,'=0');
- writeln('При y = 0 ,находим x= ',kb:0:2,' ','который и является точкой заданной в условии задачи')
- end
- else
- writeln('Ошибка при условии!Программа завершена!')
- end;
- begin
- one();
- end.
Листинг программы
- program labwork1;
- var
- x1,y1,x2,y2:real;
- a,c,b,kb:real;
- procedure one();
- begin
- writeln('Введите координаты точки А');
- readln(x1,y1);
- writeln('Введите координаты точки В');
- readln(x2,y2);
- if x1<>x2 then
- begin
- kb:=sqrt(sqr(x2-x1)+sqr(y2-y1));
- kb:=kb+1;
- writeln('Сумма расстояний наименьшей точки равно = ',kb:0:2)
- end
- else
- writeln('Ошибка при условии!Программа завершена!')
- end;
- begin
- one();
- end.
Решение задачи: «На оси абцисс найти такую точку, сумма расстояний, которой до точек А и В-наименьшая для всех точек»
textual
Листинг программы
- program labwork1;
- var
- x, x1, y1, x2, y2: real;
- k, b: real;
- begin
- writeln('Введите координаты точки А');
- readln(x1, y1);
- writeln('Введите координаты точки В');
- readln(x2, y2);
- if (y1 = 0) and (y2 = 0) then
- begin
- if x1<x2 then writeln('x любое значение от ',x1:0:1,' до ',x2:0:1)
- else writeln('x любое значение от ',x2:0:1,' до ',x1:0:1);
- end
- else if y1=0 then x:=x1
- else if y2=0 then x:=x2
- else
- begin
- if (y1 * y2 > 0) then y1 := -y1;
- k := (y2 - y1) / (x2 - x1);
- b := (x2 * y1 - y2 * x1) / (x2 - x1);
- x := -b / k;
- end ;
- writeln('Точка, удовлетворяющая условию, на оси x = ', x:0:1)
- end.
Объяснение кода листинга программы
- Задаются координаты точек А и В
- Проверяется условие задачи: если координаты точек А и В на одной прямой, проходящей через начало координат, то находится точка, удовлетворяющая условию, и выводится её координата x
- Если условие не выполняется, то программа выводит сообщение о том, что прямая, проходящая через точки А и В, пересекает ось x в произвольном месте
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д