Pomoc w zadaniu (raczej proste)

Odpowiedz Nowy wątek
2015-01-05 16:01
0

Mam problem z zadaniem:

Napisać program, który przyjmuje od użytkownika trzy liczby rzeczywiste, sprawdza, czy mogą one być bokami trójkąta i wyświetla odpowiedni komunikat. Ponadto, jeśli mogą tworzyć trójkąt, to wyświetla następujące informacje o tym trójkącie:

Czy jest równoboczny?
Czy jest równoramienny?
Czy jest prostokątny?

To co udało mi się stworzyć:

#include <iostream>
#include <cmath>

using namespace std;

int main(){
    int a, b, c;
    cout << "Podaj trzy dowolne liczny: " << endl;
    cin >> a;
    cin >> b;
    cin >> c;
    if(a+b>c && a+c>b && b+c>a){
        cout << "Podane liczby moga stworzyc trojkat." << endl;
            if(a==b==c){
                cout << "Jest to trojkat rownoboczny" << endl;
            }
    }
    else{
        cout << "Podane liczby nie moga stworzyc trojkata." << endl;
    }
    }

Problem mam taki, że jeżeli spełnię warunek i wpiszę np. liczby 5, 5, 5 to nie wyskakuje mi informacja, że trójkąt jest równoboczny. Gdzie jest błąd? Nawiasy? czy źle wpisuję if'a?

Pozostało 580 znaków

2015-01-05 16:05
Biały Mleczarz
0

Jeśli nie wykonuje się instrukcja warunkowa, oznacza to, że warunek nie jest spełniony. Spróbuj zapisać go inaczej.

Pozostało 580 znaków

2015-01-05 16:06
4

Warunek na równość nie może taki być.

a==b==c to to samo co ((a == b) == c). Z porównania a == b wychodzi wartość bool konwertowana na 1 albo 0, która jest potem porównywana z c.
To zupełnie nie to co ma być. Ma być a == b && b == c.


"(...) otherwise, the behavior is undefined".
edytowany 1x, ostatnio: Endrju, 2015-01-05 16:06

Pozostało 580 znaków

2015-01-05 16:07
0

Czy mógłbyś podać jakiś zestaw wartości a,b,c dla których warunek: if(a+b>c && a+c>b && b+c>a) powinien być spełniony?


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2015-01-05 16:09
5,5,5 bedzie spelniony. 10 > 5 oraz 10 > 5 oraz 10 > 5 - fasadin 2015-01-05 16:08
Pochrzaniło mi się. - _13th_Dragon 2015-01-05 16:10
poniedzialem po nowym roku. Kazdemu sie zdarza ;) Ja dzis nie potrafilem policzyc kilku liczb :D - fasadin 2015-01-05 16:10

Pozostało 580 znaków

2015-01-05 16:07
2
 if(a==b==c) 

tu jest Twoj problem
musisz zrobic

 if(a==b && a == c) 
edytowany 1x, ostatnio: fasadin, 2015-01-05 16:08
@Shalom mozesz sciagnac "ptaszka" i dodac do endrju? Jego odpowiedz jest duzo bardziej rzetelna i duzo bardziej pomocna niz moja. - fasadin 2015-01-05 16:12

Pozostało 580 znaków

2015-01-05 16:23

Edit: nad moim postem był post z kodem. Ten post został usunięty i teraz mój post wygląda głupio.

Ten else na końcu nie jest dobry. Przecież jeżeli pierwszy warunek nie jest spełniony to trójkąt nie może już być równoboczny. Miałeś jeszcze sprawdzić, czy trójkąt jest prostokątny i do tego użyj Twierdzenia Pitagorasa: sprawdź, czy suma kwadratów długości dwóch krótszych boków jest równa kwadratowi długości najdłuższego boku.

Poza tym program miał przyjmować liczby rzeczywiste.


"(...) otherwise, the behavior is undefined".
edytowany 2x, ostatnio: Endrju, 2015-01-05 16:25

Pozostało 580 znaków

2015-01-05 16:35
0

Poprawione:

#include <iostream>
#include <cmath>

using namespace std;

int main(){
    float a, b, c;
    cout << "Podaj trzy dowolne liczby: " << endl;
    cin >> a;
    cin >> b;
    cin >> c;
    if(a+b>c && a+c>b && b+c>a){
        cout << "Podane liczby moga stworzyc trojkat." << endl;
            if(a==b && b==c){
                cout << "Jest to trojkat rownoboczny" << endl;
            }
            else{
                cout << "Nie jest to trojkat rownoboczny" << endl;
            }
            if(a==b || a==c || b==c){
                cout << "Jest to trojkat rownoramienny" << endl;
            }
            else{
                cout << "Nie jest to trojkat rownoramienny" << endl;
            }
            if(c*c==a*a+b*b || a*a==c*c+b*b || b*b==a*a+c*c){
                cout << "Jest to trojkat prostokatny" << endl;
            }
            else{
                cout << "Nie jest to trojkat prostokatny" << endl;
            }
    }
    else{
        cout << "Podane liczby nie moga stworzyc trojkata." << endl;
    }
    }
Nie powinno się porównywać liczb zmiennoprzecinkowych za pomocą ==. Ale może nie ma to tutaj aż takiego znaczenia. - Endrju 2015-01-05 18:46

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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