2015-09-05 3 views
-3

Мой код, чтобы узнать, находится ли треугольник под прямым углом и отображать «правый», если нет, тогда «неправильно», но он работает только в одном формате (меньшие стороны -> гипотенуза, т.е. ввод 6 8 10 дает " право», которое является истинным, но Inputing 8 6 10 или 10 6 8 появляется ошибка, любое другое расположение 3 значений дают ошибку, хотя я установил мой, если заявления на работу в любом порядке.Ошибка теоремы Пифагора в C++

#include <iostream> 
using namespace std; 

int main() 
{ 
    int a, b, c, hypotenuse; 

    while(cin >> a >> b >> c) 
    { 
     if(a > b && a > c) 
     { 
      hypotenuse = a; 

      if(b * b + c * c == hypotenuse) 
       cout << "right" << endl; 
      else 
       cout << "wrong" << endl; 
     } 
     else if(b > a && b > c) 
     { 
      hypotenuse = b; 
      hypotenuse *= hypotenuse; 

      if(a * a + c * c == hypotenuse) 
       cout << "right" << endl; 
      else 
       cout << "wrong" << endl; 
     } 
     else 
      hypotenuse = c; 

     hypotenuse *= hypotenuse; 

     if(a * a + b * b == hypotenuse) 
      cout << "right" << endl; 
     else 
      cout << "wrong" << endl; 
    } 

    return 0; 
} 
+1

Пожалуйста, укажите четкий вопрос. – Martin

+3

Отформатирован код, поэтому вы можете прочитать его в первый раз. Возможно, вы заметите отсутствие '{}' блока после 'else' или что вы не квадрат' hypotenuse' в случае, если это 'a'. – LogicStuff

+1

И вдруг кто-то видит недостающие фигурные скобки вокруг последнего блока: – BitTickler

ответ

5

Я надеюсь, что после того, как @LogicStuff отформатировал код, вы можете видеть, что вы не квадрат гипотенузы, если он a, и что вы пропустили фигурные скобки за последние else.

Однако, еще одна вещь, которую вы должны отметить, это количество дублирования кода, которое у вас есть. В каждой ветви вашего условного кода у вас есть тот же код для печати, является ли этот треугольник правильным. Вы можете сохранить это в логической переменной и переместить логику печати в конце цикла.

Принимая этот шаг дальше, ваша проблема требует, чтобы вы знали, какая сторона треугольника является гипотенузой? Из того, что вы написали, это не так, и в этом случае вы делаете дополнительную работу. Вместо этого вы можете упростить свой код до:

int a, b, c; 
while (cin >> a >> b >> c) 
{ 
    bool right = (b*b + c*c == a*a) 
       || (a*a + c*c == b*b) 
       || (a*a + b*b == c*c); 

    if (right) 
     cout << "right\n"; 
    else 
     cout << "wrong\n"; 
} 
Смежные вопросы