Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/41: Рейтинг темы: голосов - 41, средняя оценка - 4.63
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 933

Вычисление корня квадратного из комплексного числа

17.07.2014, 21:09. Показов 9239. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать программу для вычисления корня квадратного из комплексного числа z=x+iy. Такая операция на множестве комплексных чисел, как известно, имеет два решения z1=https://www.cyberforum.ru/cgi-bin/latex.cgi?sqrt(|z|)exp(i\varphi/2) и https://www.cyberforum.ru/cgi-bin/latex.cgi?sqrt(|z|)exp(i\varphi/2+ipi), где |z|=https://www.cyberforum.ru/cgi-bin/latex.cgi?sqrt(x^2+y^2) есть модуль комплексного числа z, а https://www.cyberforum.ru/cgi-bin/latex.cgi?\varphi - его аргумент. Вычислить действительную и мнимую части чисел z1 и z2. параметры x и y вводятся пользователем с клавиатуры.
Что то мне кажется я забыл про комплексные числа

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
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    setlocale(0,"");
    double x,y,phi,z,z1,z2,i,pi=3.14,X1,Y1,X2,Y2;
    cout<<"Введите x=";
    cin>>x;
    cout<<"Введите y=";
    cin>>y;
    phi=atan2(y,x);
    z=sqrt(x*x+y*y);
    cout<<"z1="<<sqrt(z)<<"*exp("<<phi/2<<"*i)""\n";
    cout<<"z2="<<sqrt(z)<<"*exp("<<phi/2<<"*i+i*"<<pi<<")\n";
    X1=z1*cos(phi);
    Y1=z1*sin(phi);
    X2=z2*cos(phi);
    Y2=z2*sin(phi);
    cout<<"X1=   "<<X1<<"Y1=   "<<Y1<<endl;
    cout<<"X2=   "<<X1<<"Y2=   "<<Y1<<endl;
    system("pause");
    return 0;
}
В ответах одни нули. Где мой косяк?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.07.2014, 21:09
Ответы с готовыми решениями:

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

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

Вычисление квадратного корня из числа
Здравствуйте. Помогите пожалуйста написать код вычисления квадратного корня из числа. Среда программирования Dev-C++ #include...

37
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,901
Записей в блоге: 12
17.07.2014, 21:41
Цитата Сообщение от Senarist Посмотреть сообщение
Где мой косяк?
Начинается с того, что переменным z1 и z2 никогда и ничего не присваивается, они как были нулями, так и остались. Соответственно, и результат умножения - ноль...
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
17.07.2014, 21:47
Цитата Сообщение от UI Посмотреть сообщение
z1 и z2 никогда и ничего не присваивается, они как были нулями
Ну почему ж нулями - мусором всяким.
0
619 / 218 / 51
Регистрация: 22.11.2010
Сообщений: 1,781
Записей в блоге: 3
17.07.2014, 21:54
все выводится, никаких нулей. Единственное, что смущает 2 строка:
C++
1
2
    cout<<"X1=   "<<X1<<"Y1=   "<<Y1<<endl;
    cout<<"X2=   "<<X1<<"Y2=   "<<Y1<<endl;
там x2 и y2 не должно выводиться?
0
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 933
17.07.2014, 21:56  [ТС]
понял! спасибо, буду исправлять

Добавлено через 1 минуту
Supernatural что у Вас выводится?
0
619 / 218 / 51
Регистрация: 22.11.2010
Сообщений: 1,781
Записей в блоге: 3
17.07.2014, 22:00
ничего не менял
в окне сообщений, как и говорил, переменным x2 y2 ты присваиваешь значения, но не выводишь
Миниатюры
Вычисление корня квадратного из комплексного числа  
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
17.07.2014, 22:03
Кроме этого вы и корень вычисляете неверно.
Посмотрите на формулу для корня комплексного числа внимательнее,раз ищите в тригонометрической форме
0
 Аватар для B@R_LOG
18 / 18 / 5
Регистрация: 03.07.2013
Сообщений: 49
17.07.2014, 22:34
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
using namespace std;
int main()
{
    setlocale(0, "");
    double x, y, phi, z;
    cout << "Введите x=";    cin >> x;
    cout << "Введите y=";    cin >> y;
    phi = atan2(y, x);      z = sqrt(x*x + y*y);
    
    for (int k = 0; k <= 1; k++)
        cout << "z" << k + 1 << "=" << sqrt(z) << "*exp(" << phi / 2 << "+" << 2*k << "*pi)" << endl;
    
    system("pause");
    return 0;
}
0
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 933
17.07.2014, 23:04  [ТС]
B@R_LOG цикл использовать нельзя
0
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 933
17.07.2014, 23:15  [ТС]
S_el, материал из вики
Я вроде как так и делал
Миниатюры
Вычисление корня квадратного из комплексного числа  
0
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 933
17.07.2014, 23:20  [ТС]
Supernatural да в 21 строке просто опечатка.
0
 Аватар для B@R_LOG
18 / 18 / 5
Регистрация: 03.07.2013
Сообщений: 49
17.07.2014, 23:23
Senarist,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdafx.h" // for Visual Studio
#include <iostream>
#include <cmath>  
using namespace std;
#define PI 3.14159265
 
int main()
{
    setlocale(0, "");
    double x, y, phi, r;
    cout << "Введите x=";    cin >> x;
    cout << "Введите y=";    cin >> y;
    phi = atan2(x, y);      r = sqrt(x*x + y*y);
    
    for (int k = 0; k <= 1; k++)
        cout << "z" << k + 1 << "=" << r << "*exp ^ i(" << phi / 2 << "+" << k*PI << ")\n";
    
    system("pause");
    return 0;
}
Разницы никакой, можешь вручную переписать. Просто проще сразу для "n"й степени реализовывать.
По проверке на примерах вроде сходится.
Миниатюры
Вычисление корня квадратного из комплексного числа  
0
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 933
17.07.2014, 23:44  [ТС]
B@R_LOG, спасибо за данное решение, по проверке и правда похоже на правду, но данная задача находится до раздела "циклы". Данные которые получаются у меня и supernatural при одинаковых введенных значениях х и у не сходятся.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.07.2014, 23:47
Senarist, какая разница, до параграфа "циклы" или после. ВО-первых это не rocket science, а во-вторых они тут просто для примера. Можно просто 2 строчки написать. Хотя 2 строчки и я бы не стал писать в циклы...
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
18.07.2014, 08:02
Senarist, я разве написал,что вы неправильно используете тригонометрическое представление?Только про неверное нахождение корня.

B@R_LOG, в 13 строчке надо аргументы поменять местами:
C++
1
phi = atan2(y, x);
Все-таки за x обычно принимают действительную часть,а y - мнимой.
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
18.07.2014, 12:15
C++
1
2
3
4
5
phi = atan2(y, x);// угол
z = sqrt(x*x + y*y); // модуль 
cout<<"z="<<x<<'+'<<y<<'i'<<endl; // вывод обычного представления
cout<<"modul="<<z<<" phi="<<phi<<endl; // вывод модуля и угла
 cout << "z=" <<z<< "*exp(i*" << phi <<")"<<endl; // вывод экспоненциального представления
0
 Аватар для B@R_LOG
18 / 18 / 5
Регистрация: 03.07.2013
Сообщений: 49
18.07.2014, 12:20
S_el, не согласен с Вами.

http://www.cplusplus.com/reference/cmath/atan2/
Миниатюры
Вычисление корня квадратного из комплексного числа  
0
18.07.2014, 12:24

Не по теме:

Цитата Сообщение от B@R_LOG Посмотреть сообщение
S_el, не согласен с Вами.
И будете правы ибо мы не арабы и пишем предложения слева на право, а дроби начиная с числителя.

0
18.07.2014, 13:05

Не по теме:

Senarist, это учебное упражнение у тебя такое? Потому что если нет, имей в виду, что стандартная библиотечная функция sqrt отлично умеет работать с комплексными числами: http://www.cplusplus.com/reference/complex/sqrt/

0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
18.07.2014, 14:03
Корень квадратный - возвести число в степень 1/2, переводим число в показательную форму, после чего возвели в нужную степень a*eb, потом возвращаем его в алгебраическую.
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
#include <cmath>
#include <iostream>
using namespace std;
 
class CComplex
{
protected:
    bool bExp;
    double re;
    double im;
public:
    CComplex();
    double Abs ();
    double Angle();
    void ToExp();
    void ToAlg();
    void power(float p);
    void print();
 
    double &Re(){return re;}
    double &Im(){return im;}
};
 
CComplex::CComplex(){
    re = 0;
    im = 0;
    bExp = 0;
}
 
double CComplex::Abs(){
    if( bExp )
        return re;
    else
        return sqrt(re*re + im*im);
}
 
double CComplex::Angle(){
    if( bExp )
        return im;
    else
        return atan2(im, re);
}
 
void CComplex::ToExp(){
    if( !bExp ) {
        float abs = Abs();
        float phi = Angle();
        re = abs;
        im = phi;
        bExp = 1;
    }
}
 
void CComplex::ToAlg(){
    if( bExp )  {
    float abs = re;
    float phi = im;
    re = abs*cos(phi);
    im = abs*sin(phi);
    bExp = 0;
    }
}
 
void CComplex::power(float p){
    if( bExp )
    {
        re = pow(re, p);
        im = im*p;
    }
    else
    {
        ToExp();
        power(p);
        ToAlg();
    }
}
 
void CComplex::print(){
    if( bExp )
        cout<<"EXP FORM : "<<re<<"*exp(j*"<<im<<")"<<endl;
    else
        cout<<"ALG FORM : "<<re<<" + j*("<<im<<")"<<endl;
}
 
 
 
int main()
{
    CComplex val;
    val.Re() =  25;
    val.Im() = -63;
    val.print();
    cout<<"SQRT : "<<endl;
    val.power(0.5);
    val.print();
    val.ToExp();
    val.print();
    cin.get();
    return 0;
}
http://codepad.org/0RqUtHUx
ALG FORM : 25 + j*(-63)
SQRT :
ALG FORM : 6.81099 + j*(-4.62488)
EXP FORM : 8.2328*exp(j*-0.596515)
Миниатюры
Вычисление корня квадратного из комплексного числа  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.07.2014, 14:03
Помогаю со студенческими работами здесь

Вычисление квадратного корня из числа (без использования стандартных математических функций)
Напишите программу, вычисляющую квадратный корень из числа (не пользуясь стандартными математическими функциями)

Вычисление корня квадратного функции f(x)
Программа на вычисление корня квадратного функции f(x) в пределе &lt;a, b&gt; методом бисекции. Помогите найти ошибку в коде. Корень...

Вычисление квадратного корня с применением рекурсии
Здравствуйте. Помогите, пожалуйста, задача такая: Вычислить значение x = корень(а), используя формулу , xn=1/2(xn-1+a/xn-1 ) в качестве...

Вычисление квадратного корня без cmath
Всем привет. Сделал простенький калькулятор без cmath, &quot;+,-,*,/,степень и квадратный корень&quot;. вопрос такой case 's': if...

Вычисление квадратного корня четных элементов массива
помогите улучшить код #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using namespace std; class Kvadrat { ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru