Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 45, средняя оценка - 4.71
Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
#1

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

21.02.2012, 17:56. Просмотров 7411. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2012, 17:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сложение и вычитание матриц. Перегрузка операторов. (C++):

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

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

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

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

Перегрузка оператора "-" (вычитание матриц) - C++
Нужно сделать вычитание матриц. class massiv { public: massiv(void); massiv(int,int,bool);// n m 1(ввод самим)или0(ввод...

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this - C++
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в зависимости от чего зависит агрумент при...

9
dimcoder
Полярный
466 / 439 / 68
Регистрация: 11.09.2011
Сообщений: 1,138
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");
}
2
Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
21.02.2012, 18:17  [ТС] #3
Спасибо за ответ) сейчас попробую...

Добавлено через 9 минут
Проверил)) все отлично работает! Спасибо вам еще раз огромное!
0
dimcoder
Полярный
466 / 439 / 68
Регистрация: 11.09.2011
Сообщений: 1,138
21.02.2012, 18:24 #4
Не за что. Но посоветовал бы вам лучше сделать вывод матрицы так:
C++
1
2
cin >> m;
cout << m;
Уберите нафиг функции vvod vivod и сделайте это через дружественные функции.
Так же посоветовал бы сделать матрицу динамической (если конечно знаете как).
0
ШКІПЕР
94 / 94 / 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;     
}
1
Вася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");
}
0
Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
22.02.2012, 09:07  [ТС] #7
Остался последний вопрос и программа готова)))
Так вот: как осуществить умножение мaтрицы нa число? я вроде все правильно делал. Но выводит какую-то ерунду. Вот тест:
0
Миниатюры
Сложение и вычитание матриц. Перегрузка операторов.  
dimcoder
Полярный
466 / 439 / 68
Регистрация: 11.09.2011
Сообщений: 1,138
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 скорее всего не инициализирован - в нем мусор, отсюда и вывод нехороший.
0
Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
22.02.2012, 11:14  [ТС] #9
Цитата Сообщение от dimcoder Посмотреть сообщение
У вас bMas скорее всего не инициализирован - в нем мусор, отсюда и вывод нехороший.
Извиняюсь за глупый вопрос. Но как это исправить?
0
dimcoder
Полярный
466 / 439 / 68
Регистрация: 11.09.2011
Сообщений: 1,138
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;
0
22.02.2012, 11:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2012, 11:23
Привет! Вот еще темы с ответами:

Сложение и вычитание - C++
Текст задачи надо переписывать!

Сложение и вычитание поэлементно... - C++
Проблема вот в чем....сказали сложить два массива 123456789 000089999 ---------- шот тип этого .... как в столбик, так-же вычесть,...

Сложение и вычитание множеств - C++
Нужна помощь. Надо создать класс с множеством чисел и реализовать в нём функцию сложения и вычитания, этих самых множеств. Функция сложения...

Сложение, вычитание, умножение - C++
Доброго времени суток! Помогите с задачей: Написать функцию, которая складывает, вычитает или умножает два целых числа и возвращает...


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

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

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