Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite a todos.
Estou com uma atividade no qual necessito informar se a matriz é simétrica ou não com base nos valores digitados pelo usuário. O meu código está meio caminho andado. Uma matriz simétrica é a matriz na qual os valores abaixo da diagonal principal são iguais os valores acima da diagonal principal. Logo pensei, se (i < j) valores acima da diagonal e (i > j) valores abaixo da diagonal. Fiz os testes em um FOR, onde se as condições atenderem os requisitos os valores seriam armazenados em vetores distintos, um vetor para valores acima da diagonal e outro vetor para valores abaixo.
Depois eu ia comprar os dois vetores para ver se os valores são iguais mas me deparei com um erro de lógica. Vou postar o código e comentar o erro.
#define TAM 3
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
void receberMatriz(int matriz[TAM][TAM]);
void acimaDiagonal(int matriz[TAM][TAM], int acimaD[TAM]);
void abaixoDiagonal(int matriz[TAM][TAM], int abaixoD[TAM]);
void TesteValorVetor(int matriz[TAM][TAM], int acimaD[TAM], int abaixoD[TAM]);
int main(void)
{
setlocale(LC_ALL, "");
int matriz[TAM][TAM] = {0};
int abaixoD[TAM] = {0};
int acimaD[TAM] = {0};
receberMatriz(matriz);
acimaDiagonal(matriz, acimaD);
abaixoDiagonal(matriz, abaixoD);
TesteValorVetor(matriz, acimaD, abaixoD);
return 0;
}
void receberMatriz(int matriz[TAM][TAM])
{
int i, j;
for(i = 0; i < TAM; i++)
{
for(j = 0; j < TAM; j++)
{
printf("Insira valor pos. [%i][%i]: ", i, j);
scanf("%i", &matriz[i][j]);
}
}
}
void acimaDiagonal(int matriz[TAM][TAM], int acimaD[TAM])
{
int i, j;
for(i = 0; i < TAM; i++)
{
for(j = 0; j < TAM; j++)
{
if(i < j)
{
acimaD[j] = matriz[i][j];
}
}
}
}
void abaixoDiagonal(int matriz[TAM][TAM], int abaixoD[TAM])
{
int i, j;
for(i = 0; i < TAM; i++)
{
for(j = 0; j < TAM; j++)
{
if(i > j)
{
abaixoD[j] = matriz[i][j];
}
}
}
}
void TesteValorVetor(int matriz[TAM][TAM], int acimaD[TAM], int abaixoD[TAM])
{
int i, j;
system("cls");
for(i = 0; i < TAM; i++)
{
for(j = 0; j < TAM; j++)
{
printf("[%i] ", matriz[i][j]);
}
printf("\n");
}
printf("\n");
for(i = 0; i < TAM; i++)
{
printf("[%i]", acimaD[i]);
}
printf("\n");
for(i = 0; i < TAM; i++)
{
printf("[%i]", abaixoD[i]);
}
}
Nas funções:
void acimaDiagonal(int matriz[TAM][TAM], int acimaD[TAM])
{
int i, j;
for(i = 0; i < TAM; i++)
{
for(j = 0; j < TAM; j++)
{
if(i < j)
{
acimaD[j] = matriz[i][j];
}
}
}
}
void abaixoDiagonal(int matriz[TAM][TAM], int abaixoD[TAM])
{
int i, j;
for(i = 0; i < TAM; i++)
{
for(j = 0; j < TAM; j++)
{
if(i > j)
{
abaixoD[j] = matriz[i][j];
}
}
}
}
Eu faço a verificação (i < j), acima do diagonal e vise-versa e então armazeno em um vetor. Quando mando mostrar o vetor para ver quais valores tenho lá. Supondo que eu coloque 1, 2, 3, 4, 5, 6, 7, 8, 9... Os valores deveriam ser para o primeiro vetor: [2][3][6] referente aos valores acima da diagonal principal. E [4][7][8] valores abaixo da diagonal principal... Mas ao invés disso o código está me retornando o seguinte: [0][2][6] e [7][8][0]... Ou seja, não está atribuindo alguns valores.
A11, A12, A13
A21, A22, A23
A31, A32, A33
Eu identifiquei um erro, na primeira função void acimaDiagonal() quando ele faz a primeira verificação no A11, como a condição se só atribui se for i < j, na primeira casa do primeiro vetor ele ignora qualquer alteração deixando o [0]... Como posso corrigir isso? Fui claro na minha dúvida?Carregando comentários...