Программирование >>  Операторы преобразования типа 

1 ... 162 163 164 [ 165 ] 166 167 168 ... 239


Вывод результата вычисления

cout 4.4 + cl * 1.8: 4.4 + cl * 1.8 endl:

/* Вывод суммы cl и с2: * - внимание: разные типы! */

cout cl + С2:

cl + coniplex<double>(c2.real о .c2,iiTiag()) endl:

Прибавление к cl квадратного корня из с1 и вывод результата cout cl += sqrt(cl): (cl += sqrt(cl)) endl;

Примерный результат выполнения программы выглядит так (точный результат зависит от реализации некоторых свойств типа double):

cl с2 cl с2 cl с2

(4.3)

(3.65844.3.40819)

magnitude: 5 (squared magnitude: 25) phase angle: 0.643501 magnitude: 5 (squared magnitude: 25) phase angle: 0.75

conjugated conjugated

(4.-3)

(3.65844.-3.40819) (11.6.5.4) cl + c2: (7.65844.6.40819) cl += sqrt(cl): (6.12132.3.70711)

4,4 + cl * 1.8

Вторая программа в цикле читает два комплексных числа и вычисляет результат возведения первого числа в степень второго:

num/complex2.cpp finclude <1ostream> #1nclude <complex> finclude <cstdlib> finclude <lim1ts> using namespace std:

int main()

complex<long double> cl. c2:

while (cin.peekO !- EOF) {

Ввод первого комплексного числа cout complex number cl: : cin cl: If (!cin) {

cerr input error endl:

return EXITJAILURE;

Ввод второго комплексного числа cout complex number c2: :



С1п с2; if (!с1п) {

сегг Input error endl:

return EXITJAILURE:

if (cl == c2) {

cout cl and c2 are equal ! endl;

cout cl raised to the c2: pow(cl.c2) endl endl:

Пропуск оставшейся части строки cin.ignore(numeric limits<int>;:max().\n);

В табл. 12.1 приведены примеры входных данных и полученных результатов. Таблица 12.1. Возможные результаты выполнения программы сотр1ех2.срр

Результат

с1 raised to с2: (4,0)

(16)

cl raised to c2: (4,0)

(8,0)

0.333333333

cl raised to c2: (2,0)

0.99

cl raised to c2: (0.95099,0)

(0,2)

cl raised to c2: (-4,4.8984e-16)

(1.7ДЗ)

cl raised to c2: (1,0)

(3,4)

(-4,3)

cl raised to c2: (4.32424e-05,8.91396e-05)

(1.7,0.3)

(4.3,2.8)

cl raised to c2: (-4.17622,4.86871)

Обратите внимание: при вводе комплексного числа указывается либо только вещественная часть в виде отдельного значения (в круглых скобках или без), либо вещественная и мнимая части в круглых скобках, разделенные запятыми.

Эперации с комплексными числами

Далее описаны операции с комплексными числами, поддерживаемые классом complex.

Создание, копирование и присваивание комплексных чисел

в табл. 12.2 перечислены конструкторы и операции присваивания для типа complex. Конструкторам могут передаваться исходные значения вещественной и мнимой частей. Если значения не заданы, они инициализируются конструктором по умолчанию для соответствующего типа.



Таблица 12.2. Конструкторы и операции присваивания класса complexo

Выражение Эффект

complex с Создает комплексное число с нулевой вещественной и мнимой частями (0+01)

complex с(1.3) Создает комплексное число с вещественной частью 1.3 и нулевой мнимой частью (1.3+Oi)

complex с(1.3/ 2.4) Создает комплексное число с вещественной частью 1.3 и мнимой частью 4.2 (1.3+4.2i)

complex с1(с2) Создает комплексное число с1 как копию с2

ро1аг(4.2) Создает временное комплексное число по полярным координатам

(амплитуда р = 4.2, фазовый угол <p = 0)

ро1аг(4.2/ 0.75) Создает временное комплексное число по полярным координатам (амплитуда р = 4.2, фазовый угол <p = 0.75)

conj(c) Создает временное комплексное число, сопряженное с числом с

(то есть комплексное число с противоположным знаком мнимой части)

с1 = с2 Присваивает с1 вещественную и мнимую части с2

с1 += с2 Прибавляет с2 к с1

с1 -= с2 Вычитает с2 из с1

с1 *= с2 Умножает с1 на с2

с1 /= с2 Делит с1 на с2

Значение существующего комплексного числа может быть изменено только при помощи операторов присваивания. Комбинированные операторы присваивания +=, *= и /= осзтцествляют суммирование, вычитание, умножение и деление значений двух комплексных операндов.

Вспомогательная функция ро1аг() позволяет создать комплексное число, инициализируемое в полярных координатах (через амплитуду и фазовый угол, указанный в радианах):

Создание комплексного числа с инициализацией в полярных координатах std::complex<double> c2(std;:ро1аг(4.2.0.75)):

Если в создании комплексного числа задействовано неявное преобразование типа, возникает проблема. Например, следующее решение работает нормально:

std::complex<float> c2(std::ро1аг(4.2,0.75)): OK

Однако похожая запись со знаком равенства ошибочна: std::complex<float> с2 = std::ро1аг(4.2.0.75); ОШИБКА

Эта проблема рассматривается в далее.

Вспомогательная функция conj() позволяет создать комплексное число, инициализированное значением, сопряженным с другим комплексным числом (то есть комплексным числом с противоположным знаком мнимой части):

std::complex<double> с1(1.1.5.5):

std::complex<double> c2(conj(cl)); c2 инициализируется как

cofnplex<double>(l.1.-5.5)



1 ... 162 163 164 [ 165 ] 166 167 168 ... 239

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика