Autor Tema: C++ cplusplus clase que representa números complejos sumar complejos  (Leído 14983 veces)

5378453

  • Principiante
  • **
  • Mensajes: 56
    • Ver Perfil
    • Mugiwara no Fansub
.h
Código: [Seleccionar]
#include <conio.h>
#include <math.h>
#include <iostream>
#include <stdlib.h>
using namespace std;

class complejo{

private:

double r,i;

public:

complejo(){
r=0.0;
i=0.0;
}

complejo(double real, double imaginario){
r=real;
i=imaginario;
}

void setRealImaginario(double real,double imaginario){
r=real;
i=imaginario;
}


double getReal(){
return r;
}
double getImaginario(){
return i;
}

void imprimeRectangular(){
if(r!=0&&i!=0){
cout <<"\n" << r << "," << i << "i";
}
else if(r==0&&i!=0){
cout <<"\n" << i <<"i";
}
else if(r!=0&&i==0){
cout <<"\n" << r;
}
else{
cout <<"\n0";
}
}

double sumaRectangular(double real1, double imaginario1, double real2, double imaginario2){
r= real1 + real2;
i= imaginario1 + imaginario2;
return r,i;
}

};

.cpp
Código: [Seleccionar]
using namespace std;
#include "complejo.h"

void main(){
complejo x,y(4,5),z(10,-10),a;
x.setRealImaginario(20,40);
a.sumaRectangular(x,z);
a.imprimeRectangular();
}

Como le puedo hacer para sumar el atributo "r" de x con el atributo "r" de z y sumar el atributo "i" de x con el atributo "i" de z?
« Última modificación: 24 de Septiembre 2015, 11:02 por César Krall »

5378453

  • Principiante
  • **
  • Mensajes: 56
    • Ver Perfil
    • Mugiwara no Fansub
Re:Ayuda con suma de 2 objetos que tienen 2 variables cada uno en C++
« Respuesta #1 en: 24 de Septiembre 2015, 02:33 »
Ya resolvi mi duda, tuve que utilizar sobrecarga de operadores, pero me surgio otra duda.

Como puedo hacer para que el operador no necesite devolver algo? ya que ahi mismo en cuanto realiza la operacion le mando el cout con el resultado y tengo que poner afuerzas el return si no me marca error

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:C++ cplusplus clase que representa números complejos sumar complejos
« Respuesta #2 en: 24 de Septiembre 2015, 11:03 »
Hola, ¿puedes poner el código como ha quedado y indicar en qué línea te marca error si quitas el return?

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

5378453

  • Principiante
  • **
  • Mensajes: 56
    • Ver Perfil
    • Mugiwara no Fansub
Re:C++ cplusplus clase que representa números complejos sumar complejos
« Respuesta #3 en: 24 de Septiembre 2015, 23:11 »
Hola, ¿puedes poner el código como ha quedado y indicar en qué línea te marca error si quitas el return?

Saludos!

Ya pude resolverlo pero me surgio otra duda, ya que tengo una funcion que transforma de numero polar a rectangular o viceversa, que operador puedo sobrecargar pero que solo acepte un objeto, por ejemplo hacer que x=z| y me de la transformacion a polar o rectangular, no importa que operador sea solo quieor saber si se puede hacer con uno que solo acepte 1 argumento

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:C++ cplusplus clase que representa números complejos sumar complejos
« Respuesta #4 en: 25 de Septiembre 2015, 08:11 »
Hola

Cuando resuelves un código te agradecemos que lo pegues en el foro, así las personas que lean el hilo pueden ver cómo ha quedado.

Para pasar un complejo a forma polar simplemente necesitas como argumento el complejo. Puedes trabajar con dos clases, una que se llame complejo y otra ComplejoPolar, y en el constructor de ComplejoPolar recibir como argumento el complejo.

Ejemplo de paso de complejo a polar:

Saludos

5378453

  • Principiante
  • **
  • Mensajes: 56
    • Ver Perfil
    • Mugiwara no Fansub
Re:C++ cplusplus clase que representa números complejos sumar complejos
« Respuesta #5 en: 25 de Septiembre 2015, 23:08 »
La funcion para transformar de rectanular a polar y viceversa ya la tenia, mi duda era que para transformarlo lo hacia asi: a!=x sobrecargando el operador != pero quiero hacerlo para hacer con otro operador que solo acepte un agumento por ejemplo a=x| <-- Algo asi

este es el codigo:

complejo.h:
Código: [Seleccionar]
#include <conio.h>
#include <math.h>
#include <iostream>
#include <stdlib.h>
using namespace std;

class complejo{

private:

double r,i;
char a;

public:

complejo(){
r=0.0;
i=0.0;
a='a';
}

complejo(double real, double imaginario,char atributo){
r=real;
i=imaginario;
a=atributo;
}

void setRealImaginario(double real,double imaginario,char atributo){
r=real;
i=imaginario;
a=atributo;
}


double getReal(){
return r;
}
double getImaginario(){
return i;
}

char getAtributo(){
return a;
}

void setMagnitudAngulo(double mag, double ang){
r=mag;
i=ang;
}

double getMagitud(){
return r;
}
double getAngulo(){
return i;
}

void imprimeRectangular(){
if(r!=0&&i!=0){
cout <<"\n" << r << "," << i << "i";
}
else if(r==0&&i!=0){
cout <<"\n" << i <<"i";
}
else if(r!=0&&i==0){
cout <<"\n" << r;
}
else{
cout <<"\n0";
}
}

complejo operator+(const complejo&op2) const{
complejo suma;
if(op2.a == 'r'){
suma.r= r+op2.r;
suma.i= i+op2.i;
cout << "\nResultado de la Suma" << suma.r << "," << suma.i << "i";
return suma;
}
else{
suma.r= r+op2.r;
suma.i= i+op2.i;
cout<<"\nResultado de la Suma: "  << suma.r << ","<< suma.i<< "\xF8";
return suma;
}
}

complejo operator-(const complejo&op2) const{
complejo resta;
if(op2.a == 'r'){
resta.r= r-op2.r;
resta.i= i-op2.i;
cout << "\nResultado de la Resta: " << resta.r << "," << resta.i << "i";
return resta;
}
else{
resta.r= r-op2.r;
resta.i= i-op2.i;
cout << "\nResultado de la Resta: " << resta.r << "," << resta.i << "\xF8";
return resta;
}
}

complejo operator*(const complejo&op2) const{
complejo multi;
if(op2.a == 'r'){
multi.r = (r*op2.r)-(i*op2.i);
multi.i = (r*op2.i)+(i*op2.r);
cout <<"\nResultado de la Multiplicacion: " << multi.r << "," << multi.i << "i";
return multi;
}
else{
multi.r = r*op2.r;
multi.i = i+op2.i;
cout <<"\nResultado de la Multiplicacion: " << multi.r << "," << multi.i << "\xF8";
return multi;
}
}

complejo operator/(const complejo&op2) const{
complejo divi;
if(op2.a == 'r'){
divi.r =((r*op2.r)+(i*op2.i))/(pow(op2.r,2)+pow(op2.i,2));
divi.i =((i*op2.r)-(r*op2.i))/(pow(op2.r,2)+pow(op2.i,2));
cout <<"\nResultado de la Division: " << divi.r << "," << divi.i << "i";
return divi;
}
else{
divi.r= r/op2.r;
divi.i= i-op2.i;
cout <<"\nResultado de la Division: " << divi.r << "," << divi.i << "\xF8";
return divi;
}
}

complejo operator!=(const complejo&op2) const{
complejo trans;
if(op2.a == 'p'){
trans.r=op2.r*(cos(op2.i*.017453));
trans.i=op2.r*(sin(op2.i*.017453));
cout <<"Resultado de la Transformacion a Rectangular: " << trans.r << "," << trans.i << "i";
return trans;
}

else{
if((op2.r>0)&&(op2.i>0)){
trans.r=sqrt((pow(op2.r,2))+(pow(op2.i,2)));
trans.i=((atan(op2.i/op2.r))*57.29);
trans.i=sqrt(pow(trans.i,2));
}

if((op2.r<0)&&(op2.i>0)){
trans.r=sqrt((pow(op2.r,2))+(pow(op2.i,2)));
trans.i=((atan(op2.r/op2.i))*57.29);
trans.i=(sqrt(pow(trans.i,2)))+90;
}

if((op2.r>0)&&(op2.i<0)){
trans.r=sqrt((pow(op2.r,2))+(pow(op2.i,2)));
trans.i=((atan(op2.i/op2.r))*57.29);
trans.i=-(sqrt(pow(trans.i,2)));
}

if((op2.r<0)&&(op2.i<0)){
trans.r=sqrt((pow(op2.r,2))+(pow(op2.i,2)));
trans.i=((atan(op2.r/op2.i))*57.29);
trans.i=-(sqrt(pow(trans.i,2)))-90;
}

cout<<"\nResultado de la Transformacion a Polar"  << trans.r<< ","<< trans.i<< "\xF8";
return trans;
}

}
};

complejo.cpp:
Código: [Seleccionar]
using namespace std;
#include "complejo.h"

void main(){
complejo x,y(4,5,'p'),z(10,-10,'r'),a;
x.setRealImaginario(20,40,'r');
a!=x;
_getch();
}

se que lo del cout dentro de la sobrecarga no deberia de ir ahi por el return, pero lo deje por comodidad, para que imprimiera directo sin necesidad de mandar llamar la funcion para imprimir
« Última modificación: 26 de Septiembre 2015, 17:24 por Alex Rodríguez »

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".