Условие задачи :
Треугольник задан длинами сторон. Найти радиус вписанной [latex]r[/latex] и описанной [latex]R[/latex] окружностей.
Тесты :
[latex]a[/latex] | [latex]b[/latex] | [latex]c[/latex] | [latex]r[/latex] | [latex]R[/latex] |
3 | 4 | 5 | 1 | 2.5 |
7.5 | 10 | 13 | 2.45012 | 6.52361 |
1 | 3 | 4 | 0 | inf |
1 | 1 | 3 | Не существует! | Не существует! |
Код программы :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <iostream> #include <cmath> using namespace std; int main() { double a, b, c; cin >> a >> b >> c; if (a + b >= c && b + c >= a && a + c >= b) //проверяем, существует ли треугольник { double p = (a + b + c) / 2; double S = sqrt(p * (p - a) * (p - b) * (p - c)); //формула Герона double r = S / p; double R = a* b * c / (4 * S); cout<<"Радиус вписанной окружности равен "<<r<<endl; cout<<"Радиус описанной окружности равен "<<R<<endl; } else //если не существует: cout<<"Треугольник с заданными сторонами не существует!"<<endl; return 0; } |
Алгоритм :
Для начала проверяем, образуют ли вообще данные стороны треугольник. В треугольнике сумма длин любых двух сторон больше длины третьей (или равна ее длине, если треугольник является вырожденным). Если нет, сообщаем об этом пользователю :
9 |
if (a + b >= c && b + c >= a && a + c >= b)//проверяем, существует ли треугольник |
…
18 19 |
else //если не существует: cout<<"Треугольник с заданными сторонами не существует!"<<endl; |
Если треугольник существует, проводим следующие вычисления (порядок сохранен) :
- Вычисляем полупериметр [latex]p[/latex] треугольника: [latex]p[/latex] = [latex]\frac{a + b + c}{2}[/latex]
- Находим площадь [latex]S[/latex] по формуле Герона: [latex]S[/latex] = [latex]\sqrt{p(p-a)(p-b)(p-c)}[/latex]
- Вычисляем радиус [latex]r[/latex] вписанной окружности по формуле: [latex]r[/latex] = [latex]\frac{S}{p}[/latex]
- Вычисляем радиус [latex]R[/latex] описанной окружности по формуле: [latex]R[/latex] = [latex]\frac{abc}{4S}[/latex]
Работающая версия программы на Ideaone.com :
Почитать про треугольник можно здесь :
— Если бы Вы не решили зачем-то перепроверять условие задачи, то работа уже была бы сделана. Но теперь нужно исправить ошибку — правильно записать неравенство треугольника.
— Добавьте ключевые слова на языке публикации.
Спасибо, теги исправил. Не могу понять, где ошибка в неравенстве треугольника? Протестировал еще на Ideaone, работает исправно. Заменить знаки > на >= ? Но в этом не смысла, в этом случае будет 0 и бесконечность соответственно?
Все, спасибо, исправил неравенство.
А в тексте? В невырожденном треугольнике сумма длин двух его сторон больше длины третьей стороны, в вырожденном — равна.
Я зачёл работу, но поправьте, пожалуйста, этот момент в тексте.
Спасибо, исправил.