-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathComplex.cc
More file actions
103 lines (85 loc) · 1.8 KB
/
Complex.cc
File metadata and controls
103 lines (85 loc) · 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//
// ECE3090 Program 3 - Complex Number Class implementation
// YOUR NAME HERE
// PLATFORM (Windows or Linux)
//
#include <iostream>
#include <string>
#include <math.h>
#include "Complex.h"
using namespace std;
// Constructors
Complex::Complex()
: real(0), imag(0)
{
}
Complex::Complex(double r)
: real(r), imag(0)
{
}
Complex::Complex(double r, double i)
: real(r), imag(i)
{
}
// Operators
Complex Complex::operator+(const Complex& b) const
{
return Complex(real + b.real, imag + b.imag);
}
Complex Complex::operator-(const Complex& b) const
{
return Complex(real - b.real, imag - b.imag);
}
Complex Complex::operator*(const Complex& b) const
{
return Complex(real*b.real - imag*b.imag,
real*b.imag + imag*b.real);
}
Complex Complex::operator/(const Complex& b) const
{
return Complex(real/b.real, imag/ b.real);
// THis needs some work
}
// Member functions
Complex Complex::Mag() const
{
return Complex(sqrt(real*real + imag*imag));
}
Complex Complex::Angle() const
{
return Complex(atan2(imag, real) * 360 / (2 * M_PI));
}
Complex Complex::Conj() const
{ // Return to complex conjugate
return Complex(real, -imag);
}
void Complex::Print() const
{
double r = real;
double i = imag;
if (fabs(i) < 1e-10) i = 0;
if (fabs(r) < 1e-10) r = 0;
if (i == 0)
{ // just real part with no parens
cout << real;
}
else
{
cout << '(' << r << "," << i << ')';
}
}
// Global function to output a Complex value
std::ostream& operator << (std::ostream &os, const Complex& c)
{ Complex c1(c);
if (fabs(c1.imag) < 1e-10) c1.imag = 0;
if (fabs(c1.real) < 1e-10) c1.real = 0;
if (c1.imag == 0)
{ // just real part with no parens
os << c1.real;
}
else
{
os << '(' << c1.real << "," << c1.imag << ')';
}
return os;
}