สมมติว่าเราต้องการทำงานกับจำนวนเชิงซ้อนโดยการกำหนดคลาสจำนวนเชิงซ้อนพร้อมการดำเนินการต่อไปนี้:
- add() บวกจำนวนเชิงซ้อนสองจำนวน
- sub() ลบจำนวนเชิงซ้อนสองจำนวน
- mul() คูณจำนวนเชิงซ้อนสองจำนวน
- div() หารจำนวนเชิงซ้อนสองจำนวน
- mod() หาค่าสัมบูรณ์ (modulus) ของจำนวนเชิงซ้อน
จำนวนเชิงซ้อนจะแสดงในรูปแบบ (a + bi) เรามีจำนวนเชิงซ้อนสองจำนวน จะทำการดำเนินการเหล่านี้ ภายในคลาสเราจะ overload เมธอด __add__, __sub__, __mul__, __div__ เพื่อให้ใช้ตัวดำเนินการได้โดยตรง และ overload __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
ขั้นตอนการแก้ปัญหา
- กำหนดคลาส Complex มีส่วนจริง re และส่วนจินตภาพ im
- __add__(self, o): คืนค่า Complex(re + o.re, im + o.im)
- __sub__(self, o): คืนค่า Complex(re - o.re, im - o.im)
- __mul__(self, o): คืนค่า Complex(re*o.re - im*o.im, re*o.im + im*o.re)
- __truediv__(self, o): m = o.re^2 + o.im^2 คืนค่า Complex((re*o.re + im*o.im)/m, (im*o.re - re*o.im)/m)
- mod(self): คืนค่า sqrt(re^2 + im^2)
- __str__(): จัดรูปแบบการแสดงผล 2 ทศนิยม
ตัวอย่างโค้ด
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)
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