A maior rede de estudos do Brasil

Criar um algoritmo que leia uma matriz A (nxn ) (N < 10) e verifique (informe) se tal matriz é ou não anti-simétrica (At = -A).

Algoritmos

IFAC


3 resposta(s) - Contém resposta de Especialista

User badge image

RD Resoluções Verified user icon

Há mais de um mês

Podemos apelar ao conceito de traço de matriz e o custo computacional não será tão alto. O traço \(tr(A)\) é definido como a soma dos elementos da diagonal principal da matriz \(A\). Toda matriz antissimétrica tem traço nulo. Assim:

LER MATRIZ A (elementos \(a_{ij}\))

DEFINIR N = DIMENSÃO DA MATRIZ A

DEFINIR TR = 0

PARA 0 < K < N + 1

    TR = TR + \(a_{KK}\)

SE TR = 0

    MOSTRAR 'A matriz é antissimétrica'

SENÃO

    MOSTRAR 'A matriz não é antissimétrica'

Podemos apelar ao conceito de traço de matriz e o custo computacional não será tão alto. O traço \(tr(A)\) é definido como a soma dos elementos da diagonal principal da matriz \(A\). Toda matriz antissimétrica tem traço nulo. Assim:

LER MATRIZ A (elementos \(a_{ij}\))

DEFINIR N = DIMENSÃO DA MATRIZ A

DEFINIR TR = 0

PARA 0 < K < N + 1

    TR = TR + \(a_{KK}\)

SE TR = 0

    MOSTRAR 'A matriz é antissimétrica'

SENÃO

    MOSTRAR 'A matriz não é antissimétrica'

User badge image

Joao Andre MArtins Dias

Há mais de um mês

Bom uma matriz é dita anti-simétrica se e somente se , ela for igual a sua transposta com sinal trocado, ou seja M=-Mt.

Sendo assim apliquei uma função para obter a transposta e comparei com a matriz original a com a posição da matriz transposta *-1 para fazer o teste da anti-simetria, acredito quye resolva, mas não testei uma matriz sabidamente anti-simétrica, mas se tiver errado é algum detalhe.

Espero que ajude.

User badge image

Joao Andre MArtins Dias

Há mais de um mês

#include <stdlib.h>
#include <stdio.h>
#include<math.h>
#include<time.h>

#define M 9
#define N 9

void preencheMatriz(int mat[M][N], int m, int n) {
    int randon;
    for (int i = 0; i < m; i++) {
        for (int k = 0; k < n; k++) {
            mat[i][k] = (rand() % ((15 - 1) + 1)) + 1;
        }
    }
}
//----------------------------------
void matriz_transposta(int matriz[M][N], int m, int n) {
    int i, j, aux;
    for (i = 0; i < M; i++) {
        for (j = i + 1; j < N; j++) {
            if (j != i) {
                aux = matriz[i][j];
                matriz[i][j] = matriz[j][i];
                matriz[j][i] = aux;
            }
        }
    }
}
//----------------------------------
char isAntSimetrica(int matA[M][N], int matB[M][N], int m, int n) {
    char flag = 0;
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            flag+= (matA[i][j] = (matB[i][j])*(-1)) ? 0 : 1;
        }
    }
    return (flag==0);
}
//----------------------------------

void exibeMatriz(int mat[M][N], int m, int n) {
    printf("\nMatriz\n");
    for (int i = 0; i < m; i++) {
        printf("\n");
        for (int j = 0; j < n; j++) {
            printf("[%4d] ", mat[i][j]);
        }
    }
    printf("\n");
}
//------
void copyMat(int matA[M][N], int matB[M][N], int m, int n) {
    int i = 0, j = 0;
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++) {
            matB[i][j] = matA[i][j];
        }
    }
}
int main(int argc, char** argv) {
int cont = 0, m = 3, n = 3;
    int matriz[M][N], matB[M][N], matC[M][N];

    preencheMatriz(matriz, m, n);
    exibeMatriz(matriz, m, n);
    copyMat(matriz,matB,m,n);
    matriz_transposta(matriz, m, n);
    exibeMatriz(matriz, m, n);
    
    printf("Esta matriz é [%s]\n", (isAntSimetrica(matB,matriz,m,n))?"anti-simétrica":"simetrica");
}

Essa pergunta já foi respondida!