Sprawdzanie czy z podanych długości odcinków można zbudować trójkąt

0

Witam potrzebuję pomocy. Mianowicie co w tym programie jest źle że nie chce działać? Wiem że jest dużo rozwiązań tego zadania w sieci ale chciałbym dojśc do tego własnym sposobem.
Tematem zadania jest program który popodaniu trzech wartosci (długosci odcinków) sprawdzi czy można z niego zrobić trójkąt i jesli tak to jaki.

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

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

    cout << "Podaj dlugosc pierwszego odcinka: "<< endl;
    cin >> a;
    cout << "Podaj dlugosc drugiego odcinka: "<< endl;
    cin >> b;
    cout << "Podaj dlugosc trzeciego odcinka: "<<endl; 
    cin >> c;

    if ((a+b>c) || (a+c>b) || (c+b>a))
    {
        cout << "Z tych odcinkow mozna zrobic trojkat" << endl;
        if ((a*a + b*b ==c*c) || (a*a + c*c == b*b) || (c*c + b*b = a*a))
        {
            cout << "To jest trojkat prostokatny" << endl;
        }
        else if ((a==b) && (b==c))
        {
            cout << "To jest trojkat rownoboczny" << endl;
        }
        
        if ((a == b && c != a) || (a == c && b != a) || (b == c && b != a))
        {
            cout << "To jest trojkat rownoramienny" << endl;
        }

        else if (a != b && a != c && b != c)
        {
            cout << "To jest trojkat roznoboczny" << endl;
        }
       
    }
   
    else
    {
        cout << " Z tych odcinkow nie mozna zrobic trojkata!" << endl;
    }
    
    return 0;
3

Ułatwiłbyś nam życie, gdybyś zamiast pisać, że „nie chce działać”, powiedział o co dokładnie chodzi — nie kompiluje się (z jakim błędem?) Wysypuje podczas działania (z jakim błędem? dla jakich wartości?) Zwraca zły wynik?

No ale: pierwsza rzecz (być może jedyna, być może nie), która mi się rzuciła w oczy: if ((a+b>c) || (a+c>b) || (c+b>a))
To nie jest dobry warunek, co więcej — on jest trywialnie spełniony dla dowolnych liczb. Ty chcesz nie alternatywę, tylko koniunkcję tych warunków — bo chcesz, żeby dwa dowolne boki były łącznie dłuższe od trzeciego.

0
Althorion napisał(a):

Ułatwiłbyś nam życie, gdybyś zamiast pisać, że „nie chce działać”, powiedział o co dokładnie chodzi — nie kompiluje się (z jakim błędem?) Wysypuje podczas działania (z jakim błędem? dla jakich wartości?) Zwraca zły wynik?

No ale: pierwsza rzecz (być może jedyna, być może nie), która mi się rzuciła w oczy: if ((a+b>c) || (a+c>b) || (c+b>a))
To nie jest dobry warunek, co więcej — on jest trywialnie spełniony dla dowolnych liczb. Ty chcesz nie alternatywę, tylko koniunkcję tych warunków — bo chcesz, żeby dwa dowolne boki były łącznie dłuższe od trzeciego.

Program w ogóle nie chce sie kompilować wywala błędy:
E0137 wyrażenie musi byc modyfikowalną |-wartością
C2106 : "= ": lewy operand musi mieć wartością |

A jak te warunki zapisac żeby działały?

1

(c * c + b * b = a * a) ← masz przypisanie (=), chcesz mieć porównanie (==).

A tamten warunek, jak pisałem — z koniunkcją (&&), nie alternatywą (||).

0

https://stackoverflow.com/a/19835249/12988335
Dobrze tez, byłoby odsiać liczby ujmne i zera.

0

Ja jeszcze dodam, że skoro używasz liczb zmiennoprzecinkowych to nie możesz po prostu porównywać do zera. Musisz uwzględnić skończoną precyzję tych liczb.

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