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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 5.00
Excluz1ve
0 / 0 / 0
Регистрация: 16.09.2012
Сообщений: 18
#1

Классы, комплексные числа и перегрузка оператора - C++

29.12.2012, 03:42. Просмотров 3210. Ответов 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
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include <iostream>
#include <conio.h>
#include <math.h>
#include <stdio.h>
 
using namespace std;
 
class Komplex
 
    {
    private:
        double real;
        double image;
 
    public:
        Komplex() {};
        Komplex(double r)
         { real = r;
          image = 0; } // Конструктор
        Komplex(double r, double i,double a)
         { real = r,
          image = i; }   // Конструктор
        ~Komplex() {}   // Деструктор
        Komplex operator+(Komplex &);   // Перегрузка оператора сложения
        Komplex operator-(Komplex &);   // Перегрузка оператора вычитания
        Komplex operator*(Komplex &); // Перегрузка оператора умножения
        Komplex operator*(double &c); // Перегрузка оператора умножения на Cons
        double& operator[](int s);
        friend Komplex operator*(double &c , Komplex &);// Перегрузка оператора умножения Const на комплексное число
        friend ostream &operator<<(ostream &, Komplex &);
        friend istream &operator>>(istream &, Komplex &);
    };
Komplex Komplex::operator+(Komplex &fp1)
    {
        fp1.real = real + fp1.real;
        fp1.image = image + fp1.image;
        return fp1;
    }
Komplex Komplex::operator-(Komplex &fp1)
    {
 
        fp1.real = real - fp1.real;
        fp1.image = image - fp1.image;
        return fp1;
    }
Komplex Komplex::operator*(Komplex &fp1)
    {
        double i, j;
        i = real * fp1.real - image * fp1.image;
        j = real * fp1.image + fp1.real * image;
        fp1.real = i;
        fp1.image = j;
        return fp1;
    }
Komplex Komplex::operator*(double &c)
{
Komplex fp1;
double i, j;
i = real * c;
j = image * c;
fp1.real = i;
fp1.image = j;
return fp1;
}
Komplex operator*(double &c, Komplex &fp1)
{
Komplex fp2;
double i, j;
i = c * fp1.real;
j = c * fp1.image;
fp2.real = i;
fp2.image = j;
return fp2;
}
double &Komplex::operator[](int s)
{
    if(s==0) return real;
    if(s==1) return image;
}
 
ostream &operator<< (ostream &fo, Komplex &fp)
    {
        if (fp.image < 0) fo << fp.real << "+i(" << fp.image << ")\n";
        else fo << fp.real << "+i" << fp.image << "\n";
        return fo;
    }
istream &operator>>(istream &fi, Komplex &fp)
 {
        cout << "Введите реальную часть: ";
        fi >> fp.real;
        cout << "Введите мнимую часть: ";
        fi >> fp.image;
        return fi;
 }
 
void main()
{
    setlocale(LC_ALL, "Russian");
    Komplex k1, k2, k3;
    double s;
    double c;
    cin >> k1;
    cin >> k2;
    cout<<"Введите действительное число: ";
    cin >> s;
    k3=k2;
    cout << "Первое комплексное число = " << k1;
    cout << "Второе комплексное число = " << k2;
    cout << "Действительное число = " << s<<endl;
    cout << "k1 + k2 = " <<k1+k2;
    k2=k3;
    cout << "k1 - k2 = " <<k1-k2;
    k2=k3;
    cout << "k1 * k2 = " <<k1*k2;
    k2=k3;
    cout << "const * k1 = "<< k1*s;
    cout << "k1 * const = "<< s*k1;
    k1[0]=6;
    k1[1]=15;
    cout << "Новое комплексное число = " <<k1[0];
    cout<<"+i";
    cout<<k1[1];
system("pause");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2012, 03:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Классы, комплексные числа и перегрузка оператора (C++):

Перегрузка оператора, комплексные числа - C++
Не могу понять что делаю не так, компилятор выдает ошибки. Но все они из за неправельной перегрузки операторов вывода &lt;&lt; и &gt;&gt; . ...

Комплексные числа/перегрузка - C++
Чот уже вторую неделю бьюсь над кодом, а осилить не могу, подскажите #include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; ...

C++ перегрузка операторов, комплексные числа - C++
Помогите разобраться в предоставленной программе.. Сама программа(не сначала..до этого всё вроде понятно): // Вспомогательная...

классы.комплексные числа - C++
написал, но что то не работает, помогите пожалуйсто... #include &quot;stdafx.h&quot; #include &quot;iostream&quot; using namespace std; class complex{ ...

Классы и объекты (комплексные числа) - C++
Объект «комплексные числа». Операции определяются по обще принятым формулам. Предусмотреть возможность операции присваивания, сложения,...

Классы, комплексные числа, возможность записи comp(3+2.2i) - C++
Доброго времени суток! Для разминки мозгов решил написать класс больших комплексных чисел(мол число интерпретировать как строку, дабы...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
29.12.2012, 07:27 #2
потому что по стандартам С++ функция main() возврашает int
C++
1
 cout << "k1 + k2 = " <<k1+k2;
там же в операторе перегрузке адрес нудно передать а не Объект
C++
1
cout << "k1 + k2 = " << &(k1+k2);
но результат почему то в 16 ричном виде

Добавлено через 6 минут
я где то ошибся но не пойму где
-=ЮрА=-
Заблокирован
Автор FAQ
29.12.2012, 12:20 #3
Цитата Сообщение от Nixy Посмотреть сообщение
но результат почему то в 16 ричном виде
- да потому что ссылка
Цитата Сообщение от Nixy Посмотреть сообщение
cout << "k1 + k2 = " << &(k1+k2);
ты адрес выражения выводишь а не сумму

PS:Excluz1ve, посмотри сюда 2.4 Наш класс Комплексное число выше есть теория.
Самая основная ошибка у тебя - модернизация аргументов при сложении - кто даёт право в матоперации скажем сложения a + b вместо этого c = a + b делать это a += b и так во всём коде, не увидел также нужнейших функций преобразования комплекса в показательную и экспоненциальную форму записи - без этого решать сложные формулы с комплексами вообще невозможно...
Excluz1ve
0 / 0 / 0
Регистрация: 16.09.2012
Сообщений: 18
07.01.2013, 17:39  [ТС] #4
я вот только не пойму зачем что то преобразовывать, разве это обязательно?
-=ЮрА=-
Заблокирован
Автор FAQ
07.01.2013, 20:34 #5
Цитата Сообщение от Excluz1ve Посмотреть сообщение
я вот только не пойму зачем что то преобразовывать, разве это обязательно?
Да нет совсем не обязательно если программа считает только 2 + 2, а вот скажем возведи в степень 1.258 комплексное число в алгебраической записи, потмом поймёшь зачем показательная форма записи.
Также убери из класса модернизацию операндов математических операций это некорректно с математической точки зрения!
jekmut
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 83
12.10.2014, 22:13 #6
Так как же правильно вывести сложение:
C++
1
cout << "k1 + k2 = " << &(k1+k2);
Добавлено через 24 минуты
Ребята, кто поможет???
8Observer8
1532 / 945 / 120
Регистрация: 05.10.2013
Сообщений: 3,304
Записей в блоге: 54
13.10.2014, 09:38 #7
Несколько замечаний по коду:

1) У вас в конструкторе лишний параметр "a":
C++
1
2
3
4
5
Komplex(double r, double i,double a)
{
    real = r,
    image = i;
}
2) Все эти конструкторы:
C++
1
2
3
4
5
6
7
        Komplex() {};
        Komplex(double r)
         { real = r;
          image = 0; } // Конструктор
        Komplex(double r, double i,double a)
         { real = r,
          image = i; }   // Конструктор
Можно заменить одним:
C++
1
2
3
public:
    Komplex( double r, double i = 0 ) :
        real( r ), image( i ) {}
jekmut
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 83
13.10.2014, 19:55 #8
На счет конструкторов - спасибо! Результат сложения я вывожу на экран так:
C++
1
2
3
4
5
6
7
Complex c1, c2, res;
  cin >> c1;
  cin >> c2;
  cout << "Первое комплексное число = " << c1;
  cout << "Второе комплексное число = " << c2;
  res = c1 + c2;
  cout << "c1 + c2 = " << res;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2014, 19:55
Привет! Вот еще темы с ответами:

Перегрузка оператора умножения числа на матрицу - C++
Доброго дня суток. Хочу перегрузить оператор умножение числа на матрицу. Перегрузил сначала в классе вот так: matrix operator*(const...

Классы. Перегрузка операторов для комплексного числа - C++
На основе вот этой темы: http://www.cyberforum.ru/cpp-beginners/thread1010206.html (к сожалению более вразумительного примера я не...

Перегрузка оператора < - C++
У меня 2 файла . Przedzial.h и Przedzial.cpp В первом только класс и названия метод и т.д. Во втором описание. Przedzial.h ...

Перегрузка оператора - C++
Здравствуйте! Помогите разобраться с перегрузкой операторов. Суть задания: Осуществите перегрузку оператора “++” так, чтобы при его...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.10.2014, 19:55
Ответ Создать тему
Опции темы

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