complex.cpp
unknown
c_cpp
4 years ago
2.2 kB
10
Indexable
// complex.cpp
#include <iostream>
#include <string>
#include <cmath>
#include "./complex.h"
Complex::Complex(float real, float imag) {
m_real = real;
m_imag = imag;
}
float Complex::getReal() { return m_real; }
float Complex::getImag() { return m_imag; }
bool Complex::isReal() { return m_imag == 0; }
bool Complex::isImag() { return m_real == 0; }
bool Complex::equals(Complex c) {
return m_real==c.getReal() && m_imag==c.getImag();
}
Complex Complex::add(Complex c) {
return Complex(m_real + c.getReal(),
m_imag + c.getImag());
}
Complex Complex::subtract(Complex c) {
return Complex(this->m_real - c.getReal(),
m_imag - c.getImag());
}
Complex Complex::multiply(Complex c) {
// (a+bi)(c+di)=ac + adi + bci - bd
// ac - bd
float r = (m_real * c.getReal()) - (m_imag * c.getImag());
// i(ad + bc)
float i = (m_real * c.getImag()) + (m_imag * c.getReal()) ;
return Complex(r, i);
}
Complex Complex::divide(Complex c) {
// (a+bi)/(c+di)=(a+bi)(c-di)/(c^2+d^2)
// nominator (a+bi)(c-di) = ac -adi + bci + bd
// denominator: c+d
float d = pow(c.getReal(), 2) + pow(c.getImag(), 2);
// nominator real: ac + bd
float r = (m_real * c.getReal()) + (m_imag * c.getImag());
// nominator imaginary: bci - adi
float i = (m_imag * c.getReal()) - (m_real * c.getImag()) ;
return Complex(r/d, i/d);
}
void Complex::print() {
std::cout << *this;
}
std::string Complex::toString() {
return std::to_string(this->m_real)
+ ( this->m_real > 0 ? "+" : "")
+ std::to_string(this->m_real)
+ "i";
}
Complex Complex::operator+(const Complex &right) { return this->add(right); }
Complex Complex::operator-(const Complex &right) { return this->subtract(right); }
Complex Complex::operator*(const Complex &right) { return this->multiply(right); }
Complex Complex::operator/(const Complex &right) { return this->divide(right); }
bool Complex::operator==(const Complex &right) { return this->equals(right); }
std::ostream& operator<<(std::ostream& out, Complex* c) {
out << c->toString();
return out;
}Editor is loading...