Program sprawdzajacy trojkat

0

Napisz program a w programie funkcję, która wczyta trzy liczby typu int - będą to boki trójkąta, a następnie sprawdzi czy z tych boków można stworzyć trójkąt prostokątny.
W przypadku podania długości boków, które tworzą trójkąt prostokątny należy wyświetlić komunikat: Z tych boków można zbudować trójkąt prostokątny, w przeciwnym razie powinien być to komunikat: To nie będzie trójkąt prostokątny.
Uwaga: W programie należy założyć, że użytkownik wpisze liczby w dowolnej
kolejności.
Ograniczamy się tylko do liczb dodatnich, więc to też należy sprawdzić.
Najlepiej żeby została użyta funkcja typu bool.

1

ile płacisz?

1

Czy masz jakieś pytania związane z tym zadaniem? Masz bardzo lakoniczny styl wypowiedzi.

0

Chciałbym się dowiedzieć w sumie jak zacząć, jakieś porady jak i co zrobić i wytłumaczenie byłoby mile widziane.

2
  1. Przeczytać na Wikipedii o nierówności trójkąta.
  2. Przeczytać w podręczniku/w sieci o C++-ie — o instrukcjach warunkowych, o pobieraniu danych od użytkownika i o wyświetlaniu danych.
  3. Uruchomić ulubiony edytor tekstu i napisać program, korzystając z wiedzy zdobytej w dwóch powyższych punktach.

W razie konkretnych problemów, udać się z nimi na forum.

2

Wystarczy sprawdzić, czy dla dwóch najkrótszych boków zachodzi twierdzenie Pitagorasa.

Najpierw posortuj rosnąco trzy podane długości. Potem sprawdź czy suma kwadratów pierwszej i drugiej równa się kwadratowi trzeciej.

Masz operować na liczbach całkowitych, co dodatkowo upraszcza sprawę.


dodałem załącznik z porównaniem wydajności dla @Althorion, bo tak wygodniej, niż ładować na imgur ;)

0

#include <iostream>

using namespace std;

int a,b,c;
bool funkcja(){
if ( ( (aa)+(bb) )== ( c*c) ) {
cout<<"Z tych bokow mozna zbudowac trojkat prostokatny";}
return true;
}

int main() {
cout << "-------------------------------------------------" << endl;
cout << "Sprawdzam czy mozna zbudowac trojkat prostokatny!" << endl;
cout << "-------------------------------------------------" << endl;
cout <<"Podaj bok A: ";
cin >> a;
cout << "Podaj bok B: ";
cin >> b;
cout << "Podaj bok C: ";
cin >> c;

if(funkcja()==true){

}
else{
cout<<"To nie bedzie trojkat prostokatny";
}

return 0;

}
Jestem na takim etapie, ale nie potrafię tej funkcji bool. Jak wpisuje trojke pitagorejska to wszystko dziala i wyswietla to zdanie na samej gorze, ale gdy juz wpisuje co innego to nie wyświetla mi tego ostatniego zdania. Co źle robie i jak to poprawic?

3

Bo obecnie zwracasz true zawsze, bez wzgledu na rezultat. Powinno byc tak

bool funkcja(){
    if ( ( (a*a)+(b*b) )== ( c*c) ) {
        cout<<"Z tych bokow mozna zbudowac trojkat prostokatny";
        return true;
    }
    return false;
}
0
#include <iostream>

using namespace std;

bool trojka(int a,int b,int c){
    if ( ( (a*a)+(b*b) )== ( c*c) ) {
        cout<<"Z tych bokow mozna zbudowac trojkat prostokatny";
        return true;
    }
    cout << "To nie jest trojkat prostokatny";
    return false;
}


int main(int a,int b, int c) {
    cout << "-------------------------------------------------" << endl;
    cout << "Sprawdzam czy mozna zbudowac trojkat prostokatny!" << endl;
    cout << "-------------------------------------------------" << endl;
    cout <<"Podaj bok A: ";
    cin >> a;
    cout << "Podaj bok B: ";
    cin >> b;
    cout << "Podaj bok C: ";
    cin >> c;
    trojka(a,b,c);
    return 0;
}
``````````````````````````````````````````````````````````````````````````````````````````````````````
Cos takiego jest okej, zeby nie bylo zmiennych globalnych? Czy zrobić co innego? Chciałbym tez zrobic funkcje na wprowadzanie boków ale nie wiem jak. Probowałem cos zrobic, ale nie za bardzo mi wychodzilo i np nie dzial juz ten bool wtedy. Help
0
int boki(int a,int b,int c){
    cout <<"Podaj bok A: ";
    cin >> a;
    cout << "Podaj bok B: ";
    cin >> b;
    cout << "Podaj bok C: ";
    cin >> c;
}

I jak zaczynam wpisywac te boki to juz dalej za kazdym razem pokazuje mi, ze nie moge utworzyc trojkata

1
#include <iostream>


using namespace std;

int max(int a, int b, int c) 
{
    if (a > b)
    {
        if(a>c) return a;
    }
    else if (b > c) return b;
    return c;
}
bool trojka(int a, int b, int c)
 {
    int m = max(a, b, c);
    return 2 * m * m == a * a + b * b + c * c;
}

int main() 
{
    int a, b, c;
    cout << "-------------------------------------------------" << endl;
    cout << "Sprawdzam czy mozna zbudowac trojkat prostokatny!" << endl;
    cout << "-------------------------------------------------" << endl;
    cout << "Podaj bok A: ";
    cin >> a;
    cout << "Podaj bok B: ";
    cin >> b;
    cout << "Podaj bok C: ";
    cin >> c;

    if(trojka(a, b, c)) cout << "Z tych bokow mozna zbudowac trojkat prostokatny";
    else cout << "To nie jest trojkat prostokatny";
    return 0;
}

W swoim kodzie nie uwzględniałeś ,że użytkownik może podać boki w dowolnej kolejności. I nie dobry rozwiązaniem jest w funkcji ,która zwraca bool wypisanie ,bo albo zwraca true/false albo jest void i od razu wypisuje. Takie połączenie nie ma żadnego sensu.

0
#include <iostream>

using namespace std;

bool trojka(int a,int b,int c){
    if ( ((a*a)+(b*b))==(c*c)||((b*b)+(c*c))==(a*a)||((a*a)+(c*c))==(b*b) ) {
        cout<<"Z tych bokow mozna zbudowac trojkat prostokatny";
        return true;
    }
    cout << "To nie jest trojkat prostokatny";
    return false;
}


int main(int a,int b,int c) {
    cout << "-------------------------------------------------" << endl;
    cout << "Sprawdzam czy mozna zbudowac trojkat prostokatny!" << endl;
    cout << "-------------------------------------------------" << endl;
    cout <<"Podaj bok A: ";
    cin >> a;
    cout << "Podaj bok B: ";
    cin >> b;
    cout << "Podaj bok C: ";
    cin >> c;
    trojka(a,b,c);
    return 0;

}
0

Może coś takiego:

if (a + b > c && b + c > a && c + a > b) {
            cout<<"TAK";
        } else {
            cout<<"NIE";
        }
0
#include <iostream>

using namespace std;

bool trojka(int a,int b,int c){
    if ( ((a*a)+(b*b))==(c*c)||((b*b)+(c*c))==(a*a)||((a*a)+(c*c))==(b*b) ) {
        cout<<"Z tych bokow mozna zbudowac trojkat prostokatny";
        return true;
    }
    cout << "To nie jest trojkat prostokatny";
    return false;
}


int main(int a,int b,int c) {
    cout << "-------------------------------------------------" << endl;
    cout << "Sprawdzam czy mozna zbudowac trojkat prostokatny!" << endl;
    cout << "-------------------------------------------------" << endl;
    if (a,b,c>=0){
    cout <<"Podaj bok A: ";
    cin >> a;
    cout << "Podaj bok B: ";
    cin >> b;
    cout << "Podaj bok C: ";
    cin >> c;
    }
    else{
        cout <<"Nie mozna podac liczby ujemnej" << endl;
    }
    trojka(a,b,c);
    return 0;

}

Nie dziala mi to sprawdzanie liczby ujemnej, jak to zmienic zeby, gdy wpisze liczbe ujemna wywalalo program, badz prosilo podac jeszcze raz boki?

0

pętla do ... while z odpowiednim warunkiem

0

Kompiluje ci się to?
Masz int main() w którym wywołujesz to?
int main(int a,int b,int c) {
bo ten main + if (a,b,c>=0){ wyglądają na błędny kod

0
#include <iostream>

using namespace std;

bool trojka(int a,int b,int c){
    if ( ((a*a)+(b*b))==(c*c)||((b*b)+(c*c))==(a*a)||((a*a)+(c*c))==(b*b) ) {
        cout<<"Z tych bokow mozna zbudowac trojkat prostokatny";
        return true;
    }
    cout << "To nie jest trojkat prostokatny";
    return false;
}


int main() {
    int a,b,c;
    cout << "-------------------------------------------------" << endl;
    cout << "Sprawdzam czy mozna zbudowac trojkat prostokatny!" << endl;
    cout << "-------------------------------------------------" << endl;

    cout <<"Podaj bok A: ";
    cin >> a;
    cout << "Podaj bok B: ";
    cin >> b;
    cout << "Podaj bok C: ";
    cin >> c;
    if (a>=0&&b>=0&&c>=0){
    trojka(a,b,c);
    }
    else{
        cout <<"Nie mozna podac liczby ujemnej" << endl;
    }
    return 0;

}

Wszystko wydaje się, ze chyba dziala i jest okej, ale teraz pytanie czy funkcja bool jest dobrze zrobiona czy moze jakas ja zmienic zeby jej nie wywolywac jak void??

0

czy funkcja bool jest dobrze zrobiona czy moze jakas ja zmienic zeby jej nie wywolywac jak void?

Przenieś operacje cout na zewnątrz funkcji i wykorzystaj zwracaną wartość.

#include <iostream>

using namespace std;

inline bool isTriangleRectangle( int a , int b , int c )
{
    auto max = (a>b?(a>c?a:c):(b>c?b:c));
    return 2*max*max==(a*a+b*b+c*c);
}

int main()
{
    cout << "Triangle is " << (isTriangleRectangle(5,4,3)?"":"not") << " rectangular" << endl;
    return 0;
}
1

Dziękuje wszystkich za wszelką pomoc!!

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