Jump to content

[C++] Classes simples polinomino e monomios


saramgsilva

Recommended Posts

Vou apresentar outro exemplo de classes... desta vez , tem a ver com polinómios, também implemento tratamento de erros...

Começo por apresentar a classe Simpoli, polinomios simples da forma ax^n +b...(n>0) ... que inclui tratamento de erros.

Simpoli.cpp:

#include<iostream>
#include<cmath>
using namespace std;

class ErroSimpoli{
  public:
     ErroSimpoli(){}
     virtual void print_erro()
    {cerr<<"Erro..Voce quer somar dois polinomios com grau diferentes!! BURRO!!!!  ehehhe\n";}
};

class Simpoli{
private:
       double coef;
       int grau;
       double ti;
public:
      Simpoli(){ coef=0; grau=0; ti=0;}
      Simpoli(double s, int r, double m){coef=s; grau=r; ti=m; }

      virtual int obtem_grau()const{return grau;}
      virtual double obtem_ti()const{return ti;}
      virtual double obtem_coef()const{return coef;}

      virtual void muda_coef(double n){coef=n;}
      virtual void muda_ti(double m){ti=m;}
      virtual void muda_grau(int n){grau=n;}

      Simpoli derivada(){
        Simpoli s;
        s.muda_ti(0);
        s.muda_coef(obtem_grau()*obtem_coef());
        s.muda_grau(obtem_grau()-1);         
        return s;
      }       

      virtual double valor(double x){

         return (double) pow(x,obtem_grau());

      }

      virtual void mult(double c){
         muda_ti(ti*c);
         muda_coef(c*coef);
      }

      virtual Simpoli soma(Simpoli o){
        Simpoli s;
        if( grau==o.obtem_grau() )
        { s.muda_coef(coef+o.obtem_coef());
          s.muda_ti(ti+o.obtem_ti()),
          s.muda_grau(grau);
         return s;
        }
        else
         throw ErroSimpoli();
      }

      virtual void escrevepoli()const{
      cout<<"O polinomio em causa... :"<<obtem_coef()<<"*x^"<<obtem_grau()<<"+"<<obtem_ti()<<endl;

      }

      virtual void pede(){
       cout<<"\nIntroduza o polinomio da forma a*x^n+b.\n Coeficiente a de a*x^n-> ";
       cin>>coef;
       cout<<"\nGrau n do polinomio-> ";
       cin>>grau;
       cout<<"\nTermo independente, ti-> ";
       cin>>ti;
       cout<<"\n";
      }
};

UsarSimpoli.cpp:

#include<iostream>
#include "Simpoli.cpp"
using namespace std;
int main(){

 try{
 Simpoli g(2,3,4);
 g.escrevepoli();

 Simpoli p,r;
 p.pede();
 p.escrevepoli();

   r=p.soma(g);
   r.escrevepoli();
 }
 catch(ErroSimpoli &e){ e.print_erro();}


int sair; cin>>sair;
return 0;

}

a classe monom é uma subclasse de simpoli, e monom representa os monómios da forma ax^n (n>0) ...isto é b=0.

Monom.cpp:

#include<iostream>
#include<cmath>
#include "Simpoli.cpp"
using namespace std;


class Monom :public Simpoli{
 private:
 public:
        Monom():Simpoli(){}
        Monom(double a, int n):Simpoli(a,(int)fabs(n),0){}

        virtual void muda_grau(int n){ muda_grau( (int)fabs(n) );}
        virtual void muda_ti(double m){muda_ti(0);}

        Monom derivada(){
           Monom s;
           s.muda_coef(obtem_grau()*obtem_coef());
           s.muda_grau(obtem_grau()-1);         
           return s;
        } 

        virtual Monom primitiva(){  // vou considerar que o b=0.. spr!!
           Monom p;
           p.muda_grau( obtem_grau()+1 );
           p.muda_coef( obtem_coef()/(obtem_grau()+1) );
           return p;         
        } 
        virtual void mult(double c){
           muda_coef(c*obtem_coef());
      }

      virtual Monom soma(Monom o){
        Monom s;
        if( obtem_grau()==o.obtem_grau() )
        { s.muda_coef(obtem_coef()+o.obtem_coef());
          s.muda_grau(obtem_grau());
          return s;
        }
        else
         throw ErroSimpoli();
      }

      virtual void escrevepoli()const{
      cout<<"O polinomio em causa... :"<<obtem_coef()<<"*x^"<<obtem_grau()<<endl;

      }

      virtual void pede(){
       double a;
       int n;
       cout<<"\nIntroduza o polinomio da forma a*x^n.\n Coeficiente a de a*x^n-> ";
       cin>>a;
       muda_coef(a);
       cout<<"\nGrau n do polinomio-> ";
       cin>>n;
       muda_grau(n);

      }   
};

UsarMonom.cpp:

#include<iostream>
#include "Monom.cpp"

using namespace std;

int main(){

 try{
 cout<<"Vou originar um erro ...ehehe k giro...\n";
 Monom g(2,3);
 g.escrevepoli();
 Monom p(2,2);
 p.escrevepoli();
 Monom r;


   r=p.soma(g);
   r.escrevepoli();
 }
 catch(ErroSimpoli &e){ e.print_erro();}



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.