Trójkąt prostokątny

0

Cześć. Mam problem z kodem, ale nie wiem jak go rozwiązać... Funkcja ma znajdować trójkąty prostokątne i jeżeli takowe znajdzie, to ma wypisać jego boki.

Kod:

void wyszukaj(int a,int b,int c)
{
    if(pow(a,2)==pow(b,2)+pow(c,2) || pow(b,2)==pow(a,2)+pow(c,2) || pow(c,2)==pow(a,2)+pow(b,2))
    {
        cout << a << " " << b << " " << c << endl;
    }
}

Warunek "if" przecież uwzględnia różne przypadki rozłożenia tych liczb tak, że np. a <b. Jednak wynik mojego programu, pomimo tego,że wypisuje trójkąty prostokątne to jest różny od odpowiedzi, w której znajduje się więcej boków. Czy ktoś mółgby mi powiedzieć, gdzie zrobiłem błąd? Pozdrawiam! :)

1

Podpowiedź: Znajdź spośród 3 wartość maksymalną i to będzie przeciwprostokątna a dwie inne wartości (nie max) to będą przyprostokątne. Hmm.. int w argumentach.. czyli trójkąty z ujemną długością boków także poddasz testom? :-)

1

Zacznij od poprawy tego kodu tak, aby był tylko jeden warunek (tzn. pojedyncze przyrównanie, a nie kilka).

Plus zrób funkcję na zasadzie bool czyTrojkatProstokatny(...), tak aby nic nie wypisywała - dzięki temu będzie bardziej uniwersalna.

0

Po zastosowaniu Waszych rad, funkcja teraz wygląda tak:

bool czyProstokatny(int a,int b,int c)
{
    int d;
    if(a<b)
    {
        d=a;
        a=b;
        b=d;
    }
    if(a<c)
    {
        d=a;
        a=c;
        c=d;
    }
    if(a*a==b*b+c*c)
    {
        return true;
    }
    return false;
}

Oczywiście,wszystko działa, dziękuję za pomoc, ale czy ktoś mógłby mi powiedzieć, co jest nie tak z poprzednią? :)

0
#include <iostream>
#include <array>
#include <algorithm>
using namespace std;

bool is_right_triangle(array<int, 3> sides) {
	decltype(sides) squares;
	
	auto square = [](int x){ 
		return x*x;
	};
	
	sort(begin(sides), end(sides));
	transform(begin(sides), end(sides), begin(squares), square);
	
	return squares[0]+squares[1] == squares[2];
}

int main() {
	cout << boolalpha;
	
	cout
		<< is_right_triangle({3, 4, 5}) << endl
		<< is_right_triangle({6, 10, 8}) << endl
		<< is_right_triangle({75, 21, 72}) << endl
		<< endl;
		
	cout
		<< is_right_triangle({13, 4, 5}) << endl
		<< is_right_triangle({16, 10, 8}) << endl
		<< is_right_triangle({175, 21, 72}) << endl
		<< endl;
	return 0;
}

http://ideone.com/YGwdlo

1

Patrzę na to i mam wrażenie, że źle zadałeś pytanie (jak naprawić twoje rozwiązanie, a nie opisałeś jakie jest twoje zadanie).
Domyślając się właściwego problemu polecam poczytać to:
https://pl.wikipedia.org/wiki/Tr%C3%B3jki_pitagorejskie
Jeśli mam rację to się okaże że całą tą funkcję wywalisz do kosza.

https://wandbox.org/permlink/1RdsdS012YHiSf7o

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