Matrix
Alexmegawin
c_cpp
2 years ago
2.2 kB
11
Indexable
#include <iostream> using namespace std; class Matrix { private: double** storage; public: const int n; const int m; Matrix(int _n, int _m) : n(_n), m(_m) { storage = new double* [n]; for (int i = 0; i < n; i++) { storage[i] = new double[m]; } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { storage[i][j] = 0; } } } double get_number(int i, int j) { return storage[i][j]; } void set_number(int i, int j, double num) { storage[i][j] = num; } static bool Sum(Matrix a, Matrix b, Matrix* c) { if ((a.n != c->n|| b.n != c->n) || (a.m != c->m || b.m != c->m)) { return false; } for (int i = 0; i < a.n; i++) { for (int j = 0; j < a.m; j++) { c->storage[i][j] = a.storage[i][j] + b.storage[i][j]; } } return true; } }; class Matrix_3x3 : public Matrix { public: Matrix_3x3() : Matrix(3, 3){} double determinant() { double d1 = get_number(0, 0) * get_number(1, 1) * get_number(2, 2); double d2 = get_number(0, 2) * get_number(1, 1) * get_number(2, 0); return d1 + get_number(0, 1) * get_number(1, 2) * get_number(2, 0) + get_number(0, 2) * get_number(1, 0) * get_number(2, 1) - (d2 + get_number(0, 0) * get_number(1, 2) * get_number(2, 1) + get_number(0, 1) * get_number(1, 0) * get_number(2, 1)); } }; int main() { Matrix a(4, 4); Matrix b(4, 4); Matrix c(4, 4); for (int i = 0; i < a.n; i++) { for (int j = 0; j < a.m; j++) { a.set_number(i, j, 1); } } for (int i = 0; i < b.n; i++) { for (int j = 0; j < b.m; j++) { b.set_number(i, j, 1); } } Matrix::Sum(a, b, &c); for (int i = 0; i < c.n; i++) { for (int j = 0; j < c.m; j++) { cout << c.get_number(i, j) << " "; } cout << endl; } cout << endl; Matrix_3x3 x; for (int i = 0; i < x.n; i++) { for (int j = 0; j < x.m; j++) { x.set_number(i, j, 1); } } for (int i = 0; i < x.n; i++) { for (int j = 0; j < x.m; j++) { cout << x.get_number(i, j) << " "; } cout << endl; } cout << endl << x.determinant(); return 0; }
Editor is loading...