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

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

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

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

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

Вычислить детерминант матрицы размером 5x5, взятой из файла - C++
Уже несколько недель бьюсь об эту преграду,мне задали написать программу в с++ которая будет высчитывать детерминант матрицы размером 5 на...

Транспонировать квадратную матрицу, используя только оператор for. Новой матрицы не создавать. Вывести исходную и транспониро-ванную матрицы - C++
Транспонировать квадратную матрицу, используя только оператор for. Новой матрицы не создавать. Вывести исходную и транспониро-ванную...

Транспонировать матрицу. Вывести на печать начальный и конечный вариант матрицы - C++
Дана квадратная матрица натуральных чисел, (получаемая через rand()). Транспонировать матрицу. Вывести на печать начальный и конечный...

Если у диагонали этой матрицы находится обратный элемент , то матрицу транспонировать - C++
Дана матрица 3х3. Если у диагонали этой матрицы находится обратный элемент , то матрицу транспонировать надо , а если нет обратного...

в файл text.in записано матрицу NxN. Найти ее детерминант - C++
в файл text.in записано матрицу NxN. Найти ее детерминант. результат записать в файл test.out. для работы с файлами использовать cstdio. ...

Сформировать квадратную матрицу; транспонировать матрицу и инвертировать порядок элементов каждой ее строки - C++
Заданы два одномерных массива одинаковой длины: R и S.Сформировать квадратную матрицу A, каждый элемент которой, что находится в i-той...

5
igor_fl
62 / 62 / 15
Регистрация: 18.03.2014
Сообщений: 794
Завершенные тесты: 2
23.03.2014, 23:26 #2
какую ошибку хоть выдаёт?

Добавлено через 8 минут
И во всяком случае я смог скомпилировтаь Ваш код...
а смысла вот этой строки
C++
1
c = a = a;
так и не понял
0
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)))
0
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)))
0
igor_fl
62 / 62 / 15
Регистрация: 18.03.2014
Сообщений: 794
Завершенные тесты: 2
24.03.2014, 10:56 #5
Я смог скомпилировать код, попробуй пересобрать проект
0
zss
Модератор
Эксперт С++
6628 / 6190 / 2048
Регистрация: 18.12.2011
Сообщений: 16,138
Завершенные тесты: 1
24.03.2014, 12:51 #6
для
a=b=c;
operator= должен возвращать ссылку.
0
24.03.2014, 12:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2014, 12:51
Привет! Вот еще темы с ответами:

Детерминант матрицы - C++
Доброго времени суток всем, кто не прошёл мимо моей темы! Ради интереса написал программу для нахождения определителя матриц с помощью...

Найти детерминант (определитель) матрицы - C++
Привет всем помогите найти в 2D массиве детерминант:pardon:

Детерминант матрицы разложением по строке через OpenMP - C++
Детерминант находим рекурсией, через разложение по первой строке, все нормально работает, нужно только сделать многопоточной, подскажите...

транспонировать матрицу - C++
есть ли у кого алгоритм, как можно транспонировать матрицу? например ввожу матрицу for (i=0;i&lt;=v-1;i++) { for...


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

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

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