2017-02-16 3 views
-1

Проверьте, не является ли TriangleExists: каждый раз, когда каждая его сторона меньше суммы двух других.Если оператор с тремя условиями (triangleExists)

Я пробовал много вариантов:

float a=3, b=15, c=7; //its still taking 'y' 
bool triangleExists(float a, float b, float c) 
{ 
    if ((a < (b + c)) || (b < (a + b)) || (c < (a + b))) 
    { 
     std::cout << "y" << std::endl; 
     return true; 
    }else 
     std::cout << "n" << std::endl;; 
     return false; 
} 

Опции я попытался (они также пытались с & & знаков):

  1. if ((a < (b + c)) || (b < (a + b)) || (c < (a + b)))

  2. if (a < (b + c) || b < (a + b) || c < (a + b))

  3. if ((a < (b + c))==true || (b < (a + b))==true || (c < (a + b))==true)

  4. if (a < b + c || b < a + b || (c < a + b)

Я, вероятно, отсутствует что-то простое. Буду рад, если вы сможете помочь.

+1

В чем вопрос и проблема? Кроме того, предоставьте [MVCE] (http://stackoverflow.com/help/mcve). – tambre

+0

* ", когда каждая 1 его сторона меньше суммы двух других" *: вы должны использовать оператор '&&' (логический AND), а не '||' (логический ИЛИ). – lfurini

ответ

2

В вашем среднем состоянии, вы б < (а + б), когда оно должно быть б < (а + с)

+0

hahahahahahahhahahahahahah 30 минут мышления, спасибо. Я действительно устал прошлой ночью. – Marecz

2

Наряду с опечаткой, что @Zackary Мерфи уже указывалось, у вас есть еще фундаментальная проблема с вашей логикой.

В частности, ваша функция должна возвращать true только в том случае, если все три условия переданы. Со средним сроком, скорректированным на b < (a + c), он еще возвращает true (и печатает y), даже если указанные вами цифры не могут образовать треугольник.

Например:

#include <iostream> 

bool triangleExists(float a, float b, float c) 
{ 
    if ((a < (b + c)) || (b < (a + c)) || (c < (a + b))) 
    { 
     std::cout << "y" << std::endl; 
     return true; 
    } 
    else 
     std::cout << "n" << std::endl;; 
    return false; 
} 

int main() { 
    float a = 3, b = 4, c = 500; //its still taking 'y' 

    triangleExists(a, b, c); 
} 

... печатает y, даже если стороны 3, 4 и 500 не могут образовывать треугольник.

Чтобы получить правильное поведение, вы можете изменить с помощью || к && (т.е. от or до and). Кроме того, вы можете инвертировать тест и инвертировать результаты - то есть, если a> (b + c) || b> (a + c) || c> (a + b), затем верните false. Только в противном случае верните true.

+0

Я сделал это уже сегодня. && был моим первым уловком, но когда меня попробовали, он просто поймал все решения, которые могут помочь. в любом случае спасибо за ответ. – Marecz

Смежные вопросы