Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

복소수 객체에 대한 클래스를 정의하는 Python 프로그램

<시간/>

다음 연산으로 복소수 클래스를 정의하여 복소수 작업을 수행한다고 가정해 보겠습니다. -

  • 두 개의 복소수를 더하기 위한 add()
  • 두 개의 복소수를 빼기 위한 sub()
  • mul() 두 개의 복소수 곱하기
  • div() 두 개의 복소수 나누기
  • mod() 복소수의 계수를 구합니다.

복소수는 (a + bi) 형식으로 표시됩니다. 우리는 두 개의 복소수를 가지고 있으며 이들에 대해 이러한 연산을 수행할 것입니다. 클래스 내에서 add(), sub(), mul() 및 div() 메서드를 오버로드하여 연산자를 사용하여 작업을 수행할 수 있습니다. 또한 복소수를 적절한 형식으로 인쇄하기 위해 __str__() 메서드를 오버로드합니다.

따라서 입력이 c1 =2+3i c2 =5-2i와 같으면 출력은 (7.00 + 1.00i), (-3.00 + 5.00i), (16.00 + 11.00i), (0.14 + 0.66i)가 됩니다. ), 3.61, 5.39.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 실수부 re와 허수부 im으로 복잡한 클래스 정의
  • add() 함수를 정의합니다. 시간이 걸립니다
  • (re + o.re, im + o.im)을 사용하여 새로운 복합 객체를 반환
  • sub() 함수를 정의합니다. 시간이 걸립니다
  • (re - o.re, im - o.im)을 사용하여 새로운 복합 객체를 반환
  • mul() 함수를 정의합니다. 시간이 걸립니다
  • (re * o.re -im * o.im, re * o.im + im * o.re)를 사용하여 새로운 복합 객체를 반환
  • div() 함수를 정의합니다. 시간이 걸립니다
  • m :=o.re * o.re + o.im * o.im
  • ((re * o.re + im * o.im)/m, (im * o.re - re * o.im)/m)을 사용하여 새로운 복소수 객체를 반환
  • mod() 함수를 정의합니다. 소요 시간
  • (re * re + im * im)의 제곱근을 반환
  • __str__() 오버로드.
  • im이 0과 같으면
    • 소수점 두 자리까지 반환
  • re가 0과 같으면
    • im을 소수점 이하 두 자리까지 반환
  • im <0이면
    • re - im i 반환(re 및 im은 소수점 이하 두 자리까지 가능)
  • 그렇지 않으면
    • re + im i를 반환합니다. 둘 다 (re와 im은 소수점 이하 두 자리까지입니다)

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다.

from math import sqrt
class Complex:
   def __init__(self, real, imag):
      self.re = real
      self.im = imag

   def __add__(self, o):
      return Complex(self.re+o.re, self.im+o.im)

   def __sub__(self, o):
      return Complex(self.re-o.re, self.im-o.im)

   def __mul__(self, o):
      return Complex(self.re*o.re-self.im*o.im, self.re * o.im + self.im * o.re)

   def __truediv__(self, o):
      m = o.re * o.re + o.im * o.im
      return Complex((self.re * o.re + self.im * o.im)/m, (self.im * o.re - self.re * o.im)/m)

   def __str__(self):
      if self.im == 0:
         return '%.2f' % self.re
      if self.re == 0:
         return '%.2fi' % self.im
      if self.im < 0:
         return '%.2f - %.2fi' % (self.re, -self.im)
      else:
         return '%.2f + %.2fi' % (self.re, self.im)
      def mod(self):
         return sqrt(self.re*self.re+self.im*self.im)

def solve(comp1, comp2):
   print(comp1 + comp2)
   print(comp1 - comp2)
   print(comp1 * comp2)
   print(comp1 / comp2)
   print('%.2f' % comp1.mod())
   print('%.2f' % comp2.mod())

comp1 = Complex(2, 3)
comp2 = Complex(5, -2)
solve(comp1, comp2)

입력

2, 3
5, -2

출력

7.00 + 1.00i
-3.00 + 5.00i
16.00 + 11.00i
0.14 + 0.66i
3.61
5.39