|
Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке? Тип приложения - не Qt, Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.
|
Структуры в языке C++
Задача 9.2. Даны два комплексных числа
и
. Выполнить над ними основные операции:
- сложение
, - вычитание
, - умножение
, - деление
, - возведение в степень
, - извлечение корня
-й степени
- вычисление комплексного сопряжённого числа
.
Суммой двух комплексных чисел
и
называется комплексное число
.
Разностью двух комплексных чисел
и
называется комплексное число
.
Произведением двух комплексных чисел
и
называется комплексное число
.
Частным двух комплексных чисел
и
называется комплексное число

, называется число
(рис. 9.2).Всякое комплексное число, записанное в алгебраической форме
, можно записать в тригонометрической
или в показательной форме
, где
— модуль комплексного числа
— его аргумент (рис. 9.2).
Для возведения в степень комплексного числа, записанного в тригонометрической форме
), можно воспользоваться формулой Муавра

-й степени из комплексного числа
имеет вид
![\sqrt[n]z=\sqrt[n]z(\cos \frac{\phi+2\cdot \pi \cdot k}{n}+i\cdot \sin \frac{\phi+2\cdot \pi \cdot k}{n}),](/sites/default/files/tex_cache/e47ba6959fac7a5a74e708ee01359a3b.png)
.Далее приведён текст программы, реализующий алгоритм решения задачи 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 _ f i, bool pr=true )
{
complex1 temp;
complex2 temp2;
int i =0;
temp2=perevod ( chislo1, true ); //Перевод числа в тригонометрическую форму.
* r o=pow ( temp2.Modul, ( float ) 1/n );
* f i=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