Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรม Python สำหรับกำหนดคลาสสำหรับอ็อบเจกต์จำนวนเชิงซ้อน


สมมติว่าเราต้องการทำงานจำนวนเชิงซ้อนโดยกำหนดคลาสจำนวนเชิงซ้อนด้วยการดำเนินการต่อไปนี้ -

  • บวก() เพื่อบวกสองจำนวนเชิงซ้อน
  • 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.

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดคลาสที่ซับซ้อนด้วยส่วนจริงและส่วนจินตภาพ im
  • กำหนดฟังก์ชัน add() นี้จะใช้เวลา o
  • ส่งคืนวัตถุที่ซับซ้อนใหม่ด้วย (re + o.re, im + o.im)
  • กำหนดฟังก์ชัน sub() นี้จะใช้เวลา o
  • ส่งคืนวัตถุที่ซับซ้อนใหม่ด้วย (re - o.re, im - o.im)
  • กำหนดฟังก์ชัน mul() นี้จะใช้เวลา o
  • ส่งคืนวัตถุที่ซับซ้อนใหม่ด้วย (re * o.re -im * o.im, re * o.im + im * o.re)
  • กำหนดฟังก์ชัน div() นี้จะใช้เวลา o
  • 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 ทศนิยมสองตำแหน่ง
  • ถ้าฉัน <0 แล้ว
    • return - im i ทั้งสอง (re และ im เป็นทศนิยมสูงสุดสองตำแหน่ง)
  • มิฉะนั้น
    • return 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