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

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

21.02.2012, 17:56. Показов 20422. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru