Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdbool.h>
- int takeInput(unsigned int* matrixRow, unsigned int* matrixCol, int*** matrix);
- void checkArray(unsigned int matrixRow, unsigned int matrixCol, int** matrix);
- /**************************************************
- *
- * @brief - Entry point of the program.
- *
- **************************************************/
- int main()
- {
- unsigned int matrixRow = 0;
- unsigned int matrixCol = 0;
- int** matrix = NULL;
- if (takeInput(&matrixRow, &matrixCol, &matrix) == 0)
- {
- checkArray(matrixRow, matrixCol, matrix);
- }
- if (matrix != NULL)
- {
- for (unsigned int i = 0; i < matrixRow; i++)
- {
- if (matrix[i] != NULL)
- free(matrix[i]);
- }
- free(matrix);
- }
- return 0;
- }
- /**************************************************
- *
- * @brief - Takes input for the size and elements
- * of a matrix (not necessarily square).
- *
- **************************************************/
- int takeInput(unsigned int* matrixRow, unsigned int* matrixCol, int*** matrix)
- {
- printf("Enter matrix size (rows cols): ");
- if (scanf_s("%u %u", matrixRow, matrixCol) != 2)
- {
- printf("Invalid size input!\n");
- return -1;
- }
- if (*matrixRow < 1 || *matrixRow > 10 || *matrixCol < 1 || *matrixCol > 10)
- {
- printf("Matrix dimensions must be between 1 and 10.\n");
- return -1;
- }
- *matrix = (int**)malloc((*matrixRow) * sizeof(int*));
- if (*matrix == NULL)
- {
- printf("Memory allocation failed!\n");
- return -1;
- }
- for (unsigned int i = 0; i < *matrixRow; i++)
- {
- (*matrix)[i] = (int*)malloc((*matrixCol) * sizeof(int));
- if ((*matrix)[i] == NULL)
- {
- printf("Memory allocation failed!\n");
- for (unsigned int j = 0; j < i; j++)
- free((*matrix)[j]);
- free(*matrix);
- return -1;
- }
- }
- printf("Enter matrix elements:\n");
- for (unsigned int i = 0; i < *matrixRow; i++)
- {
- for (unsigned int j = 0; j < *matrixCol; j++)
- {
- printf("[%u][%u]: ", i, j);
- if (scanf_s("%d", &(*matrix)[i][j]) != 1)
- {
- (*matrix)[i][j] = 0;
- while (getchar() != '\n');
- }
- }
- }
- return 0;
- }
- /**************************************************
- *
- * @brief - Checks for different symmetries:
- * main diagonal, secondary diagonal,
- * middle row, middle column.
- *
- **************************************************/
- void checkArray(unsigned int matrixRow, unsigned int matrixCol, int** matrix)
- {
- bool mainDiagSym = true;
- bool secDiagSym = true;
- bool midRowSym = true;
- bool midColSym = true;
- // Main diagonal
- if (matrixRow == matrixCol)
- {
- for (unsigned int i = 0; i < matrixRow; i++)
- {
- for (unsigned int j = 0; j < matrixCol; j++)
- {
- if (i != j && matrix[i][j] != matrix[j][i])
- {
- mainDiagSym = false;
- break;
- }
- }
- if (!mainDiagSym) break;
- }
- }
- else
- {
- mainDiagSym = false;
- }
- // Secondary diagonal
- if (matrixRow == matrixCol)
- {
- for (unsigned int i = 0; i < matrixRow; i++)
- {
- for (unsigned int j = 0; j < matrixCol; j++)
- {
- if ((i + j) != (matrixRow - 1) &&
- matrix[i][j] != matrix[matrixRow - 1 - j][matrixCol - 1 - i])
- {
- secDiagSym = false;
- break;
- }
- }
- if (!secDiagSym) break;
- }
- }
- else
- {
- secDiagSym = false;
- }
- // Middle row
- for (unsigned int i = 0; i < matrixRow / 2; i++)
- {
- for (unsigned int j = 0; j < matrixCol; j++)
- {
- if (matrix[i][j] != matrix[matrixRow - 1 - i][j])
- {
- midRowSym = false;
- break;
- }
- }
- if (!midRowSym) break;
- }
- // Middle column
- for (unsigned int j = 0; j < matrixCol / 2; j++)
- {
- for (unsigned int i = 0; i < matrixRow; i++)
- {
- if (matrix[i][j] != matrix[i][matrixCol - 1 - j])
- {
- midColSym = false;
- break;
- }
- }
- if (!midColSym) break;
- }
- printf("Main diagonal symmetry: %s\n", mainDiagSym ? "Yes" : "No");
- printf("Secondary diagonal symmetry: %s\n", secDiagSym ? "Yes" : "No");
- printf("Middle row symmetry: %s\n", midRowSym ? "Yes" : "No");
- printf("Middle column symmetry: %s\n", midColSym ? "Yes" : "No");
- printf("\nMatrix:\n");
- for (unsigned int i = 0; i < matrixRow; i++)
- {
- for (unsigned int j = 0; j < matrixCol; j++)
- {
- printf("%d ", matrix[i][j]);
- }
- printf("\n");
- }
- }
Add Comment
Please, Sign In to add comment