Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для Yashman
1 / 3 / 4
Регистрация: 02.07.2011
Сообщений: 90

Операции с комплексными числами и перегрузка операторов << и >>

20.09.2011, 20:20. Показов 1309. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здрасте! Пытаюсь решить задачу по написанию программы, которая производит действия с комплексными числами (если потребуется, объясню, что это за числа). В условии задачи просят произвести перегрузку операторов +, -, *, << и >>. Я в этом деле новичок, поэтому столкнулся с массой проблем. Вот мой программный код:
Заголовочный файл с классом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// файл attach.h
class complex
{
private:
    double real;
    double imagine;
public:
    complex (double r, double i);
    complex ();
    friend complex operator+ (const complex &x, const complex &y);
    friend complex operator- (const complex &x, const complex &y);
    friend complex operator* (const complex &x, const complex &y);
    friend complex operator* (double n, const complex &x);
    friend complex operator~ (const complex &x);
    friend std::ostream & operator<< (std::ostream & os, const complex & x);
    friend std::istream & operator>> (std::istream & os, const complex & x);
}
Файл с определениями методов класса:
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
// файл file1.cpp
#include "attach.h"
#include <iostream>
using namespace std;
 
complex :: complex (double r, double i)
{
    real = r;
    imagine = i;
}
 
complex :: complex()
{
    real = imagine = 0.0;
}
 
complex operator+ (const complex &x, const complex &y)
{
        return complex (x.real + y.real, x.imagine + y.imagine);
}
 
complex operator- (const complex &x, const complex &y)
{
        return complex (x.real - y.real, x.imagine - y.imagine);
}
 
complex operator* (const complex &x, const complex &y)
{
        return complex (x.real * y.real - x.imagine * y.imagine, x.real * y.real + x.imagine * y.imagine);
}
 
complex operator* (double n, const complex &x)
{
    return complex (n * x.real, n * x.imagine);
}
 
complex operator~ (const complex &x)
{
    return complex (x.real, -x.imagine);
}
 
ostream & operator<< (ostream &os, const complex &x)
{
    os << x.real << ", " << x.imagine << "i";
    return os;
}
 
istream & operator>>(istream &is, const complex &x)
{
    is >> x.real >> x.imagine;
    return is;
}
Главный файл
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
// файл main.cpp
#include <iostream>
#include "attach.h"
using namespace std;
int main()
{
    complex a(3.0, 4.0);
    complex c;
    cout << "Enter a complex number (q to quit):\n";
    while (cin >> c)
    {
        cout << "real: ";
        double r;
        cin >> r;
        cout << "imaginary: ";
        double i;
        cin >> i;
        cout << "c is " << c << '\n';
        cout << "complex conjugate is " << ~c << '\n';
        cout << "a is " << a << '\n';
        cout << "a + c is " << a + c << '\n';
        cout << "a - c is " << a - c << '\n';
        cout << "a * c is " << a * c << '\n';
        cout << "2 * c is " << 2 * c << '\n';
        cout << "Enter a complex number (q to quit):\n";
    }
    cout << "Done!\n";
    return 0;
}
Думаю, опытный программист сразу подскажет, что плохо, но, если нужно, могу выложить ответ компилятора на мой код (ошибок там около 25). Очень надеюсь на помощь.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.09.2011, 20:20
Ответы с готовыми решениями:

Операции над комплексными числами
В данной программе нужно создать дружескую функцию класса Komplex. Таким образом чтобы читалась строка с5=2+с1. Как это правильно сделать??...

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

Реализовать арифметические операции с комплексными числами
Создайте структуру, описывающую комплексное число. Реализуйте арифметические операции с комплексными числами: сумму, разность, умножение,...

1
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
20.09.2011, 21:07
Yashman, вот так происходит перегрузка операторов:

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
#include <iostream>
 
using namespace std;
 
class CDummy
{
private:
    int a, b;
 
public:
    CDummy( int _a = 0, int _b = 0 ) : a(_a), b(_b) {};
    CDummy( const CDummy &d ) : a(d.a), b(d.b) {};
 
    CDummy & operator+=( const CDummy &d )
    {
        a += d.a;
        b += d.b;
        return *this;
    }
    
    //ему не обязательно быть другом класса
    //friend CDummy operator+( const CDummy &d1, const CDummy &d2 );
 
    friend ostream & operator<<( ostream &os, const CDummy &d );
    friend istream & operator>>( istream &is, CDummy &d );
};
 
//-------------------------------------------------------------------------
 
CDummy operator+( const CDummy &d1, const CDummy &d2 )
{
    CDummy ret = d1;
    ret += d2; // использует встроенный operator+=
    return ret;
}
 
ostream & operator<<( ostream &os, const CDummy &d )
{
    os << d.a << "; " << d.b;
    return os;
}
 
// формат: a; b
istream & operator>>( istream &is, CDummy &d )
{
    int a;
 
    is >> a;
 
    char ch;
    cin >> ch;
 
    if( ch != ';' )
    {
        is.setstate( ios::failbit );
        return is;
    }
 
    cin >> d.b;
    d.a = a;
 
    return is;
}
 
//-------------------------------------------------------------------------
 
int main()
{
    CDummy dummy1( 5, 6 );
    CDummy dummy2( 12, 2 );
 
    cout << "1: " << dummy1 << "\n2: " << dummy2 << '\n';
 
    CDummy dummy3 = dummy1 + dummy2;
 
    cout << "3: " << dummy3 << '\n';
 
    cout << "3> ";
 
    cin >> dummy3;
 
    cout << "3: " << dummy3 << "\n2: " << dummy2 << "\n3+2: " << dummy3 + dummy2 << '\n';
 
    return 0;
}
Если будут вопросы - спрашивайте.

Добавлено через 5 минут
Ошибся, operator+ можно было и не делать другом класса.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.09.2011, 21:07
Помогаю со студенческими работами здесь

Операции с комплексными числами через ООП
Друзья, написал код программы. ошибку при компиляции выдает: fatal error LNK1169: обнаружен многократно определенный символ - один или...

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

Операции и функции в работе в классе с комплексными числами С++ Visual Studio
Помогите пожалуйста. Написала программу, но считает и умножает комплексные числа не правильно. Раньше умножало нормально, но теперь не знаю...

Операции с комплексными числами. Проконсультируйте. (аргумент, модуль, сложение, умножение, вычитание)
здравствуйте. Эта программа рабочая, работает для аргумента, сложения, вычитания, умножения, модуля комплексных чисел. Проверьте её...

На основе созданного класса для работы с тригонометрическими комплексными числами, перегрузить операции «*», «/» и «=» д
На основе созданного класса для работы с тригонометрическими комплексными числами, перегрузить операции «*», «/» и «=» для осуществления...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru