Advertisement
JouJoy

Untitled

Jan 17th, 2020
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.35 KB | None | 0 0
  1. #include<iostream>
  2. #include<iomanip>
  3. #include<cmath>
  4. using namespace std;
  5. void create(int** x, int n, char p)
  6. {
  7.     int i, j;
  8.     cout << "Enter the elements of matrix " << p << ":" << endl;
  9.     for (i = 0; i < n; i++)
  10.         for (j = 0; j < n; j++)
  11.         {
  12.             cout << p << "[" << i << "][" << j << "]=";
  13.             cin >> x[i][j];
  14.         }
  15.     cout << endl;
  16. }
  17. void show(int** x, int n, char P)
  18. {
  19.     int i, j;
  20.     cout << "Matrix " << P << ":" << endl;;
  21.     for (i = 0; i < n; i++)
  22.     {
  23.         for (j = 0; j < n; j++)
  24.         {
  25.             cout << setw(6) << x[i][j];
  26.         }
  27.         cout << endl;
  28.     }
  29.     cout << endl;
  30. }
  31. int** mult(int** x, int** y, int n)
  32. {
  33.     int** p;
  34.     p = new int* [n];
  35.     int i, j, k;
  36.     for (i = 0; i < n; i++)
  37.         p[i] = new int[n];
  38.     for (i = 0; i < n; i++)
  39.     {
  40.         for (j = 0; j < n; j++)
  41.         {
  42.             p[i][j] = 0;
  43.             for (k = 0; k < n; k++)
  44.                 p[i][j] = p[i][j] + x[i][k] * y[k][j];
  45.         }
  46.     }
  47.     return p;
  48. }
  49. int** add(int** x, int** y, int n)
  50. {
  51.     int** p;
  52.     p = new int* [n];
  53.     int i, j;
  54.     for (i = 0; i < n; i++)
  55.         p[i] = new int[n];
  56.  
  57.     for (i = 0; i < n; i++)
  58.         for (j = 0; j < n; j++)
  59.         {
  60.             p[i][j] = 0;
  61.             p[i][j] = x[i][j] + y[i][j];
  62.         }
  63.     return p;
  64. }
  65. bool prime(int x)
  66. {
  67.     if (x <= 1) return false;
  68.     if (x == 2) return true;
  69.     bool t = true;
  70.     int i;
  71.     for (i = 2; i < sqrt(x) && t; i++)
  72.         if (x % i == 0) t = false;
  73.     return t;
  74. }
  75. int summnumb(int x)
  76. {
  77.     int summ;
  78.     summ = 0;
  79.     while (x > 0)
  80.     {
  81.         summ = summ + x % 10;
  82.         x = x / 10;
  83.     }
  84.     return summ;
  85. }
  86. int** op1(int** x, int n)
  87. {
  88.     int** p;
  89.     p = new int* [n];
  90.     int i, j;
  91.     for (i = 0; i < n; i++)
  92.         p[i] = new int[n];
  93.     for (i = 0; i < n; i++)
  94.         for (j = 0; j < n; j++)
  95.         {
  96.             if (prime(x[i][j]))
  97.                 p[i][j] = summnumb(x[i][j]);
  98.             else p[i][j] = x[i][j];
  99.         }
  100.     return p;
  101. }
  102. int** op2(int** x, int n)
  103. {
  104.     int** p;
  105.     p = new int* [n];
  106.     int i, j, r;
  107.     for (i = 0; i < n; i++)
  108.         p[i] = new int[n];
  109.     for (i = 0; i < n; i++)
  110.         for (j = 0; j < n; j++)
  111.             p[i][j] = x[i][j];
  112.     for (i = 0; i < n; i++)
  113.     {
  114.         for (j = 0; j < n - 1; j++)
  115.         {
  116.             r = p[i][0];
  117.             p[i][j] = p[i][j + 1];
  118.  
  119.         }
  120.         p[i][n - 1] = r;
  121.     }
  122.     return p;
  123. }
  124. bool magic(int** x, int n)
  125. {
  126.     int i, j, s0 = 0, s1 = 0, d = 0, h0 = 0, h1 = 0;
  127.     bool t = true;
  128.     //proverka strok
  129.     for (j = 0; j < n; j++)
  130.         s0 += x[0][j];
  131.     for (i = 1; i < n && t; i++)
  132.     {
  133.         for (j = 0; j < n; j++)
  134.             s1 += x[i][j];
  135.         if (s1 != s0)
  136.             t = false;
  137.         s1 = 0;
  138.     }
  139.     //proverka stolbcov
  140.     for (i = 0; i < n; i++)
  141.         h0 += x[i][0];
  142.     if (h0 != s0) t = false;
  143.     for (j = 1; j < n && t; j++)
  144.     {
  145.         h1 = 0;
  146.         for (i = 0; i < n; i++)
  147.             h1 = h1 + x[i][j];
  148.         if (h1 != h0)
  149.             t = false;
  150.     }
  151.     //proverka diagonaley
  152.     for (i = 0; i < n && t; i++)
  153.     {
  154.         j = i;
  155.         d += x[i][j];
  156.     }
  157.     if (d != h0) t = false;
  158.     d = 0;
  159.     for (i = 0; i < n && t; i++)
  160.     {
  161.         j = n - 1 - i;
  162.         d += x[i][j];
  163.     }
  164.     if (d != h0) t = false;
  165.     return t;
  166. }
  167. int main()
  168. {
  169.     int** a; int** b; int** c;
  170.     int n, i;
  171.     cin >> n;
  172.     a = new int* [n];
  173.     b = new int* [n]; c = new int* [n];
  174.     for (i = 0; i < n; i++)
  175.     {
  176.         a[i] = new int[n];
  177.         b[i] = new int[n]; c[i] = new int[n];
  178.     }
  179.     create(a, n, 'a');
  180.     create(b, n, 'b');
  181.     show(a, n, 'A');
  182.     show(b, n, 'B');
  183.     if (magic(a, n))
  184.     {
  185.         cout << "MAGIC!!!" << endl;
  186.         c = mult(add(op1(a, n), op2(b, n), n), add(a, b, n), n);
  187.     }
  188.     else {
  189.         cout << "you are magl" << endl;
  190.         c = add(mult(op1(a, n), a, n), mult(op2(b, n), b, n), n);
  191.     }
  192.     show(c, n, 'C');
  193.     system("pause");
  194.     return 0;
  195. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement