Mary_99

TASk 3 oop

Nov 10th, 2019
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.73 KB | None | 0 0
  1. #pragma once
  2.  
  3. class Complex
  4. {
  5.     public:
  6.         Complex();
  7.         Complex(double);
  8.         Complex(double RealPart, double ImaginaryPart);
  9.         Complex& operator+=(const Complex Complex1);
  10.         Complex& operator-=(const Complex Complex1);
  11.         Complex& operator*=(const Complex Complex1);
  12.         Complex& operator/=(const Complex Complex1);
  13.         double amplitude();
  14.         double phase();
  15.  
  16.     public:
  17.         double RealPart;
  18.         double ImaginaryPart;
  19. };
  20.  
  21.         Complex operator+(const Complex &Complex1, const Complex &Complex2);
  22.         Complex operator-(const Complex &Complex1, const Complex &Complex2);
  23.         std::ostream & operator<<(std::ostream &output, const Complex &NumberToDsiplay);
  24.         bool operator!=(const Complex &Complex1, const Complex &Complex2);
  25.         bool operator==(const Complex &Complex1, const Complex &Complex2);
  26.         Complex operator *(const Complex &Complex1, const Complex &Complex2);
  27.         Complex operator /(const Complex &Complex1, const Complex &Complex2);
  28.  
  29.  
  30.  
  31.  
  32. #include <iostream>
  33. #include <cmath>  
  34. #include "complex.h"
  35.  
  36. #define PI 3.14159265
  37.  
  38. using namespace std;
  39.  
  40. Complex::Complex()
  41. {
  42.     RealPart = 0;
  43.     ImaginaryPart = 0;
  44. }
  45.  
  46.   Complex::Complex (double real)
  47.   {
  48.     RealPart = real;
  49.     ImaginaryPart = 0;
  50.   }
  51.  
  52.   Complex::Complex (double Real, double Imag)
  53.   {
  54.     RealPart = Real;
  55.     ImaginaryPart = Imag;
  56.   }
  57.  
  58.     Complex operator+ (const Complex &Complex1, const Complex &Complex2)
  59.   {
  60.     Complex n;
  61.     n.RealPart = Complex1.RealPart + Complex2.RealPart;
  62.     n.ImaginaryPart = Complex1.ImaginaryPart + Complex2.ImaginaryPart;
  63.     return n;
  64.   }
  65.  
  66.     Complex operator -(const Complex &Complex1, const Complex &Complex2)
  67.   {
  68.     Complex n;
  69.     n.RealPart = Complex1.RealPart - Complex2.RealPart;
  70.     n.ImaginaryPart = Complex1.ImaginaryPart - Complex2.ImaginaryPart;
  71.     return n;
  72.   }
  73.  
  74.   std::ostream & operator<<(std::ostream &output, const Complex &NumberToDsiplay)
  75. {
  76.     if(NumberToDsiplay.ImaginaryPart > 0)
  77.         output << NumberToDsiplay.RealPart << "+" << NumberToDsiplay.ImaginaryPart << "i";
  78.     else if(NumberToDsiplay.ImaginaryPart < 0)
  79.         output << NumberToDsiplay.RealPart << "" << NumberToDsiplay.ImaginaryPart << "i";
  80.     else
  81.         output << NumberToDsiplay.RealPart << "+" << NumberToDsiplay.ImaginaryPart << "i";
  82.     return output;
  83. }
  84.  
  85. bool operator==(const Complex &Complex1, const Complex &Complex2)
  86. {
  87.     return Complex1.RealPart==Complex2.RealPart && Complex1.ImaginaryPart==Complex2.ImaginaryPart;
  88. }
  89.  
  90. Complex operator *(const Complex &Complex1, const Complex &Complex2)
  91.   {
  92.     Complex n;
  93.     n.RealPart = (Complex1.RealPart * Complex2.RealPart) + (Complex1.ImaginaryPart * Complex2.ImaginaryPart * (-1));
  94.     n.ImaginaryPart = (Complex1.RealPart * Complex2.ImaginaryPart) + (Complex1.ImaginaryPart * Complex2.RealPart);
  95.     return n;
  96.   }
  97.  
  98. Complex operator/(const Complex &Complex1, const Complex &Complex2)
  99.   {
  100.     Complex n;
  101.     double nominator_real = Complex1.RealPart * Complex2.RealPart - Complex1.ImaginaryPart * (-1) * Complex2.ImaginaryPart;
  102.     double nominator_img = Complex1.RealPart * (-1) * Complex2.ImaginaryPart + Complex1.ImaginaryPart * Complex2.RealPart;
  103.     double denominator = (Complex2.RealPart * Complex2.RealPart) + (Complex2.ImaginaryPart * Complex2.ImaginaryPart);
  104.     n.RealPart =  nominator_real/denominator;
  105.     n.ImaginaryPart = nominator_img/denominator;
  106.     return n;
  107.  
  108.   }
  109.  
  110.   bool operator!=(const Complex &Complex1, const Complex &Complex2)
  111. {
  112.     if(Complex1.RealPart != Complex2.RealPart && Complex1.ImaginaryPart != Complex2.ImaginaryPart)
  113.             return true;
  114.     else if(Complex1.RealPart != Complex2.RealPart && (!(Complex1.ImaginaryPart != Complex2.ImaginaryPart)))
  115.             return true;
  116.     else if(Complex1.ImaginaryPart != Complex2.ImaginaryPart && (!(Complex1.RealPart != Complex2.RealPart)))
  117.         return true;
  118.  
  119.     else return false;
  120. }
  121.    
  122.     Complex& Complex::operator+=(const Complex Complex1)
  123. {
  124.     RealPart += Complex1.RealPart;
  125.     ImaginaryPart += Complex1.ImaginaryPart;
  126.  
  127.     return *this;
  128. }
  129.  
  130.     Complex& Complex::operator-=(const Complex Complex1)
  131. {
  132.     RealPart -= Complex1.RealPart;
  133.     ImaginaryPart -= Complex1.ImaginaryPart;
  134.  
  135.     return *this;
  136. }
  137.  
  138. Complex& Complex::operator*=(const Complex Complex1)
  139. {
  140.     RealPart = Complex1.RealPart * RealPart - Complex1.ImaginaryPart * ImaginaryPart;
  141.     ImaginaryPart = Complex1.ImaginaryPart * RealPart + Complex1.RealPart * ImaginaryPart;
  142.  
  143.     return *this;
  144. }
  145.  
  146. Complex& Complex::operator/=(const Complex Complex1)
  147. {
  148.     double nominator_real = RealPart * Complex1.RealPart - ImaginaryPart * (-1) * Complex1.ImaginaryPart;
  149.     double nominator_img = RealPart * (-1) * Complex1.ImaginaryPart + ImaginaryPart * Complex1.RealPart;
  150.     double denominator = (Complex1.RealPart * Complex1.RealPart) + (Complex1.ImaginaryPart * Complex1.ImaginaryPart);
  151.     RealPart =  nominator_real/denominator;
  152.     ImaginaryPart = nominator_img/denominator;
  153.  
  154.     return *this;
  155. }
  156.  
  157. double Complex::amplitude()
  158. {
  159.  
  160.     return sqrt((RealPart*RealPart)+(ImaginaryPart*ImaginaryPart));
  161.    
  162. }
  163.  
  164. double Complex:: phase()
  165. {  
  166.  
  167.     return  atan2(ImaginaryPart,RealPart)  * 180 / PI ;
  168. }
  169.  
  170.  
  171. #include <iostream>
  172. #include "complex.h"
  173. #include "complex.cpp"
  174. using namespace std;
  175.  
  176. int main()
  177. {
  178.  
  179.     Complex a(2, 3),b(2, 4),c(12), d(3,4);
  180.     cout<<a + 7<<endl;
  181.     cout<<7 + a<<endl;
  182.     cout<<b + a<<endl;
  183.     cout<<(c == 3.5)<<endl;
  184.     cout<<(3.5 == c)<<endl;
  185.     cout<<(6 * a)<<endl;
  186.     cout<<(a != c)<<endl;
  187.     cout<<(a += b += c)<<endl;
  188.     cout<<((a += b) += c)<<endl;
  189.     cout<<(a / 3)<<endl;
  190.     cout<<d.amplitude()<<endl;
  191.     cout<<d.phase()<<endl;
  192.  
  193. }
Advertisement
Add Comment
Please, Sign In to add comment