Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Ms Proger
0 / 0 / 1
Регистрация: 07.12.2013
Сообщений: 89
#1

Комплексные числа. Реализовать класс и математические операции - C++

15.03.2014, 20:12. Просмотров 1444. Ответов 52
Метки нет (Все метки)

Здравствуйте. Тема-комплексные числа. Надо: реализовать класс, следом надо реализовать математические операции, а именно: (+,-,*,Arg, ||);я реализовал класс complex; теперь не могу понять, как реализовать математические операции. Подскажите, пожалуйста. Вот начало программы (реализация класса и прога выводит на экран число в виде a+i*b):
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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
class complex
{
private:
    double m_a;
    double m_b;
    
public:
    complex();
    complex (double a, double b);
    void print();
};
 
complex::complex()
{
    m_a = 0.0;
    m_b = 0.0;
}
 
complex::complex (double a, double b)
{
    m_a = a;
    m_b = b;
}
 
void complex::print()
{
    cout << m_a << "+i" << m_b << endl;
}
 
int _tmain()
{
    complex a, b;
    cout<<"a= \n";
    cout<<"b= \n";
        
    complex *c = new complex(10, 20);
    c->print();
    return 0;

http://www.cyberforum.ru/cpp-beginners/thread1827852.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2014, 20:12
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Комплексные числа. Реализовать класс и математические операции (C++):

Математические операции для дробного числа ( заданного структурой )
Структура: struct TFraction { long ing; // целая часть ...

Поменять цифры заданного двузначного числа местами, используя математические операции
Ввести двузначное число a. Поменять цифры числа местами используя...

Класс, складывающий комплексные числа
Всем привет!) недавно начал пытаться программировать в СИ++ такая...

Создать класс, описывающий комплексные числа
Помогите, пожалуйста! Нужно создать класс, описывающий комплексные числа....

Класс Комплексные числа. Извлечение и помещение в поток
Дано такое задание Создать класс представляющий понятие комплексных чисел с...

52
saden
183 / 167 / 52
Регистрация: 27.01.2013
Сообщений: 788
15.03.2014, 20:22 #2
C++
1
2
3
4
complex & operator +(complex x1, commplex x2)
{
body
}
Добавлено через 1 минуту
либо в описании класса
C++
1
2
3
4
5
6
7
class
{
 
complex & operator +(complex x)
{
body with m_a, m_b
}
0
Ms Proger
0 / 0 / 1
Регистрация: 07.12.2013
Сообщений: 89
15.03.2014, 20:22  [ТС] #3
Эмм, можете подробнее объяснить суть этого? ( я новичок)
0
saden
183 / 167 / 52
Регистрация: 27.01.2013
Сообщений: 788
15.03.2014, 20:26 #4
если надо перегрузить готовый оператор (типа +) пишем
C++
1
operator +
и используем как обычную ф-цию (с тем же телом, что и далее). Если надо создать свой метод
C++
1
2
3
4
5
copmlex plus(complex x1, complex x2)
{ complex tmp(x1.m_a,x1.m_b);
tmp.m_a+=x2.ma;
tmp.m_b+=x2.m_b;
return tmp;
0
Ms Proger
0 / 0 / 1
Регистрация: 07.12.2013
Сообщений: 89
15.03.2014, 20:31  [ТС] #5
"operator +" - это одна из математических операций, верно?
"tmp." - это что?
и следует ли раскрывать суть сложения комплексных чисел? как в математике, приводить подобные и т.д.. Если нет, тогда что надо сделать?
0
saden
183 / 167 / 52
Регистрация: 27.01.2013
Сообщений: 788
15.03.2014, 20:34 #6
эмм, я думал, это Вы сами написали класс. Надо предупреждать...

Есть такой оператор +. Его используют в обычных выражениях типа а=х+2. Он работает для стандартных типов, но может быть переопределен (перегружен) для собственных типов. Пример показан выше.

tmp - временная переменная для хранения результата внутри функции. Приводить подобные надо лишь там, где это надо. В сложении - нет. В умножении - да
0
AGS17
7 / 5 / 2
Регистрация: 03.11.2012
Сообщений: 74
15.03.2014, 20:37 #7
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
using namespace std;
 
class complex
{
private:
    double m_a;
    double m_b;
    
public:
    complex();
    complex (double a, double b);
 
    complex &operator+ (const complex&);
    complex &operator- (const complex&);
    complex &operator* (const complex&);
 
    void print();
};
 
complex::complex()
{
    m_a = 0.0;
    m_b = 0.0;
}
 
complex::complex (double a, double b)
{
    m_a = a;
    m_b = b;
}
 
// Функции +, -, * соответственно: 
 
complex &complex :: operator+ (const complex &source)
{
    complex newComplex(this->m_a + source.m_a, this->m_b + source.m_b);
    return newComplex;
}
complex &complex :: operator- (const complex &source)
{
    complex newComplex(this->m_a - source.m_a, this->m_b - source.m_b);
    return newComplex;
}
complex &complex :: operator* (const complex &source)
{
    complex newComplex(this->m_a * source.m_a - this->m_b * source.m_b, this->m_a * source.m_b + this->m_b * source.m_a); // вычисление (a+bi)(c+di) = a*c-b*d + (a*d+b*c)i
    return newComplex;
}
 
void complex::print()
{
    cout << m_a << "+i" << m_b << endl;
}
0
saden
183 / 167 / 52
Регистрация: 27.01.2013
Сообщений: 788
15.03.2014, 20:38 #8
AGS17, рнр-ст? В С++ конструкция this-> необязательна))
0
AGS17
7 / 5 / 2
Регистрация: 03.11.2012
Сообщений: 74
15.03.2014, 20:39 #9
На самом деле я С++ уже не сильно и помню)
0
Ms Proger
0 / 0 / 1
Регистрация: 07.12.2013
Сообщений: 89
15.03.2014, 20:49  [ТС] #10
вбил код, предложенный AGS17 выдало 2 ошибки:
1>MSVCRTD.lib(crtexe.obj) : error LNK2019: ссылка на неразрешенный внешний символ _main в функции ___tmainCRTStartup

1>C:\Users\днс\Documents\Visual Studio 2008\Projects\С2\Debug\С2.exe : fatal error LNK1120: 1 неразрешенных внешних элементов

что это значит? если можете, пожалуйста поясните.
0
AGS17
7 / 5 / 2
Регистрация: 03.11.2012
Сообщений: 74
15.03.2014, 20:57 #11
Раньше этой ошибки не было? Покажи реализацию мэйновской функции
0
saden
183 / 167 / 52
Регистрация: 27.01.2013
Сообщений: 788
15.03.2014, 20:57 #12
находить ошибки в коде - дело привычное.
коды по ошибкам - ...

Давай код. В примере код не полный...
0
Ms Proger
0 / 0 / 1
Регистрация: 07.12.2013
Сообщений: 89
15.03.2014, 21:10  [ТС] #13
Цитата Сообщение от AGS17 Посмотреть сообщение
using namespace std;
class complex
{
private:
* * double m_a;
* * double m_b;
public:
* * complex();
* * complex (double a, double b);
complex &operator+ (const complex&);
* * complex &operator- (const complex&);
* * complex &operator* (const complex&);
void print();
};
complex::complex()
{
* * m_a = 0.0;
* * m_b = 0.0;
}
complex::complex (double a, double b)
{
* * m_a = a;
* * m_b = b;
}
// Функции +, -, * соответственно:
complex &complex :: operator+ (const complex &source)
{
* * complex newComplex(this->m_a + source.m_a, this->m_b + source.m_b);
* * return newComplex;
}
complex &complex :: operator- (const complex &source)
{
* * complex newComplex(this->m_a - source.m_a, this->m_b - source.m_b);
* * return newComplex;
}
complex &complex :: operator* (const complex &source)
{
* * complex newComplex(this->m_a * source.m_a - this->m_b * source.m_b, this->m_a * source.m_b + this->m_b * source.m_a); // вычисление (a+bi)(c+di) = a*c-b*d + (a*d+b*c)i
* * return newComplex;
}
void complex:rint()
{
* * cout << m_a << "+i" << m_b << endl;
}
я вбил вот этот код. Точь-в-точь. Выдало ошибки. Я непойму что я делаю неверно. Может надо что то добавить / исключить из этого кода?
0
AGS17
7 / 5 / 2
Регистрация: 03.11.2012
Сообщений: 74
15.03.2014, 21:16 #14
* * cout << m_a << "+i" << m_b << endl;

что за звёзды впереди?
0
saden
183 / 167 / 52
Регистрация: 27.01.2013
Сообщений: 788
15.03.2014, 21:16 #15
нет главной ф-ции (main)
и непонятно, что за звездочки - это глюки копирования или так и есть?
0
Ms Proger
0 / 0 / 1
Регистрация: 07.12.2013
Сообщений: 89
15.03.2014, 21:20  [ТС] #16
Да. Это глюки копирования. Это - я так понял - двойные пробелы. Я использовал (проще говоря скопировал) функцию, AGS17, предложенную почти в самом начале форума.
0
saden
183 / 167 / 52
Регистрация: 27.01.2013
Сообщений: 788
15.03.2014, 21:21 #17
остается вопрос по главной ф-ции.
судя по тексту ошибки сборщик ее просто не находит
0
Ms Proger
0 / 0 / 1
Регистрация: 07.12.2013
Сообщений: 89
15.03.2014, 21:24  [ТС] #18
Куда её можно "влепить"...(главную функцию). Помогите. Вопросов много у меня, я просто недавно начал изучать С++...
0
saden
183 / 167 / 52
Регистрация: 27.01.2013
Сообщений: 788
15.03.2014, 21:27 #19
эва как!
после скопированного кода пиши
C++
1
2
3
4
5
6
main()
{
complex a(1,1),b(2,2),c;
c=a+b;
c.print();
}
0
AGS17
7 / 5 / 2
Регистрация: 03.11.2012
Сообщений: 74
15.03.2014, 21:27 #20
Как реализовано сложение/вычитание?

Добавлено через 39 секунд
Где вообще main-функция?
0
15.03.2014, 21:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2014, 21:27
Привет! Вот еще темы с решениями:

Создание программы реализующей класс «Комплексные числа» средствами языка C++
Создание программы реализующей класс «Комплексные числа» средствами языка C++

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

Создать класс, объекты которого моделируют комплексные числа с перегрузкой необходимых операций
Необходимо за 30 минут Создать класс, объекты которого моделируют комплексные...

Описать класс Двумерная Точка, реализовать операции отношения
Кто знает как это сделать?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru