fork download
  1. #include <iostream>
  2. #include <iomanip>
  3.  
  4. using namespace std;
  5.  
  6. enum Symmetry
  7. {
  8. MDiag = 0x01,
  9. SDiag = 0x02,
  10. Horz = 0x04,
  11. Vert = 0x08,
  12. Centr = 0x10
  13. };
  14.  
  15. int SymMatrix(int**R, int N)
  16. {
  17. int sym = 0x1F;
  18. for(int r = 0; r < N; ++r)
  19. {
  20. for(int c = 0; c < N; ++c)
  21. {
  22. if ((sym & MDiag) && (R[r][c] != R[c][r])) sym &= ~MDiag;
  23. if ((sym & SDiag) && (R[r][c] != R[N-1-c][N-1-r])) sym &= ~SDiag;
  24. if ((sym & Horz ) && (R[r][c] != R[r][N-1-c])) sym &= ~Horz;
  25. if ((sym & Vert ) && (R[r][c] != R[N-1-r][c])) sym &= ~Vert;
  26. if ((sym & Centr) && (R[r][c] != R[N-1-r][N-1-c])) sym &= ~Centr;
  27. }
  28. }
  29. return sym;
  30. }
  31.  
  32. void tell(int sym)
  33. {
  34. if (sym == 0) cout << "Матрица несимметрична\n";
  35. else
  36. {
  37. cout << "Матрица симметрична:\n";
  38. if (sym & MDiag) cout << " относительно главной диагонали\n";
  39. if (sym & SDiag) cout << " относительно побочной диагонали\n";
  40. if (sym & Horz) cout << " относительно горизонтали\n";
  41. if (sym & Vert) cout << " относительно вертикали\n";
  42. if (sym & Centr) cout << " центральносимметрична\n";
  43. }
  44. }
  45.  
  46. int main(int argc, char * argv[])
  47. {
  48. int ** R = new int*[3];
  49. for(int i = 0; i < 3; ++i) R[i] = new int[3];
  50.  
  51. R[0][0] = 1; R[0][1] = 2; R[0][2] = 3;
  52. R[1][0] = 1; R[1][1] = 1; R[1][2] = 1;
  53. R[2][0] = 3; R[2][1] = 2; R[2][2] = 1;
  54.  
  55. tell(SymMatrix(R,3));
  56.  
  57. R[0][0] = 1; R[0][1] = 1; R[0][2] = 1;
  58. R[1][0] = 1; R[1][1] = 1; R[1][2] = 1;
  59. R[2][0] = 1; R[2][1] = 1; R[2][2] = 1;
  60.  
  61. tell(SymMatrix(R,3));
  62.  
  63. R[0][0] = 1; R[0][1] = 3; R[0][2] = 1;
  64. R[1][0] = 1; R[1][1] = 7; R[1][2] = 1;
  65. R[2][0] = 1; R[2][1] = 4; R[2][2] = 1;
  66.  
  67. tell(SymMatrix(R,3));
  68. }
  69.  
Success #stdin #stdout 0.01s 5512KB
stdin
Standard input is empty
stdout
Матрица симметрична:
    центральносимметрична
Матрица симметрична:
    относительно главной диагонали
    относительно побочной диагонали
    относительно горизонтали
    относительно вертикали
    центральносимметрична
Матрица симметрична:
    относительно горизонтали