0 / 0 / 0
Регистрация: 15.09.2014
Сообщений: 16
1

Класс Матрица

28.02.2016, 17:56. Показов 4104. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите мне пожалуйста разобраться с классом реализующий матрицы. Я пытаюсь инициализировать матрицу и заполнить ее элементами но не выходит. В чем ошибки? Я неправильно инициализировал матрицу? Я неправильно перегрузил операцию индексации? Заметил еще одну штуку, что когда я просто инициализирую матрицу(не ввожу элементы) и она автоматически заполняется нулями(согласно коду), то при выводе получается матрица рандомной размерности с рандомными элементами.
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
#include <iostream>
#include <cmath>
 
using namespace std;
 
// К Л А С С 
class Matrix //класс матрицы
{
private:
    int size;//переменная для размера матрицы
    double **A; //здесь храниться матрица
public:
    Matrix(int size); //конструктор матрицы
    Matrix MultMatrix(Matrix B); //умножение матриц
    Matrix SumMatrix(Matrix B); //сложение матриц
    Matrix SubMatrix(Matrix B); //вычитание матриц
    void showData();         //вывод данных массива на экран
    ~Matrix(); //деструктор матрицы
    double *operator [](int i) //взять элемент матрицы
    {
        return A[i];
    }
};
 
//Г Л А В Н А Я ___ Ф У Н К Ц И Я
 
int main()
{
    int size;
    double a;
    cout<<"size=";cin>>size;
    Matrix A(size);
    for(int i=0; i<size; ++i)
        for(int j=0; j<size; ++j)
            cin>>A[i][j];
    A.showData();
    return 0;
};
 
// М Е Т О Д Ы _____ К Л А С С А
 
Matrix::Matrix(int size)
{
    //создаем матрицу
    A=new double *[size];
    for(int i = 0; i < size; ++i)
    {
        A[i]=new double [size];
        for (int j = 0; j < size; ++j)
            A[i][j] = 0;
    }
}
 
Matrix Matrix::MultMatrix(Matrix B) //умножение матриц
{
    Matrix result(size); //создали матрицу result
    for(int k=0; k<size;k++) //перемещаемся по строкам матрицы result
        for(int i=0;i<size;i++) //перемещаемся по столбцам матрицы result
            for(int j=0;j<size;j++) //индекс который меняется при умножении
                result.A[k][i]= result.A[k][i] + A[k][j] * B.A[j][i];
    return result;
}
 
Matrix Matrix::SumMatrix(Matrix B) //сложение матриц
{
    Matrix result(size);
    for(int i=0; i<size;i++)
        for(int j=0;j<size;j++)
            result.A[i][j] = A[i][j] + B.A[i][j];
    return result;
}
Matrix Matrix::SubMatrix(Matrix B) //вычитание матриц
{
    Matrix result(size);
    for(int i=0; i<size;i++)
        for(int j=0;j<size;j++)
            result.A[i][j] = A[i][j] - B.A[i][j];
    return result;
}
/*Matrix Matrix::Inverse(Matrix B) //транспонированная матрица
{
 
}*/
 
void Matrix::showData()         //вывод данных массива на экран
{
    for(int i = 0; i < size; i++)
    {
        for(int j = 0; j < size ; ++j)
            cout << A[i][j] << "  ";
        cout << endl;
    }
}
Matrix::~Matrix()
{
    for(int i=0;i<size; ++i)
        delete[] A[i];
    delete[] A;
};
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.02.2016, 17:56
Ответы с готовыми решениями:

Определить базовый класс "Матрица" и класс-потомок "Треугольная матрица"
Нужно определить класс &quot;матрица&quot; с возможностью динамического выделения и освобождения памяти,...

Класс Матрица
Вообщем задали мне в универе написать программу для работы с матрицами. Для этого нужно создать...

Класс Матрица
Задание: создать класс - матрица, которая у private имеет указатель на данные действительного типа,...

класс матрица
Объявите класс TMatric, создающий тип – матрицу. Элементы – данные класса: - указатель на...

4
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
28.02.2016, 18:41 2
almalexia1997, забыли проинициализировать size в классе добавте вот это
C++
1
2
3
Matrix::Matrix(int size) : size(size) {
//...
}
1
0 / 0 / 0
Регистрация: 24.01.2019
Сообщений: 2
01.02.2019, 08:26 3
Можете помочь по поводу этого кода как выполнить операции +-* именно в самой главной функции? А то просто я не очень понимаю как это реализовать.
0
610 / 415 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
01.02.2019, 12:16 4
Вместо SumMatrix и SubMatrix лучше определить операции operator + и operator -. И я бы объявил класс Matrix как final, т.к. у него не виртуальный деструктор и наследование (которое не запрещено) от этого класса будет небезопасным.

Добавлено через 3 минуты
Цитата Сообщение от almalexia1997 Посмотреть сообщение
Matrix Matrix::MultMatrix(Matrix B)
Лучше сделать так:
C++
1
Matrix Matrix::operator* (const Matrix & m2) const
Вы же не меняете операнды при перемножении матриц! Аналогично для суммы и разности. А то создание копии матрицы в стеке - дорогостоящая операция. Еще можно было бы добавить версии для rvalue-ссылки, чтоб эффективно делать операции с временными объектами.
0
0 / 0 / 0
Регистрация: 24.01.2019
Сообщений: 2
01.02.2019, 15:19 5
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
#include <iostream> //подключаем библиотеку iostream
using namespace std; //используем именное пространство std.
class Matrix //класс Матрица
{
private:
    int N; //переменная для строк
    int M; //переменная для столбцов
    double **A; //здесь храниться матрица
public:
    Matrix(int N, int M); //конструктор матрица
    Matrix MultMatrix(Matrix B); //умножение матриц
    Matrix operator+(const Matrix &m2); //сложение матриц
    Matrix operator-(const Matrix &m2); //вычитание матриц
    void showMatrix();         //вывод данных массива на экран
    ~Matrix(); //деструктор матрицы
    double *operator [](int i) //взять элемент матрицы
    {
        return A[i];
    }
};
//Методы класса
 
Matrix::Matrix(int N, int M) : N(N),M(M) //Инициализируем размер строк и столбцов.
{
    //Создаем матрицу
    A=new double *[N];
    for(int i = 0; i < N; ++i)
    {
        A[i]=new double [M];
        for (int j = 0; j < M; j++)
            A[i][j] = 0;
    }
}
 
Matrix Matrix::MultMatrix(Matrix B) //умножение матриц
{
    Matrix s(N,M); //Создали матрицу s
    for(int k=0; k<N;k++) //Перемещаемся по строкам матрицы s
        for(int i=0;i<N;i++) //Перемещаемся по столбцам матрицы s
            for(int j=0;j<M;j++) //Индекс который меняется при умножении.
                s.A[k][i]= s.A[k][i] + A[k][j] * B.A[j][i];
    return s;
} 
Matrix Matrix::operator+ (const Matrix & m2) const //Сложение матриц
{
    Matrix s(N,M);
    for(int i=0; i<N;i++)
        for(int j=0;j<M;j++)
            s.A[i][j] = A[i][j] + m2.A[i][j];
    return s;
}
Matrix Matrix::operator- (const Matrix & m2) const //Вычитание матриц
{
    Matrix s(N,M);
    for(int i=0; i<N;i++)
        for(int j=0;j<M;j++)
            s.A[i][j] = A[i][j] - B.A[i][j];
    return s;
}
 
void Matrix::showMatrix()         //вывод данных массива на экран
{
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < M ; j++)
            cout << A[i][j] << "\t";
        cout << endl;
    }
}
Matrix::~Matrix() //деструктор
{
    for(int i=0;i<N; i++)
        delete[] A[i];
    delete[] A;
}
int main() // Главная матрица
{
    int N;
    int M;
    int s;
    double a;
    cout << "Vvod Matrix 1,stroki = ";
    cin >> N;
    cout <<"Vvod Matrix 1,slobchi = ";
    cin >> M;
    Matrix A(N,M);
    cout << "\nVvod Matrix :\n";
    for(int i=0; i<N; i++)
        for(int j=0; j<M; j++)
            cin >> A[i][j];
            cout << "\nVyvod Matrix A :\n\n";
    A.showMatrix();
    cout<<"\nVvod Matrix 2,stroki = ";
    cin >> N;
    cout << "Vvod Matrix 2,stobchi = ";
    cin >> M;
    Matrix B(N,M);
    cout << "\nVvod Matrix :\n";
        for(int i=0; i<N; i++)
        for (int j=0;j<M; j++)
            cin>>B[i][j];
            cout << "\nVyvod Matrix B :\n\n";
    B.showMatrix();
    cout << "\nSumma Matrix:\n";
    cout << A+B;
    C.showMatrix();
    return 0;
}
Забыл привести так как я немного отредактировал по своему пример и вот совершается ввод и вывод матриц но не могу сделать операции,я немного не понял а что тут можно исправить?
0
01.02.2019, 15:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.02.2019, 15:19
Помогаю со студенческими работами здесь

Класс Матрица
Ребят, помогите с прогой! Определить класс матрица. В класс включить два конструктора: создание...

с++ класс матрица
Вот из этого как то надо сделать наследование и полиморфизм, питался делать наследование не...

Класс матрица
Здравствуйте. У меня есть класс матрицы: #pragma once #ifndef classMatrix_h #define...

Класс матрица
Прошу помочь с практическим заданием. Нужно создать класс матрица Данный класс содержит...

Класс Матрица
Помогите пожалуйста, новичок в c++. Задание следующее: 3. Описать тип-объект MATRIX (матрица...

Класс матрица
Доброго времени суток. Есть класс матрица с указателем и размерностями строк и столбцов. ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru