Как вычислить площадь и периметр треугольника по 3 сторонам? Проверить возможно ли его создать?
Нашел и немного переделал вот такой пример
#include "stdafx.h"
#include "iostream"
#include "math.h"
#include "conio.h"
using namespace std;
float qwer(float x1, float x2, float y1, float y2) {
float d;
d = sqrt(y2 - y1)*(y2 - y1) + (x2 - x1)*(x2 - x1);
return d;
}
float per(float a, float b, float c) {
return (a + b + c) / 2;
}
int main()
{
setlocale(LC_ALL, "Rus");
float x[3], y[3];
int i;
for (i = 0; i < 3; i++) {
cout << "Введите координаты " << i + 1 << " точки: ";
cin >> x[i] >> y[i];
}
float a, b, c;
a = qwer(x[0], x[1], y[0], y[1]);
b = qwer(x[1], x[2], y[1], y[2]);
c = qwer(x[2], x[0], y[2], y[0]);
float pt;
pt = (a, b, c);
cout << "Площадь треугольники" << sqrt(pt*(pt - a)*(pt - b)*(pt - c)) << endl;
_getch();
return 0;
}
но после ввода значений выдает вот что
Введите координаты 1 точки: 1 2
Введите координаты 2 точки: 3 -1
Введите координаты 3 точки: 2 5
Площадь треугольника-nan(ind)
int main()
{
double x[3], y[3];
for (int i = 0; i < 3; i++) {
cout << "Введите координаты " << i + 1 << " вершины: ";
cin >> x[i] >> y[i];
}
cout << "Площадь треугольника "
<< fabs((x[1]-x[0])*(y[2]-y[0])-(x[2]-x[0])*(y[1]-y[0]))/2
<< endl;
}
Если, конечно, вы ищете по трем вершинам, как в исходном коде, а не по сторонам, как в заголовке вопроса...
По сторонам:
int main()
{
double l[3];
for (int i = 0; i < 3; i++) {
cout << "Введите длину " << i + 1 << " стороны: ";
cin >> l[i];
}
double p = (l[0]+l[1]+l[2])/2;
p *= (p-l[0])*(p-l[1])*(p-l[2]);
if (p <= 0.0)
cout << "Треугольник не существует\n";
else
cout << "Площадь треугольника " << sqrt(p) << endl;
}
Если смотреть условие задачи текстом:
Заданы длины трех сторон.
Код в вопросе решает другую задачу: находит площадь по координатам трех точек. Сначала вычисляются длины сторон (a, b, c), потом используется формула Герона.
Ошибки в коде две:
sqrt(y2 - y1)*(y2 - y1) + (x2 - x1)*(x2 - x1)
- квадратный корень берется только от первой скобки. Добавьте общие скобки: sqrt((y2 - y1)*(y2 - y1) + (x2 - x1)*(x2 - x1))
pt = (a, b, c);
- здесь предполагается вызов функции вычисления полупериметра (в коде это per
) для последующего использования в формуле Герона. Собственно, пропущено имя функции, должно быть так: pt = per(a, b, c);
pr = (a + b + c) / 2;
Полупериметр у вас вычисляется один раз, вычисляется в одну строку, зачем заводить для этого отдельную функцию?Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте, третий час сижу и не могу понять, выдает ошибку при выходе из функции Get_write, помогите пожалуйста!
Вопрос на счет подключения своих классов в cli, есть код, и при подключении класса с интами все хорошо, но при попытке подключить со string выдает...
Что означает запись vector<unsigned char> vec(300)? Именно если в конструктор передается число