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


(M8 R Ias0ym) #1

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++


(somekind) #2

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.


(system) #3

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


(Lufcik) #4

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++

(M8 R Ias0ym) #5
#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ć?


(Grzelix) #6

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


(Lufcik) #7

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'?


(system) #8
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ć


(Hardelis) #9

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;    








}

(Grzelix) #10

@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.


(system) #11

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*/