Задача ML18
Условие задачи
Найти периметр треугольника по заданным координатам вершин [latex]A(x_1,y_1,z_1)[/latex], [latex]B(x_2,y_2,z_2)[/latex] и [latex]C(x_3,y_3,z_3)[/latex].
Входные данные
В одной строке заданы 9 чисел [latex]x_1, x_2, x_3, y_1, y_2, y_3, z_1, z_2, z_3[/latex] — координаты вершин треугольника [latex]ABC[/latex], значения которых не превышают по модулю [latex]100[/latex].
Выходные данные
Вывести периметр [latex]p[/latex] данного треугольника.
Также условие задачи можно посмотреть здесь.
Тестирование
№ | Входные данные ([latex]x_i, y_j, z_k; i, j, k= 1, 2, 3 [/latex]) | Выходные данные |
1 | 2 2 5 1 0 -1 3 5 10 | 16.0261556346 |
2 | 1 4 5 3 6 0 10.5 -2 -1 | 31.9047289894 |
3 | 15 26 13 32 18 56 80 0 -6.2 | 212.0962807371 |
4 | -13 68 44 99 -100 70 0 2 1 | 450.5748518262 |
5 | 100 9 17 18 29 88 65 -16 0.36 | 310.4318979186 |
Реализация
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <iostream> #include <iomanip> #include <cmath> using namespace std; int main () { double x1, x2, x3, y1, y2, y3, z1, z2, z3; long double a, b, c, p; //стороны AB, BC, AC треугольника ABC обозначим //соответственно, используя переменные a, b, c //используем значения переменных с плавающей точкой cin >> x1 >> x2 >> x3 >> y1 >> y2 >> y3 >> z1 >> z2 >> z3; a= sqrt((x2-x1) * (x2-x1) + (y2-y1) * (y2-y1) + (z2-z1) * (z2-z1)); b= sqrt((x3-x2) * (x3-x2) + (y3-y2) * (y3-y2) + (z3-z2) * (z3-z2)); c= sqrt((x3-x1) * (x3-x1) + (y3-y1) * (y3-y1) + (z3-z1) * (z3-z1)); p= a + b + c; //вычисляем периметр cout << fixed << setprecision(10) << p << endl; //выводим периметр треугольника с точностью до 10 (включительно) знаков после запятой return 0; } |
Алгоритм решения
- Задан произвольный треугольник [latex]ABC[/latex] с такими координатами вершин: [latex]A(x_1,y_1,z_1)[/latex], [latex]B(x_2,y_2,z_2)[/latex] и [latex]C(x_3,y_3,z_3)[/latex]. Обозначим стороны треугольника [latex] AB, BC, AC[/latex] как [latex]a, b, c[/latex] соответственно.
- Очевидно, что для того, чтобы вычислить периметр данного треугольника, нужно найти длины его сторон. Для этого воспользуемся формулой вычисления расстояния между двумя точками в пространстве. Получаем:[latex]a=\sqrt {(x_2-x_1)^2 + (y_2-y_1)^2 + (z_2-z_1)^2}[/latex]; [latex]b= \sqrt {(x_3-x_2)^2 + (y_3-y_2)^2 + (z_3-z_2)^2}[/latex]; [latex]c= \sqrt {(x_3-x_1)^2 + (y_3-y_1)^2 + (z_3-z_1)^2} [/latex].
- Зная значения сторон треугольника, вычисляем периметр, используя формулу. Получаем: [latex]p= a + b + c[/latex].
Подробнее о декартовой системе координат можно прочесть здесь.
Для запроса на выполнение следует перейти по ссылке.
Риторические вопросы:
— Почему в программе появился abs()?
— Почему координаты вершин целые?
Спасибо, исправила. Для значений координат использован тип данных double, что и в тестах также учтено.
Хорошо получилось. Зачтено.
Только поправьте «значения сторон треугольника». Наверное имелось в виду «длины», а не «значения».