Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdlib.h>
- #include <math.h>
- using namespace std;
- class Matr {
- public:
- int** elems;
- int n, m;
- Matr() {
- n = 0;
- m = 0;
- }
- Matr(int n, int m) {
- if (n < 0 || m < 0) throw 1;
- this->n = n;
- this->m = m;
- elems = new int* [n];
- for (int i = 0; i < n; ++i)
- elems[i] = new int[m];
- }
- Matr(int n, int m, int **mass) {
- if (n < 0 || m < 0) throw 1;
- this->n = n;
- this->m = m;
- elems = mass;
- }
- Matr(const Matr& M) {
- n = M.n;
- m = M.m;
- elems = new int* [n];
- for (int i = 0; i < n; ++i)
- elems[i] = new int[m];
- for (int i = 0; i < n; ++i) {
- for (int j = 0; j < m; ++j)
- elems[i][j] = M.elems[i][j];
- }
- }
- ~Matr() {
- for (int i = 0; i < n; ++i)
- delete[] elems[i];
- delete[] elems;
- }
- bool operator!() {
- if (n == 0 || m == 0) throw 2;
- if (n != m) return false;
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < m; j++) {
- if (i == j && elems[i][j] != 1) {
- return false;
- }
- else if (i != j && elems[i][j] != 0) {
- return false;
- }
- }
- }
- return true;
- }
- Matr __getminor__(int i, int j) {
- if (n != m) throw 3;
- int **p = new int* [n-1];
- for (int i = 0; i < n - 1; ++i)
- p[i] = new int[n - 1];
- int ki, kj, di, dj;
- di = 0;
- for (ki = 0; ki < n - 1; ki++) { // проверка индекса строки
- if (ki == i) di = 1;
- dj = 0;
- for (kj = 0; kj < n - 1; kj++) { // проверка индекса столбца
- if (kj == j) dj = 1;
- p[ki][kj] = elems[ki + di][kj + dj];
- }
- }
- return Matr(n - 1, n - 1, p);
- }
- double operator*() {
- if (n == 0 || m == 0) throw 2;
- if (n != m) throw 3;
- if (n == 1) {
- return elems[0][0] * 1.0;
- }
- else if (n == 2) {
- return elems[0][0] * elems[1][1] - elems[0][1] * elems[1][0] * 1.0;
- }
- else {
- double s = 0;
- for (int i = 0; i < n; ++i) {
- s += pow(-1, i) * elems[0][i] * *(__getminor__(0, i));
- }
- return s;
- }
- return 0;
- }
- friend int operator-(Matr);
- friend bool operator==(Matr, Matr);
- friend ostream& operator<<(ostream&, Matr);
- friend istream& operator>>(istream&, Matr&);
- };
- int operator-(Matr M) {
- int n = M.n;
- int m = M.m;
- if (n == 0 || m == 0) throw 2;
- int r = M.elems[0][0];
- for (int i = 0; i < n; ++i) {
- for (int j = 0; j < m; ++j) {
- if (i == 0 && j == 0) continue;
- r -= M.elems[i][j];
- }
- }
- return r;
- }
- bool operator==(Matr M1, Matr M2) {
- if (M1.n != M2.n || M1.m != M2.m) return false;
- int n = M1.n;
- int m = M1.m;
- for (int i = 0; i < n; ++i)
- for (int j = 0; j < m; ++j)
- if (M1.elems[i][j] != M2.elems[i][j])
- return false;
- return true;
- }
- ostream& operator<<(ostream& out, Matr M) {
- int n = M.n;
- int m = M.m;
- out << endl;
- for (int i = 0; i < n; ++i) {
- for (int j = 0; j < m; ++j) {
- out << M.elems[i][j] << " ";
- }
- out << endl;
- }
- out << endl;
- return out;
- }
- istream& operator>>(istream& in, Matr& M) {
- int n, m;
- in >> n >> m;
- M = Matr(n, m);
- for (int i = 0; i < n; ++i) {
- for (int j = 0; j < m; ++j) {
- in >> M.elems[i][j];
- }
- }
- return in;
- }
- int main(void) {
- Matr a(3, 3), b(3, 3);
- a.elems[0][0] = 1; a.elems[0][1] = 2; a.elems[0][2] = 3;
- a.elems[1][0] = 4; a.elems[1][1] = 5; a.elems[1][2] = 5;
- a.elems[2][0] = 7; a.elems[2][1] = 8; a.elems[2][2] = 9;
- b.elems[0][0] = 1; b.elems[0][1] = 0; b.elems[0][2] = 0;
- b.elems[1][0] = 0; b.elems[1][1] = 1; b.elems[1][2] = 0;
- b.elems[2][0] = 0; b.elems[2][1] = 0; b.elems[2][2] = 1;
- cout << *a << endl;
- cout << -a << endl;
- cout << !b << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement