e-olymp 944. Площадь пирамиды

Задача

Треугольная пирамида задана координатами своих вершин [latex] A(x_1; y_1; z_1), B(x_2; y_2; z_2), C(x_3; y_3; z_3), S(x_4; y_4; z_4) [/latex]. Определить площадь полной поверхности пирамиды.

Входные данные

В четырех строках заданы координаты [latex] x, y, z [/latex] вершин пирамиды. Все числа целые, не превышающие по модулю 100.

Выходные данные

Вывести полную поверхность пирамиды с точностью до десятых.

Тесты

Входные данные Выходные данные
1 -3 0 0 69,8
0 6 0
3 0 0
0 2 5
2 2 4 8 159,1
2 -6 9
5 -4 0
1 3 0
3 5 0 1 107,3
4 1 7
-9 0 4
6 2 8

Код программы

Решение задачи

Для того, чтобы найти площадь полной поверхности пирамиды, необходимо найти площади треугольников, которые являются гранями пирамиды.
Для нахождения площади треугольника можно воспользоваться формулой Герона: [latex] S = \sqrt{p \cdot(p-a) \cdot(p-b) \cdot(p-c)} [/latex],где [latex] p [/latex]-полупериметр треугольника, [latex] a,b,c [/latex] — стороны треугольника. Чтобы воспользоваться формулой Герона, необходимо предварительно найти длины сторон треугольников, используя формулу нахождения длин отрезков по координатам концов отрезка: [latex] |AB|=\sqrt{(x_b-x_a)^2+(y_b-y_a)^2+(z_b-z_a)^2} [/latex], где [latex] А,В [/latex] — концы отрезка, [latex] x_a, y_a,z_a [/latex] — координаты [latex] А [/latex], [latex] x_b, y_b,z_b [/latex] — координаты [latex] В [/latex].
Найденные площади всех треугольников, из которых состоит пирамида, складываем и получаем искомую площадь полной поверхности пирамиды.

Ссылки

e-olymp
ideone

5 thoughts on “e-olymp 944. Площадь пирамиды

  1. У Вас одна и та же довольно сложная формула используется неоднократно. Лучше оформить ее в виде функции. Также можно создать структуры точка, ребро, грань и работать с ними. Или хотя бы просто с точками.

    В исходный код попали тэги оформления, нужно их удалить.

  2. И лучше использовать нижние индексы — $A(x_1; y_1; z_1).$
    Не нужно комбинировать h2 и strong. Вполне достаточно h2.
    Зачем Вы считаете сначала периметр, а потом умножаете на 0.5, чтобы получить полупериметр? Можно ведь сразу умножить на 0.5 или разделить на 2?

  3. Стало лучше, но хорошо не стало. Вы по прежнему все подготовительные операции делаете в основном коде. Можно так написать, чтобы в функцию вычисления площади передавались три точки, а она там уже сама вызывала вычисление расстояний, периметров и т.п.? Логика такая — спрашивают про площадь, значит все остальное нечего показывать в главной программе. Только ввод и вывод суммы четырех площадей. Остальное в функции.
    И еще одно пока не обязательное замечание. Вы выполняете это начальное задание уже зная про ООП. Может сделать класс/структуру точки, и/или вектора, и/или треугольника?

    И еще:
    — Код по ссылке отличается от того, что в статье
    — Первую формулу лучше разбить на три по пробелам.
    — Нужно убрать кириллицу из адреса статьи.

Добавить комментарий