Задача
Треугольник задается координатами своих вершин на плоскости: [latex]A\left(x_{1};y_{1} \right)[/latex], [latex] B\left(x_{2};y_{2} \right)[/latex], [latex] C\left(x_{3};y_{3} \right)[/latex].
Найти сумму длин медиан данного треугольника.
Тесты:
[latex]x_{1}[/latex] | [latex]y_{1}[/latex] | [latex]x_{2}[/latex] | [latex]y_{2}[/latex] | [latex]x_{3}[/latex] | [latex]y_{3}[/latex] | Результат | Прохождение теста |
---|---|---|---|---|---|---|---|
0 | 4 | 0 | 7 | 0 | 2 | Не является треугольником… | Пройден |
51 | 0 | 97 | 0 | 68 | 0 | Не является треугольником… | Пройден |
1 | 7 | 3 | 13 | 6 | 22 | Не является треугольником… | Пройден |
0 | 3 | 0 | 0 | 4 | 0 | 10.3775 | Пройден |
0 | 0 | 1 | 1.7320 | 2 | 0 | 5.1960 | Пройден |
Исходный код программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#include <stdio.h> #include <math.h> int main() { double x1,y1,x2,y2,x3,y3; //координаты вершин// double AF,BM,CN,P; //обозначения медиан и их суммы// printf("Введите координаты точки А\n"); scanf("%lf %lf",&x1,&y1); printf("Введите координаты точки B\n"); scanf("%lf %lf",&x2,&y2); printf("Введите координаты точки C\n"); scanf("%lf %lf",&x3,&y3); if((x1==x2&&x2==x3)||(y1==y2&&y2==y3)||((y2-y1)*(x3-x1)-(x2-x1)*(y3-y1)==0)) //Рассмотрение частных случаев// printf("Не является треугольником, так как данные точки лежат на одной прямой \n"); else { //Вычисления длин медиан;xF,yF,xM,yM,xN,yN;-координаты середин сторон треугольника// AF=sqrt(pow(x1-(x3+x2)/2,2)+pow(y1-(y3+y2)/2,2)); //xF=(x3+x2)/2,yF=(y3+y2)/2;// BM=sqrt(pow((x1+x3)/2-x2,2)+pow((y1+y3)/2-y2,2)); //xM=(x1+x3)/2, yM=(y1+y3)/2;// CN=sqrt(pow((x1+x2)/2-x3,2)+pow((y1+y2)/2-y3,2)); //xN=(x1+x2)/2, yN=(y1+y2)/2;// P=AF+BM+CN;//Вычисление суммы// printf("Сумма медиан треугольника ABC равна: %.4lf" ,P); } return 0; } |
Алгоритм:
- Вводим переменные;
- Вводим координаты точек [latex]A[/latex], [latex]B[/latex], [latex]C[/latex];
- Используем условный оператор для выделения частного случая.
- Если точки будут лежать на одной прямой, то медиан, как и самого треугольника не может быть в принципе. Для проверки используем уравнение прямой, проходящей через две несовпадающие точки: [latex]\frac{y-y_{1}}{y_{2}-y_{1}}=\frac{x-x_{1}}{x_{2}-x_{1}}[/latex]. С помощью эквивалентных преобразований получаем формулу:[latex]\left(y_{2}-y_{1} \right) \left(x-x_{1}\right)-\left(y-y_{1} \right) \left(x_{2}-x_{1}\right)=0[/latex] c помощью которой (подставив вместо [latex]x[/latex] и [latex]y[/latex] [latex]x_{3}[/latex] и [latex]y_{3}[/latex] соответственно) сможем определить, находятся ли данные точки на одной прямой).
- В случае, если точки не находятся на одной прямой, находим длины отрезков соединяющих середины сторон с противоположными им вершинами(эти отрезки и являются медианами); (Координаты середин отрезков находим по формулам: [latex]\frac{\left(x_{1}+x_{2} \right)}{2}[/latex], [latex]\frac{\left(y_{1}+y_{2} \right)}{2}[/latex], где [latex]\left(x_{1};y_{1} \right)[/latex] и [latex]\left(x_{2};y_{2} \right)[/latex] — координаты концов отрезка, середину которого мы находим. Длину медианы находим по формуле: [latex]AB=\sqrt{\left(x_{1}-x_{2} \right)^{2}+\left(y_{1}-y_{2} \right)^{2}}[/latex] , где [latex]\left(x_{1};y_{1} \right)[/latex] и [latex]\left(x_{2};y_{2} \right)[/latex] — координаты точек [latex]A[/latex] и [latex]B[/latex] соответственно).
- Находим сумму длин этих отрезков. (Простое сложение).
«где (x1-y1)» пропущена запятая перед где и опечатка (минус) в формуле.
То что Вы назвали уравнением прямой, является условием того, что точка (x3,y3) принадлежит прямой, заданной аналогичным уравнением, только в котором вместо x3 — x , вместо y3 записан y. (Обычно в уравнении прямой переменные обозначаются как x и y). Чтобы получить условие нужно подставить x3, y3 вместо x, y.
Спасибо, исправил.
И все таки перед «где …. — координаты концов» запятой не хватает, пишем [некоторая формула] [запятая] где [что-то] [тире] [объяснение что].
«Координаты точек» и далее само название точек (A, B, и т.д.), как формулы.
После двоеточий и до открывающих скобок должны быть пробелы (если конечно строка не начинается на открывающую скобку или не кончатся на двоеточие).
Сделано.
Я немного подправил форматирование Вашего текста. Если на Ваш взгляд стало хуже, то всегда можно вернуться к старому варианту.
Я бы не стал задавать исходные данные со столькими знаками после запятой. Это делает таблицу очень широкой и по сути ничего не проверяет. Или я ошибаюсь?
Засчитано, 10 баллов.