• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

saramgsilva

Classes para Complexos

1 mensagem neste tópico

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 ;)
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora