С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/41: Рейтинг темы: голосов - 41, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 8
1

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

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

Author24 — интернет-сервис помощи студентам
Не могу сообразить- как написать кусок программы для возведения комплексного числа в целую степень. Нашел в инете прогу, пробую запускать- пишет разнообразные ошибки- ругается вот на этот кусок:
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.08.2011, 13:39
Ответы с готовыми решениями:

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

Как перегрузить оператор ^ возведения в степень комплексного числа
Как перегрузить оператор ^ возведения в степень комплексного числа?

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

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

16
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
24.08.2011, 13:41 2
andrey1038, Компилятор?
0
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
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
24.08.2011, 14:06 4
andrey1038, xD. Поставьте новее.
0
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
24.08.2011, 14:11 5
маленький советик. когда вычисляете sin или cos в точке, то лучше эту точку приводить к отрезку [-PI,PI], а то ОГРОМНЫЕ ошибки могут быть, так как у вас аргумент умножается на целое число.
0
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
Эксперт С++
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
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
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
Эксперт С++
5057 / 3117 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
24.08.2011, 14:52 9
andrey1038, могу сказать, что не борланд. Ставьте последнюю студию или мингв версии хотя бы начиная от 4 (с поиском последней версии проблем возникнуть не должно). И ехидничать не стоит, здесь в большинстве своём люди знающие, просто так на ветер слов не бросают. А вы сами посудите, считать ли старым компилятор, которому больше 15 лет.
0
Эксперт С++
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
24.08.2011, 14:54 10
Ну если речь именно про Builder, то любые из Embarcadero (GodeGear) RAD Studio. Правда билдеры никогда бесплатными не были.
А так — GCC (MinGW) 4.5 и выше, MS Visual C++ 2008 и выше...
0
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
Эксперт С++
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
24.08.2011, 15:06 12
Ну тогда хотя бы ошибку показал, а не только кусок.

Добавлено через 2 минуты
Трудно найти ошибку в корректной, с точки зрения современного стандарта, программе (не считая заголовков)
0
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;
Миниатюры
Степень комплексного числа в C++  
0
Эксперт С++
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
24.08.2011, 15:29 14
Ну вот видно, что компилятор не распознал пространство имён std. То ли потому, что старые заголовки, то ли потому, что он понятия не имеет о пространстве имён (подозреваю, что второе).

Добавлено через 2 минуты
Раз новые заголовки не помогают (они вообще есть?), то можно попробовать удалить все std::
Но не факт что после этого ещё чего не обнаружится.
1
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
Эксперт С++
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
24.08.2011, 15:48 16
Цитата Сообщение от andrey1038 Посмотреть сообщение
Правда, результат вычислений получился:
Целая часть числа- 5, мнимая, 6, степень- 4, ответ: (-3479, -1320).
Это нормально?
Да, это правильный ответ.
1
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 8
24.08.2011, 16:04  [ТС] 17
Цитата Сообщение от grizlik78 Посмотреть сообщение
Да, это правильный ответ.
Тогда- всем большое спасибо!
0
24.08.2011, 16:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.08.2011, 16:04
Помогаю со студенческими работами здесь

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

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

Вычисление комплексного числа
Привет всем, я работаю в программе Microsoft Visual Studio 2008 C++ Express Edition. Так вот я не...

Ввод комплексного числа с клавиатуры
Почему идентификатор vvod(a) не определен? #include &lt;iostream&gt; #include &lt;cmath&gt; using...

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

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru