Program do liczenia trójkątów - C++

Witam, muszę napisać program o podanych niżej funkcjach:

a) Czy z podanych 3 długości można zbudować trójkąt równoramienny

b) Czy z podanych 3 długości można zbudować trójkąt prostokątny

Powyższe podpunkty w formie jednego programu na życzenie użytkownika

(użytkownik wybiera, którą funkcje chce w danej chwili użyć).

Byłbym niezmiernie wdzięczny za takowy programik - język C++

Tzn. mamy Ci pomóc czy napisać za Ciebie?

Jeśli to pierwsze, to pokaż, co napisałeś do tej pory i napisz z czym masz problem, a jeśli to drugie, to powinieneś to raczej wystawić jako oferta pracy w innym dziale.

Raczej nikt Tobie nie zrobi tego programu tak o … spróbuj zrobić dane zadanie w razie problemów, zamieść kod źródłowy i ktoś Tobie pomoże, poprawi błędy.

Pozdrawiam

Na szybko, bez deklaracji, nagłówków i pseudokodem.

Robisz to na switchu. Wczytujesz zmienną typu char i sprawdzasz czy jest równa a. Jeżeli tak to wykonujesz. Pobierasz 3 długości boków i sprawdzasz:

   jeżeli a!=b i a!=c to sie nie da. I dwa założenia, że a,b,c >0 i a+b>c i a+c>b i b+c>a

   Tyle do punktu a.


   b)pobierasz 3 boki. Jeżeli a^2+b^2=c^2 lub c^2+a^2=b^2 lub b^2+c^2=a^2 to sie da. I dwa założenia, że a,b,c >0 i a+b>c i a+c>b i b+c>a


   Teraz to wystarczy napisać. To jest 5 minut roboty. Napisałbym Ci, ale 1) nie mam kompilatora 2)nie znam c++
#include 

#include 

#include 

using namespace std;


int main()

{


    int a;

    int b;

    int c;

    int wybor;


    cout << "Jezeli chcesz weryfikowac czy trojkat jest prostokątny wybierz 1.\nJezeli chcesz weryfikowac czy trojkat jest równoramienny wybierz 2.\nJezeli chcesz wyjsc wybierz k" << endl;

    cin >> wybor;

    if (wybor==1)

        {           

          cout << "Podaj wartość a." << endl;

           cin >> a;

           cout << "Podaj wartość b." << endl;  

           cin >> b;

           cout << "Podaj wartość c." << endl;   

           cin >> c; 


              if (a*a==b*b+c*c)

               cout << "Trójkąt jest prostokątny" << endl;

               else if (b*b==a*a+c*c)

                cout << "Trójkąt jest prostokatny" << endl;

                else if (c*c==a*a+b*b)

                cout << "Trójkąt jest prostokatny" << endl;

                else 

                cout << "Trójkąt nie jest protsokątny";

                }


      if (wybor==2)   

          {



cout << "Podaj wartosc a." << endl;

cin >> a;


cout << "Podaj wartosc b." << endl;  

cin >> b;


cout << "Podaj wartosc c." << endl;   

cin >> c; 



if (a==b && a+b> c)

cout << "Trojkat jest rownoramienny" << endl;


else if (a==c && a+c>b)

      cout << "Trojkat jest rownoramienny" << endl;


else if (b==c && b+c>a)

       cout << "Trojkat jest rownoramienny" << endl;

    else 

         cout << "Trojkat nie jest rownoramienny" << endl;

}



cout << "Aby wyjsc z programy wcisnij K, jezeli chcesz powtorzyc wcisnij dowolny inny znak." << endl;







}

Program ukończony chyba, ale nie do końca mogę przypomnieć sobie komendę na zamkniecie po wciśnięciu klawisza. Mógłby ktoś napisać jak ona wyglądała i gdzie ją wstawić?

dwa błędy na pierwszy rzut oka

= znak przypisania

== znak porównania.

i błędnie masz instrukcje if else ponieważ ma dwa razy else do jednego if.

Powinonno być

if (warunek1)

wypisz jest …

else if (warunek2)

wypisz

else

wypisz podane parametry nie spełniają założeń//żaden nie spełniony

Może getchar() A może zmienną wybór zmienisz na char i cały program otoczysz pętlą która sprawdza czy wybór !=‘k’?

if (a*a==b*b+c*c) ....

Nie łatwiej by było to umieścić w jednym if’ie ?

if (a*a==b*b+c*c || b*b==a*a+c*c ... )

ponadto możesz użyć

#define SQR (x) ((x) * (x))

chociaż w tym wypadku mogą się różne dziwne sytuacje dziać, ale można spróbować

Tak by to wg mnie wyglądało po przeniesieniu do jednej linii if’ów

#include 

#include 

#include 

using namespace std;


int main()

{

    char znak='q';  

    while (znak!='k')

   { int a;

    int b;

    int c;

    int wybor;


cout << "Jezeli chcesz weryfikowac czy trojkat jest prostokątny wybierz 1.\nJezeli chcesz weryfikowac czy trojkat jest równoramienny wybierz 2.\nJezeli chcesz wyjsc nacisnij dowolny inny klawisz" << endl;

    cin >> wybor;

    if (wybor==1)

        {           

cout << "Podaj wartość a." << endl;

cin >> a;

cout << "Podaj wartość b." << endl;  

cin >> b;

cout << "Podaj wartość c." << endl;   

cin >> c; 


              if (a*a==b*b+c*c || b*b==a*a+c*c || c*c==a*a+b*b)

               cout << "Trójkąt jest prostokątny" << endl;

               else 

                cout << "Trójkąt nie jest protsokątny";

}


      if (wybor==2)   

{

cout << "Podaj wartosc a." << endl;

cin >> a;

cout << "Podaj wartosc b." << endl;  

cin >> b;

cout << "Podaj wartosc c." << endl;   

cin >> c; 


if (a==b && a+b> c || a==c && a+c>b || b==c && b+c>a)

cout << "Trojkat jest rownoramienny" << endl;

      else 

         cout << "Trojkat nie jest rownoramienny" << endl;

}

cout << "Aby wyjsc z programy wcisnij K, jezeli chcesz powtorzyc wcisnij dowolny inny znak." << endl;


         cin >>znak;

}

 return 0;    








}

@genesis7 w twoim kodzie można by się przyczepić do dwukrotnego pisania części kodu odpowiedzilnego za pobierania danych (trochę nie eleganski i redundacja )

można tak:

if(wybór!= koniec){

pobierz dane;

}

if(wybór ==1)

sprawdż czy równoramienny

if(wybór == 2)

sprawdź czy prostokątny.

Moim zdaniem lepiej by to mogło wyglądać, gdyby dane operacje były w

switch (zmienna){

case 1 : .............; break;

case 2 : .............; break;

default : ..............; break;

}

oraz można napisać funkcje, która zwraca przykładowo 0, gdy chcemy zakończyć program. i wstawić warunek w pętli

do {

...............

} while (fx != 0); /*fx to zmienna pod którą wywołana jest funkcja*/