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

Ошибка с вычислением модуля и аргумента

19.02.2017, 10:32. Показов 951. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть программа, вычисляет модуль и аргумент функции. Как сделать чтобы она вычисляла и значение функции? То есть в маткаде это f = 3.167-10.133i. Тема комплексных чисел в математике. Ещё результаты не совпадают в программе и маткаде. Помогите пожалуйста исправить ошибки
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
#include <iostream>
#include <conio.h>
#include <math.h>
#define PI 3.141592654
using namespace std;
 
class complex {
    double real;
    double image;
public:
    complex(double x=0,double y=0):real(x),image(y){}
    // прототипы функций
    friend complex operator+( complex x,  complex y);
    friend complex operator-( complex x,  complex y);
    friend complex operator*( complex x,  complex y);
    friend complex operator/( complex x,  complex y);
    friend complex operator+(double x,  complex y);
    friend complex operator*(double x,  complex y);
    double abs();
    double arg();
};
 
int main ()
{
    double re,im;
    cout << "Enter Re(z): " ;
    cin >> re; cout << endl;
    cout << "Enter Im(z): " ;
    cin >> im; cout << endl;
    complex z(re,im);
 
    complex numerator = 1.9*(2.2 + z);
    complex denominator = (z*z)*(0.5*z + (0.3));
    complex y = numerator/denominator;
 
    cout << "Value abs: " << y.abs() << endl;
    cout << "Value arg: " << y.arg() << endl;
    getch ();
    return 0;
}
// функция суммирования двух комплексных чисел
complex operator+( complex x,  complex y)
{
    complex result;
    result.real = x.real + y.real;
    result.image = x.image + y.image;
    return result;
}
// функция нахождения разницы двух комплексных чисел
complex operator-(complex x,  complex y)
{
    complex result;
    result.real = x.real - y.real;
    result.image = x.image - y.image;
    return result;
}
// функция нахождения произведения двух комплексных чисел
complex operator*( complex x,  complex y)
{
    complex result;
    result.real = x.real*y.real - x.image*y.image;
    result.image = x.real*y.image + x.image*y.real;
    return result;
}
// функция нахождения частного двух комплексных чисел
complex operator/( complex x,  complex y)
{
    complex result;
    result.real  = (x.real*y.real + x.image*y.image)
        / (y.real*y.real + y.image*y.image);
    result.image = (x.image*y.real - x.real*y.image)
        / (y.real*y.real + y.image*y.image);
    return result;
}
// функция определения модуля комплексного числа
double  complex::abs()
{
    double result;
    result = sqrt(real*real + image*image);
    return result;
}
double  complex::arg()
{
    double result;
    result = atan2(image, real);
    // перевод в градусы
    result = result / PI * 180.0;
    return result;
}
complex operator+(double x,  complex y)
{
    complex t(y);
    y.real+=x;
    return t;
}
complex operator*(double x,  complex y)
{
    complex t(y);
    y.real*=x;
    y.image*=x;
    return t;
}
Изображения
  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.02.2017, 10:32
Ответы с готовыми решениями:

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

Провести полное исследование модуля и аргумента данной функции
Дана функция: Охарактеризовать данное отображение. Провести полное исследование модуля и...

Класс комплексных чисел: реализовать вычисление модуля и аргумента комплексного числа
Класс Комплексных чисел. Число должно быть представлено двумя полями: действительная часть, мнимая...

Имеется комплексное число z в тригонометрической форме в виде модуля r и аргумента f (в радианах): z=r(cos(f)+isi
Кто-нибудь знает, как это сделать? Имеется комплексное число z в тригонометрической форме в виде...

7
0 / 0 / 0
Регистрация: 23.10.2016
Сообщений: 134
19.02.2017, 10:41  [ТС] 2
Название: маткад т.png
Просмотров: 19

Размер: 2.9 Кб
Ошибся с формулой в первом сообщении
0
0 / 0 / 0
Регистрация: 23.10.2016
Сообщений: 134
21.02.2017, 17:54  [ТС] 3
Помогите найти ошибку. Программа по теме пользовательские типы данных. Она выводит значение аргумента и модуль функции. Но не совпадает с результатами Mathcad. В чём может быть причина?
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
#include <iostream>
#include <conio.h>
#include <math.h>
#define PI 3.141592654
using namespace std;
 
class complex {
    double real;
    double image;
public:
    complex(double x=0,double y=0):real(x),image(y){}
    // прототипы функций
    friend complex operator+( complex x,  complex y);
    friend complex operator-( complex x,  complex y);
    friend complex operator*( complex x,  complex y);
    friend complex operator/( complex x,  complex y);
    friend complex operator+(double x,  complex y);
    friend complex operator*(double x,  complex y);
    double abs();
    double arg();
};
 
int main ()
{
    double re,im;
    cout << "Enter Re(z): " ;
    cin >> re; cout << endl;
    cout << "Enter Im(z): " ;
    cin >> im; cout << endl;
    complex z(re,im);
 
    complex numerator = 1.9*(2.2 + z);
    complex denominator = (z*z)*(0.5*z + 0.3);
    complex y = numerator/denominator;
 
    cout << "Value abs: " << y.abs() << endl;
    cout << "Value arg: " << y.arg() << endl;
    getch ();
    return 0;
}
// функция суммирования двух комплексных чисел
complex operator+( complex x,  complex y)
{
    complex result;
    result.real = x.real + y.real;
    result.image = x.image + y.image;
    return result;
}
// функция нахождения разницы двух комплексных чисел
complex operator-(complex x,  complex y)
{
    complex result;
    result.real = x.real - y.real;
    result.image = x.image - y.image;
    return result;
}
// функция нахождения произведения двух комплексных чисел
complex operator*( complex x,  complex y)
{
    complex result;
    result.real = x.real*y.real - x.image*y.image;
    result.image = x.real*y.image + x.image*y.real;
    return result;
}
// функция нахождения частного двух комплексных чисел
complex operator/( complex x,  complex y)
{
    complex result;
    result.real  = (x.real*y.real + x.image*y.image)
        / (y.real*y.real + y.image*y.image);
    result.image = (x.image*y.real - x.real*y.image)
        / (y.real*y.real + y.image*y.image);
    return result;
}
// функция определения модуля комплексного числа
double  complex::abs()
{
    double result;
    result = sqrt(real*real + image*image);
    return result;
}
double  complex::arg()
{
    double result;
    result = atan2(image, real);
    // перевод в градусы
    result = result / PI * 180.0;
    return result;
}
complex operator+(double x,  complex y)
{
    complex t(y);
    y.real+=x;
    return t;
}
complex operator*(double x,  complex y)
{
    complex t(y);
    y.real*=x;
    y.image*=x;
    return t;
}
Изображения
  
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
21.02.2017, 19:15 4
В 93 строке изменяется объект y, а возвращается объект t. Аналогичная ошибка в следующей функции.

В данном случае параметр y передаётся по значению, а не по ссылке, поэтому его можно безболезненно модифицировать. Тогда переменную t можно вообще убрать:
C++
1
2
3
4
5
complex operator+(double x,  complex y)
{
    y.real+=x;
    return y;
}
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
21.02.2017, 19:52 5
К таким результатам приводит бездумное переписывание кода
Исправьте
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
complex operator+(double x,  complex y)
{
    complex t(y);
    t.real+=x;
    return t;
}
complex operator*(double x,  complex y)
{
    complex t(y);
    t.real*=x;
    t.image*=x;
    return t;
}
0
0 / 0 / 0
Регистрация: 23.10.2016
Сообщений: 134
21.02.2017, 19:58  [ТС] 6
likehood, то есть можно стереть содержимое complex operator+(double x, complex y)?. Но тогда пишет, что undefined reference to operator+ (double , complex). Что это значит и как быть?
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
21.02.2017, 20:03 7
Цитата Сообщение от Remdzhem Посмотреть сообщение
стереть содержимое
Не стереть, а заменить на предлагаемые
0
0 / 0 / 0
Регистрация: 23.10.2016
Сообщений: 134
21.02.2017, 20:07  [ТС] 8
zss, likehood, спасибо Вам, сделал как советовали, теперь результаты совпали.
0
21.02.2017, 20:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2017, 20:07
Помогаю со студенческими работами здесь

Ошибка формата аргумента
warning: format ‘%s’ expects argument of type ‘char *’, but argument 6 has type ‘int’ ); ^...

Ошибка аргумента foreach
Выдаёт ошибку : Warning: Invalid argument supplied for foreach() in ... вот код из ошибки...

Ошибка при использовании аргумента по умолчанию
Не пойму, почему ошибка? #include &lt;stdio.h&gt; int arav(int amount=5) { return ++amount; }...

Создать функцию, имеющую два аргумента и возвращающую в качестве аргумента число из отрезка [a,b]
Создать функцию, которая будет иметь два целочисленных параметра a и b, и в качестве своего...


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

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