Форум программистов, компьютерный форум CyberForum.ru

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

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

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

24.08.2011, 13:39. Просмотров 2137. Ответов 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;    
}
 Комментарий модератора 
Используйте теги форматирования кода!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2011, 13:39     Степень комплексного числа в C++
Посмотрите здесь:

C++ Ввести структуру для описания комплексного числа
C++ Преообразование комплексного числа из показательной в алгебраическую форму
Программа возведения комплексного числа в вещественную степень !!! C++
Модуль комплексного числа C++
C++ Вычисление корня квадратного из комплексного числа
C++ Написать программу с функцией, вычисляющей целую степень дробного числа. Учесть,что степень может быть положительной, отрицательной, нулевой
C++ извлечения квадратного корня из комплексного числа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
24.08.2011, 13:41     Степень комплексного числа в C++ #2
andrey1038, Компилятор?
andrey1038
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 8
24.08.2011, 14:00  [ТС]     Степень комплексного числа в C++ #3
Цитата Сообщение от ForEveR Посмотреть сообщение
andrey1038, Компилятор?
Вроде как вот:
Borland Resource Compiler / Binder
Version 1.00 Copyright (c) 1992 Borland International
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
24.08.2011, 14:06     Степень комплексного числа в C++ #4
andrey1038, xD. Поставьте новее.
Olga_
840 / 182 / 16
Регистрация: 01.08.2011
Сообщений: 502
24.08.2011, 14:11     Степень комплексного числа в C++ #5
маленький советик. когда вычисляете sin или cos в точке, то лучше эту точку приводить к отрезку [-PI,PI], а то ОГРОМНЫЕ ошибки могут быть, так как у вас аргумент умножается на целое число.
andrey1038
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 8
24.08.2011, 14:37  [ТС]     Степень комплексного числа в C++ #6
Цитата Сообщение от ForEveR Посмотреть сообщение
andrey1038, xD. Поставьте новее.
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Или надо еще новее?
grizlik78
Эксперт С++
1897 / 1429 / 106
Регистрация: 29.05.2011
Сообщений: 2,985
24.08.2011, 14:42     Степень комплексного числа в C++ #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
Это очень древний
andrey1038
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 8
24.08.2011, 14:48  [ТС]     Степень комплексного числа в C++ #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 секунды

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

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

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

Добавлено через 2 минуты
Раз новые заголовки не помогают (они вообще есть?), то можно попробовать удалить все std::
Но не факт что после этого ещё чего не обнаружится.
andrey1038
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 8
24.08.2011, 15:43  [ТС]     Степень комплексного числа в C++ #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).
Это нормально?

 Комментарий модератора 
В следующий раз не будет тегов - будет вам карточка.
grizlik78
Эксперт С++
1897 / 1429 / 106
Регистрация: 29.05.2011
Сообщений: 2,985
24.08.2011, 15:48     Степень комплексного числа в C++ #16
Цитата Сообщение от andrey1038 Посмотреть сообщение
Правда, результат вычислений получился:
Целая часть числа- 5, мнимая, 6, степень- 4, ответ: (-3479, -1320).
Это нормально?
Да, это правильный ответ.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2011, 16:04     Степень комплексного числа в C++
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
andrey1038
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 8
24.08.2011, 16:04  [ТС]     Степень комплексного числа в C++ #17
Цитата Сообщение от grizlik78 Посмотреть сообщение
Да, это правильный ответ.
Тогда- всем большое спасибо!
Yandex
Объявления
24.08.2011, 16:04     Степень комплексного числа в C++
Ответ Создать тему
Опции темы

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