Статьи

НОУ ІНТУЇТ | лекція | Структури в мові C ++

Завдання 9.2. Дано два комплексних числа Завдання 9 і . Виконати над ними основні операції:

Сумою двох комплексних чисел Сумою двох комплексних чисел   і   називається комплексне число і називається комплексне число .

Різницею двох комплексних чисел Різницею двох комплексних чисел   і   називається комплексне число і називається комплексне число .

Твором двох комплексних чисел Твором двох комплексних чисел   і   називається комплексне число і називається комплексне число .

Приватним двох комплексних чисел Приватним двох комплексних чисел   і   називається комплексне число і називається комплексне число

Числом, зв'язаних комплексному числу Числом, зв'язаних комплексному числу   , Називається число   (   Рис , Називається число ( Рис. 9.2 ).

Будь-яке комплексне число, записане в алгебраїчній формі Будь-яке комплексне число, записане в алгебраїчній формі   , Можна записати в тригонометричної   або в показовій формі   , де   - модуль комплексного числа   - його аргумент (   Рис , Можна записати в тригонометричної або в показовій формі , де - модуль комплексного числа - його аргумент ( Рис. 9.2 ).

Для зведення в ступінь комплексного числа, записаного в тригонометричної формі Для зведення в ступінь комплексного числа, записаного в тригонометричної формі   ), Можна скористатися формулою Муавра ), Можна скористатися формулою Муавра

Формула для добування кореня Формула для добування кореня   -го ступеня з комплексного числа   має вигляд де -го ступеня з комплексного числа має вигляд де .

Далі наведено текст програми, який реалізує алгоритм розв'язання задачі 9.2. У програмі описані дві структури для роботи з комплексними числами: структура complex1 для подання комплексних чисел в алгебраїчній формі (Re - дійсна частина комплексного числа, Im - його уявна частина) і структура complex2 для подання комплексних чисел в показовою або тригонометричної формі (Modul - модуль комплексного числа, Argum - його аргумент). Крім того в програмі створені функції, що реалізують основні дії над комплексними числами, перехід між різними формами подання комплексних чисел, а також введення-виведення комплексних чисел.

#include <iostream> #include <math.h> using namespace std; struct complex1 {float Re; float Im; }; struct complex2 {float Modul; float Argum; }; // Введення числа в алгебраїчній формі complex1 vvod1 () {complex1 temp; cout << "Введіть дійсну частину числа \ n"; cin >> temp.Re; cout << "Введіть уявну частину комплексного числа \ n"; cin >> temp.Im; return temp; } // Введення числа в тригонометричної або показовою формі complex2 vvod2 () {complex2 temp; cout << "Введіть модуль комплексного числа \ n"; cin >> temp.Modul; cout << "Введіть аргумент комплексного числа \ n"; cin >> temp.Argum; return temp; } // Виведення числа в алгебраїчній формі void vivod (complex1 chislo) {cout << chislo.Re; if (chislo.Im> = 0) cout << "+" << chislo.Im << "i" << endl; else cout << "" << chislo.Im << "i" << endl; } // Виведення числа в тригонометричної формі void vivod (complex2 chislo) {cout << chislo.Modul << "(cos (" << chislo.Argum << ") + i sin (" << chislo.Argum << " )) "<< endl; } // Переклад числа з тригонометричної форми в алгебраїчну, // pr визначає, виводити чи ні отримане число на екран. complex1 perevod (complex2 chislo, bool pr = false) {complex1 temp; temp.Re = chislo.Modul * cos (chislo.Argum); temp.Im = chislo.Modul * sin (chislo.Argum); if (pr) vivod (temp); return temp; } // Переклад числа з алгебраїчної форми в тригонометричну, // pr визначає, виводити чи ні отримане число на екран. complex2 perevod (complex1 chislo, bool pr = false) {complex2 temp; temp.Modul = sqrt (chislo.Re * chislo.Re + chislo.Im * chislo.Im); temp.Argum = atan (chislo.Im/ chislo.Re); if (pr) vivod (temp); return temp; } // Функція складання двох чисел в алгебраїчній формі, // pr визначає, виводити чи ні число на екран. complex1 plus1 (complex1 chislo1, complex1 chislo2, bool pr = true) {complex1 temp; temp.Re = chislo1.Re + chislo2.Re; temp.Im = chislo1.Im + chislo2.Im; if (pr) vivod (temp); return temp; } // Функція віднімання двох чисел в алгебраїчній формі, // pr визначає, виводити чи ні число на екран. complex1 minus1 (complex1 chislo1, complex1 chislo2, bool pr = true) {complex1 temp; temp.Re = chislo1.Re-chislo2.Re; temp.Im = chislo1.Im-chislo2.Im; if (pr) vivod (temp); return temp; } // Функція множення двох чисел в алгебраїчній формі, // pr визначає, виводити чи ні число на екран. complex1 mult1 (complex1 chislo1, complex1 chislo2, bool pr = true) {complex1 temp; temp.Re = chislo1.Re * chislo2.Re-chislo1.Im * chislo2.Im; temp.Im = chislo1.Im * chislo2.Re + chislo1.Re * chislo2.Im; if (pr) vivod (temp); return temp; } // Функція розподілу двох чисел в алгебраїчній формі, // pr визначає, виводити чи ні число на екран. complex1 divide1 (complex1 chislo1, complex1 chislo2, bool pr = true) {complex1 temp; temp.Re = (chislo1.Re * chislo2.Re + chislo1.Im * chislo2.Im) / (chislo2.Re * chislo2. Re + chislo2.Im * chislo2.Im); temp.Im = (chislo1.Im * chislo2.Re-chislo1.Re * chislo2.Im) / (chislo2.Re * chislo2. Re + chislo2.Im * chislo2.Im); if (pr) vivod (temp); return temp; } // Функція зведення комплексного числа в алгебраїчній формі // в цілу ступінь n, pr визначає, виводити чи ні отримане число на екран. complex1 pow1 (complex1 chislo1, int n, bool pr = true) {complex1 temp; complex2 temp2; float p = 1; int i = 1; temp2 = perevod (chislo1, true); // Переклад числа в тригонометричну форму. for (; i <= n; p * = temp2.Modul, i ++); temp.Re = p * cos (n * temp2.Argum); temp.Im = p * sin (n * temp2.Argum); if (pr) vivod (temp); return temp; } // Функція витягання кореня ступеня n з комплексного числа // в алгебраїчній формі, pr визначає, виводити чи ні // отримані значення на екран. Функція повертає ro і fi. void sqrt n 1 (complex1 chislo1, int n, float _ ro, float _ fi, bool pr = true) {complex1 temp; complex2 temp2; int i = 0; temp2 = perevod (chislo1, true); // Переклад числа в тригонометричну форму. * Ro = pow (temp2.Modul, (float) 1 / n); * Fi = temp2.Argum; if (pr) {for (i = 0; i <n; i ++) {cout << i << "- е значення кореня \ n"; temp.Re = * ro * cos ((* fi + 2 * M_PI * i) / n); temp.Im = * ro * sin ((* fi + 2 * M_PI * i) / n); vivod (temp); }}} Int main () {complex1 chislo1, chislo2; // Опис комплексних complex1 chislo5; // чисел в алгебраїчній формі. complex2 chislo3, chislo4; // Опис комплексних чисел в тригонометричної формі. float ro1, fi1; chislo1 = vvod1 (); // Введення вихідних даних chislo2 = vvod1 (); // в алгебраїчній формі. vivod (chislo1); // Висновок вихідних даних vivod (chislo2); // в алгебраїчній формі. chislo 3 = perevod (chislo1, true); // Переклад чисел chislo 4 = perevod (chislo2, true); // в тригонометричну форму і виведення їх на екран. cout << "Сума чисел"; chislo5 = plus1 (chislo1, chislo2, true); cout << "Різниця чисел"; chislo5 = minus1 (chislo1, chislo2, true); cout << "Твір чисел"; chislo5 = mult1 (chislo1, chislo2, true); cout << "Приватне чисел"; chislo5 = divide1 (chislo1, chislo2, true); chislo5 = pow1 (chislo1, 5, true); // Зведення числа в п'яту ступінь. sqrtn1 (chislo1, 5, & Ro1, & fi1, true); // Витяг кореня п'ятого ступеня. return 0; }

Результати роботи програми до задачі 9.2.

Введіть дійсну частину числа 5 Введіть уявну частину комплексного числа -7 Введіть дійсну частину числа 11 Введіть уявну частину комплексного числа 1.85 5 -7 i 11 +1.85 i 8.60233 (cos (-0.950547) + i sin (-0.950547)) 11.1545 (cos ( 0.166623) + i sin (0.166623)) Сума чисел 16 -5.15 i Різниця чисел -6 -8.85 i Твір чисел 67.95 -67.75 i Приватне чисел 0.337961 -0.693203 i 8.60233 (cos (-0.950547) + i sin (-0.950547)) 1900 +47068 i 8.60233 (cos (-0.950547) + i sin (-0.950547)) 0-е значення кореня 1.51018 -0.290608 i 1-е значення кореня 0.743054 +1.34646 i 2-е значення кореня -1.05094 +1.12277 i 3-е значення кореня -1.39257 -0.652552 i 4-е значення кореня 0.190285 -1.52606 i

Новости