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] = 0;
  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.                 float subtraction = this->SumNormsMatrix() - mat.SumNormsMatrix();
  172.                 if (subtraction == 0)
  173.                         return 1;
  174.                 else return 0;
  175.         }
  176.         bool operator> (SquareMatrix& mat)
  177.         {
  178.                 float subtraction = this->SumNormsMatrix() - mat.SumNormsMatrix();
  179.                 if (subtraction > 0)
  180.                         return 1;
  181.                 else return 0;
  182.         }
  183.         bool operator< (SquareMatrix& mat)
  184.         {
  185.                 float subtraction = this->SumNormsMatrix() - mat.SumNormsMatrix();
  186.                 if (subtraction < 0)
  187.                         return 1;
  188.                 else return 0;
  189.         }
  190.         bool operator!= (SquareMatrix& mat)
  191.         {
  192.                 float subtraction = this->SumNormsMatrix() - mat.SumNormsMatrix();
  193.                 if (subtraction != 0)
  194.                         return 1;
  195.                 else return 0;
  196.         }
  197.         bool operator>= (SquareMatrix& mat)
  198.         {
  199.                 float subtraction = this->SumNormsMatrix() - mat.SumNormsMatrix();
  200.                 if (subtraction >= 0)
  201.                         return 1;
  202.                 else return 0;
  203.         }
  204.         bool operator<= (SquareMatrix& mat)
  205.         {
  206.                 float subtraction = this->SumNormsMatrix() - mat.SumNormsMatrix();
  207.                 if (subtraction <= 0)
  208.                         return 1;
  209.                 else return 0;
  210.         }
  211. };
  212.  
  213. class SymmetricMatrix : public SquareMatrix
  214. {
  215. public:
  216.         SymmetricMatrix() : SquareMatrix() {}
  217.         SymmetricMatrix(int n)
  218.         {
  219.                 this->n = n;
  220.                 this->m = n;
  221.                 a = new float*[n];
  222.                 for (int i = 0; i < n; i++) {
  223.                         a[i] = new float[i+1];
  224.                         for (int j = 0; j < m; j++)
  225.                         {
  226.                                 if (i <= j)
  227.                                         a[i][j] = 2;
  228.                         }
  229.                 }
  230.         }
  231.         SymmetricMatrix(SymmetricMatrix& mat) : SquareMatrix(mat) {}
  232.         void FillRandomMatrix()
  233.         {
  234.                 int j = 0;
  235.                 for (int i = 0; i < n; i++)
  236.                 {
  237.                         while (j <= i)
  238.                         {
  239.                                 a[i][j] = (rand() + time(0)) % 10;
  240.                                 a[j][i] = a[i][j];
  241.                                 j++;
  242.                         }
  243.                         j = 0;
  244.                 }
  245.         }
  246.         ~SymmetricMatrix()
  247.         {
  248.                 for (int i = 0; i < n; i++)
  249.                         delete[] a[i];
  250.                 delete[] a;
  251.         }
  252.         void PrintMatrix()
  253.         {
  254.                 for (int i = 0; i < n; i++) {
  255.                         for (int j = 0; j < m; j++)
  256.                         {
  257.                                 if (i <= j)
  258.                                         cout << a[i][j] << "t";
  259.                                 else cout << "t";
  260.                         }
  261.                         cout << endl;
  262.                 }
  263.         }
  264. };
  265. //Односвязный, двусвязный, очередь, стек, вектор рей, ассоциативный список мап, множество сет;

Share with your friends:

Print