Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/107: Рейтинг темы: голосов - 107, средняя оценка - 4.61
 Аватар для Вася1q
21 / 21 / 3
Регистрация: 13.09.2011
Сообщений: 314

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

21.02.2012, 17:56. Показов 20462. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день)) посмотрите пожалуйста на мой код и помогите, если не сложно)
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 минуты
Скажите пожалуйста как результат сложения и вычитания в главную добавить. Уже две недели с прогой мучаюсь
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.02.2012, 17:56
Ответы с готовыми решениями:

Сложение и вычитание вещественных матриц
ПОМОГИТЕ ПОЖАЛУЙСТА С ЗАДАЧКОЙ, СРОЧНО НУЖНО БЫЛО!!!!!!!!!, ВОТ И САМА ЗАДАЧКА.... Написать и протестировать функцию для сложения и...

Реализовать сложение, вычитание, умножение матриц
Помогите, пожалуйста, с заданием. Пользователь задаёт размерность n, матрицы n*n задаются случайно элементами от -50 до 50, реализовать...

Ошибка в коде (сложение, вычитание, умножение матриц)
#include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;iomanip&gt; #include&lt;cstdlib&gt; using namespace std; class Matrix { private: ...

9
Полярный
 Аватар для dimcoder
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
21.02.2012, 18:06
Ну допустим:
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");
}
2
 Аватар для Вася1q
21 / 21 / 3
Регистрация: 13.09.2011
Сообщений: 314
21.02.2012, 18:17  [ТС]
Спасибо за ответ) сейчас попробую...

Добавлено через 9 минут
Проверил)) все отлично работает! Спасибо вам еще раз огромное!
0
Полярный
 Аватар для dimcoder
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
21.02.2012, 18:24
Не за что. Но посоветовал бы вам лучше сделать вывод матрицы так:
C++
1
2
cin >> m;
cout << m;
Уберите нафиг функции vvod vivod и сделайте это через дружественные функции.
Так же посоветовал бы сделать матрицу динамической (если конечно знаете как).
0
 Аватар для ШКІПЕР
99 / 99 / 22
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
21.02.2012, 18:46
Вася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;     
}
1
 Аватар для Вася1q
21 / 21 / 3
Регистрация: 13.09.2011
Сообщений: 314
22.02.2012, 09:04  [ТС]
Цитата Сообщение от 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");
}
0
 Аватар для Вася1q
21 / 21 / 3
Регистрация: 13.09.2011
Сообщений: 314
22.02.2012, 09:07  [ТС]
Остался последний вопрос и программа готова)))
Так вот: как осуществить умножение мaтрицы нa число? я вроде все правильно делал. Но выводит какую-то ерунду. Вот тест:
Миниатюры
Сложение и вычитание матриц. Перегрузка операторов.  
0
Полярный
 Аватар для dimcoder
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
22.02.2012, 10:49
Цитата Сообщение от Вася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 скорее всего не инициализирован - в нем мусор, отсюда и вывод нехороший.
0
 Аватар для Вася1q
21 / 21 / 3
Регистрация: 13.09.2011
Сообщений: 314
22.02.2012, 11:14  [ТС]
Цитата Сообщение от dimcoder Посмотреть сообщение
У вас bMas скорее всего не инициализирован - в нем мусор, отсюда и вывод нехороший.
Извиняюсь за глупый вопрос. Но как это исправить?
0
Полярный
 Аватар для dimcoder
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
22.02.2012, 11:23
Я честно говоря, мало понимаю зачем здесь 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;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.02.2012, 11:23
Помогаю со студенческими работами здесь

Сложение матриц перегрузкой операторов
Здраствуйте, Учусь на программиста и нам задали написать класс для сложения, умножения матриц при помощи перегрузки операторов. Увы,...

Перегрузка операторов + матриц - C++
Задание : определить класс «Квадратная матрица» - Matrix. Класс должен иметь несколько конструкторов, у том числе конструктор копирования. ...

Ошибка в классе матриц (перегрузка операторов)
уважаемые форумчане, помогите, пожалуйста, найти ошибку в коде пишу класс на матрицы довольно объемный по содержанию, во всяком случае...

Перегрузка операторов для класса матриц
Собственно, суть проблемы. Пишу класс матриц (хочется), оператор присваивания работает только тогда, когда функция (ну или, например,...

Перегрузка операторов для стандартных типов/Сложение char[] и int
Добрый день. Захотелось узнать, а можно ли написать оператор сложения для char и char? Пробовал так: #include &lt;iostream&gt; ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru