Martin1_

Task 11

Oct 10th, 2025 (edited)
531
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.07 KB | Source Code | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4.  
  5. int takeInput(unsigned int* matrixRow, unsigned int* matrixCol, int*** matrix);
  6. void checkArray(unsigned int matrixRow, unsigned int matrixCol, int** matrix);
  7.  
  8. /**************************************************
  9.  *
  10.  * @brief - Entry point of the program.
  11.  *
  12.  **************************************************/
  13.  
  14. int main()
  15. {
  16.     unsigned int matrixRow = 0;
  17.     unsigned int matrixCol = 0;
  18.     int** matrix = NULL;
  19.  
  20.     if (takeInput(&matrixRow, &matrixCol, &matrix) == 0)
  21.     {
  22.         checkArray(matrixRow, matrixCol, matrix);
  23.     }
  24.  
  25.     if (matrix != NULL)
  26.     {
  27.         for (unsigned int i = 0; i < matrixRow; i++)
  28.         {
  29.             if (matrix[i] != NULL)
  30.                 free(matrix[i]);
  31.         }
  32.         free(matrix);
  33.     }
  34.  
  35.     return 0;
  36. }
  37.  
  38. /**************************************************
  39.  *
  40.  * @brief - Takes input for the size and elements
  41.  * of a matrix (not necessarily square).
  42.  *
  43.  **************************************************/
  44.  
  45. int takeInput(unsigned int* matrixRow, unsigned int* matrixCol, int*** matrix)
  46. {
  47.     printf("Enter matrix size (rows cols): ");
  48.     if (scanf_s("%u %u", matrixRow, matrixCol) != 2)
  49.     {
  50.         printf("Invalid size input!\n");
  51.         return -1;
  52.     }
  53.  
  54.     if (*matrixRow < 1 || *matrixRow > 10 || *matrixCol < 1 || *matrixCol > 10)
  55.     {
  56.         printf("Matrix dimensions must be between 1 and 10.\n");
  57.         return -1;
  58.     }
  59.  
  60.     *matrix = (int**)malloc((*matrixRow) * sizeof(int*));
  61.     if (*matrix == NULL)
  62.     {
  63.         printf("Memory allocation failed!\n");
  64.         return -1;
  65.     }
  66.  
  67.     for (unsigned int i = 0; i < *matrixRow; i++)
  68.     {
  69.         (*matrix)[i] = (int*)malloc((*matrixCol) * sizeof(int));
  70.         if ((*matrix)[i] == NULL)
  71.         {
  72.             printf("Memory allocation failed!\n");
  73.             for (unsigned int j = 0; j < i; j++)
  74.                 free((*matrix)[j]);
  75.             free(*matrix);
  76.             return -1;
  77.         }
  78.     }
  79.  
  80.     printf("Enter matrix elements:\n");
  81.     for (unsigned int i = 0; i < *matrixRow; i++)
  82.     {
  83.         for (unsigned int j = 0; j < *matrixCol; j++)
  84.         {
  85.             printf("[%u][%u]: ", i, j);
  86.             if (scanf_s("%d", &(*matrix)[i][j]) != 1)
  87.             {
  88.                 (*matrix)[i][j] = 0;
  89.                 while (getchar() != '\n');
  90.             }
  91.         }
  92.     }
  93.  
  94.     return 0;
  95. }
  96.  
  97. /**************************************************
  98.  *
  99.  * @brief - Checks for different symmetries:
  100.  * main diagonal, secondary diagonal,
  101.  * middle row, middle column.
  102.  *
  103.  **************************************************/
  104.  
  105. void checkArray(unsigned int matrixRow, unsigned int matrixCol, int** matrix)
  106. {
  107.     bool mainDiagSym = true;
  108.     bool secDiagSym = true;
  109.     bool midRowSym = true;
  110.     bool midColSym = true;
  111.  
  112.     // Main diagonal
  113.     if (matrixRow == matrixCol)
  114.     {
  115.         for (unsigned int i = 0; i < matrixRow; i++)
  116.         {
  117.             for (unsigned int j = 0; j < matrixCol; j++)
  118.             {
  119.                 if (i != j && matrix[i][j] != matrix[j][i])
  120.                 {
  121.                     mainDiagSym = false;
  122.                     break;
  123.                 }
  124.             }
  125.             if (!mainDiagSym) break;
  126.         }
  127.     }
  128.     else
  129.     {
  130.         mainDiagSym = false;
  131.     }
  132.  
  133.     // Secondary diagonal
  134.     if (matrixRow == matrixCol)
  135.     {
  136.         for (unsigned int i = 0; i < matrixRow; i++)
  137.         {
  138.             for (unsigned int j = 0; j < matrixCol; j++)
  139.             {
  140.                 if ((i + j) != (matrixRow - 1) &&
  141.                     matrix[i][j] != matrix[matrixRow - 1 - j][matrixCol - 1 - i])
  142.                 {
  143.                     secDiagSym = false;
  144.                     break;
  145.                 }
  146.             }
  147.             if (!secDiagSym) break;
  148.         }
  149.     }
  150.     else
  151.     {
  152.         secDiagSym = false;
  153.     }
  154.  
  155.     // Middle row
  156.     for (unsigned int i = 0; i < matrixRow / 2; i++)
  157.     {
  158.         for (unsigned int j = 0; j < matrixCol; j++)
  159.         {
  160.             if (matrix[i][j] != matrix[matrixRow - 1 - i][j])
  161.             {
  162.                 midRowSym = false;
  163.                 break;
  164.             }
  165.         }
  166.         if (!midRowSym) break;
  167.     }
  168.  
  169.     // Middle column
  170.     for (unsigned int j = 0; j < matrixCol / 2; j++)
  171.     {
  172.         for (unsigned int i = 0; i < matrixRow; i++)
  173.         {
  174.             if (matrix[i][j] != matrix[i][matrixCol - 1 - j])
  175.             {
  176.                 midColSym = false;
  177.                 break;
  178.             }
  179.         }
  180.         if (!midColSym) break;
  181.     }
  182.  
  183.     printf("Main diagonal symmetry: %s\n", mainDiagSym ? "Yes" : "No");
  184.     printf("Secondary diagonal symmetry: %s\n", secDiagSym ? "Yes" : "No");
  185.     printf("Middle row symmetry: %s\n", midRowSym ? "Yes" : "No");
  186.     printf("Middle column symmetry: %s\n", midColSym ? "Yes" : "No");
  187.  
  188.     printf("\nMatrix:\n");
  189.     for (unsigned int i = 0; i < matrixRow; i++)
  190.     {
  191.         for (unsigned int j = 0; j < matrixCol; j++)
  192.         {
  193.             printf("%d ", matrix[i][j]);
  194.         }
  195.         printf("\n");
  196.     }
  197. }
Add Comment
Please, Sign In to add comment