2015-01-31 3 views
-1

Я пытаюсь создать программу, которая может использовать отношения для определения типа вычисляемого треугольника. Я попробовал float и double declarations, но в любом случае конечный результат неверен и судит меня с ума. В основном программа не распознает «c» как равную a/b для каждого подобного значения. (Например, введите 7 7 для сторон a и b и 60 для угла, должны давать равностороннее, но это не так.) Любые идеи как я могу это решить? Спасибо огромное!Как использовать отношения btwn 3 integers для определения треугольника и/или какую декларацию я могу использовать для работы этой программы?

#include <iostream> 
#include <cmath> 
#define pi 3.14159265358989 

using namespace std; 

int main() 
{ 
float a, b, c, d, C; 


cout << "Hello. I can calculate the missing length of a triangle" << endl; 
cout << "by using using the information you provide." << endl; 
cout << "Please enter two positive integers between 1-99 and separate them with a space. " << endl; 
cin >> a >> b; 
cout << "Side 1 equals: " << a << endl; 
cout << "Side 2 equals: " << b << endl; 
cout << "Please enter the angle between the two sides you just entered. " << endl; 
cin >> d; 

C = d * (pi/180); // convert rad to deg 
//Compute missing side 
c = sqrt((a*a) + (b*b) - 2 * a * b * cos(C)); 
cout << "The length of the third side of the triangle is: " << c << endl; 

if (a == b && b == c) //all sides are equal 
    cout << "This is an Equilateral Triangle." << endl; 

else if (a == b && b != c) // if 2 sides are equal 

    cout << "This is an Isosceles Triangle. " << endl; 

else if (a != b && b != c) // if no sides are equal 

    cout << "This is a Scalene Triangle. " << endl; 


    system ("pause"); 
    return 0; 

}

+2

ли проблема, что 'c' подобно' 7.00001' или что это полностью далеко? Если первое, см. [Сравнение двух поплавков] (http://stackoverflow.com/q/17333/2069064) – Barry

+0

Я не уверен на 100%. Поскольку я прошу программу рассказать мне значения, и они все одинаковы, но (a == b && b == c) не согласен. Я довольно новичок в программировании, но я предполагаю, что это будет проблемой. Благодаря! – GamerJ

ответ

0

Вы не можете использовать == для сравнения с плавающей точкой или двойной, по крайней мере, не в какой-либо значимым образом на вашем примере.

Вы должны указать, что 2 поплавка равно друг другу. i.e: что такое разность epsilon между 2 поплавками, которая достаточно мала, чтобы вы считали их равными.

Посмотрите это.

What is the most effective way for float and double comparison?

+0

Понял, спасибо. – GamerJ