Program sprawdzający rodzaj trójkąta

0

Witam, czy mógłby ktoś mi pomóc w zmodyfikowaniu tego programu żeby działał poprawnie. Program ma wczytywać 3 liczby, które są długościami boków trójkąta. Ma sprawdzić czy z podanych długości można utworzyć trójkąt i jaki to będzie trójkąt (prostokątny, równoboczny, równoramienny, inny).

#include <iostream>
#include <math.h>
using namespace std;

   int main ()
{
   double a,b,c;
   cout << "PROGRAM SPRAWDZAJACY TROJKATY \n" <<endl;
   cout << "Podaj dlugosc boku a = ";
   cin>>a;
   cout << "Podaj dlugosc boku b = ";
    cin>>b;
   cout << "Podaj dlugosc boku c = ";
   cin>>c;
   
   if (a+b >c && a+c >b && c+b >a)
   {
    if ((a==b && a+b>c) && (a==c && a+c>b ) && (b==c && b+c>a)){
    	cout << "Podany trojkat to: Trojkat rownoramienny" <<endl;
	}
	if ((a*a+b*b==c*c) || (a*a+c*c==b*b) || (c*c+b*b==a*a)){
		cout << "Podany trojkat to: Trojkat prostokatny" <<endl;
	}
	if ((a==b==c)){ 
	 cout << "Podany trojkat to: Trojkat rownoboczny" <<endl;
	
	}
	
		  }
   else 
      cout << "Z bokow o tej dlugosci nie mozna zbudowac trojkata" <<endl;
   }
  

Proszę o wyrozumiałość, jestem początkujący :(

0

Działania na liczbach "z przecinkiem" nigdy nie są precyzyjne, jesteś pewien że masz takowe obsługiwać? jeśli tak to używaj zamiast == tej funkcji

Edit: jak jeszcze nie mieliście, to fabs() zwraca tzw wartość bezwzględną, czyli np zarówno fabs(0.5 - 0.2) jaki i fabs(0.2 - 0.5) da ten sam wynik czyli gdzieś w okolicach 0.3, czyli nawet jak wyjdzie liczba ujemna przy wyniku to i tak podaje dodatnią.

bool porownaj(double a, double b)
{
    double epsilon = 0.001;
    return fabs(a - b) < epsilon;
}
```'

0

Mam problem z warunkami jakie muszą być spełnione aby sprawdzić czy podany trójkąt jest równoboczny czy równoramienny.
Przy obecnych warunkach często zdarza się, że podane boki mogą być dla trójkąta równobocznego i równoramiennego.

0

Skoro tak to trzeba else-a dodać, i zmienić kolejność if-ów. Swoją drogą co jeśli będzie trójkątem, ale żadnym z tych 3? Dodałem stosowny komunikat

#include <iostream>
#include <math.h>
using namespace std;

   int main ()
{
   double a,b,c;
   cout << "PROGRAM SPRAWDZAJACY TROJKATY \n" <<endl;
   cout << "Podaj dlugosc boku a = ";
   cin>>a;
   cout << "Podaj dlugosc boku b = ";
    cin>>b;
   cout << "Podaj dlugosc boku c = ";
   cin>>c;

   if (a+b >c && a+c >b && c+b >a)
    {
        cout << "podane liczby tworzą trójkąt";
        if ((a*a+b*b==c*c) || (a*a+c*c==b*b) || (c*c+b*b==a*a))
        {
            cout << " prostokatny" <<endl;
        }
        if ((a==b==c))
        {
            cout << " rownoboczny" <<endl;
        }
        else if ((a==b && a+b>c) && (a==c && a+c>b ) && (b==c && b+c>a))
        {
            cout << " rownoramienny" <<endl;
        }
    }
   else
      cout << "Z bokow o tej dlugosci nie mozna zbudowac trojkata" <<endl;
   }


1 użytkowników online, w tym zalogowanych: 0, gości: 1