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.
- Rejestracja:około 5 lat
- Ostatnio:około 4 lata
- Postów:53

- Rejestracja:ponad 6 lat
- Ostatnio:minuta
- Postów:444
ile płacisz?
- Rejestracja:około 5 lat
- Ostatnio:około 4 lata
- Postów:53
Chciałbym się dowiedzieć w sumie jak zacząć, jakieś porady jak i co zrobić i wytłumaczenie byłoby mile widziane.
- Przeczytać na Wikipedii o nierówności trójkąta.
- Przeczytać w podręczniku/w sieci o C++-ie — o instrukcjach warunkowych, o pobieraniu danych od użytkownika i o wyświetlaniu danych.
- 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.

- Rejestracja:około 22 lata
- Ostatnio:3 minuty
- Postów:6694
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 ;)
- screenshot-20200417235341.png (179 KB) - ściągnięć: 668
- Rejestracja:około 5 lat
- Ostatnio:około 4 lata
- Postów:53
#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?


- Rejestracja:ponad 6 lat
- Ostatnio:minuta
- Postów:444
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;
}

- Rejestracja:około 5 lat
- Ostatnio:około 4 lata
- Postów:53
#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
- Rejestracja:około 5 lat
- Ostatnio:około 4 lata
- Postów:53
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
- Rejestracja:około 6 lat
- Ostatnio:4 dni
- Postów:214
#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.
- Rejestracja:około 5 lat
- Ostatnio:około 4 lata
- Postów:53
#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;
}

- Rejestracja:ponad 9 lat
- Ostatnio:około 3 lata
- Lokalizacja:96-230
- Postów:953
Może coś takiego:
if (a + b > c && b + c > a && c + a > b) {
cout<<"TAK";
} else {
cout<<"NIE";
}
- Rejestracja:około 5 lat
- Ostatnio:około 4 lata
- Postów:53
#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?

- Rejestracja:około 22 lata
- Ostatnio:3 minuty
- Postów:6694
pętla do ... while z odpowiednim warunkiem

- Rejestracja:ponad 11 lat
- Ostatnio:4 miesiące
- Postów:181
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


An implementation shall not predefine themainfunction. This function shall not be overloaded. It shallhave a return type of typeint, but otherwise its type is implementation-defined. All implementations shallallow both— a function of() returning int and— a function of(int, pointer to pointer tochar) returning int
- Rejestracja:około 5 lat
- Ostatnio:około 4 lata
- Postów:53
#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??

- Rejestracja:prawie 10 lat
- Ostatnio:około 4 godziny
- Postów:530
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;
}

isTriangleRectangle
w main
na trojka
i usuwasz ze swojej funkcji wszystkie linie z cout
. Jeszcze tylko małe tłumaczenie na język polski i gotowe.


- Rejestracja:około 5 lat
- Ostatnio:około 4 lata
- Postów:53
Dziękuje wszystkich za wszelką pomoc!!
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.
m = max([a, b, c]); return 2*m**2 == a**2+b**2+c**2
wymaga tylko dwóch skoków warunkowych