Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.82
andrey1038
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 8
#1

Степень комплексного числа в C++ - C++

24.08.2011, 13:39. Просмотров 2297. Ответов 16
Метки нет (Все метки)

Не могу сообразить- как написать кусок программы для возведения комплексного числа в целую степень. Нашел в инете прогу, пробую запускать- пишет разнообразные ошибки- ругается вот на этот кусок:
typedef double T_real;
C++
1
2
3
4
typedef std::complex<T_real>  T_compl;
//////////////////////////////////////////////////////////////////////////////////////
T_compl  pow_z_p
//////////////////////////////////////////////////////////////////////////////////////
А вот и сама программа:

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
#include <math.h>
#include <complex.h>
#include <iostream.h>
//////////////////////////////////////////////////////////////////////////////////////
typedef double                T_real;
typedef std::complex<T_real>  T_compl;
//////////////////////////////////////////////////////////////////////////////////////
T_compl  pow_z_p
    (
        T_real  z_real, 
        T_real  z_imag, 
        T_real  p
    )
{
    T_real  z_p_real = 0;
    T_real  z_p_imag = 0;
    if(z_real || z_imag)
    {
        //Пронормируем заданное комплексное число.
        T_real  norm     = sqrt(z_real * z_real + z_imag * z_imag);
        T_real  cos_phi  = z_real / norm;        
        T_real  phi      = acos(cos_phi);    
 
        //Представим заданное комплексное число
        //z == z_real + i * z_imag
        //в виде
        //z == norm * (cos(phi) + i * sin(phi)).
        //Возводя это число в степень p по формуле Муавра, получим:
        //z^p = norm^p * (cos(p * phi) + i * sin(p * phi)),
        //откуда
        T_real  norm_p  = pow(norm, p);
        z_p_real        = norm_p * cos(p * phi);
        z_p_imag        = norm_p * sin(p * phi);       
    }
    return T_compl(z_p_real, z_p_imag);     
}
//////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    std::cout << "Введите комплексное число z: "
              << std::endl
              << '\t'
              << "z.real = ";
 
    T_real  z_real;
    std::cin >> z_real;
 
    std::cout << '\t'
              << "z.imag = ";
 
    T_real  z_imag;
    std::cin >> z_imag;
 
    std::cout << "Введите вещественный показатель степени: ";
    T_real p = 0;
    std::cin >> p;
 
    std::cout << std::endl
              << "Комплексное число "
              << T_compl(z_real, z_imag)
              << " в степени "
              << p
              << " равно "
              << std::endl
              << pow_z_p(z_real, z_imag, p)
              << std::endl
              << std::endl
              << "Тот же результат, полученный через библиотечную функцию: "
              << std::endl
              << std::pow(T_compl(z_real, z_imag), p)
              << std::endl
              << std::endl;    
}
 Комментарий модератора 
Используйте теги форматирования кода!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2011, 13:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Степень комплексного числа в C++ (C++):

Программа возведения комплексного числа в вещественную степень !!! - C++
Программа возведения комплексного числа в вещественную степень : (a+Bi) в степени c (по формуле Муавра) Ввод вещественных значений...

Написать программу с функцией, вычисляющей целую степень дробного числа. Учесть,что степень может быть положительной, отрицательной, нулевой - C++
Написать программу с функцией, вычисляющей целую степень дробного числа. Учесть,что степень может быть положительной, отрицательной,...

Заполнение комплексного числа - C++
Доброго времени. Снова я не могу разобраться в элементарных вещах. #include &lt;iostream&gt; #include &lt;complex&gt; int...

Структура комплексного числа - C++
Всем доброго времени суток. Есть задание: Вот код: #include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; struct...

Модуль комплексного числа - C++
Разработайте программы, которые реализуют класс комплексных чисел. Класс должен содержать данные private и данные public и методы для...

Класс "Комплексные числа". Отсортировать массив по возрастанию модуля комплексного числа - C++
Создать массив из 10 значений типа комплекс и отсортировать его по возрастанию модуля комплексного числа. Сказали через цикл вызывать...

16
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
24.08.2011, 13:41 #2
andrey1038, Компилятор?
0
andrey1038
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 8
24.08.2011, 14:00  [ТС] #3
Цитата Сообщение от ForEveR Посмотреть сообщение
andrey1038, Компилятор?
Вроде как вот:
Borland Resource Compiler / Binder
Version 1.00 Copyright (c) 1992 Borland International
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
24.08.2011, 14:06 #4
andrey1038, xD. Поставьте новее.
0
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
24.08.2011, 14:11 #5
маленький советик. когда вычисляете sin или cos в точке, то лучше эту точку приводить к отрезку [-PI,PI], а то ОГРОМНЫЕ ошибки могут быть, так как у вас аргумент умножается на целое число.
0
andrey1038
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 8
24.08.2011, 14:37  [ТС] #6
Цитата Сообщение от ForEveR Посмотреть сообщение
andrey1038, xD. Поставьте новее.
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Или надо еще новее?
0
grizlik78
Эксперт С++
1966 / 1459 / 120
Регистрация: 29.05.2011
Сообщений: 3,018
24.08.2011, 14:42 #7
Смущает использование устаревших заголовков:
C++
1
2
3
#include <math.h>
#include <complex.h>
#include <iostream.h>
Что если подключить вместо них эти
C++
1
2
3
#include <iostream>
#include <complex>
#include <cmath>
Добавлено через 23 секунды
Цитата Сообщение от andrey1038 Посмотреть сообщение
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Это очень древний
0
andrey1038
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 8
24.08.2011, 14:48  [ТС] #8
Цитата Сообщение от grizlik78 Посмотреть сообщение
Смущает использование устаревших заголовков:
C++
1
2
3
#include <math.h>
#include <complex.h>
#include <iostream.h>
Что если подключить вместо них эти
C++
1
2
3
#include <iostream>
#include <complex>
#include <cmath>
Добавлено через 23 секунды

Это очень древний
Пробовал и такие. Кстати, а вы сами-то знаете- какой он- "не древний" компилятор? Может даже и номер версии можете сказать?
0
silent_1991
Эксперт С++
4986 / 3043 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.08.2011, 14:52 #9
andrey1038, могу сказать, что не борланд. Ставьте последнюю студию или мингв версии хотя бы начиная от 4 (с поиском последней версии проблем возникнуть не должно). И ехидничать не стоит, здесь в большинстве своём люди знающие, просто так на ветер слов не бросают. А вы сами посудите, считать ли старым компилятор, которому больше 15 лет.
0
grizlik78
Эксперт С++
1966 / 1459 / 120
Регистрация: 29.05.2011
Сообщений: 3,018
24.08.2011, 14:54 #10
Ну если речь именно про Builder, то любые из Embarcadero (GodeGear) RAD Studio. Правда билдеры никогда бесплатными не были.
А так — GCC (MinGW) 4.5 и выше, MS Visual C++ 2008 и выше...
0
andrey1038
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 8
24.08.2011, 15:02  [ТС] #11
Цитата Сообщение от grizlik78 Посмотреть сообщение
Ну если речь именно про Builder, то любые из Embarcadero (GodeGear) RAD Studio. Правда билдеры никогда бесплатными не были.
А так — GCC (MinGW) 4.5 и выше, MS Visual C++ 2008 и выше...
Мне просто сдавать надо контрольную, а сдавать надо на всем древнем..
0
grizlik78
Эксперт С++
1966 / 1459 / 120
Регистрация: 29.05.2011
Сообщений: 3,018
24.08.2011, 15:06 #12
Ну тогда хотя бы ошибку показал, а не только кусок.

Добавлено через 2 минуты
Трудно найти ошибку в корректной, с точки зрения современного стандарта, программе (не считая заголовков)
0
andrey1038
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 8
24.08.2011, 15:20  [ТС] #13
Цитата Сообщение от grizlik78 Посмотреть сообщение
Ну тогда хотя бы ошибку показал, а не только кусок.

Добавлено через 2 минуты
Трудно найти ошибку в корректной, с точки зрения современного стандарта, программе (не считая заголовков)
Прицепил скрин сообщения(2 посл строки- ругается соответственно на
typedef double T_real;
и
typedef std::complex<T_real> T_compl;
0
Миниатюры
Степень комплексного числа в C++  
grizlik78
Эксперт С++
1966 / 1459 / 120
Регистрация: 29.05.2011
Сообщений: 3,018
24.08.2011, 15:29 #14
Ну вот видно, что компилятор не распознал пространство имён std. То ли потому, что старые заголовки, то ли потому, что он понятия не имеет о пространстве имён (подозреваю, что второе).

Добавлено через 2 минуты
Раз новые заголовки не помогают (они вообще есть?), то можно попробовать удалить все std::
Но не факт что после этого ещё чего не обнаружится.
1
andrey1038
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 8
24.08.2011, 15:43  [ТС] #15
Цитата Сообщение от grizlik78 Посмотреть сообщение
Ну вот видно, что компилятор не распознал пространство имён std. То ли потому, что старые заголовки, то ли потому, что он понятия не имеет о пространстве имён (подозреваю, что второе).

Добавлено через 2 минуты
Раз новые заголовки не помогают (они вообще есть?), то можно попробовать удалить все std::
Но не факт что после этого ещё чего не обнаружится.
Убрал, получилось:
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
//////////////////////////////////////////////////////////////////////////////////////
#include <math.h>
#include <complex.h>
#include <iostream.h>
//////////////////////////////////////////////////////////////////////////////////////
typedef double                T_real;
typedef complex T_compl;
//////////////////////////////////////////////////////////////////////////////////////
T_compl  pow_z_p
    (
        T_real  z_real, 
        T_real  z_imag, 
        T_real  p
    )
{
    T_real  z_p_real = 0;
    T_real  z_p_imag = 0;
    if(z_real || z_imag)
    {
        //Пронормируем заданное комплексное число.
        T_real  norm     = sqrt(z_real * z_real + z_imag * z_imag);
        T_real  cos_phi  = z_real / norm;        
        T_real  phi      = acos(cos_phi);    
 
        //Представим заданное комплексное число
        //z == z_real + i * z_imag
        //в виде
        //z == norm * (cos(phi) + i * sin(phi)).
        //Возводя это число в степень p по формуле Муавра, получим:
        //z^p = norm^p * (cos(p * phi) + i * sin(p * phi)),
        //откуда
        T_real  norm_p  = pow(norm, p);
        z_p_real        = norm_p * cos(p * phi);
        z_p_imag        = norm_p * sin(p * phi);       
    }
    return T_compl(z_p_real, z_p_imag);     
}
//////////////////////////////////////////////////////////////////////////////////////
int main()
{
//    locale(""));
    cout << "Введите комплексное число z: "
              << endl
              << '\t'
              << "z.real = ";
 
    T_real  z_real;
    cin >> z_real;
 
    cout << '\t'
              << "z.imag = ";
 
    T_real  z_imag;
    cin >> z_imag;
 
    cout << "Введите вещественный показатель степени: ";
    T_real p = 0;
    cin >> p;
 
    cout << endl
              << "Комплексное число "
              << T_compl(z_real, z_imag)
              << " в степени "
              << p
              << " равно "
              << endl
              << pow_z_p(z_real, z_imag, p)
              << endl
              << endl
              << "Тот же результат, полученный через библиотечную функцию: "
              << endl
              << pow(T_compl(z_real, z_imag), p)
              << endl
              << endl;    
}
Правда, результат вычислений получился:
Целая часть числа- 5, мнимая, 6, степень- 4, ответ: (-3479, -1320).
Это нормально?

 Комментарий модератора 
В следующий раз не будет тегов - будет вам карточка.
0
24.08.2011, 15:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2011, 15:43
Привет! Вот еще темы с ответами:

Вычисление корня квадратного из комплексного числа - C++
Написать программу для вычисления корня квадратного из комплексного числа z=x+iy. Такая операция на множестве комплексных чисел, как...

Вычисление корня квадратного из комплексного числа - C++
Всем доброго время суток. Вычислить корень квадратный из комплексного числа z = x + i*y. такая операция на множестве комплексных чисел, как...

извлечения квадратного корня из комплексного числа - C++
Всем доброго времени суток. такая проблема, не могу посчитать квадратный корень из комплексного числа, все остальное работает ...

Метод вычисляющий модуль комплексного числа - C++
Есть программа. Она высчитывает действительную и мнимую части комплексного числа по формуле. Но мне ещё нужно чтобы модуль функции. Должно...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru