SaveText.Ru

Лаба 2
  1. #pragma once
  2. #include <iostream>
  3. #include <vector>
  4. #include <ctime>
  5. using namespace std;
  6.  
  7. class matrix {
  8. protected:
  9.     int n;
  10.     int m;
  11.     float** a;
  12. public:
  13.     matrix() {
  14.         n = 0;
  15.         m = 0;
  16.         a = NULL;
  17.     }
  18.     matrix(int n)
  19.     {
  20.         this->n = n;
  21.         this->m = n;
  22.         a = new float* [n];
  23.         for (int i = 0; i < n; i++) {
  24.             a[i] = new float[m];
  25.             for (int j = 0; j < m; j++)
  26.                 a[i][j] = 2;
  27.         }
  28.     }
  29.     matrix(int n, int m)
  30.     {
  31.         this->n = n;
  32.         this->m = m;
  33.         a = new float* [n];
  34.         for (int i = 0; i < n; i++) {
  35.             a[i] = new float[m];
  36.             for (int j = 0; j < m; j++)
  37.                 a[i][j] = 0;
  38.         }
  39.     }
  40.     matrix(matrix& mat) {
  41.         this->n = mat.n;
  42.         this->m = mat.m;
  43.         a = new float* [n];
  44.         for (int i = 0; i < n; i++) {
  45.             a[i] = new float[m];
  46.             for (int j = 0; j < m; j++)
  47.                 a[i][j] = mat.a[i][j];
  48.         }
  49.     }
  50.     void FillRandomMatrix() {
  51.         for (int i = 0; i < n; i++) {
  52.             for (int j = 0; j < m; j++)
  53.                 a[i][j] = (rand() + time(0)) % 10;
  54.         }
  55.     }
  56.     void PrintMatrix() {
  57.         for (int i = 0; i < n; i++) {
  58.             for (int j = 0; j < m; j++)
  59.                 cout << a[i][j] << " ";
  60.             cout << endl;
  61.         }
  62.         cout << endl;
  63.     }
  64.     void setElement(int j, int i, float a) {
  65.         this->a[j][i] = a;
  66.     }
  67.     matrix Transposition() {
  68.         matrix b(m, n);
  69.         for (int i = 0; i < n; i++) {
  70.             for (int j = 0; j < m; j++) {
  71.                 b.setElement(j, i, a[i][j]);
  72.             }
  73.         }
  74.         return b;
  75.     }
  76.     float max(const vector <float> value)
  77.     {
  78.         float max;
  79.         max = value[0];
  80.         for (int i = 0; i < value.size()-1; i++)
  81.         {
  82.             if (value[i + 1] > value[i])
  83.                 max = value[i + 1];
  84.         }
  85.         return max;
  86.     }
  87.     float min(const vector <float> value)
  88.     {
  89.         float min;
  90.         min = value[0];
  91.         for (int i = 0; i < value.size() - 1; i++)
  92.         {
  93.             if (value[i + 1] < value[i])
  94.                 min = value[i + 1];
  95.         }
  96.         return min;
  97.     }
  98.     float SumNormsMatrix() {
  99.         vector <float> Norms = {0,0,0};
  100.         vector <float> Sum;
  101.         //Первая норма
  102.         Sum.resize(m);
  103.         for (int i = 0; i < m; i++)
  104.             Sum[i] = 0;
  105.         for (int i = 0; i < n; i++)
  106.             for (int j = 0; j < m; j++)
  107.                 Sum[i] += a[j][i];
  108.         //Вторая норма
  109.         for (int i = 0; i < n; i++)
  110.             for (int j = 0; j < m; j++)
  111.                 Norms[1] += a[i][j]*a[i][j];
  112.         Norms[1] = sqrt(Norms[1]);
  113.         //Третья норма
  114.         Sum.clear();
  115.         Sum.resize(n);
  116.         for (int i = 0; i < n; i++)
  117.             Sum[i] = 0;
  118.         for (int i = 0; i < n; i++)
  119.             for (int j = 0; j < m; j++)
  120.                 Sum[i] += a[i][j];
  121.         Norms[2] = max(Sum);
  122.         return Norms[0] + Norms[1] + Norms[2];
  123.     }
  124.     void operator= (matrix& mat) {
  125.         if (this == &mat)
  126.             return;
  127.         if (a != NULL)
  128.         {
  129.             for (int i = 0; i < n; i++)
  130.                 delete[] a[i];
  131.             delete[] a;
  132.         }
  133.         this->n = mat.n;
  134.         this->m = mat.m;
  135.         a = new float* [n];
  136.         for (int i = 0; i < n; i++) {
  137.             a[i] = new float[m];
  138.             for (int j = 0; j < m; j++)
  139.                 a[i][j] = mat.a[i][j];
  140.         }
  141.     }
  142.     ~matrix() {
  143.         if (a != NULL)
  144.         {
  145.             for (int i = 0; i < n; i++)
  146.                 delete[] a[i];
  147.             delete[] a;
  148.         }
  149.     }
  150.     // Конец первой лабы
  151. };
  152.  
  153. class SquareMatrix : public matrix
  154. {
  155. public:
  156.     SquareMatrix() : matrix() {}
  157.     SquareMatrix(int n) : matrix(n) {}
  158.     SquareMatrix(SquareMatrix& mat)
  159.     {
  160.         this->n = mat.n;
  161.         this->m = mat.n;
  162.         a = new float* [n];
  163.         for (int i = 0; i < n; i++) {
  164.             a[i] = new float[n];
  165.             for (int j = 0; j < n; j++)
  166.                 a[i][j] = mat.a[i][j];
  167.         }
  168.     }
  169.     bool operator== (SquareMatrix& mat)
  170.     {
  171.         cout << this->SumNormsMatrix() << endl;
  172.         cout << mat.SumNormsMatrix() << endl;
  173.         if (((this->SumNormsMatrix() - mat.SumNormsMatrix()) < 1e-7)&&((this->SumNormsMatrix() - mat.SumNormsMatrix())>0))
  174.             return 1;
  175.         else return 0;
  176.     }
  177. };
  178.  
  179. class SymmetricMatrix : public SquareMatrix
  180. {
  181. public:
  182.     SymmetricMatrix() : SquareMatrix() {}
  183.     SymmetricMatrix(int n) : SquareMatrix(n) {}
  184.     SymmetricMatrix(SymmetricMatrix& mat) : SquareMatrix(mat) {}
  185.     void FillRandomMatrix()
  186.     {
  187.         int j = 0;
  188.         for (int i = 0; i < n; i++)
  189.         {
  190.             while (j <= i)
  191.             {
  192.                 a[i][j] = (rand()+time(0)) % 10;
  193.                 a[j][i] = a[i][j];
  194.                 j++;
  195.             }
  196.             j = 0;
  197.         }
  198.     }
  199. };

Share with your friends:

Print