Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- class Complex
- {
- public:
- Complex();
- Complex(double);
- Complex(double RealPart, double ImaginaryPart);
- Complex& operator+=(const Complex Complex1);
- Complex& operator-=(const Complex Complex1);
- Complex& operator*=(const Complex Complex1);
- Complex& operator/=(const Complex Complex1);
- double amplitude();
- double phase();
- public:
- double RealPart;
- double ImaginaryPart;
- };
- Complex operator+(const Complex &Complex1, const Complex &Complex2);
- Complex operator-(const Complex &Complex1, const Complex &Complex2);
- std::ostream & operator<<(std::ostream &output, const Complex &NumberToDsiplay);
- bool operator!=(const Complex &Complex1, const Complex &Complex2);
- bool operator==(const Complex &Complex1, const Complex &Complex2);
- Complex operator *(const Complex &Complex1, const Complex &Complex2);
- Complex operator /(const Complex &Complex1, const Complex &Complex2);
- #include <iostream>
- #include <cmath>
- #include "complex.h"
- #define PI 3.14159265
- using namespace std;
- Complex::Complex()
- {
- RealPart = 0;
- ImaginaryPart = 0;
- }
- Complex::Complex (double real)
- {
- RealPart = real;
- ImaginaryPart = 0;
- }
- Complex::Complex (double Real, double Imag)
- {
- RealPart = Real;
- ImaginaryPart = Imag;
- }
- Complex operator+ (const Complex &Complex1, const Complex &Complex2)
- {
- Complex n;
- n.RealPart = Complex1.RealPart + Complex2.RealPart;
- n.ImaginaryPart = Complex1.ImaginaryPart + Complex2.ImaginaryPart;
- return n;
- }
- Complex operator -(const Complex &Complex1, const Complex &Complex2)
- {
- Complex n;
- n.RealPart = Complex1.RealPart - Complex2.RealPart;
- n.ImaginaryPart = Complex1.ImaginaryPart - Complex2.ImaginaryPart;
- return n;
- }
- std::ostream & operator<<(std::ostream &output, const Complex &NumberToDsiplay)
- {
- if(NumberToDsiplay.ImaginaryPart > 0)
- output << NumberToDsiplay.RealPart << "+" << NumberToDsiplay.ImaginaryPart << "i";
- else if(NumberToDsiplay.ImaginaryPart < 0)
- output << NumberToDsiplay.RealPart << "" << NumberToDsiplay.ImaginaryPart << "i";
- else
- output << NumberToDsiplay.RealPart << "+" << NumberToDsiplay.ImaginaryPart << "i";
- return output;
- }
- bool operator==(const Complex &Complex1, const Complex &Complex2)
- {
- return Complex1.RealPart==Complex2.RealPart && Complex1.ImaginaryPart==Complex2.ImaginaryPart;
- }
- Complex operator *(const Complex &Complex1, const Complex &Complex2)
- {
- Complex n;
- n.RealPart = (Complex1.RealPart * Complex2.RealPart) + (Complex1.ImaginaryPart * Complex2.ImaginaryPart * (-1));
- n.ImaginaryPart = (Complex1.RealPart * Complex2.ImaginaryPart) + (Complex1.ImaginaryPart * Complex2.RealPart);
- return n;
- }
- Complex operator/(const Complex &Complex1, const Complex &Complex2)
- {
- Complex n;
- double nominator_real = Complex1.RealPart * Complex2.RealPart - Complex1.ImaginaryPart * (-1) * Complex2.ImaginaryPart;
- double nominator_img = Complex1.RealPart * (-1) * Complex2.ImaginaryPart + Complex1.ImaginaryPart * Complex2.RealPart;
- double denominator = (Complex2.RealPart * Complex2.RealPart) + (Complex2.ImaginaryPart * Complex2.ImaginaryPart);
- n.RealPart = nominator_real/denominator;
- n.ImaginaryPart = nominator_img/denominator;
- return n;
- }
- bool operator!=(const Complex &Complex1, const Complex &Complex2)
- {
- if(Complex1.RealPart != Complex2.RealPart && Complex1.ImaginaryPart != Complex2.ImaginaryPart)
- return true;
- else if(Complex1.RealPart != Complex2.RealPart && (!(Complex1.ImaginaryPart != Complex2.ImaginaryPart)))
- return true;
- else if(Complex1.ImaginaryPart != Complex2.ImaginaryPart && (!(Complex1.RealPart != Complex2.RealPart)))
- return true;
- else return false;
- }
- Complex& Complex::operator+=(const Complex Complex1)
- {
- RealPart += Complex1.RealPart;
- ImaginaryPart += Complex1.ImaginaryPart;
- return *this;
- }
- Complex& Complex::operator-=(const Complex Complex1)
- {
- RealPart -= Complex1.RealPart;
- ImaginaryPart -= Complex1.ImaginaryPart;
- return *this;
- }
- Complex& Complex::operator*=(const Complex Complex1)
- {
- RealPart = Complex1.RealPart * RealPart - Complex1.ImaginaryPart * ImaginaryPart;
- ImaginaryPart = Complex1.ImaginaryPart * RealPart + Complex1.RealPart * ImaginaryPart;
- return *this;
- }
- Complex& Complex::operator/=(const Complex Complex1)
- {
- double nominator_real = RealPart * Complex1.RealPart - ImaginaryPart * (-1) * Complex1.ImaginaryPart;
- double nominator_img = RealPart * (-1) * Complex1.ImaginaryPart + ImaginaryPart * Complex1.RealPart;
- double denominator = (Complex1.RealPart * Complex1.RealPart) + (Complex1.ImaginaryPart * Complex1.ImaginaryPart);
- RealPart = nominator_real/denominator;
- ImaginaryPart = nominator_img/denominator;
- return *this;
- }
- double Complex::amplitude()
- {
- return sqrt((RealPart*RealPart)+(ImaginaryPart*ImaginaryPart));
- }
- double Complex:: phase()
- {
- return atan2(ImaginaryPart,RealPart) * 180 / PI ;
- }
- #include <iostream>
- #include "complex.h"
- #include "complex.cpp"
- using namespace std;
- int main()
- {
- Complex a(2, 3),b(2, 4),c(12), d(3,4);
- cout<<a + 7<<endl;
- cout<<7 + a<<endl;
- cout<<b + a<<endl;
- cout<<(c == 3.5)<<endl;
- cout<<(3.5 == c)<<endl;
- cout<<(6 * a)<<endl;
- cout<<(a != c)<<endl;
- cout<<(a += b += c)<<endl;
- cout<<((a += b) += c)<<endl;
- cout<<(a / 3)<<endl;
- cout<<d.amplitude()<<endl;
- cout<<d.phase()<<endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment