สมมติว่าเราต้องการทำงานจำนวนเชิงซ้อนโดยกำหนดคลาสจำนวนเชิงซ้อนด้วยการดำเนินการต่อไปนี้ -
- บวก() เพื่อบวกสองจำนวนเชิงซ้อน
- 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