Jump to content

Classes para Complexos


saramgsilva

Recommended Posts

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 😉
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.