Skip to content

Commit 13a33a5

Browse files
committed
added finding the minor and determinant
1 parent 71e16db commit 13a33a5

File tree

3 files changed

+56
-4
lines changed

3 files changed

+56
-4
lines changed

Variants/Lab_12/var_12/main.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,4 +175,11 @@ int main() {
175175

176176
mult3 *= 6;
177177
mult3.print();
178+
Matrix det_test({
179+
{2, 4, 3},
180+
{5, 7, 8},
181+
{6, 9, 1},
182+
});
183+
184+
cout << det_test.determinant() << endl;
178185
}

Variants/Lab_12/var_12/matrix.cpp

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,13 +111,53 @@ void swap(double *d1, double *d2) {
111111
*d2 = temp;
112112
}
113113

114-
Matrix& Matrix::transpose() {
114+
Matrix Matrix::transpose() {
115+
Matrix temp(*this);
115116
for (int y = 0; y < this->size() - 1; y++) {
116117
for (int x = y + 1; x < this->size(); x++) {
117-
swap(&arr[y][x], &arr[x][y]);
118+
swap(&temp.arr[y][x], &temp.arr[x][y]);
118119
}
119120
}
120-
return *this;
121+
return temp;
122+
}
123+
124+
Matrix Matrix::minor(int _y, int _x) {
125+
Matrix temp(arr.size() - 1);
126+
bool skip_x, skip_y = 0;
127+
for (int y = 0; y < temp.arr.size(); y++) {
128+
if (y == _y) skip_y = 1;
129+
skip_x = 0;
130+
for (int x = 0; x < temp.arr.size(); x++) {
131+
if (x == _x) skip_x = 1;
132+
temp.set(x, y, arr[y + skip_y][x + skip_x]);
133+
}
134+
}
135+
return temp;
136+
}
137+
138+
const double Matrix::determinant() {
139+
double det = 0;
140+
switch (arr.size()) {
141+
case 1: {
142+
det = arr[0][0];
143+
break;
144+
}
145+
case 2: {
146+
det = arr[0][0] * arr[1][1] - arr[1][0] * arr[0][1];
147+
break;
148+
}
149+
default: {
150+
for (int i = 0; i < arr.size(); i++) {
151+
if (i % 2) {
152+
det -= arr[i][0] * this->minor(i, 0).determinant();
153+
} else {
154+
det += arr[i][0] * this->minor(i, 0).determinant();
155+
}
156+
}
157+
break;
158+
}
159+
}
160+
return det;
121161
}
122162

123163
// операторы

Variants/Lab_12/var_12/matrix.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,17 @@ class Matrix {
2323
// геттеры
2424
double get(unsigned int x, unsigned int y);
2525
const unsigned int size();
26+
const double determinant();
2627

2728
void print();
2829

2930
// преобразования
3031

31-
Matrix& transpose();
32+
Matrix transpose();
33+
Matrix inverse();
34+
Matrix minor(int i, int j);
35+
Matrix minor_matrix();
36+
Matrix algebraic_additions();
3237

3338
// операторы
3439

0 commit comments

Comments
 (0)