يُعبَّر عن العدد المركب بالصيغة z = a + b * i، حيث:
a هو الجزء الحقيقي (عدد حقيقي)،
b هو الجزء التخيلي (وهو أيضًا عدد حقيقي)، و
i هي الوحدة التخيلية التي تحقق i^2 = -1.
يُعطى مرافق العدد المركب z = a + b * i بالعلاقة:
zc = a - b * i
تُعرَّف القيمة المطلقة (أو المقياس) للعدد z بأنها:
|z| = sqrt(a^2 + b^2)
ويُحسب مربع القيمة المطلقة على أنه حاصل ضرب z في مرافقه zc:
|z|^2 = z * zc = a^2 + b^2
يُحسب مجموع العددين المركبين z1 = a + b * i وz2 = c + d * i بجمع جزأيهما الحقيقي والتخيلي كلًّا على حدة:
z1 + z2 = (a + b * i) + (c + d * i)
= (a + c) + (b + d) * i
يُحصل على الفرق بين عددين مركبين بطرح الجزأين المتناظرين من كل منهما:
z1 - z2 = (a + b * i) - (c + d * i)
= (a - c) + (b - d) * i
يُعرَّف حاصل ضرب عددين مركبين بأنه:
z1 * z2 = (a + b * i) * (c + d * i)
= (a * c - b * d) + (b * c + a * d) * i
يُعطى مقلوب عدد مركب لا يساوي صفرًا بالعلاقة:
1 / z = 1 / (a + b * i)
= a / (a^2 + b^2) - b / (a^2 + b^2) * i
تُعطى قسمة عدد مركب على آخر بالعلاقة:
z1 / z2 = z1 * (1 / z2)
= (a + b * i) / (c + d * i)
= (a * c + b * d) / (c^2 + d^2) + (b * c - a * d) / (c^2 + d^2) * i
يمكن التعبير عن رفع e (أساس اللوغاريتم الطبيعي) إلى أس مركب باستخدام صيغة أويلر:
e^(a + b * i) = e^a * e^(b * i)
= e^a * (cos(b) + i * sin(b))
بما أنه لا ينبغي لك استخدام الدعم المدمج للأعداد المركبة، فنفّذ العمليات التالية:
سيتعيّن عليك تنفيذ عامل التساوي الخاص بك للكائن ComplexNumber.
وسيطرح هذا تحدّي مقارنة عددين من أعداد الفاصلة العائمة.
قد يكون من المفيد استخدام الطريقة isApproximatelyEqual(to:absoluteTolerance:) الموجودة في مكتبة Numerics.
بسبب مشكلات في الأداء لن يكون لديك وصول إلا إلى الجزء RealModule.
لاستيرادها اكتب ببساطة: import RealModule في أعلى الملف.
وينبغي أن يكون تفاوت مقداره 0.00001 كافيًا لاجتياز الاختبارات.
المكتبة مستوردة بالفعل في المشروع، لذا كل ما عليك هو استيرادها في ملفك.
ويمكنك أيضًا تنفيذ طريقتك الخاصة لمقارنة العددين المركّبين.
سجّل في Exercism لتتعلّم وتتقن Swift عبر 35 مفهومًا116 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.