SaveText.Ru

Без имени
  1. #pragma once
  2. #include <iostream>
  3. #include <vector>
  4. #include <ctime>
  5. #include <cmath>
  6. using namespace std;
  7.  
  8. class matrix {
  9. protected:
  10.     int n;
  11.     int m;
  12.     float** a;
  13. public:
  14.     matrix() {
  15.         n = 0;
  16.         m = 0;
  17.         a = NULL;
  18.     }
  19.     matrix(int n)
  20.     {
  21.         this->n = n;
  22.         this->m = n;
  23.         a = new float* [n];
  24.         for (int i = 0; i < n; i++) {
  25.             a[i] = new float[m];
  26.             for (int j = 0; j < m; j++)
  27.                 a[i][j] = 0;
  28.         }
  29.     }
  30.     matrix(int n, int m)
  31.     {
  32.         this->n = n;
  33.         this->m = m;
  34.         a = new float* [n];
  35.         for (int i = 0; i < n; i++) {
  36.             a[i] = new float[m];
  37.             for (int j = 0; j < m; j++)
  38.                 a[i][j] = 0;
  39.         }
  40.     }
  41.     matrix(matrix& mat) {
  42.         this->n = mat.n;
  43.         this->m = mat.m;
  44.         a = new float* [n];
  45.         for (int i = 0; i < n; i++) {
  46.             a[i] = new float[m];
  47.             for (int j = 0; j < m; j++)
  48.                 a[i][j] = mat.a[i][j];
  49.         }
  50.     }
  51.     void FillRandomMatrix() {
  52.         for (int i = 0; i < n; i++) {
  53.             for (int j = 0; j < m; j++)
  54.                 a[i][j] = (rand() + time(0)) % 10;
  55.         }
  56.     }
  57.     void PrintMatrix() {
  58.         for (int i = 0; i < n; i++) {
  59.             for (int j = 0; j < m; j++)
  60.                 cout << a[i][j] << " ";
  61.             cout << endl;
  62.         }
  63.         cout << endl;
  64.     }
  65.     void setElement(int j, int i, float a) {
  66.         this->a[j][i] = a;
  67.     }
  68.     matrix Transposition() {
  69.         matrix b(m, n);
  70.         for (int i = 0; i < n; i++) {
  71.             for (int j = 0; j < m; j++) {
  72.                 b.setElement(j, i, a[i][j]);
  73.             }
  74.         }
  75.         return b;
  76.     }
  77.     float max(const vector <float> value)
  78.     {
  79.         float max;
  80.         max = value[0];
  81.         for (int i = 0; i < value.size() - 1; i++)
  82.         {
  83.             if (value[i + 1] > value[i])
  84.                 max = value[i + 1];
  85.         }
  86.         return max;
  87.     }
  88.     float SumNormsMatrix() {
  89.         vector <float> Norms = { 0,0,0 };
  90.         vector <float> Sum;
  91.         //Первая норма
  92.         Sum.resize(m);
  93.         for (int i = 0; i < m; i++)
  94.             Sum[i] = 0;
  95.         for (int i = 0; i < n; i++)
  96.             for (int j = 0; j < m; j++)
  97.                 Sum[i] += a[j][i];
  98.         //Вторая норма
  99.         for (int i = 0; i < n; i++)
  100.             for (int j = 0; j < m; j++)
  101.                 Norms[1] += a[i][j] * a[i][j];
  102.         Norms[1] = sqrt(Norms[1]);
  103.         //Третья норма
  104.         Sum.clear();
  105.         Sum.resize(n);
  106.         for (int i = 0; i < n; i++)
  107.             Sum[i] = 0;
  108.         for (int i = 0; i < n; i++)
  109.             for (int j = 0; j < m; j++)
  110.                 Sum[i] += a[i][j];
  111.         Norms[2] = max(Sum);
  112.         return Norms[0] + Norms[1] + Norms[2];
  113.     }
  114.     void operator= (matrix& mat) {
  115.         if (this == &mat)
  116.             return;
  117.         if (a != NULL)
  118.         {
  119.             for (int i = 0; i < n; i++)
  120.                 delete[] a[i];
  121.             delete[] a;
  122.         }
  123.         this->n = mat.n;
  124.         this->m = mat.m;
  125.         a = new float* [n];
  126.         for (int i = 0; i < n; i++) {
  127.             a[i] = new float[m];
  128.             for (int j = 0; j < m; j++)
  129.                 a[i][j] = mat.a[i][j];
  130.         }
  131.     }
  132.     bool operator== (matrix& mat)
  133.     {
  134.         float subtraction = this->SumNormsMatrix() - mat.SumNormsMatrix();
  135.         cout << this->SumNormsMatrix() << " " << mat.SumNormsMatrix() << " " << subtraction << endl;
  136.         if (subtraction == 0)
  137.             return 1;
  138.         else return 0;
  139.     }
  140.     bool operator> (matrix& mat)
  141.     {
  142.         float subtraction = this->SumNormsMatrix() - mat.SumNormsMatrix();
  143.         if (subtraction > 0)
  144.             return 1;
  145.         else return 0;
  146.     }
  147.     bool operator< (matrix& mat)
  148.     {
  149.         cout << "Оператор меньше " << endl;
  150.         float subtraction = this->SumNormsMatrix() - mat.SumNormsMatrix();
  151.         if (subtraction < 0)
  152.             return 1;
  153.         else return 0;
  154.     }
  155.     bool operator!= (matrix& mat)
  156.     {
  157.         float subtraction = this->SumNormsMatrix() - mat.SumNormsMatrix();
  158.         if (subtraction != 0)
  159.             return 1;
  160.         else return 0;
  161.     }
  162.     bool operator>= (matrix& mat)
  163.     {
  164.         float subtraction = this->SumNormsMatrix() - mat.SumNormsMatrix();
  165.         if (subtraction >= 0)
  166.             return 1;
  167.         else return 0;
  168.     }
  169.     bool operator<= (matrix& mat)
  170.     {
  171.         float subtraction = this->SumNormsMatrix() - mat.SumNormsMatrix();
  172.         if (subtraction <= 0)
  173.             return 1;
  174.         else return 0;
  175.     }
  176.     ~matrix() {
  177.         if (a != NULL)
  178.         {
  179.             for (int i = 0; i < n; i++)
  180.                 if (a[i] != NULL)
  181.                     delete[] a[i];
  182.             delete[] a;
  183.         }
  184.     }
  185.     // Конец первой лабы
  186. };
  187.  
  188. class SquareMatrix : public matrix
  189. {
  190. public:
  191.     SquareMatrix() : matrix() {}
  192.     SquareMatrix(int n) : matrix(n) {}
  193.     SquareMatrix(SquareMatrix& mat)
  194.     {
  195.         this->n = mat.n;
  196.         this->m = mat.n;
  197.         a = new float* [n];
  198.         for (int i = 0; i < n; i++) {
  199.             a[i] = new float[n];
  200.             for (int j = 0; j < n; j++)
  201.                 a[i][j] = mat.a[i][j];
  202.         }
  203.     }
  204. };
  205.  
  206. class SymmetricMatrix : public SquareMatrix
  207. {
  208. public:
  209.     SymmetricMatrix() : SquareMatrix() {}
  210.     SymmetricMatrix(int n)
  211.     {
  212.         this->n = n;
  213.         this->m = n;
  214.         bool temp = 0;
  215.         a = new float* [n];
  216.         for (int i = 0; i < n; i++)
  217.             for (int j = 0; j < n; j++)
  218.                 if (j <= i)
  219.                 {
  220.                     if (j == 0)
  221.                         a[i] = new float[i + 1];
  222.                     a[i][j] = 0;
  223.                 }
  224.     }
  225.     SymmetricMatrix(SymmetricMatrix& mat)
  226.     {
  227.         this->n = mat.n;
  228.         this->m = mat.m;
  229.         a = new float* [n];
  230.         for (int i = 0; i < n; i++) {
  231.             a[i] = new float[i];
  232.             for (int j = 0; j < m; j++)
  233.                 a[i][j] = mat.a[i][j];
  234.         }
  235.     }
  236.     void FillRandomMatrix()
  237.     {
  238.         for (int i = 0; i < n; i++)
  239.             for (int j = 0; j < m; j++)
  240.                 if (j <= i)
  241.                     a[i][j] = rand() % 10;
  242.     }
  243.     ~SymmetricMatrix()
  244.     {
  245.         if (a != NULL)
  246.         {
  247.             for (int i = 0; i < n; i++)
  248.                 if (a[i] != NULL)
  249.                     delete[] a[i];
  250.             delete[] a;
  251.             a = NULL;
  252.         }
  253.     }
  254.     void PrintMatrix()
  255.     {
  256.         for (int i = 0; i < n; i++) {
  257.             for (int j = 0; j < m; j++)
  258.             {
  259.                 if (j <= i)
  260.                     cout << a[i][j] << "t";
  261.                 else cout << "t";
  262.             }
  263.             cout << endl;
  264.         }
  265.     }
  266.     float SumNormsMatrix() {
  267.         vector <float> Norms = { 0,0,0 };
  268.         vector <float> Sum;
  269.         //Первая норма
  270.         Sum.resize(m);
  271.         for (int i = 0; i < m; i++)
  272.             Sum[i] = 0;
  273.         for (int i = 0; i < n; i++)
  274.             for (int j = 0; j < m; j++)
  275.                 if (j <= i)
  276.                     Sum[i] += a[j][i];
  277.         //Вторая норма
  278.         for (int i = 0; i < n; i++)
  279.             for (int j = 0; j < m; j++)
  280.                 if (j <= i)
  281.                     Norms[1] += a[i][j] * a[i][j];
  282.         Norms[1] = sqrt(Norms[1]);
  283.         //Третья норма
  284.         Sum.clear();
  285.         Sum.resize(n);
  286.         for (int i = 0; i < n; i++)
  287.             Sum[i] = 0;
  288.         for (int i = 0; i < n; i++)
  289.             for (int j = 0; j < m; j++)
  290.                 if (j <= i)
  291.                     Sum[i] += a[i][j];
  292.         Norms[2] = max(Sum);
  293.         return Norms[0] + Norms[1] + Norms[2];
  294.     }
  295.     void Transposition()
  296.     {
  297.         cout << "Матрица не транспонируется..." << endl;
  298.     }
  299.     void operator= (SymmetricMatrix& mat) {
  300.         if (this == &mat)
  301.             return;
  302.         if (a != NULL)
  303.         {
  304.             for (int i = 0; i < n; i++)
  305.                 delete[] a[i];
  306.             delete[] a;
  307.         }
  308.         this->n = mat.n;
  309.         this->m = mat.m;
  310.         a = new float* [n];
  311.         for (int i = 0; i < n; i++) {
  312.             a[i] = new float[i];
  313.             for (int j = 0; j < m; j++)
  314.                 if (j <= i)
  315.                     a[i][j] = mat.a[i][j];
  316.         }
  317.     }
  318. };
  319. //Односвязный, двусвязный, очередь, стек, вектор рей, ассоциативный список мап, множество сет;
  320.  

Share with your friends:

Print