Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/43: Рейтинг темы: голосов - 43, средняя оценка - 4.95
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139

Стандартный класс complex.

03.09.2011, 16:27. Показов 8377. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1)Есть ли стандартный не шаблонный класс complex?
Я нашел только шаблонный класс, определенный в заголовочном файле <complex>
Есть ли нет не шаблонного класса complex, нельзя ли объявить объект complex без указаний типа?

Судя по этому( в самом низу страницу ) http://msdn.microsoft.com/en-u... S.80).aspx
, вроде бы можно( я англ. плохо знаю ), а компилятор Visual Studio не разрешает.

2) Как вычислить с помощью стандартного класса complex y(z) = 2z + sin(z-i)?
z - это комплексной число, я так понимаю.

Вот мой не полный вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <complex>
 
int main()
{
    std::complex < double > complex_( 5, 10 );
    std::cout << ( std::complex < double >(2)*complex_);
    
    system( "pause" );
    return 0;
}
А sin посчитать не получается, да и еще его прибавить.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.09.2011, 16:27
Ответы с готовыми решениями:

Как заполнить массив комплексными числами, не используя стандартный класс std::complex<double>?
Короче, дана структура. Как заполнить массив комплексными числами, не используя стандартный класс std::complex&lt;double&gt;. struct...

Базовый класс Complex и производный класс для реализации квадратных матриц
1) Создайте базовый класс Complex (комплексное число) для реализации комплексных чисел в алгебраической форме и основных операций с ними:...

Реализовать класс Pair (пара чисел); определить производный класс Complex (комплексное число)
Здравствуйте. Задали задание: Создать класс Pair (пара чисел); определить метод перемножения полей и операцию сложения пар: (а, b) +...

6
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
03.09.2011, 16:55
Так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <complex>
#include <cmath>
 
template< typename T >
std::complex< T > y(const std::complex< T > &z)
{
    return 2.0 * z + sin(z - std::complex< T >(T(), T(1)));
}
 
int main()
{
    std::complex< double > z;
 
    std::cout << "Enter z: ";
    std::cin >> z;
 
    std::cout << "y(z) = " << y(z) << std::endl;
 
    return 0;
}
1
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
03.09.2011, 17:15  [ТС]
Появился вопрос: почему при вводе комплексного числа cin >> z вводится только одно значение, т.е. при вводе 2 комплексное число будет (2,0), а при вводе 2 3 комплексное число будет все равно (2,0)?
Просто мне надо перегрузить потоковый ввод для своего класса Complex и делаю я это по аналогии стандартного класса complex.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
03.09.2011, 17:27
Chelioss, потому что синтаксис ввода строго декларирован: сначала скобка, потом действительная часть, потом запятая, мнимая часть и скобка. Между каждой парой таких "узлов" могут быть любые разделители. При этом ввод одного числа без скобок и т.д. будет воспринят как ввод действительного числа, мнимая часть которого, как известно, равна 0.
1
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
03.09.2011, 17:50  [ТС]
Спасибо.
Вот откуда вы это узнали? В стандарте вряд ли это написано, ибо комплексный числа с языком C++ никак не связаны. А реализация перегрузки потокового ввода нельзя посмотреть, ибо инкапсуляция.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
03.09.2011, 18:10
Chelioss, Microsoft

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
        // TEMPLATE FUNCTION operator>>
template<class _Ty,
    class _Elem,
    class _Tr> inline
    basic_istream<_Elem, _Tr>& operator>>(
        basic_istream<_Elem, _Tr>& _Istr, complex<_Ty>& _Right)
    {   // extract a complex<_Ty>
    typedef complex<_Ty> _Myt;
    const ctype<_Elem>& _Ctype_fac = _USE(_Istr.getloc(), ctype<_Elem>);
    _Elem _Ch = 0;
    long double _Real = 0;
    long double _Imag = 0;
 
    if (_Istr >> _Ch && _Ch != _Ctype_fac.widen('('))
        {   // no leading '(', treat as real only
        _Istr.putback(_Ch);
        _Istr >> _Real;
        _Imag = 0;
        }
    else if (_Istr >> _Real >> _Ch && _Ch != _Ctype_fac.widen(','))
        if (_Ch == _Ctype_fac.widen(')'))
            _Imag = 0;  // (real)
        else
            {   // no trailing ')' after real, treat as bad field
            _Istr.putback(_Ch);
            _Istr.setstate(ios_base::failbit);
            }
    else if (_Istr >> _Imag >> _Ch && _Ch != _Ctype_fac.widen(')'))
            {   // no imag or trailing ')', treat as bad field
            _Istr.putback(_Ch);
            _Istr.setstate(ios_base::failbit);
            }
 
    if (!_Istr.fail())
        {   // store valid result
        _Ty _Tyreal((_Ty)_Real), _Tyimag((_Ty)_Imag);
        _Right = _Myt(_Tyreal, _Tyimag);
        }
    return (_Istr);
    }
И gcc

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
  ///  Extraction operator for complex values.
  template<typename _Tp, typename _CharT, class _Traits>
    basic_istream<_CharT, _Traits>&
    operator>>(basic_istream<_CharT, _Traits>& __is, complex<_Tp>& __x)
    {
      _Tp __re_x, __im_x;
      _CharT __ch;
      __is >> __ch;
      if (__ch == '(') 
    {
      __is >> __re_x >> __ch;
      if (__ch == ',') 
        {
          __is >> __im_x >> __ch;
          if (__ch == ')') 
        __x = complex<_Tp>(__re_x, __im_x);
          else
        __is.setstate(ios_base::failbit);
        }
      else if (__ch == ')') 
        __x = __re_x;
      else
        __is.setstate(ios_base::failbit);
    }
      else 
    {
      __is.putback(__ch);
      __is >> __re_x;
      __x = __re_x;
    }
      return __is;
    }
Ну и глава 26 стандарта, раздел 4, подраздел 6 (26.4.6 complex non-member operations):
C++
1
2
3
template<class T, class charT, class traits>
basic_istream<charT, traits>&
operator>>(basic_istream<charT, traits>& is, complex<T>& x);
Effects: Extracts a complex number x of the form: u, (u), or (u,v), where u is the real part and v is
the imaginary part (27.7.1.2).
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.09.2011, 20:24
Вот листинг моего complex.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#ifndef COMPLEX_H
#define COMPLEX_H
 
#include <math.h>//Подключение прототипов математических функций
 
class CComplex
{   
public:
    double re,im;   
    CComplex(){re = 0; im = 0;}
    CComplex(double _re, double _im){re = _re; im = _im;}
 
    CComplex operator+(double val);
    CComplex operator-(double val);
    CComplex operator*(double val);
    CComplex operator/(double val);
 
    CComplex operator+(CComplex& val);
    CComplex operator-(CComplex& val);
    CComplex operator*(CComplex& val);
    CComplex operator/(CComplex& val);
 
    double Re(CComplex val);
    double Im(CComplex val);
    CComplex ExpToAlg(double abs_val, double angle);
    CComplex AlgToExp(CComplex val);
    CComplex cmxpower(CComplex val, double power);
};
typedef CComplex *LPCCOMPLEX;
 
CComplex
CComplex::operator +(double val)
{
    CComplex ret_val;
    ret_val.re = re+val;
    ret_val.im = im;
    return ret_val;
}
 
CComplex
CComplex::operator -(double val)
{
    CComplex ret_val;
    ret_val.re = re-val;
    ret_val.im = im;
    return ret_val;
}
 
CComplex
CComplex::operator *(double val)
{
    CComplex ret_val;
    ret_val.re = re*val;
    ret_val.im = im*val;
    return ret_val;
}
 
CComplex
CComplex::operator /(double val)
{
    CComplex ret_val;
    ret_val.re = re/val;
    ret_val.im = im/val;
    return ret_val;
}
 
CComplex
CComplex::operator +(CComplex& val)
{
    CComplex ret_val;
    ret_val.re = re+val.re;
    ret_val.im = im+val.im;
    return ret_val;
}
 
CComplex
CComplex::operator -(CComplex& val)
{
    CComplex ret_val;
    ret_val.re = re-val.re;
    ret_val.im = im-val.im;
    return ret_val;
}
 
CComplex
CComplex::operator *(CComplex& val)
{
    CComplex ret_val;
    ret_val.re = re*val.re - im*val.im;
    ret_val.im = im*val.im + re*val.im;
    return ret_val;
}
 
CComplex 
CComplex::operator /(CComplex& val)
{
    CComplex ret_val;
    double div = pow(val.re,2)+pow(val.im,2);
    ret_val.re = re*val.re + im*val.im;
    ret_val.im = -re*val.im + im*val.re;    
    return ret_val/div;
}
 
double CComplex::Re(CComplex val)
{
    return val.re;
}
 
double CComplex::Im(CComplex val)
{
    return val.im;
}
 
CComplex 
CComplex::ExpToAlg(double abs_val, double angle)
{
    CComplex ret_val;
    double pi = 3.14;
    angle = (angle/360);
    angle = angle - floor(angle);   //отбрасываем целое число 360 градусов
    angle = angle*2*pi;             //переводим угол в радианы
 
    angle = (angle/(pi/2));
    angle = angle - floor(angle);   //отбрасываем целое число pi/2 радиан
    angle = angle*(pi/2);           //переводим угол в первую четверть
    ret_val.re = abs_val*cos(fabs(angle));
    ret_val.im = abs_val*sin(fabs(angle));
    if(angle < 0)
        ret_val.im = - ret_val.im;//sin(-x) = - sin(x);
    return ret_val;
}
 
CComplex 
CComplex::AlgToExp(CComplex val)
{
    CComplex ret_val;
    ret_val.re = sqrt(pow(val.re,2)+pow(val.im,2));
    ret_val.im = atan2(val.im,val.re);
    return ret_val;
}
 
CComplex 
CComplex::cmxpower(CComplex val, double power)
{
    CComplex ret_val;
    ret_val    = AlgToExp(val);
    ret_val.im = ret_val.im*power;
    ret_val    = ExpToAlg(ret_val.re,ret_val.im);
    return ret_val;
}
 
#endif
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.09.2011, 20:24
Помогаю со студенческими работами здесь

С++ класс (создайте класс с именем Complex для выполнения в арифмитических операий с комплексными числами))
Кто сможет помогите пожалуйста! (Класс Complex). Создайте класс с именем Complex для выполнения в арифмитических операий с...

Базовый класс Complex и производный класс Vector
Создайте базовый класс Complex (комплексное число) для реализации комплексных чисел в алгебраической форме и основных операций с ними:...

Класс complex
для программной модели заданного объекта. Описание объекта и его основных свойств приводится ниже. Привести фрагмент программы (int...

Класс Complex
Напишите программу, в которой создайте обьекты типа Complex и выполните над ними действия, предусмотренные методами класса. Объявите...

Класс Complex
Описать класс, реализующий указанный ниже тип данных. Класс должен содержать множество конструкторов для создания объектов определенного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru