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

Написать методы, позволяющие вычислить след матрицы, детерминант, транспонировать, обратить матрицу - C++

Восстановить пароль Регистрация
 
firefox123
0 / 0 / 0
Регистрация: 17.11.2013
Сообщений: 39
23.03.2014, 22:34     Написать методы, позволяющие вычислить след матрицы, детерминант, транспонировать, обратить матрицу #1
Нужно написать "Матрица". Перегрузить операторы сложения, вычитания, умножения.
Написать методы, позволяющие вычислить след матрицы, детерминант, транспонировать, обратить матрицу.

Вот что получилось пока. Почему не работает множественное присваивание c = a = a; и c = a * b;
Помогите исправить ошибки! Проблемные строки я отметил ниже.


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
#include <iostream>
 
class matrix {
    private:
            
    int nrows_;
    int ncols_;
    double *mini_;
          
    public:
 
    matrix(int r = 2, int c = 2) { 
        nrows_ = r;
        ncols_ = c;
        mini_  = new double[r * c];
        for(int i = 0; i < nrows_; i++) 
        for(int j = 0; j < ncols_; j++)
                mini_[i * ncols_ + j] = 0;
        
    }    
    
    double operator()(int r, int c){  
        return mini_[r * ncols_ + c];
    }
   
    void getall(){ 
        for(int i = 0; i < nrows_; i++) {
            for(int j = 0; j < ncols_; j++)
                    std::cout << mini_[i * ncols_ + j] << " ";
            std::cout << std::endl;
        }
    }
    
    void put(int r, int c, double d){
        mini_[r * ncols_ + c] = d;        
    }
    
    void putall(){  
        for(int i = 0; i < nrows_; i++) 
        for(int j = 0; j < ncols_; j++)
                std::cin >> mini_[i * ncols_ + j];     
    }
    
    matrix(matrix &mc) {  
        nrows_ = mc.rget();
        ncols_ = mc.cget();
        mini_ = new double[nrows_ * ncols_];
        for(int i = 0; i < nrows_; i++)
        for(int j = 0; j < ncols_; j++)
                mini_[i * ncols_ + j] = mc(i, j); 
    }
 
 
    matrix operator=(matrix &mc){  
        if(this != &mc) {
                delete [] mini_;
                nrows_ = mc.rget();
                ncols_ = mc.cget();
                mini_ = new double [nrows_ * ncols_];
                for(int i = 0; i < nrows_; i++)
                for(int j = 0; j < ncols_; j++)
                        mini_[i * ncols_ + j] = mc(i, j); 
        }
        return *this;
    }
    
    double trace(){ 
        double t = 0;
        for(int i = 0; i < nrows_; i++){
        for(int j = 0; j < ncols_; j++)
                if (i == j) t += mini_[i * ncols_ + j];}
        return t;
    }
    matrix operator+=(matrix &mc){ 
        for(int i = 0; i < nrows_; i++)
        for(int j = 0; j < ncols_; j++)
                mini_[i * ncols_ + j] += mc(i, j); 
        return *this;
    }
    matrix operator-=(matrix &mc){ 
        for(int i = 0; i < nrows_; i++)
        for(int j = 0; j < ncols_; j++)
                mini_[i * ncols_ + j] -= mc(i, j); 
        return *this;
    }
    matrix operator * (matrix &b){  
        int M = this->nrows_;
        int N = this->ncols_;
        int P = b.ncols_;
        matrix m(M, P);
        for(int i = 0; i < M; i++)
        for(int l = 0; l < P; l++)
        for(int j = 0; j < N; j++)
                m.put(i, l, m(i, l) + mini_[i * ncols_ + j] * b(j, l));
        return m;
    }
 
 
 
   int rget() { 
        return nrows_;
   }
   
   int cget() { 
        return ncols_;
   }
   
   ~matrix() {  
        delete [] mini_;
   }
   
};
 
int main() {
    matrix a(3, 2);
    a.putall();
    std::cout << std::endl;
    matrix b(2, 3);
    b.putall();
    std::cout << std::endl;
    matrix c(3, 2);
    c = a = a;   // НЕ КОМПИЛИРУЕТСЯ
    c = a * b;   // НЕ КОМПИЛИРУЕТСЯ
    
    system("pause");
    return 0;
}
Добавлено через 44 минуты
Помогите, пожалуйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2014, 22:34     Написать методы, позволяющие вычислить след матрицы, детерминант, транспонировать, обратить матрицу
Посмотрите здесь:

Сформировать квадратную матрицу; транспонировать матрицу и инвертировать порядок элементов каждой ее строки C++
в файл text.in записано матрицу NxN. Найти ее детерминант C++
Транспонировать квадратную матрицу, используя только оператор for. Новой матрицы не создавать. Вывести исходную и транспониро-ванную матрицы C++
Если у диагонали этой матрицы находится обратный элемент , то матрицу транспонировать C++
C++ Вычислить детерминант матрицы размером 5x5, взятой из файла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igor_fl
 Аватар для igor_fl
62 / 62 / 15
Регистрация: 18.03.2014
Сообщений: 772
Завершенные тесты: 2
23.03.2014, 23:26     Написать методы, позволяющие вычислить след матрицы, детерминант, транспонировать, обратить матрицу #2
какую ошибку хоть выдаёт?

Добавлено через 8 минут
И во всяком случае я смог скомпилировтаь Ваш код...
а смысла вот этой строки
C++
1
c = a = a;
так и не понял
firefox123
0 / 0 / 0
Регистрация: 17.11.2013
Сообщений: 39
24.03.2014, 05:03  [ТС]     Написать методы, позволяющие вычислить след матрицы, детерминант, транспонировать, обратить матрицу #3
igor_fl, ну можно c = a = b; - сперва должно выполниться a = b; затем c = a;

ошибка no math for 'operator=' in 'c = matrix::operator=(matrix&)(((matrix&)(&b)))
no math for 'operator=' in 'c = matrix::operator*(matrix&)(((matrix&)(&b)))
firefox123
0 / 0 / 0
Регистрация: 17.11.2013
Сообщений: 39
24.03.2014, 05:03  [ТС]     Написать методы, позволяющие вычислить след матрицы, детерминант, транспонировать, обратить матрицу #4
igor_fl, ну можно c = a = b; - сперва должно выполниться a = b; затем c = a;

ошибка no math for 'operator=' in 'c = matrix::operator=(matrix&)(((matrix&)(&b)))
no math for 'operator=' in 'c = matrix::operator*(matrix&)(((matrix&)(&b)))
igor_fl
 Аватар для igor_fl
62 / 62 / 15
Регистрация: 18.03.2014
Сообщений: 772
Завершенные тесты: 2
24.03.2014, 10:56     Написать методы, позволяющие вычислить след матрицы, детерминант, транспонировать, обратить матрицу #5
Я смог скомпилировать код, попробуй пересобрать проект
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 1
24.03.2014, 12:51     Написать методы, позволяющие вычислить след матрицы, детерминант, транспонировать, обратить матрицу #6
для
a=b=c;
operator= должен возвращать ссылку.
Yandex
Объявления
24.03.2014, 12:51     Написать методы, позволяющие вычислить след матрицы, детерминант, транспонировать, обратить матрицу
Ответ Создать тему
Опции темы

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