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

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

Войти
Регистрация
Восстановить пароль
 
firefox123
0 / 0 / 0
Регистрация: 17.11.2013
Сообщений: 39
#1

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

23.03.2014, 22:34. Просмотров 334. Ответов 5
Метки нет (Все метки)

Нужно написать "Матрица". Перегрузить операторы сложения, вычитания, умножения.
Написать методы, позволяющие вычислить след матрицы, детерминант, транспонировать, обратить матрицу.

Вот что получилось пока. Почему не работает множественное присваивание 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++
C++ транспонировать матрицу
C++ Детерминант матрицы
C++ Транспонировать матрицу
в файл text.in записано матрицу NxN. Найти ее детерминант C++
Транспонировать квадратную матрицу, используя только оператор for. Новой матрицы не создавать. Вывести исходную и транспониро-ванную матрицы C++
Если у диагонали этой матрицы находится обратный элемент , то матрицу транспонировать C++
C++ Вычислить детерминант матрицы размером 5x5, взятой из файла
C++ Транспонировать матрицу
C++ Транспонировать матрицу. Вывести на печать начальный и конечный вариант матрицы
Транспонировать матрицу C++
Детерминант матрицы разложением по строке через OpenMP C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igor_fl
 Аватар для igor_fl
62 / 62 / 15
Регистрация: 18.03.2014
Сообщений: 805
Завершенные тесты: 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
Сообщений: 805
Завершенные тесты: 2
24.03.2014, 10:56     Написать методы, позволяющие вычислить след матрицы, детерминант, транспонировать, обратить матрицу #5
Я смог скомпилировать код, попробуй пересобрать проект
zss
Модератор
Эксперт С++
 Аватар для zss
6112 / 5715 / 1849
Регистрация: 18.12.2011
Сообщений: 14,597
Завершенные тесты: 1
24.03.2014, 12:51     Написать методы, позволяющие вычислить след матрицы, детерминант, транспонировать, обратить матрицу #6
для
a=b=c;
operator= должен возвращать ссылку.
Yandex
Объявления
24.03.2014, 12:51     Написать методы, позволяющие вычислить след матрицы, детерминант, транспонировать, обратить матрицу
Ответ Создать тему
Опции темы

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