Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке? Тип приложения - не Qt, Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.
|
Структуры в языке C++
9.2 Библиотеки для работы с комплексными числами
Работа с комплексными числами в C++ реализована с помощью библиотеки complex. Подключение этой библиотеки даёт возможность применять операции +, _, *, / для работы не только с вещественными, но и с комплексными числами.
Перед подключением библиотеки complex обязательно необходимо подключить библиотеку math.h.
Для определения переменной типа комплексное число используется оператор.
complex <тип_переменной> имя_переменной;
Здесь тип_переменной — это любой допустимый в C++ числовой тип данных (int, long int, double, float и т. д.), описывающий действительную и мнимую части комплексного числа. Например,
complex <float > x, y, z [ 5 ], * r; complex <double> a; complex <int> a, b, c;
Для организации ввода-вывода комплексных чисел можно использовать библиотеку iostream и стандартные конструкции cin, cout. Например,
#include <iostream> #include <math.h> #include <complex> using namespace std; int main ( int arg c, char ** argv ) { complex <double> b, c; //Описание комплексных чисел. cout<<" b = "; cin>>b; //Ввод комплексного числа b. cout<<" c = "; cin>>c; //Ввод комплексного числа c. cout<<" b / c = "<<b/ c; //Вывод частного комплексных чисел return 0; }
В результате получим:
b=(1.24,-6.12) c=(9.01,-11.22) b/c=(0.385567,-0.199105)
Обратите внимание, что при вводе комплексных чисел с клавиатуры действительная и мнимая части вводятся в скобках через запятую:
(действительная_часть, мнимая_часть)
Далее приведён пример присваивания комплексным переменным реальных значений при их описании:
complex <double> z ( 4.0, 1.0 ); complex <int> r ( 4, -7);
Следующий пример демонстрирует, как из двух числовых значений можно составить комплексное число:
#include <iostream> #include <math.h> #include <complex> using namespace std; int main ( int arg c, char ** argv ) { double x1, y1; x1=-2.3; y1 = 8.1; complex <double> b ( x1, y1 ); //Формирование комплексного числа b //с действительной частью x1 и мнимой y1. cout<<" b ^ 2 = "<<b*b; //Вывод квадрата комплексного числа. return 0; }
В табл. 9.1 представлены основные математические функции для работы с комплексными числами.
Прототип функции | Описание функции |
---|---|
double abs(complex z) | Возвращает модуль комплексного числа . |
double arg(complex z) | Возвращает значение аргумента комплексного числа |
complex conj(complex z) | Возвращает число комплексно сопряжённое числу |
complex cos(complex z) | Возвращает косинус комплексного числа |
complex cosh(complex z) | Возвращает гиперболический косинус комплексного числа . |
complex exp(complex z) | Возвращает экспоненту комплексного числа . |
double imag(complex z) | Возвращает мнимую часть комплексного числа . |
complex log(complex z) | Возвращает натуральный логарифм комплексного числа |
complex log10(complex z) | Возвращает десятичный логарифм комплексного числа . |
double norm(complex z) | Возвращает квадрат модуля комплексного числа . |
complex pow(complex x, complex y) | Возвращает степень комплексного числа . |
complex polar(double mag, double angle) | Формирует комплексное число с модулем и аргументом |
double real(complex z) | Возвращает действительную часть комплексного числа |
complex sin(complex z) | Возвращает синус комплексного числа |
complex sinh(complex z) | Возвращает гиперболический синус комплексного числа . |
complex sqrt(complex z) | Возвращает квадратный корень комплексного числа |
complex tan(complex z) | Возвращает тангенс комплексного числа |
complex tanh(complex z) | Возвращает гиперболический тангенс комплексного числа . |
Далее приведён текст программы, демонстрирующий работу с некоторыми функциями из табл. 9.1.
#include <iostream> #include <math.h> #include <complex> using namespace std; int main ( ) { complex <double> x ( 4, -6); complex <double> y (-7, 2 ); cout<<" x * y = "<<x*y<<endl; cout<<" sin ( x ) * cos ( y ) = "<<sin ( x ) * cos ( y )<<endl; cout<<" conj ( x ) * ln ( y ) = "<<conj ( x ) * log ( y )<<endl; cout<<" sh ( y ) = "<<sinh ( y )<<endl; return 0; }
Результаты работы программы с некоторыми функциями комплексного аргумента:
x*y=(-16,50) sin(x)*cos(y)=(-747.159,10.2102) conj(x)*ln(y)=(-9.23917,23.364) sh(y)=(228.18,498.583)
Задача 9.3. Вычислить .
Если провести аналитические преобразования, то получим следующее:
Проверим эти вычисления с помощью программы на C++. Результаты работы программы подтверждают аналитические вычисления.
#include <iostream> #include <math.h> #include <complex> using namespace std; int main ( ) { complex <double> b ( sqrt ( 3 ),-1), y; y=pow ( b, 20 ); cout<<" y = "<<y<<endl; cout<<real ( y ) /pow ( 2, 1 9 )<<" \t "; cout<<imag ( y ) /pow ( 2, 1 9 )<<" \n "; complex <double> a ( 1, sqrt ( 3 ) ), c (1, -1), z; z=pow ( a / c, 40 ); cout<<" z = "<<z<<endl; cout<<real ( z ) /pow ( 2, 19 )<<" \t "; cout<<imag ( z ) /pow ( 2, 19 )<<" \n "; return 0; }
Результаты работы программы к задаче 9.3:
b=(1.73205,-1)y=(-524288,908093) -1 1.73205 z=(-524288,-908093) -1 -1.73205
Операции с массивами, элементами которых являются комплексные числа, осуществляются так же, как и с обычными переменными. В качестве примера рассмотрим следующие задачи.