Klasy, obliczanie pola i obwodu trójkąta

0

Witam

Mam taki program wykorzystujący klasy do rozpoznawania czy trojkat jest rownoboczny itd, a teraz mam pytanie jak dodac klase ktora bedzie obliczala pole, a kolejna klasa obwód, nie mam zadnego pomysłu :/

#include <stdio.h>
#include <iostream>
using namespace std;

class trojkat
{ public :
double a,b,c;


trojkat(double A,double B, double C){
a=A;
b=B;
c=C;}

bool istrojkat()
{ bool w=false;
if(a<b+c)
if(b<a+c)
if(c<a+b)
w=true;
return w;}

bool isrownoboczny()
{ bool w=false;
if((a==b)&&(a==c)&&(b==c)) w=true;
return w;
}

bool isprostokatny()
{ bool w=false;
if ((a*a+b*b==c*c) || (b*b+c*c==a*a) || (a*a+c*c==b*b))
w=true;
return w;}

bool isrownoramienny()
{ bool w=false;
if ((a==b) || (b==c) || (a==c))
w=true;
return w;}


};




main(){

double a,b,c;

trojkat t(6,5,5);

cout<<t.a<<" "<<t.b<<" "<<t.c;
cout<<endl;

if(t.istrojkat()) cout<<"Jest trojkat"; else cout<<"Nie da sie zrobic trojkata";
cout<<endl;
if(t.isrownoboczny()) cout<<"Jest rownoboczny"; else cout<<"Nie jest rownoboczny";
cout<<endl;
if(t.isprostokatny()) cout<<"Jest prostokatny"; else cout<<"Nie jest prostokatny";
cout<<endl;
if(t.isrownoramienny()) cout<<"Jest rownoramienny"; else cout<<"Nie jest rownoramienny";
cout<<endl;
system("PAUSE"); 
}
1

Możesz dorobić metodę obliczPole i obliczObwod w tej klasie. Wtedy po prostu zwracasz wynik na podstawie trzech zmiennych. Jeśli koniecznie chcesz do tego inną klasę, to możesz działać w podobny sposób i w konstruktorze tej nowej klasy przekazywać liczby, które będą długościami boków. Inną drogą jest przyjmowanie przez nowy konstruktor obiektu typu Trojkat, "pobieranie" jego długości boków i obliczanie pola oraz obwodu.

Poza tym, to formatuj kod bo się czytać nie da i zdecyduj się jak nazywasz zmienne - po polsku czy po angielsku, bo za takie coś jak isprostokatny(); itd. powinien Cię odwiedzić najczarniejszy z czarnych.

0

IMO wystarczy dorobić odpowiednie metody, nie potrzeba do tego osobnych klas.

No i jeszcze przyczepie sie do kilku rzeczy:

#include <stdio.h> // zgodnie ze standardem powinno być cstdio a nie stdio.h
...
main() // main musi zwracać int, czyli powinno byc int main()
...
cout<<endl; // niepotrzebnie opróżniasz bufor, do zrobienia nowej linii wystarczy "\n"
...
system("PAUSE"); // po cholere zatrzymujesz program? Normalne IDE samo zatrzyma, 
                 // a programy tego typu nie powinny byc zatrzymywane na sile
...
//brak jawnego zwracania na koncu programu, choc niejawnie zwroci 0,
// to jednak nie wiem czy wiesz o tym, wiec wole wspomniec

No i popraw formatowanie, bo jest fatalne.

0

a mam pytanie, jak wywołać klasę pole i obwód w mainie ? bo mam problem :/

0

To może łaskawie daj kod.
Pewnie chodzi Ci o coś takiego:

int main(){
    Pole* pole = new Pole();
    pole->obwod();
    //po wykonaniu wszystkich czynnosci trzeba zwolnic pamiec
}
0

juz zrobilem

prostokat p(2,2);
cout<<"Przekatna prostokata to: "<<p.przekatna(); 

teraz mam pytanie, bo tutaj wprowadzam na sztywno dane do prostokata p, a jak zrobic zeby wpisywac je z klawiatury ?

0

Wczytać najpierw do zmiennych, a potem przekazać je konstruktorowi.

0
     prostokat p(a,b);

     cout<<"PROSTOKAT - podaj boki a i b";
     cout<<endl;
     cin>>p.a;
     cin>>p.b;

zrobilem to w ten sposób :)

0

A co niby oznacza prostokat p(a, b); ??

0

wklejam kawałek kodu

#include <stdio.h>
#include <iostream>
#include <math.h>
using namespace std;


class prostokat
{ public :
  double a,b;
  
 prostokat(double A,double B){
                a=A;
                b=B;
                } 
  
  double obwod(void)
  {
        return a+b;
  }
  
  double pole(void)
  {
         return a*b;
  }
  
  double przekatna(void)
  {
         return sqrt((a*a)+(b*b));
  }
  
  bool czy_kwadrat()
   { bool w=false;
          if (a==b)
          w=true;
   return w;
   }
};   
    

main(){

     double a,b;

     prostokat p(a,b);

     cout<<"PROSTOKAT - podaj boki a i b";
     cout<<endl;
     cin>>p.a;
     cin>>p.b;
     cout<<endl;
     if(p.czy_kwadrat()) cout<<"Jest kwadratem"; else cout<<"Nie jest kwadratem, jest prostokatem";
     cout<<endl;
     cout<<"Przekatna prostokata to: "<<p.przekatna();
     cout<<endl;
     cout<<"Obwod prostokata to: "<<p.obwod();
     cout<<endl;
     cout<<"Pole prostokata to: "<<p.pole();
     cout<<endl;
     cout<<endl;
     
      
     system("PAUSE");       
       }
 
0

Po cholerę przekazywać zmienne a, b, c do konstruktorów, skoro i tak ich nie wykorzystujesz, bo przypisujesz pola klasy... Swoją drogą, skoro pola masz publiczne to zamień klasę na strukturę i wtedy sobie tak wczytuj. Klasa jest po to, żeby była hermetyczna i wtedy możesz przekazać wartości w konstruktorze, które wczytałeś wcześniej do zmiennych pomocniczych.

Albo robisz tak:

double a, b;
 
cout << "PROSTOKAT - podaj boki a i b";
cout << endl;
cin >> a;
cin >> b;
prostokat p(a, b);

Albo tak:

prostokat p; // wtedy `prostokat` nie ma konstruktora z parametrami (ale może mieć)

cout << "PROSTOKAT - podaj boki a i b";
cout << endl;
cin >> p.a;
cin >> p.b;

I wtedy prostokat powinien być strukturą.

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