#include
#include
#include
int takeInput(unsigned int* matrixSize, int*** matrix);
void checkArray(unsigned int matrixSize, int** matrix);
/**************************************************
*
* @brief - Entry point of the program.
*
**************************************************/
int main()
{
unsigned int matrixSize = 0;
int** matrix = NULL;
if (takeInput(&matrixSize, &matrix) == 0)
{
checkArray(matrixSize, matrix);
}
for (unsigned int i = 0; i < matrixSize; i++)
{
free(matrix[i]);
}
free(matrix);
return 0;
}
/**************************************************
*
* @brief - Takes input for the size and elements
* of a square matrix.
*
* @param matrixSize - Pointer to store the size of
* the matrix.
*
* @param matrix - Pointer to store the address of
* the matrix.
*
**************************************************/
int takeInput(unsigned int* matrixSize, int*** matrix)
{
printf("Enter the size of the square matrix: ");
scanf_s("%u", matrixSize);
if (*matrixSize < 2 || *matrixSize > 10)
{
printf("Invalid matrix size!\n");
return -1;
}
*matrix = (int**)malloc(*matrixSize * sizeof(int*));
for (unsigned int i = 0; i < *matrixSize; i++)
{
(*matrix)[i] = (int*)malloc(*matrixSize * sizeof(int));
}
printf("Enter the elements of the square matrix:\n");
for (unsigned int i = 0; i < *matrixSize; i++)
{
for (unsigned int j = 0; j < *matrixSize; j++)
{
printf("[%u][%u]: ", i, j);
scanf_s("%d", &(*matrix)[i][j]);
}
}
return 0;
}
/**************************************************
*
* @brief - Checks the symmetry of the matrix along
* the main diagonal, secondary diagonal, middle
* row, and middle column.
*
* @param matrixSize - Size of the matrix.
*
* @param matrix - The square matrix to be checked.
*
**************************************************/
void checkArray(unsigned int matrixSize, int** matrix)
{
bool mainDiagSym = true;
bool secDiagSym = true;
bool midRowSym = true;
bool midColSym = true;
unsigned int mid = matrixSize / 2;
// Main diagonal
for (unsigned int i = 1; i < matrixSize; i++) {
if (matrix[i][i] != matrix[0][0]) {
mainDiagSym = false;
break;
}
}
// Secondary diagonal
for (unsigned int i = 1; i < matrixSize; i++) {
if (matrix[i][matrixSize - 1 - i] != matrix[0][matrixSize - 1]) {
secDiagSym = false;
break;
}
}
// Middle row
for (unsigned int j = 1; j < matrixSize; j++) {
if (matrix[mid][j] != matrix[mid][0]) {
midRowSym = false;
break;
}
}
// Middle column
for (unsigned int i = 1; i < matrixSize; i++) {
if (matrix[i][mid] != matrix[0][mid]) {
midColSym = false;
break;
}
}
printf("Symmetric by main diagonal: %s\n", mainDiagSym ? "Yes" : "No");
printf("Symmetric by secondary diagonal: %s\n", secDiagSym ? "Yes" : "No");
printf("Symmetric by middle row: %s\n", midRowSym ? "Yes" : "No");
printf("Symmetric by middle column: %s\n\n", midColSym ? "Yes" : "No");
for (unsigned int i = 0; i < matrixSize; i++)
{
for (unsigned int j = 0; j < matrixSize; j++)
{
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}