saramgsilva Posted January 26, 2006 at 07:18 PM Report Share #12627 Posted January 26, 2006 at 07:18 PM Vou apresentar outro exemplo de classes... desta vez , tem a ver com números complexos, vou apresentar o que é elementar nos números complexos Começo por apresentar a classe Complex, que inclui tratamento de erros.. Complex.cpp: #include<iostream> #include<cmath> using namespace std; class ErroComplex{ public: ErroComplex(){}; virtual void print_erro()const{cerr<<"ERRO.....Imprimi da classe ErroComplex :P....\n";} }; class Complex{ private: double real; double imag; public: Complex(){real=0; imag=0;} Complex(double r, double i){real=r; imag=i;} virtual double obtem_real(){return real;} virtual double obtem_imag(){return imag;} virtual void muda_real(double r){ real=r;} virtual void muda_imag(double i){imag=i;} virtual Complex soma(Complex cc){ Complex p; p.muda_real( real+cc.obtem_real() ); p.muda_imag(imag+cc.obtem_imag() ); return p; } virtual bool ereal()const{ if(imag==0) { return true;} else {return false;} } virtual void puroreal()const{ if(ereal()) cout<<" e' um numero complexo real\n"; else cout<<" e' um numero complexo puro\n"; } virtual void escrevecomplex() { cout<<"o complexo em causa e' ("<<obtem_real()<<" + "<<obtem_imag()<<"i);"<<endl; } virtual Complex inverso(){ Complex a; a.muda_real( (double) obtem_real() /( pow( obtem_real(),2) + pow( obtem_imag(),2 ) ) ); a.muda_imag( (double) (-1)*obtem_imag() /( pow( obtem_real(),2 )+pow( obtem_imag(),2 ) ) ); return a; } virtual Complex multiplica(Complex a){ double x,y; x=real*a.obtem_real()-imag*a.obtem_imag(); y=real*a.obtem_imag()+imag*a.obtem_real(); Complex z(x,y); return z; } virtual Complex divisaosegura(Complex a){ Complex z; Complex o; if( a.obtem_real()==0 && a.obtem_real()==0 ) throw ErroComplex(); else { o=a.inverso(); z=multiplica(o); return z; } } virtual Complex divcomplex(Complex o){ try{ Complex z; z=divisaosegura(o); return z; } catch( ErroComplex &e ){ e.print_erro(); Complex z( obtem_real(), obtem_imag() ); return z;} } }; isto vai servir para usar a classe Complex UsarComplex.cpp: #include<iostream> #include "Complex.cpp" using namespace std; int main(){ Complex a(5,-5); a.escrevecomplex(); Complex b,c,r,s; b.muda_real(2); b.escrevecomplex(); b.puroreal(); c.escrevecomplex(); c.puroreal(); cout<<"\n\nQuero que de de erro....Pois c=(0+0i)\n\n"; s=a.divcomplex(c); s.escrevecomplex(); cout<<"Em frente...outros exemplos..\n\n SOMA ...\n"; c=b.soma(a); a.escrevecomplex(); b.escrevecomplex(); c.escrevecomplex(); cout<<"Em frente...outros exemplos..\n\n Inverso ...\n"; Complex d(-3,4); d.puroreal(); d.escrevecomplex(); cout<<"inverso de d\n"; r=d.inverso(); r.escrevecomplex(); cout<<"Em frente...outros exemplos..\n\n Divisao ->esta kero que seja possivel =P...\n"; a.escrevecomplex(); cout<<" a dividir por ";d.escrevecomplex();cout<<"e '="; r=a.divcomplex(d); r.escrevecomplex(); int sair; cin>>sair; return 0; } a próxima classe é um simples modificação da classe Complex, mas aqui vou uma superclasse ParComplex... ParComplex.cpp: #include<iostream> using namespace std; class ParComplex{ private: double real; double imag; public: ParComplex(){real=0; imag=0;} ParComplex(double r, double i){real=r; imag=i;} virtual double obtem_real()const{return real;} virtual double obtem_imag()const{return imag;} virtual void muda_real(double r){ real=r;} virtual void muda_imag(double i){imag=i;} }; class Complex: public ParComplex{ private: public: Complex():ParComplex(){}; Complex(double e, double i):ParComplex(e,i){}; virtual Complex soma(Complex cc){ Complex p; p.muda_real( obtem_real()+cc.obtem_real() ); p.muda_imag( obtem_imag()+cc.obtem_imag() ); return p; } virtual bool ereal()const{ if(obtem_imag()==0) { return true;} else {return false;} } virtual void puroreal()const{ if(ereal()) cout<<" e' um numero complexo real\n"; else cout<<" e' um numero complexo puro\n"; } virtual void escrevecomplex()const { cout<<"o complexo em causa e' ("<<obtem_real()<<" + "<<obtem_imag()<<"i);"<<endl; } }; UsarParComplex.cpp: #include<iostream> #include "ParComplex.cpp" using namespace std; int main(){ Complex a(5,-5); a.escrevecomplex(); Complex b,c,r,s; b.muda_real(2); b.escrevecomplex(); b.puroreal(); c.escrevecomplex(); c.puroreal(); cout<<"Em frente...outros exemplos..\n\n SOMA ...\n"; c=b.soma(a); a.escrevecomplex(); b.escrevecomplex(); c.escrevecomplex(); cout<<"\nEm frente...outros exemplos..\n"; Complex d(-3,4); d.puroreal(); d.escrevecomplex(); int sair; cin>>sair; return 0; } qualquer dúvida ou se encontrarem alguma gafe...avisem 😉 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