Advertisement
MagnusArias

PO1 | Zespolone

Nov 12th, 2015
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.18 KB | None | 0 0
  1. // ------------------------------ COMPLEX.H ------------------------------- //
  2.  
  3. #include <iostream>
  4. #include <cmath>
  5.  
  6. using namespace std;
  7.  
  8. class Complex {
  9.         private:
  10.                 double Re, Im;
  11.  
  12.         public:
  13.  
  14.                 Complex() : Re(0.0), Im(0.0) {} // konstruktor bezargumentowy
  15.                 Complex(double Re) : Re(Re), Im(0.0) {} // jaks nowy konstruktor
  16.                 Complex(double Re, double Im) : Re(Re), Im(Im) {} // konstruktor z dwoma argumentami
  17.                
  18.                 double getRe() const { return Re; } // pobeiranie czesci rzeczywistej
  19.                 double getIm() const { return Im; } // poebiranie czesci urojonej
  20.                 double getAmp() const { return sqrt( (Re*Re) + (Im*Im) ); }
  21.                 double getPhase();
  22.                
  23.                
  24.                 friend Complex operator-(const Complex&, const Complex&); // odejmowanie
  25.                 friend Complex operator*(const Complex&, const Complex&); // mnozenie
  26.                 friend Complex operator/(const Complex&, const Complex&); // dzielenie
  27.        
  28.         Complex & operator+=(Complex); // dodawanie 2
  29.         Complex & operator-=(Complex); // dodawanie 2
  30.         Complex & operator*=(Complex); // dodawanie 2
  31.         Complex & operator/=(Complex); // dodawanie 2
  32.                
  33.                 friend bool operator ==(const Complex&, const Complex&); // porownywanie
  34.  
  35.                 friend ostream& operator<<(ostream&, const Complex&); // wyswietlanie
  36.  
  37. /* "friend" oznacza tutaj, ze dana jakaś klasa/funkcja potrzebuje dostępu do
  38.  * prywatnych lub chronionych składowych klasy. Aby zezwolić na dostęp,
  39.  * używa się deklaracji przyjaźni miedzy klasą a inną klasą lub funkcją. */
  40. };
  41.  
  42. Complex operator+(const Complex&, const Complex&); // dodawanie
  43.  
  44.  
  45.  
  46. // ------------------------------ COMPLEX.CPP ------------------------------- //
  47.  
  48. #include <ostream>
  49. #include "complex.h"
  50. #include <cmath>
  51. #define PI 3.14159265359
  52.  
  53. using namespace std;
  54.  
  55. double Complex::getPhase(){
  56.         Complex z1(Complex::getRe(), Complex::getIm());
  57.         if (z1.getRe() < 0)
  58.                 return atan( z1.getIm() / z1.getRe() ) + PI;
  59.         else if (z1.getRe() > 0)
  60.                 return atan( z1.getIm() / z1.getRe() );
  61.         else {
  62.                 if (z1.getIm() > 0)
  63.                         return PI/2;
  64.                 else if (z1.getIm() < 0)
  65.                         return -PI/2;
  66.                 else return 0;
  67.         }
  68. }
  69.  
  70.  
  71. Complex operator+(const Complex& a, const Complex& b) {
  72.         double r, i;
  73.         r = a.getRe() + b.getRe();
  74.         i = a.getIm() + b.getIm();
  75.         return Complex(r, i);
  76. }
  77.  
  78. Complex operator-(const Complex& a, const Complex& b) {
  79.         double r, i;
  80.         r = a.getRe() - b.getRe();
  81.         i = a.getIm() - b.getIm();
  82.         return Complex(r, i);
  83. }
  84.  
  85. Complex operator*(const Complex& z1, const Complex& z2) {
  86.         double r, i;
  87.         double a = z1.getRe(), b = z1.getIm(), c = z2.getRe(), d = z2.getIm();
  88.         r = (a*c) - (b*d);
  89.         i = (a*d) + (b*c);
  90.         return Complex(r, i);
  91. }
  92.  
  93. Complex operator/(const Complex& z1, const Complex& z2) {
  94.         double r, i;
  95.         double a = z1.getRe(), b = z1.getIm(), c = z2.getRe(), d = z2.getIm();
  96.         r = ( (a*c) + (b*d) ) / ( (c*c) + (d*d) );
  97.         i = ( (b*c) - (a*d) ) / ( (c*c) + (d*d) );
  98.         return Complex(r, i);
  99. }
  100.  
  101.  
  102.  
  103. Complex & Complex::operator+=(Complex z1){
  104.      Re += z1.getRe();
  105.      Im += z1.getIm();
  106.      return * this;
  107. }
  108.  
  109. Complex & Complex::operator-=(Complex z1){
  110.      Re -= z1.getRe();
  111.      Im -= z1.getIm();
  112.      return * this;
  113. }
  114.  
  115. Complex & Complex::operator*=(Complex z1){
  116.      Re *= z1.getRe();
  117.      Im *= z1.getIm();
  118.      return * this;
  119. }
  120.  
  121. Complex & Complex::operator/=(Complex z1){
  122.      *this = *this / z1;
  123.      
  124.      return * this;
  125. }
  126.  
  127.  
  128. bool operator ==(const Complex& z1, const Complex& z2){
  129.       if ( (z1.getRe() == z2.getRe()) && ( z1.getIm() == z2.getIm()) )
  130.         return true;
  131.       else return false;
  132. }
  133. ostream& operator<<(ostream& out, const Complex &a) {
  134.         out << " " << a.getRe() << " + " << a.getIm() << "i ";
  135.         return out;
  136. }
  137.  
  138.  
  139.  
  140. // ------------------------------ MAIN.CPP ------------------------------- //
  141.  
  142. #include <iostream>
  143. #include "complex.h"
  144. #define PI 3.14159265359
  145.  
  146. int main() {
  147.         Complex a(1.8, 2.3), b(4.5, -4.1), a1(1.8, 2.3), a2(1.8, 2.3) , a3(1.8, 2.3),suma, rozn, mnoz, dziel;
  148.         bool rown, rown2;
  149.         suma = a+b;
  150.         rozn = a-b;
  151.         mnoz = a*b;
  152.         dziel = a/b;
  153.         rown = a==b;
  154.     rown2 = a==a1;
  155.                
  156.                 cout << "\t\t" << "a" << "\t\t" << "b" << "\t\t" << "c" << endl;
  157.                 cout << "\t\t" << a << "\t" << b << "\t" << a1 << endl << endl;
  158.  
  159.                 cout << "Real =   \t"                   << a.getRe()    << "\t\t" << b.getRe() << "\t\t" << a1.getRe() << endl;
  160.                 cout << "Imaginary = \t"                << a.getIm()    << "\t\t" << b.getIm() << "\t\t" << a1.getIm() << endl;
  161.                 cout << "Amplitude = \t"                << a.getAmp()   << "\t\t" << b.getAmp() << "\t\t" << a1.getAmp() << endl;
  162.                 cout << "Phase (deg) = \t"              << a.getPhase()* 180 / PI<< "\t\t" << b.getPhase() * 180 / PI << "\t" << a1.getPhase() * 180 / PI << endl << endl;
  163.  
  164.         cout << "Suma (a+b) \t= \t"                 << suma         <<      endl;
  165.     a+=b;
  166.     cout << "Suma2 (a+=b) \t= \t"           << a        <<  endl;
  167.        
  168.         cout << "Roznica (a-b) \t= \t"                  << rozn         <<      endl;
  169.    
  170.     a1-=b;
  171.     cout << "roznica (a-=b) \t= \t"         << a1       <<  endl;
  172.    
  173.         cout << "Iloczyn (a*b) \t= \t"                  << mnoz         <<      endl;
  174.    
  175.     a2*=b;
  176.     cout << "iloczyn (a*=b) \t= \t"         << a2       <<  endl;
  177.    
  178.    
  179.         cout << "Iloraz (a/b) \t= \t"                   << dziel        <<  endl;
  180.    
  181.         cout << "Rownosc (a=b) \t= \t"                  << rown         <<      endl;
  182.    
  183.     cout << "Rownosc (a=c) \t= \t"                  << rown2        <<      endl << endl;
  184.  
  185.        
  186.     cout << "10*b \t= \t " << 10*b << endl;
  187.     cout << "b*10 \t= \t " << b*10 << endl;
  188.    
  189.     a3 /= b;
  190.     cout << "Iloraz (a/=b) \t= \t" << a3 << endl;
  191.     a+= b+= a1;
  192.     cout << "a += b += c \t= \t" <<  a << endl;
  193.         return 0;
  194. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement