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

jpmor82

Class Complexos

5 mensagens neste tópico

Eu tenho 2 class de complexos feitas, sendo elas complexopolar e complexocartesiano, aparecem em baixo.

O que queria era contriuir por via de conceitos como Encapsulamento, Herança e Polimorfismo, uma hierarquia de classes que modele ambas as representações de números complexos: cartesiana e polar. Como nao percebo muito desta parte, pedia-vos a vossa ajuda.

#include <iostream>
#include <cmath>
#include <fstream>
const double pi=3.14159;
using namespace std;

class complexopolar
{

public:

complexopolar(void);
complexopolar(float,float);
complexopolar operator+ (complexopolar& c1) const;
complexopolar operator- (complexopolar& c1) const;
complexopolar operator* (complexopolar& c1) const;
complexopolar operator/ (complexopolar& c1) const;
float Arg(void) const;
float Abs(void) const;
float Im(void) const;
float Re(void) const;
friend ostream& operator<< (ostream&, complexopolar);

private:

float abs;
float arg;

};

complexopolar::complexopolar(void)
{
abs=0.0;
arg=0.0;
}

complexopolar::complexopolar(float r,float a)
{
abs=r;
arg=a;
}

complexopolar complexopolar::operator+ (complexopolar& c1) const 
{
complexopolar resultado;
float re=Re(), re1=c1.Re(), im=Im(), im1=c1.Im();

re = re + re1;
im = im + im1;
resultado.abs = sqrt( pow(re,2) + pow(im,2) );
resultado.arg = atan( im / re );

return resultado;//copia resultado para a saída da função
}

complexopolar complexopolar::operator- (complexopolar& c1) const
{
complexopolar resultado;
float re=Re(), re1=c1.Re(), im=Im(), im1=c1.Im();

re = re - re1;
im = im - im1;
resultado.abs = sqrt( pow(re,2) + pow(im,2) );
resultado.arg = atan( im / re );

return resultado;//copia resultado para a saída da função
}

complexopolar complexopolar::operator* (complexopolar& c1) const
{
complexopolar resultado;

resultado.abs = abs * c1.Abs();
resultado.arg = arg + c1.Arg();

return resultado;//copia resultado para a saída da função
}

complexopolar complexopolar::operator/ (complexopolar& c1) const
{
complexopolar resultado;

resultado.abs = abs / c1.Abs();
resultado.arg = arg - c1.Arg();

return resultado;//copia resultado para a saída da função
}

float complexopolar::Arg(void) const
{
return arg;
}

float complexopolar::Abs(void) const
{
return abs;
}

float complexopolar::Re(void) const
{
return abs*cos(arg);
}

float complexopolar::Im(void) const
{
return abs*sin(arg);
}

ostream& operator<< (ostream& o, complexopolar c)
{
o << c.Abs() << "exp(i" << c.Arg() << ")" << endl;

return o;
}

int main(void)
{
complexopolar a(1,0) , b(0,(5*pi)/4);

cout << " Primeiro complexo: " << a << endl;
cout << " Segundo complexo: " << b << endl;
cout << " Soma: " << a+b << endl;
cout << " Subtraccao: " << a-b << endl;
cout << " Multiplicacao: " << a*b << endl;
cout << " Divisao: " << a/b << endl;

cin.get();

return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E:

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

class complexocartesiano
{

public:

complexocartesiano(void);
complexocartesiano(float,float);
complexocartesiano operator+ (complexocartesiano& c1) const;
complexocartesiano operator- (complexocartesiano& c1) const;
complexocartesiano operator* (complexocartesiano& c1) const;
complexocartesiano operator/ (complexocartesiano& c1) const;
float Re(void) const;
float Im(void) const;
float Abs(void) const;
friend ostream& operator<< (ostream&, complexocartesiano);

private:

float re;
float im;

};

complexocartesiano::complexocartesiano(void)
{
re=0.0;
im=0.0;
}

complexocartesiano::complexocartesiano(float r,float i)
{
re=r;
im=i;
}

complexocartesiano complexocartesiano::operator+ (complexocartesiano& c1) const 
{
complexocartesiano resultado;

resultado.re = re + c1.Re();
resultado.im = im + c1.Im();

return resultado;//copia resultado para a saída da função
}

complexocartesiano complexocartesiano::operator- (complexocartesiano& c1) const
{
complexocartesiano resultado;

resultado.re = re - c1.Re();
resultado.im = im - c1.Im();

return resultado;//copia resultado para a saída da função
}

complexocartesiano complexocartesiano::operator* (complexocartesiano& c1) const
{
complexocartesiano resultado;

resultado.re = re*c1.Re() - im*c1.Im();
resultado.im = re*c1.Im() + im*c1.Re();

return resultado;//copia resultado para a saída da função
}

complexocartesiano complexocartesiano::operator/ (complexocartesiano& c1) const
{
complexocartesiano resultado;

resultado.re = ( re*c1.Re() + im*c1.Im() ) / ( c1.Re()*c1.Re() + c1.Im()*c1.Im() );
resultado.im = ( im*c1.Im() + re*c1.Re() ) / ( c1.Re()*c1.Re() + c1.Im()*c1.Im() );

return resultado;//copia resultado para a saída da função
}

float complexocartesiano::Re(void) const
{
return re;
}

float complexocartesiano::Im(void) const
{
return im;
}

float complexocartesiano::Abs(void) const
{
return sqrt( re*re + im*im );
}

ostream& operator<< (ostream& o, complexocartesiano c)
{
o << c.Re() << " + i " << c.Im();

return o;
}

int main(void)
{
complexocartesiano a(1.0,2.0) , b(2,1);

cout << " Primeiro complexo: " << a << endl;
cout << " Segundo complexo: " << b << endl;
cout << " Soma: " << a+b << endl;
cout << " Subtraccao: " << a-b << endl;
cout << " Multiplicacao: " << a*b << endl;
cout << " Divisao: " << a/b << endl;

cin.get();

return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Segundo percebi, terás que criar uma classe abstracta da qual vais derivar ambas as classes que tens. Nessa classe defines os campos e métodos que serão comuns a ambas as classes derivadas. Depois depende do que pretendes... vais querer fazer operações (soma, etc.) com ambas as representações? Tipo somar um cartesiano a um polar e vice versa?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim e isso mesmo, mas ainda estou muito verde nos objectos, e nao sei bem como fazer

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Devias estudar melhor esses conceitos antes de te pores a fazer o trabalho. Se te faltar documentação na cadeira (suponho que seja um trabalho escolar), tens bastantes tutoriais pela net :)

Algo do género do apresentado aqui deve ajudar-te a compreender os princípios básicos da coisa.

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