본문 바로가기
프로그래머의 길/C & C++

complex 예제 (복소수 연산) & conj (켤레 복소수)

by 제이콥케이 2009. 12. 1.
반응형

#include <iostream>
#include <complex>

using namespace std;


int main(void) {
  complex <double> a (8.0, 3.0);  // 복소수 8+3i
  complex <double> b (5.0, 2.0);  // 복소수 5+2i
  complex <double> result;


  // 복소수 a 출력
  cout << a << endl;
  // 출력 결과: (8,3)


  // 복소수 b 출력
  cout << b << endl;
  // 출력 결과: (5,2)

반응형




  // 복소수의 더하기
  result = a + b;
  cout << result << endl;
  // 출력 결과: (13,5)
  // 13+5i 와 같음


  // 복소수의 빼기
  result = a - b;
  cout << result << endl;
  // 출력 결과: (3,1)
  // 3+1i 와 같음


  // 복소수의 곱하기
  result = a * b;
  cout << result << endl;
  // 출력 결과: (34,31)
  // 34+31i 와 같음


  // 복소수의 나누기
  result = a / b;
  cout << result << endl;
  // 출력 결과: (1.58621,-0.0344828)
  // 1.58621-0.0344828i 와 같음




  double d;

  // 복소수 a의 실수부 구하기
  d = real(a);
  cout << d << endl;
  // 출력 결과: 8


  // 복소수 a의 허수부 구하기
  d = imag(a);
  cout << d << endl;
  // 출력 결과: 3


  // 복소수 a의 절대값 구하기
  d = abs(a);
  cout << d << endl;
  // 출력 결과: 8.544


  return 0;
}


//////////////////////////////////


#include<iostream>
#include<iomanip>

using namespace std;

class complex
{
public:
    complex(double real = 0,double image = 0)
    {
       //  cout<<"complex constructor"<<endl;
         m_real = real;
         m_image = image;
    }

    ~complex()
    {
     //  cout<<"complex destructor"<<endl;
    }

  //operations 
    const complex Add(const complex &r)
    {
        return complex(m_real+r.m_real,m_image+r.m_image);
    }

    const complex Sub(const complex &r)
    {
        return complex(m_real-r.m_real,m_image-r.m_image);
    }

    const complex Multi(const complex &r)
    {
        return complex(m_real*r.m_real - m_image*r.m_image , m_image*r.m_real + m_real*r.m_image);
    }
 // 켤레복소수 구하기..
    const complex Conj(void)
    {
        return complex(m_real,-m_image);
    }

// 정수로 나누기 .. 길게 늘여쓰기 싫어서...ㅋ 나누어 지는 부분이 a^2 + b^2 이므로....

    const complex Scal_div(double x)
    {
        return complex( m_real / x , m_image / x );
    }

   const complex Div(complex &r)
   {
      complex c=(r.Conj());
      return Multi(c.Scal_div(((r.m_real*r.m_real)+(r.m_image)*(r.m_image))));
   }

 // 나중에 설명...z
    friend ostream& operator<<(ostream &os , const complex &r)
    {
       return os<<r.m_real<<showpos<< r.m_image<<"i"<<endl;
     }

private:
   double m_real;
   double m_image;
};

void main()
{
   complex a(1,2),b(2,-3);

   cout << "a + b = " << a.Add(b) ;
   cout << "a - b = " << a.Sub(b) ;
   cout << "a * b = " << a.Multi(b) ;
   cout << "a / b = " << a.Div(b);
}

반응형

'프로그래머의 길 > C & C++' 카테고리의 다른 글

윈도우 종료  (2) 2010.01.06
CStringT::Tokenize.  (0) 2009.12.02
Class Map 사용예제  (0) 2009.11.30
string <-> wstring  (0) 2009.07.22
비트맵 파일 RGB 조절  (0) 2008.05.19