Matrix

 avatar
Alexmegawin
c_cpp
2 years ago
2.2 kB
7
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;

}