|
Программирование >> Операторы преобразования типа
Вывод результата вычисления 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.срр
Обратите внимание: при вводе комплексного числа указывается либо только вещественная часть в виде отдельного значения (в круглых скобках или без), либо вещественная и мнимая части в круглых скобках, разделенные запятыми. Эперации с комплексными числами Далее описаны операции с комплексными числами, поддерживаемые классом 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)
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |