0
I’m doing a college activity where you ask to check whether the matrix typed by the user is symmetric or not.
Here is 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 a for
to check the values above diagonal with those below diagonal. But always ends up being printed printf [TAMANHO]
times. How can I do this check? I already have the values in vectors as you can see however at the time of defining whether or not it is symmetric. I believe it’s the simplest part.
Got it! But in this case, I have two vectors that contain the values of the houses above the diagonal and below the diagonal, can I replace the matrices in if for them right? , I will implement here!
– user70896
Could still optimize one more practice by doing
j = i + 1
, since it makes no sense to compare a number to itself– Jefferson Quesado
Do not do this I think it is better to even use the matrix instead of the 2 vectors, because the values that are in the vectors are not right. And second argument of the function
abaixoDiagonalPrincipal
works only for 3x3 matrices. @Lelreferreira– user72726
Very good! @Jeffersonquesado
– user72726