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

Сложение и вычитание матриц. Перегрузка операторов. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 45, средняя оценка - 4.71
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
21.02.2012, 17:56     Сложение и вычитание матриц. Перегрузка операторов. #1
Добрый день)) посмотрите пожалуйста на мой код и помогите, если не сложно)
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
#include <conio.h>
#include <iostream>
using namespace std;
class Matrix
{
private:
        int aMas [3][3];
 
public:
        Matrix(){}
        void Vvod();
        void Vivod();
    Matrix operator+ (const Matrix&);
    Matrix operator- (const Matrix&);
};
 
void Matrix::Vvod() 
{
        for(int i = 0;i<3;i++)
         for(int j = 0;j<3;j++)
          {
           cout<<"Vvedite ["<<i<<"]"<<"["<<j<<"]"<<" element massiva: ";
           cin>>aMas[i][j];
          }
}
 
void Matrix::Vivod() 
{
        for (int i = 0; i < 3; i++)
        {
          for (int j = 0; j < 3; j++)
          {
           cout<<aMas[i][j]<<" ";
           cout<<endl;
          }
        }
}
 
Matrix Matrix::operator+(const Matrix &rhs)
{
    Matrix result(*this);
      for (size_t i = 0; i < 3; ++i)
      {
        for (size_t j = 0; j < 3; ++j)
        {
            result.aMas[i][j] += rhs.aMas[i][j];
        }
      }
    return result;
}
 
Matrix Matrix::operator-(const Matrix &rhs)
{
    Matrix result(*this);
 
    for (size_t i = 0; i < 3; ++i)
     {
        for (size_t j = 0; j < 3; ++j)
            result.aMas[i][j] -= rhs.aMas[i][j];
     }
 
    return result;
}
 
int main()
{
// подскажите пожалуйста что тут писать?)))
//и по возможности подкорректируйте мой код, пожалуйста.
}
Добавлено через 1 час 14 минут
Ребята может вот так?((
C++
1
2
3
4
5
6
7
8
int main()
{
Matrix aMas;
aMas.Vvod();
aMas.Vivod();
system("pause");
return (0); 
}
Добавлено через 2 минуты
Скажите пожалуйста как результат сложения и вычитания в главную добавить. Уже две недели с прогой мучаюсь
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2012, 17:56     Сложение и вычитание матриц. Перегрузка операторов.
Посмотрите здесь:

C++ Сложение и вычитание поэлементно...
C++ Сложение и вычитание вещественных матриц
C++ Сложение, вычитание, умножение
Перегрузка операторов для класса матриц C++
C++ Ошибка в классе матриц (перегрузка операторов)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
21.02.2012, 18:06     Сложение и вычитание матриц. Перегрузка операторов. #2
Ну допустим:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main ()
{
    Matrix m, m2;
    cout << "Vvod: \n";
    m.Vvod();
    cout << "Vivod: \n";
    m.Vivod();
    cout << "Vvod: \n";
    m2.Vvod();
    cout << "Vivod: \n";
    m2.Vivod();
    m2 = m2 - m;
    cout << "Vivod: resulta\n";
    m2.Vivod();
    system("PAUSE > NULL");
}
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
21.02.2012, 18:17  [ТС]     Сложение и вычитание матриц. Перегрузка операторов. #3
Спасибо за ответ) сейчас попробую...

Добавлено через 9 минут
Проверил)) все отлично работает! Спасибо вам еще раз огромное!
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
21.02.2012, 18:24     Сложение и вычитание матриц. Перегрузка операторов. #4
Не за что. Но посоветовал бы вам лучше сделать вывод матрицы так:
C++
1
2
cin >> m;
cout << m;
Уберите нафиг функции vvod vivod и сделайте это через дружественные функции.
Так же посоветовал бы сделать матрицу динамической (если конечно знаете как).
ШКІПЕР
 Аватар для ШКІПЕР
93 / 93 / 7
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
Завершенные тесты: 1
21.02.2012, 18:46     Сложение и вычитание матриц. Перегрузка операторов. #5
Вася1q, сами себя спрашиваете и отвечает ? Оригинально В первом посте...


Цитата Сообщение от Вася1q Посмотреть сообщение
Ребята может вот так?((
Может быть. Вы не поставили конкретного задание - поэтому нет ответов.


Цитата Сообщение от Вася1q Посмотреть сообщение
результат сложения и вычитания в главную добавить
В главную функцию в смысле ? Объясните, что нужно ?

Вот, как вариант:

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 <conio.h>
#include <iostream>
using namespace std;
class Matrix
{
private:
    int aMas [3][3];
 
public:
    Matrix(){}
    void Vvod();
    void Vivod();
    Matrix operator+ (const Matrix&);
    Matrix operator- (const Matrix&);
    friend ostream &operator << (ostream &cout, Matrix &temp);
};
 
void Matrix::Vvod() 
{
    for(int i = 0;i<3;i++)
        for(int j = 0;j<3;j++)
        {
            cout<<"Vvedite ["<<i<<"]"<<"["<<j<<"]"<<" element massiva: ";
            cin>>aMas[i][j];
        }
}
 
void Matrix::Vivod() 
{
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
            cout<<aMas[i][j]<<" ";
            cout<<endl;
    }
}
 
Matrix Matrix::operator+(const Matrix &rhs)
{
    Matrix result(*this);
    for (size_t i = 0; i < 3; ++i)
    {
        for (size_t j = 0; j < 3; ++j)
        {
            result.aMas[i][j] += rhs.aMas[i][j];
        }
    }
    return result;
}
 
Matrix Matrix::operator-(const Matrix &rhs)
{
    Matrix result(*this);
 
    for (size_t i = 0; i < 3; ++i)
    {
        for (size_t j = 0; j < 3; ++j)
            result.aMas[i][j] -= rhs.aMas[i][j];
    }
 
    return result;
}
 
ostream &operator << (ostream &cout, Matrix &temp)
{
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
            cout<<temp.aMas[i][j]<<" ";
        cout<<endl;
    }
    return cout;
}
 
 
int main()
{
    Matrix aMas, aMas2;
    aMas.Vvod();
    aMas2.Vvod();
    /*aMas.Vivod();*/
    cout<<aMas2-aMas;
    system("pause");
    return EXIT_SUCCESS;     
}
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
22.02.2012, 09:04  [ТС]     Сложение и вычитание матриц. Перегрузка операторов. #6
Цитата Сообщение от dimcoder Посмотреть сообщение
Уберите нафиг функции vvod vivod и сделайте это через дружественные функции.
Так же посоветовал бы сделать матрицу динамической (если конечно знаете как).
Я еще только начинаю учится СИ++ И многое для меня новое. Если есть время и желание помочь, то подредактируйте программку на свой вкус))) Я заодно посмотрю что да как нужно правильно делать))

Добавлено через 1 минуту
ШКІПЕР, я ответил на свой вопрос не зная правильного ответа))

Добавлено через 2 минуты
Вот еще добавил функцию умножения:
посмотрите правильно)
C++
1
2
3
4
5
6
7
8
9
10
11
12
Matrix Matrix::operator*(const Matrix &n)
{
    Matrix result(*this);
 
    for (int i = 0; i < 3; i++)
     {
        for (int j = 0; j < 3; j++)
            result.aMas[i][j] *= n.aMas[i][j];
     }
 
    return result;
}
хотя по-моему так нельзя)

Добавлено через 5 минут
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
Может быть. Вы не поставили конкретного задание - поэтому нет ответов.
Вот оно. Просто я его уже задавал на этом форуме, мне помогли но не совсем. Т.е. я почти ничего не понял.
найти кoличествo стрoк, кoличествo стoлбцoв, элeмeнты матрицы; мне нужно использовать метoды: вывoд матрицы и проверка: являeтся ли матрица симметричнoй (АТ = А) и пeрeгружeнные опeрации: слoжение, вычитание, деление, умнoжение матриц, умнoжение матрицы на числo.

Добавлено через 13 часов 56 минут
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include <conio.h>
#include <iostream>
using namespace std;
class Matrix
{
private:
        float aMas [3][3];
        float bMas [3][3];
        int chislo;
 
public:
    Matrix(){}
    void Vvod();
    void Vivod();
    void Na_4islo();
    Matrix operator+ (const Matrix&);
    Matrix operator- (const Matrix&);
    Matrix operator* (const Matrix&);
    Matrix operator/ (const Matrix&);
};
 
void Matrix::Vvod() 
{
        for(int i = 0;i<3;i++)
        {
         for(int j = 0;j<3;j++)
          {
           cin>>aMas[i][j];
           bMas[i][j]=aMas[i][j];//Г§Г*ïîìèГ*Г*Гѕ ГЅГ«-ГІГ» ïåðâîé Г¬Г*òðèöû         
          }
         cout<<endl;
        }         
}
 
void Matrix::Vivod() 
{
        for (int i = 0; i < 3; i++)
        {
          for (int j = 0; j < 3; j++)
          {
           cout<<aMas[i][j]<<" ";
          }
         cout<<endl;  
        }
}
 
void Matrix::Na_4islo() 
{
        int chislo;
        cout<<"Ââåäèòå ÷èñëî Г*Г* êîòîðîå õîòèòå ГіГ¬Г*îæèòü ïåðâóþ Г¬Г*òðèöó: ";
        cin>>chislo;
        for (int i = 0; i < 3; i++)
        {
          for (int j = 0; j < 3; j++)
          {
           bMas[i][j]=bMas[i][j]*chislo;//ïûòГ*ГѕГ±Гј ГЄГ*æäûé ГЅГ«-Г*ГІ ïåðâîé Г¬Г*òðèöû ГіГ¬Г*îæèòü Г*Г* ÷èñëî ââåäåГ*Г*îé Г± ГЄГ«Г*ГўГЁГ*òóðû
           cout<<bMas[i][j]<<" ";
          }
         cout<<endl;  
        }
}
 
Matrix Matrix::operator+(const Matrix &n)
{
    Matrix result(*this);
      for (int i = 0; i < 3; i++)
      {
        for (int j = 0; j < 3; j++)
        {
            result.aMas[i][j] += n.aMas[i][j];
        }
      }
    return result;
}
 
Matrix Matrix::operator-(const Matrix &n)
{
    Matrix result(*this);
 
    for (int i = 0; i < 3; i++)
     {
        for (int j = 0; j < 3; j++)
        {
            result.aMas[i][j] -= n.aMas[i][j];
        }
     }
    return result;
}
 
Matrix Matrix::operator*(const Matrix &n)
{
    Matrix result(*this);
 
    for (int i = 0; i < 3; i++)
     {
        for (int j = 0; j < 3; j++)
         {
            result.aMas[i][j] *= n.aMas[i][j];
         }
     }
    return result;
}
 
Matrix Matrix::operator/(const Matrix &n)
{
    Matrix result(*this);
 
    for (int i = 0; i < 3; i++)
     {
        for (int j = 0; j < 3; j++)
         {
            result.aMas[i][j] /= n.aMas[i][j];
         }
     }
    return result;
}
int main ()
{
    int chislo;
    Matrix m, m2,m3,m4,m5,m6,m7;
    cout << "Ââåäèòå ïåðâóþ: \n";
    m.Vvod();
    cout << "Âû ââåëè Г¬Г*òðèöó: \n";
    m.Vivod();
    cout << "Ââåäèòå âòîðóþ Г¬Г*òðèöó: \n";
    m2.Vvod();
    cout << "Âû ââåëè Г¬Г*òðèöó: \n";
    m2.Vivod();
    cout << "ÑóììГ* ïåðâîé ГЁ âòîðîé Г¬Г*òðèöû: \n";
    m3 = m + m2;
    m3.Vivod();
    cout << "ГђГ*Г§Г*îñòü Г¬Г*òðèö: \n";
    m4 = m - m2;
    m4.Vivod();
    cout << "ÏðîèçâåäåГ*ГЁГҐ Г¬Г*òðèö: \n";
    m5 = m * m2;
    m5.Vivod();
    cout << "ÄåëåГ*ГЁГҐ Г¬Г*òðèö: \n";
    m6 = m / m2;
    m6.Vivod();
    m7.Na_4islo();
    system("pause");
}
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
22.02.2012, 09:07  [ТС]     Сложение и вычитание матриц. Перегрузка операторов. #7
Остался последний вопрос и программа готова)))
Так вот: как осуществить умножение мaтрицы нa число? я вроде все правильно делал. Но выводит какую-то ерунду. Вот тест:
Миниатюры
Сложение и вычитание матриц. Перегрузка операторов.  
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
22.02.2012, 10:49     Сложение и вычитание матриц. Перегрузка операторов. #8
Цитата Сообщение от Вася1q Посмотреть сообщение
void Matrix::Na_4islo()
{
* * * * int chislo;
* * * * cout<<"Введите число на которое хотите умножить первую матрицу: ";
* * * * cin>>chislo;
* * * * for (int i = 0; i < 3; i++)
* * * * {
* * * * * for (int j = 0; j < 3; j++)
* * * * * {
* * * * * *bMas[i][j]=bMas[i][j]*chislo;//пытаюсь каждый эл-нт первой матрицы умножить на число введенной с клавиатуры
* * * * * *cout<<bMas[i][j]<<" ";
* * * * * }
* * * * *cout<<endl; *
* * * * }
}
У вас bMas скорее всего не инициализирован - в нем мусор, отсюда и вывод нехороший.
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
22.02.2012, 11:14  [ТС]     Сложение и вычитание матриц. Перегрузка операторов. #9
Цитата Сообщение от dimcoder Посмотреть сообщение
У вас bMas скорее всего не инициализирован - в нем мусор, отсюда и вывод нехороший.
Извиняюсь за глупый вопрос. Но как это исправить?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2012, 11:23     Сложение и вычитание матриц. Перегрузка операторов.
Еще ссылки по теме:

C++ Перегрузка оператора "-" (вычитание матриц)
C++ Сложение/вычитание времение и дат
C++ Сложение и вычитание

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

Или воспользуйтесь поиском по форуму:
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
22.02.2012, 11:23     Сложение и вычитание матриц. Перегрузка операторов. #10
Я честно говоря, мало понимаю зачем здесь bMas вообще. Если хотите умножить матрицу, так замените все bMas на aMas в функции naChislo или прямо же в этой функции инициализируйте матрицу bMas матрицей aMas. Так допустим:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void Matrix::Na_4islo() 
{
        int chislo;
        cout<<"Введите число на которое хотите умножить первую матрицу: ";
        cin>>chislo;
        for (int i = 0; i < 3; i++)
        {
          for (int j = 0; j < 3; j++)
          {
           aMas[i][j]=aMas[i][j]*chislo;//пытаюсь каждый эл-нт первой матрицы умножить на число введенной с клавиатуры
           cout<<aMas[i][j]<<" ";
          }
         cout<<endl;  
        }
}
Если просто хотите вывести умноженную матрицу (не считаю это хорошей идеей), то сделайте так:
C++
1
2
3
for (int i = 0; i < 3; i++)
   for (int j = 0; j < 3; j++)
      cout << a[i][j] * chislo << endl;
Yandex
Объявления
22.02.2012, 11:23     Сложение и вычитание матриц. Перегрузка операторов.
Ответ Создать тему
Опции темы

Текущее время: 19:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru