saramgsilva Posted January 26, 2006 at 07:09 PM Report Share #12623 Posted January 26, 2006 at 07:09 PM mais um conjunto de classes que criei, a classe Poligono, Poligono não herda a classe Ponto mas vais usar os seus métodos públicos. Nota: para os que tentarem usar estes ficheiros, nao se esqueçam que precisam da classe Par e Ponto, que também disponibilizo... (tópico sobre a classe Par e Ponto aqui ...) Comecei por criar a classe Poligono Poligono.cpp: #include <iostream> #include <cmath> #include "Ponto.cpp" using namespace std; class Poligono { private: int npontos; protected: Ponto p[100]; public: Poligono(){}; Poligono(int n){ int i; npontos=n; for(i=0;i<n;i++) { p[i].set_abc(0.0); p[i].set_ord(0.0); } } virtual double perimetro() { int i; double pm; for(i=0, pm=0.0; i<npontos-1; i++) { pm=pm+p[i].distance1(p[i+1]); } pm=pm+p[npontos-1].distance1(p[0]); return pm; } virtual char * tipo(){return "poligono";} virtual void printpm() { cout<<"o perimentro"<<tipo()<<"e' "<<perimetro(); } virtual Ponto ponto(int n){ return p[n-1]; } };// fim da classe poligono Criei 2 subclasses da classe Poligono: Triangulo e Quadrilatero Triangulo.cpp: #include <iostream> #include <cmath> #include "Poligono.cpp" using namespace std; class Triangulo : public Poligono{ private: public: Triangulo():Poligono(3){}; Triangulo(Ponto a, Ponto b, Ponto c):Poligono(3) { p[0]=a; p[1]=b; p[2]=c; } virtual char * tipo()const{ return "triangulo"; } };// fim da classe triangulo Quadrilatero.cpp: #include <iostream> #include <cmath> #include "Poligono.cpp" using namespace std; class Quadrilatero : public Poligono{ private : public: Quadrilatero():Poligono(4){} Quadrilatero(Ponto a, Ponto b, Ponto c, Ponto d):Poligono(4) { double d1,d2,d3; p[0]=a; p[1]=b; p[2]=c; p[3]=d; // kero que seja convexo.... //verifica qual a menor valor de d1, d2 ou d3, isto e', a menor distancia d1=p[0].distance1(p[1])+p[1].distance1(p[2])+p[2].distance1(p[3])+p[3].distance1(p[0]); d2=p[0].distance1(p[2])+p[2].distance1(p[1])+p[1].distance1(p[3])+p[1].distance1(p[0]); d3=p[0].distance1(p[1])+p[1].distance1(p[3])+p[3].distance1(p[2])+p[2].distance1(p[0]); //e alterar ou nao a ordem dos pontos, para termos o um caminho sem cruzamentos if ((d2<d1)&&(d2<d3)) { p[1]=c; p[2]=b; } else if ((d3<d2)&&(d3<d1)) { p[2]=d; p[3]=c; } } virtual char* tipo()const {return "quadrilatero";} };// fim da classe quadrilatero e ainda criei as classe Quadrado que é subclasse da classe Quadrilatero Quadrado.cpp: #include <iostream> #include <cmath> #include "Quadrilatero.cpp" using namespace std; class Quadrado : public Quadrilatero { private: double lado; public: Quadrado():Quadrilatero(){} Quadrado(Ponto a, double c):Quadrilatero() { lado=c; p[0]=a; p[1].set_left(a.get_left()+lado); p[1].set_right(a.get_left()); p[2].set_left(a.get_left()+lado); p[2].set_right(a.get_left()-lado); p[3].set_left(a.get_left()); p[3].set_right(a.get_left()-lado); } virtual void set_lado(double x){lado=x;} virtual double get_lado()const{return lado;} virtual char* tipo()const{return "quadrado"; } virtual double area1() { return p[0].distance1(p[1])*p[1].distance1(p[2])*p[2].distance1(p[3])*p[3].distance1(p[0]); } virtual double area2()const { return pow(lado,4); } };// fim da classe quadrado os próximos código servem para usar as classe criadas: UsarTriangulo.cpp: #include <iostream> #include <cmath> #include "Triangulo.cpp" using namespace std; int main() { Ponto a,b,c; cout << "Ponto 1: "; a.read(); cout << "Ponto 2: "; b.read() ; cout << "Ponto 3: "; c.read(); Triangulo t(a,b,c); cout << " O perimetro deste "<<t.tipo()<<" e' " << t.perimetro() << "." << endl; cout << " Os pontos deste "<<t.tipo()<<" sao: " << endl; Ponto x; x = t.ponto(1); x.print(); x = t.ponto(2); x.print(); x = t.ponto(3); x.print(); cout<<"\n\n\tPrima um numero inteiro para sair->"; int sair; cin>>sair; return 0; } UsarQuadrilatero.cpp: #include <iostream> #include <cmath> #include "Quadrilatero.cpp" using namespace std; int main() { Ponto a,b,c,d; cout << "Ponto 1: "; a.read(); cout << "Ponto 2: "; b.read() ; cout << "Ponto 3: "; c.read(); cout << "Ponto 4: "; d.read(); Quadrilatero q(a,b,c,d); cout << " O perimetro deste quadrilatero e' " << q.perimetro() << "." << endl; cout << " Os pontos deste quadrilatero sao: " << endl; Ponto x; x = q.ponto(1); x.print(); x = q.ponto(2); x.print(); x = q.ponto(3); x.print(); x = q.ponto(4); x.print(); cout<<"\n\n\tPrima um numero inteiro para sair->"; int sair; cin>>sair; return 0; } UsarQuadrado.cpp: #include <iostream> #include <cmath> #include "Quadrado.cpp" using namespace std; int main() { Ponto a; double c; cout << "Ponto 1: "; a.read(); cout <<"\n medida do lado:"; cin>>c; Quadrado q(a,c); cout << " O perimetro deste "<< q.tipo() <<" e' " << q.perimetro() << "." << endl; cout << " A area1 deste "<< q.tipo() <<" e' " << q.area1() << "." << endl; cout << " A area2 deste "<< q.tipo() <<" e' " << q.area2() << "." << endl; cout << " Os pontos deste "<<q.tipo()<<" sao: " << endl; Ponto x; x = q.ponto(1); x.print(); x = q.ponto(2); x.print(); x = q.ponto(3); x.print(); x = q.ponto(4); x.print(); cout<<"\n\n\tPrima um numero inteiro para sair->"; int sair; cin>>sair; return 0; } em resumo temos: Poligono Triangulo Quadrilatero Quadrado e os ficheiros para usar estas classes UsarTriangulo UsarQuadrilatero UsarQuadrado se tiverem alguma dúvida ou caso encontrem alguma gafe falem comigo... www.saramgsilva.com As minhas apps no WP7 Marketplace Youtube : Galinho - Windows Phone 7.5 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now