Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<iomanip>
- #include<cmath>
- using namespace std;
- void create(int** x, int n, char p)
- {
- int i, j;
- cout << "Enter the elements of matrix " << p << ":" << endl;
- for (i = 0; i < n; i++)
- for (j = 0; j < n; j++)
- {
- cout << p << "[" << i << "][" << j << "]=";
- cin >> x[i][j];
- }
- cout << endl;
- }
- void show(int** x, int n, char P)
- {
- int i, j;
- cout << "Matrix " << P << ":" << endl;;
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < n; j++)
- {
- cout << setw(6) << x[i][j];
- }
- cout << endl;
- }
- cout << endl;
- }
- int** mult(int** x, int** y, int n)
- {
- int** p;
- p = new int* [n];
- int i, j, k;
- for (i = 0; i < n; i++)
- p[i] = new int[n];
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < n; j++)
- {
- p[i][j] = 0;
- for (k = 0; k < n; k++)
- p[i][j] = p[i][j] + x[i][k] * y[k][j];
- }
- }
- return p;
- }
- int** add(int** x, int** y, int n)
- {
- int** p;
- p = new int* [n];
- int i, j;
- for (i = 0; i < n; i++)
- p[i] = new int[n];
- for (i = 0; i < n; i++)
- for (j = 0; j < n; j++)
- {
- p[i][j] = 0;
- p[i][j] = x[i][j] + y[i][j];
- }
- return p;
- }
- bool prime(int x)
- {
- if (x <= 1) return false;
- if (x == 2) return true;
- bool t = true;
- int i;
- for (i = 2; i < sqrt(x) && t; i++)
- if (x % i == 0) t = false;
- return t;
- }
- int summnumb(int x)
- {
- int summ;
- summ = 0;
- while (x > 0)
- {
- summ = summ + x % 10;
- x = x / 10;
- }
- return summ;
- }
- int** op1(int** x, int n)
- {
- int** p;
- p = new int* [n];
- int i, j;
- for (i = 0; i < n; i++)
- p[i] = new int[n];
- for (i = 0; i < n; i++)
- for (j = 0; j < n; j++)
- {
- if (prime(x[i][j]))
- p[i][j] = summnumb(x[i][j]);
- else p[i][j] = x[i][j];
- }
- return p;
- }
- int** op2(int** x, int n)
- {
- int** p;
- p = new int* [n];
- int i, j, r;
- for (i = 0; i < n; i++)
- p[i] = new int[n];
- for (i = 0; i < n; i++)
- for (j = 0; j < n; j++)
- p[i][j] = x[i][j];
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < n - 1; j++)
- {
- r = p[i][0];
- p[i][j] = p[i][j + 1];
- }
- p[i][n - 1] = r;
- }
- return p;
- }
- bool magic(int** x, int n)
- {
- int i, j, s0 = 0, s1 = 0, d = 0, h0 = 0, h1 = 0;
- bool t = true;
- //proverka strok
- for (j = 0; j < n; j++)
- s0 += x[0][j];
- for (i = 1; i < n && t; i++)
- {
- for (j = 0; j < n; j++)
- s1 += x[i][j];
- if (s1 != s0)
- t = false;
- s1 = 0;
- }
- //proverka stolbcov
- for (i = 0; i < n; i++)
- h0 += x[i][0];
- if (h0 != s0) t = false;
- for (j = 1; j < n && t; j++)
- {
- h1 = 0;
- for (i = 0; i < n; i++)
- h1 = h1 + x[i][j];
- if (h1 != h0)
- t = false;
- }
- //proverka diagonaley
- for (i = 0; i < n && t; i++)
- {
- j = i;
- d += x[i][j];
- }
- if (d != h0) t = false;
- d = 0;
- for (i = 0; i < n && t; i++)
- {
- j = n - 1 - i;
- d += x[i][j];
- }
- if (d != h0) t = false;
- return t;
- }
- int main()
- {
- int** a; int** b; int** c;
- int n, i;
- cin >> n;
- a = new int* [n];
- b = new int* [n]; c = new int* [n];
- for (i = 0; i < n; i++)
- {
- a[i] = new int[n];
- b[i] = new int[n]; c[i] = new int[n];
- }
- create(a, n, 'a');
- create(b, n, 'b');
- show(a, n, 'A');
- show(b, n, 'B');
- if (magic(a, n))
- {
- cout << "MAGIC!!!" << endl;
- c = mult(add(op1(a, n), op2(b, n), n), add(a, b, n), n);
- }
- else {
- cout << "you are magl" << endl;
- c = add(mult(op1(a, n), a, n), mult(op2(b, n), b, n), n);
- }
- show(c, n, 'C');
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement