Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Могут ли значения быть сторонами треугольника?


Автор: Mastodont 22.1.2010, 14:56
Есть задача:

Цитата

Напишите программу, которая читает три ненулевые значения типа double, определяет и печатает, могут ли они представлять стороны треугольника.


А если они не равны нулю, то даже если каждая будет равна 1, они все равно смогут быть сторонами треугольника. Только если отрицательными, тут вопрос..?

Я знаю только теорему о том, что сумма углов треуг. должна быть 180 градусов. А насчет длин сторон не слышал.

Автор: azesmcar 22.1.2010, 15:02
Найти самую длинную из сторон, если сумма остальных двух <= максимальной - такого треугольника быть не может. 

По логике вроде бы так, теорем уже не помню.

Добавлено через 6 минут и 21 секунду
Еще проще, даже максимум находить не надо. Сумма двух любых сторон треугольника больше длины третьей стороны.

Автор: artsb 22.1.2010, 15:33
Цитата(Mastodont @  22.1.2010,  14:56 Найти цитируемый пост)
Только если отрицательными, тут вопрос..?

А разве бывают отрицательные длины сторон...  smile

Добавлено через 9 минут и 42 секунды
Цитата(azesmcar @  22.1.2010,  15:02 Найти цитируемый пост)
Сумма двух любых сторон треугольника больше длины третьей стороны.

Первый вариант будет правильнее.
Допустим, длины равны: 10, 3, 2
Если не найти максимальную, а тупо сложить первые две и убедиться, что 13 > 2, то получается, что такой треугольник можно построить.

Автор: bsa 22.1.2010, 15:49
artsb, azesmcar написал, что суммах 2-х любых сторон больше третьей. Это значит, что ты должен взять все возможные комбинации и проверить... Правда, можно взять 2 наименьших стороны и сравнить их сумму с третьей.

Автор: artsb 22.1.2010, 15:57
Цитата(bsa @  22.1.2010,  15:49 Найти цитируемый пост)
можно взять 2 наименьших стороны и сравнить их сумму с третьей. 

это первый вариант от azesmcar. Я и говорю про его верность.

Цитата(bsa @  22.1.2010,  15:49 Найти цитируемый пост)
написал, что суммах 2-х любых сторон больше третьей. Это значит, что ты должен взять все возможные комбинации и проверить...

Возможно. Но даже если и так, то первый вариант будет быстрее ИМХО.

Автор: azesmcar 22.1.2010, 16:04
Цитата(artsb @  22.1.2010,  15:57 Найти цитируемый пост)
это первый вариант от azesmcar. Я и говорю про его верность.

Цитата

Сумма двух любых сторон треугольника больше длины третьей стороны.


Любых - имелось ввиду всех, тут уже надо посмотреть что легче реализовать.

Цитата(artsb @  22.1.2010,  15:57 Найти цитируемый пост)
Возможно. Но даже если и так, то первый вариант будет быстрее ИМХО. 

Код

bool isTriangle1(int d1, int d2, int d3)
{
    return (d1 + d2 > d3 && d1 + d3 > d2 && d2 + d3 > d1);
}

во втором варианте будет что-то вроде этого, по любому надо делать сравнения чтобы получить максимум.

Автор: artsb 22.1.2010, 16:27
azesmcar, это больше похоже на второй вариант.

Добавлено через 1 минуту и 47 секунд
А первый можно так реализовать:
Код

inline double _max(double a, double b) {
 return a>b?a:b;
}
//---------------------------------------------------------------------------
inline double _min(double a, double b) {
 return a<b?a:b;
}
//---------------------------------------------------------------------------
bool IsTriangle(double a, double b, double c) {
 return (_min(a,b)+_min(_max(a,b),c))>_max(a,_max(b,c));
}

Автор: azesmcar 22.1.2010, 16:29
Цитата(artsb @  22.1.2010,  16:27 Найти цитируемый пост)
azesmcar, это больше похоже на второй вариант. 

Ну так это он и есть smile 
Это для демонстрации того, что он не такой уж и страшный smile 

Автор: artsb 22.1.2010, 16:32
Цитата(azesmcar @  22.1.2010,  16:29 Найти цитируемый пост)
Ну так это он и есть

Я не так понял вашу фразу:
Цитата(azesmcar @  22.1.2010,  16:04 Найти цитируемый пост)
во втором варианте будет что-то вроде этого

Я подумал: это первый вариант, а во втором будет что-то типа этого smile

Цитата(azesmcar @  22.1.2010,  16:29 Найти цитируемый пост)
Это для демонстрации того, что он не такой уж и страшный

Действительно.

Автор: kemiisto 22.1.2010, 16:49
Цитата(azesmcar @  22.1.2010,  16:02 Найти цитируемый пост)
Сумма двух любых сторон треугольника больше длины третьей стороны.

Если вдруг преподаватель придерёться - учтите, это сформулировано неверно. 
Цитата
Длина любой стороны треугольника всегда не превосходит сумму длин двух его других сторон.

Неравенство треугольника.

И соотвественно неверные знаки:
Код
return (d1 + d2 > d3 && d1 + d3 > d2 && d2 + d3 > d1);


Везде должно быть >=. Случай с равенством - вырожденный треугольник. Но мало ли...

Автор: azesmcar 22.1.2010, 16:51
Цитата(kemiisto @  22.1.2010,  16:49 Найти цитируемый пост)
Везде должно быть >=. Случай с равенством - вырожденный треугольник. Но мало ли... 

не знал что это называется треугольником.

Цитата(kemiisto @  22.1.2010,  16:49 Найти цитируемый пост)
Если вдруг преподаватель придерёться - учтите, это сформулировано неверно. 

 smile 

Автор: artsb 22.1.2010, 17:44
Цитата(kemiisto @  22.1.2010,  16:49 Найти цитируемый пост)
Везде должно быть >=. 

Тогда получается линия, а не треугольник.

Автор: kemiisto 22.1.2010, 17:51
Цитата(artsb @  22.1.2010,  18:44 Найти цитируемый пост)
Тогда получается линия, а не треугольник.

Цитата(kemiisto @  22.1.2010,  17:49 Найти цитируемый пост)
Случай с равенством - вырожденный треугольник.

Автор: artsb 22.1.2010, 18:14
Ага. Но на рисунке это будет линия smile

Автор: kemiisto 22.1.2010, 18:16
Цитата(artsb @  22.1.2010,  19:14 Найти цитируемый пост)
Ага. Но на рисунке это будет линия

 smile Как корабль назовёшь, ... smile 

Автор: Loner 23.1.2010, 08:59
14 постов обсуждать неравенство треугольника... Я плакал  smile 

Автор: artsb 23.1.2010, 09:47
Вообще-то, мы обсуждали: как узнать, можно ли построить треугольник со сторонами введёнными пользователем.

Добавлено через 33 секунды
 smile 

Автор: Mastodont 25.1.2010, 15:13
Цитата

14 постов обсуждать неравенство треугольника... Я плакал


Да, мне тоже понравилось  smile 

Спасибо всем за пояснения  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)