Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: 5378453 en 24 de Septiembre 2015, 01:41

Título: C++ cplusplus clase que representa números complejos sumar complejos
Publicado por: 5378453 en 24 de Septiembre 2015, 01:41
.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?
Título: Re:Ayuda con suma de 2 objetos que tienen 2 variables cada uno en C++
Publicado por: 5378453 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
Título: Re:C++ cplusplus clase que representa números complejos sumar complejos
Publicado por: César Krall 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!
Título: Re:C++ cplusplus clase que representa números complejos sumar complejos
Publicado por: 5378453 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
Título: Re:C++ cplusplus clase que representa números complejos sumar complejos
Publicado por: Alex Rodríguez 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:
(http://www.vitutor.com/di/c/images/a6-ej1.gif)

Saludos
Título: Re:C++ cplusplus clase que representa números complejos sumar complejos
Publicado por: 5378453 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