Advertisement
Guest User

Untitled

a guest
May 27th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.77 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. class Kompleksni {
  4.  double re, im;
  5. public:
  6.  Kompleksni(double re = 0, double im = 0) : re(re), im(im) {}
  7.  friend Kompleksni operator +(const Kompleksni &a) { return a; }
  8.  friend Kompleksni operator -(const Kompleksni &a) { return {-a.re, -a.im}; }
  9.  friend Kompleksni operator +(const Kompleksni &a, const Kompleksni &b) {
  10.  return {a.re + b.re, a.im + b.im};
  11.  }
  12.  friend Kompleksni operator -(const Kompleksni &a, const Kompleksni &b) {
  13.  return Kompleksni(a.re - b.re, a.im - b.im);
  14.  }
  15.  friend Kompleksni operator *(const Kompleksni &a, const Kompleksni &b) {
  16.  return {a.re * b.re - a.im * b.im, a.re * b.im + a.im * b.re};
  17.  }
  18.  friend Kompleksni operator /(const Kompleksni &a, const Kompleksni &b) {
  19.  double pomocna(b.re * b.re + b.im * b.im);
  20.  return {(a.re * b.re + a.im * b.im) / pomocna,
  21.  (a.im * b.re - a.re * b.im) / pomocna};
  22.  }
  23.  friend bool operator ==(const Kompleksni &a, const Kompleksni &b) {
  24.  return a.re == b.re && a.im == b.im;
  25.  }
  26.  friend bool operator !=(const Kompleksni &a, const Kompleksni &b) {
  27.  return !(a == b);
  28.  }
  29.  friend Kompleksni &operator +=(Kompleksni &a, const Kompleksni &b) {
  30.  a.re += b.re; a.im += b.im;
  31.  return a;
  32.  }
  33.  friend Kompleksni &operator -=(Kompleksni &a, const Kompleksni &b) {
  34.  a.re -= b.re; a.im -= b.im;
  35.  return a;
  36.  }
  37.  friend Kompleksni &operator *=(Kompleksni &a, const Kompleksni &b) {
  38.  double pomocna(a.re * b.im + a.im * b.re);
  39.  a.re = a.re * b.re - a.im * b.im; a.im = pomocna;
  40.  return a;
  41.  }
  42.  friend Kompleksni &operator /=(Kompleksni &a, const Kompleksni &b) {
  43.  double pom1(a.im * b.re - a.re * b.im), pom2(b.re * b.re + b.im * b.im);
  44.  a.re = (a.re * b.re + a.im * b.im) / pom2; a.im = pom1 / pom2;
  45.  return a;
  46.  }
  47.  friend std::ostream &operator <<(std::ostream &tok, const Kompleksni &a) {
  48.     if(a.re==0 && a.im==0) return tok<<"0";
  49.     if(a.re!=0 && a.im==0) return tok<<a.re;
  50.     if(a.re==0 && a.im<-1) return tok<<a.im<<"i";
  51.     if(a.re==0 && a.im==-1) return tok<<"-i";
  52.     if(a.re==0 && a.im==1) return tok<<"i";
  53.     if(a.re==0 &&a.im>1) return tok<<a.im<<"i";
  54.     if(a.re>1 && a.im>1) return tok<<a.re<<"+"<<a.im<<"i";
  55.     if(a.re>1 && a.im==1) return tok<<a.re<<"+i";
  56.     if(a.re==1 && a.im>1) return tok<<a.re<<"+"<<a.im<<"i";
  57.     if(a.re>1 && a.im==-1) return tok<<a.re<<"-i";
  58.     if(a.re>1 && a.im<-1) return tok<<a.re<<a.im<<"i";
  59.     if(a.re<0&&a.im==1) return tok<<a.re<<"+i";
  60.     if(a.re<0 && a.im>1) return tok<<a.re<<"+"<<a.im<<"i";
  61.     if(a.re<0 && a.im==-1) return tok<<a.re<<"-i";
  62.     if(a.re<0 && a.im<-1) return tok<<a.re<<a.im<<"i";
  63.    
  64.  //return tok << "(" << a.re << "," << a.im << ")";
  65.  }
  66.  friend std::istream &operator >>(std::istream &tok, Kompleksni &a);
  67.  friend double real(const Kompleksni &a) { return a.re; }
  68.  friend double imag(const Kompleksni &a) { return a.im; }
  69.  friend double abs(const Kompleksni &a) {
  70.  return std::sqrt(a.re * a.re + a.im * a.im);
  71.  }
  72.  friend double arg(const Kompleksni &a) { return std::atan2(a.im, a.re); }
  73.  friend Kompleksni conj(const Kompleksni &a) { return {a.re, -a.im}; }
  74.  friend Kompleksni sqrt(const Kompleksni &a) {
  75.  double rho(std::sqrt(abs(a))), phi(arg(a) / 2);
  76.  return {rho * cos(phi), rho * sin(phi)};
  77.  }
  78. };
  79. std::istream &operator >>(std::istream &tok, Kompleksni &a) {
  80.  char znak;
  81.  tok >> std::ws; // "Progutaj" razmake...
  82.  if(tok.peek() != '(') {
  83.  tok >> a.re;
  84.  a.im = 0;
  85.  }
  86.  else {
  87.  tok >> znak >> a.re >> znak;
  88.  if(znak != ',') tok.setstate(std::ios::failbit);
  89.  tok >> a.im >> znak;
  90.  if(znak != ')') tok.setstate(std::ios::failbit);
  91.  }
  92.  return tok;
  93. }
  94.  
  95. int main ()
  96. {
  97. std::cout  << Kompleksni(2, 1) << " " << Kompleksni(2, 5) << " " << Kompleksni(2, -1) << " "
  98.     << Kompleksni(2, -5) << " " << Kompleksni(-1, 1) << " " << Kompleksni(-1, 3) << " "
  99.     << Kompleksni(-1, -1) << " " << Kompleksni(-1, -5) << std::endl;
  100.     return 0;
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement