Advertisement
Sitisom

Matrix

Nov 5th, 2018
328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.95 KB | None | 0 0
  1. #include<iostream>
  2. #include<fstream>
  3. #include<cmath>
  4. #include<iomanip>
  5. #include<cstring>
  6. using namespace std;
  7. const int lengthColumn = 7;
  8. const int Indent = 4;
  9.  
  10. void show(int **x, int n)
  11. {
  12.     for (int i = 0; i < n; i++) {
  13.         for (int j = 0; j < n; j++)
  14.             cout << x[i][j] << ' ';
  15.         cout << endl;
  16.     }
  17. }
  18.  
  19. int** create(int n)
  20. {
  21.     int **y = new int *[n];
  22.     for (int i = 0; i < n; i++)
  23.     {
  24.         y[i] = new int[n];
  25.     }
  26.     return y;
  27. }
  28.  
  29. int** create_mass(ifstream &f, int n,int m)
  30. {
  31.     int **y = new int *[n];
  32.     int i, j;
  33.     for (i = 0; i < n; i++)
  34.     {
  35.         y[i] = new int[m];
  36.     }
  37.     for (i = 0; i < n; i++)
  38.         for (j = 0; j < m; j++)
  39.             f >> y[i][j];
  40.     return y;
  41. }
  42.  
  43. void star(int n, int m)
  44. {
  45.     cout.width(n);
  46.     for (int i = 0; i < m; i++)
  47.         cout << '*';
  48.     cout << endl;
  49. }
  50.  
  51. void table(int** x, int n,int m)
  52. {
  53.     int lengthTable = 9;
  54.     for (int i = 0; i < m - 1; i++) {
  55.         lengthTable += 8;
  56.     }
  57.     cout << endl;
  58.     star(Indent, lengthTable);
  59.    
  60.     for (int i = 0; i < n; i++) {
  61.         for (int j = 0; j < m; j++) {
  62.             cout.width(Indent);
  63.             cout << '*';
  64.             cout.width(4);
  65.             cout << x[i][j];
  66.         }
  67.         cout.width(Indent);
  68.         cout << '*';
  69.         cout << endl;
  70.         star(Indent, lengthTable);
  71.     }
  72.    
  73. }
  74.  
  75. int** summ(int **a, int **b, int n) {
  76.     int **y = create(n);
  77.     for (int i = 0; i < n; i++)
  78.         for (int j = 0; j < n; j++)
  79.             y[i][j] = a[i][j] + b[i][j];
  80.     return y;
  81. }
  82.  
  83. int** sub(int **a, int **b, int n) {
  84.     int **y = create(n);
  85.     for (int i = 0; i < n; i++)
  86.         for (int j = 0; j < n; j++)
  87.             y[i][j] = a[i][j] - b[i][j];
  88.     return y;
  89. }
  90.  
  91. int** mult_on_num(int **a, int n) {
  92.     int num;
  93.     cout << "Enter number: "; cin >> num;
  94.     for (int i = 0; i < n; i++)
  95.         for (int j = 0; j < n; j++)
  96.             a[i][j] *= num;
  97.     return a;
  98. }
  99.  
  100. int** transp(int** a, int n) {
  101.     for (int i = 0; i < n; i++)
  102.         for (int j = i; j < n; j++)
  103.             swap(a[i][j], a[j][i]);
  104.     return a;
  105. }
  106.  
  107. int** mult(int **a, int **b, int n, int m, int q) {
  108.     int **y = create(n+1);
  109.  
  110.     for (int i = 0; i < m; i++)
  111.         for (int j = 0; j < q; j++)
  112.         {
  113.             y[i][j] = 0;
  114.             for (int k = 0; k < n; k++)
  115.                 y[i][j] += a[i][k] * b[k][j];
  116.         }
  117.     return y;
  118. }
  119.  
  120. void GetMatr(int **mas, int **p, int i, int j, int m) {
  121.     int ki, kj, di, dj;
  122.     di = 0;
  123.     for (ki = 0; ki<m - 1; ki++) {
  124.         if (ki == i) di = 1;
  125.         dj = 0;
  126.         for (kj = 0; kj<m - 1; kj++) {
  127.             if (kj == j) dj = 1;
  128.             p[ki][kj] = mas[ki + di][kj + dj];
  129.         }
  130.     }
  131. }
  132.  
  133. int Determinant(int **mas, int m) {
  134.     int j, d, k, n;
  135.     int **p = create(m);
  136.     j = 0; d = 0;
  137.     k = 1;
  138.     n = m - 1;
  139.     if (m<1) cout << "ERROR";
  140.     if (m == 1) {
  141.         d = mas[0][0];
  142.         return(d);
  143.     }
  144.     if (m == 2) {
  145.         d = mas[0][0] * mas[1][1]-(mas[1][0] * mas[0][1]);
  146.         return(d);
  147.     }
  148.     if (m>2) {
  149.         for (int i = 0; i<m; i++) {
  150.             GetMatr(mas, p, i, 0, m);
  151.             d = d + k * mas[i][0] * Determinant(p, n);
  152.             k = -k;
  153.         }
  154.     }
  155.     return(d);
  156. }
  157.  
  158. void glav_diag(int **a, int n) {
  159.     for (int i = 0; i < n; i++)
  160.         cout << a[i][i] << ' ';
  161.     cout << endl;
  162. }
  163.  
  164. void poboch_diag(int **a, int n) {
  165.     for (int i = 0; i < n; i++)
  166.         cout << a[i][n-1-i]<< ' ';
  167.     cout << endl;
  168. }
  169.  
  170. int main()
  171. {
  172.     ifstream in1("in1.txt");
  173.     ifstream in2("in2.txt");
  174.     ifstream in3("in3.txt");
  175.     if (!in1 || !in2)
  176.     {
  177.         cout << "Can`t open file!" << endl;
  178.         exit(-1);
  179.     }
  180.  
  181.     int n,m,q,k;
  182.     cout << "Enter size of array a: "; cin >> n >> m;
  183.     cout << "Enter size of array b: "; cin >> m >> q;
  184.     cout << "Enter size of square array g: "; cin >> k;
  185.     int **a, **b,**c,**g;
  186.     a = create_mass(in1, n, m);
  187.     b = create_mass(in2, m, q);
  188.     g = create_mass(in3, k, k);
  189.     c = summ(g, g, k);
  190.    
  191.     cout << "A: " << endl;
  192.     table(a, n, m);
  193.     cout << "B: " << endl;
  194.     table(b, m, q);
  195.     cout << "G: " << endl;
  196.     table(g, k, k);
  197.     cout << "Sum:" << endl;
  198.     table(c, k, k);
  199.     cout << "Mult: " << endl;
  200.     table(mult(a, b, m, n, q),m+1,m+1);
  201.     cout << "Diag: "; glav_diag(g, k);
  202.     cout << "Pob diag: "; poboch_diag(g, k);
  203.     cout << "Determinant: " << Determinant(g, k)<<endl;
  204.     cout << "Transp: " << endl;
  205.     table(transp(g, k), k, k);
  206.  
  207.     in1.close();
  208.     in2.close();
  209.     system("pause");
  210. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement