How to check if the array is symmetric?

0

I'm doing a college activity in which it asks to check if the array entered by the user is symmetric or not.

Here's my code:

#define TAMANHO 4

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

    void receberMatriz(int matriz[TAMANHO][TAMANHO]);
    void acimaDiagonalPrincipal(int matriz[TAMANHO][TAMANHO], int acimaD[6]);
    void abaixoDiagonalPrincipal(int matriz[TAMANHO][TAMANHO], int abaixoD[6]);
    void resultadoDiagonaisPrincipais(int matriz[TAMANHO][TAMANHO], int acimaD[6], int abaixoD[6]);

        int main(void)
        {
            setlocale(LC_ALL, "");
            int matriz[TAMANHO][TAMANHO];
            int acimaD[6];
            int abaixoD[6];

                receberMatriz(matriz);
                acimaDiagonalPrincipal(matriz, acimaD);
                abaixoDiagonalPrincipal(matriz, abaixoD);
                resultadoDiagonaisPrincipais(matriz, acimaD, abaixoD);

            return 0;
        }

    void receberMatriz(int matriz[TAMANHO][TAMANHO])
    {
        int i, j;

        for(i = 0; i < TAMANHO; i++)
        {
            for(j = 0; j < TAMANHO; j++)
            {
                printf("Insira valor da posição [%i][%i]: ", i, j);
                scanf("%i", &matriz[i][j]);
            }
        }
    }

    void acimaDiagonalPrincipal(int matriz[TAMANHO][TAMANHO], int acimaD[6])
    {
        int i, j;

        for(i = 0; i < TAMANHO; i++)
        {
            for(j = 0; j < TAMANHO; j++)
            {
                if(i < j)
                {
                    acimaD[j] = matriz[i][j];
                }
            }
        }
    }

    void abaixoDiagonalPrincipal(int matriz[TAMANHO][TAMANHO], int abaixoD[6])
    {
        int i, j;

        for(i = 0; i < TAMANHO; i++)
        {
            for(j = 0; j < TAMANHO; j++)
            {
                if(j > i)
                {
                    abaixoD[j] = matriz[i][j];
                }
            }
        }
    }

    void resultadoDiagonaisPrincipais(int matriz[TAMANHO][TAMANHO], int abaixoD[TAMANHO], int acimaD[TAMANHO])
    {
        int i, j, y;

        for(i = 0; i < TAMANHO; i++)
        {
            for(j = 0; j < TAMANHO; j++)
            {
                printf("[%i]", &matriz[i][j]);
            }

            printf("\n");

        }

        printf("\n");

        for(i = 0; i < 6; i++)
        {
            for(j = 0; j < 6; j++)
            {
                if(acimaD[i] != abaixoD[j])
                {
                    printf("A matriz não é simétrica.");
                }
                else
                {
                    printf("A matriz é simétrica.")
                }
            }
        }
    }

I used% w / o% to check the values above the diagonal with those below the diagonal. But it always ends up being printed%% of% times. How can I do this verification? I already have the values in vectors as you can see however at the time of defining whether it is symmetric or not I bugo. I think it's the simplest part.

    
asked by anonymous 08.01.2018 / 21:20

1 answer

1

Here is the code:

int simetrica(int matriz[TAMANHO][TAMANHO]){
    int i, j;

    for(i = 0; i < TAMANHO; i++){
        for(j = i + 1; j < TAMANHO; j++){
            if(matriz[i][j] != matriz[j][i])
                return 0;
        }
    }
    return 1;
}

The function returns 1 if the matrix is symmetric and 0 if it is not.

Note that in% w / o% w /% w /% is initialized with the value of% w /%, this is because it is only necessary to check if the upper diagonal is equal to lower. Checking the two parts would be redundant (if a = b is because b = a).

    
08.01.2018 / 22:11