SaveText.Ru

300 строк лаба охр
  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.                 a = NULL;
  185.         }
  186.         // Конец первой лабы
  187. };
  188.  
  189. class SquareMatrix : public matrix
  190. {
  191. public:
  192.         SquareMatrix() : matrix() {}
  193.         SquareMatrix(int n) : matrix(n) {}
  194.         SquareMatrix(SquareMatrix& mat)
  195.         {
  196.                 this->n = mat.n;
  197.                 this->m = mat.n;
  198.                 a = new float*[n];
  199.                 for (int i = 0; i < n; i++) {
  200.                         a[i] = new float[n];
  201.                         for (int j = 0; j < n; j++)
  202.                                 a[i][j] = mat.a[i][j];
  203.                 }
  204.         }
  205. };
  206.  
  207. class SymmetricMatrix : public SquareMatrix
  208. {
  209. public:
  210.         SymmetricMatrix() : SquareMatrix() {}
  211.         SymmetricMatrix(int n)
  212.         {
  213.                 this->n = n;
  214.                 this->m = n;
  215.                 bool temp = 0;
  216.                 a = new float*[n];
  217.                 for (int i = 0; i < n; i++)
  218.                         for (int j = 0; j < n; j++)
  219.                                 if (j <= i)
  220.                                 {
  221.                                         if (j == 0)
  222.                                                 a[i] = new float[i + 1];
  223.                                         a[i][j] = 0;
  224.                                 }
  225.         }
  226.         SymmetricMatrix(SymmetricMatrix& mat)
  227.         {
  228.                 this->n = mat.n;
  229.                 this->m = mat.m;
  230.                 a = new float*[n];
  231.                 for (int i = 0; i < n; i++) {
  232.                         a[i] = new float[i];
  233.                         for (int j = 0; j < m; j++)
  234.                                 a[i][j] = mat.a[i][j];
  235.                 }
  236.         }
  237.         void FillRandomMatrix()
  238.         {
  239.                 for (int i = 0; i < n; i++)
  240.                         for (int j = 0; j < m; j++)
  241.                                 if (j <= i)
  242.                                         a[i][j] = rand() % 10;
  243.         }
  244.         ~SymmetricMatrix()
  245.         {
  246.                 if (a != NULL)
  247.                 {
  248.                         for (int i = 0; i < n; i++)
  249.                                 if (a[i] != NULL)
  250.                                         delete[] a[i];
  251.                         delete[] a;
  252.                         a = NULL;
  253.                 }
  254.         }
  255.         void PrintMatrix()
  256.         {
  257.                 for (int i = 0; i < n; i++) {
  258.                         for (int j = 0; j < m; j++)
  259.                         {
  260.                                 if (j <= i)
  261.                                         cout << a[i][j] << "t";
  262.                                 else cout << a[j][i] << "t";
  263.                         }
  264.                         cout << endl;
  265.                 }
  266.         }
  267.         float SumNormsMatrix() {
  268.                 vector <float> Norms = { 0,0,0 };
  269.                 vector <float> Sum;
  270.                 //Первая норма
  271.                 Sum.resize(m);
  272.                 for (int i = 0; i < m; i++)
  273.                         Sum[i] = 0;
  274.                 for (int i = 0; i < n; i++)
  275.                         for (int j = 0; j < m; j++)
  276.                                 if (j <= i)
  277.                                         Sum[i] += a[j][i];
  278.                 //Вторая норма
  279.                 for (int i = 0; i < n; i++)
  280.                         for (int j = 0; j < m; j++)
  281.                                 if (j <= i)
  282.                                         Norms[1] += a[i][j] * a[i][j];
  283.                 Norms[1] = sqrt(Norms[1]);
  284.                 //Третья норма
  285.                 Sum.clear();
  286.                 Sum.resize(n);
  287.                 for (int i = 0; i < n; i++)
  288.                         Sum[i] = 0;
  289.                 for (int i = 0; i < n; i++)
  290.                         for (int j = 0; j < m; j++)
  291.                                 if (j <= i)
  292.                                         Sum[i] += a[i][j];
  293.                 Norms[2] = max(Sum);
  294.                 return Norms[0] + Norms[1] + Norms[2];
  295.         }
  296.         void Transposition()
  297.         {
  298.                 cout << "Матрица не транспонируется..." << endl;
  299.         }
  300.         void operator= (SymmetricMatrix& mat) {
  301.                 if (this == &mat)
  302.                         return;
  303.                 if (a != NULL)
  304.                 {
  305.                         for (int i = 0; i < n; i++)
  306.                                 delete[] a[i];
  307.                         delete[] a;
  308.                 }
  309.                 this->n = mat.n;
  310.                 this->m = mat.m;
  311.                 a = new float*[n];
  312.                 for (int i = 0; i < n; i++) {
  313.                         a[i] = new float[i];
  314.                         for (int j = 0; j < m; j++)
  315.                                 if (j <= i)
  316.                                         a[i][j] = mat.a[i][j];
  317.                 }
  318.         }
  319. };
  320. //Односвязный, двусвязный, очередь, стек, вектор рей, ассоциативный список мап, множество сет;
  321.  

Share with your friends:

Print