Ir para conteúdo
Fórum Script Brasil
  • 0

Como fazer a matriz transposta


poxoreo1984

Pergunta

Não estou conseguindo fazer o programa do calculo da multiplicação de 2 matrizes para fazer a transposta do resultado dela.

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

#define T_BUFFER 512

int main(void)
{
    int *numeros, q_linhas = 0, q_colunas = 0, linhas, colunas;
    char buffer[T_BUFFER];
    /* Pega a quantidade de linhas da matriz */
    do {
        printf("Digite a quantidade de linhas da matriz\n");
        if (fgets(buffer, T_BUFFER, stdin) != NULL) {
            if (buffer[0] != '\n') {
                if (sscanf(buffer, "%i", &q_linhas) != 1) {
                    printf("Digite um numero\n");
                }
            } else {
                printf("Digite uma entrada valida!\n");
            }
        }
    } while (q_linhas <= 0);

    /* Pega a quantidade de colunas da matriz */
    do {
        printf("Digite a quantidade de colunas da matriz\n");
        if (fgets(buffer, T_BUFFER, stdin) != NULL) {
            if (buffer[0] != '\n') {
                if (sscanf(buffer, "%i", &q_colunas) != 1) {
                    printf("Digite um numero\n");
                }
            } else {
                printf("Digite uma entrada valida!\n");
            }
        }
    } while (q_colunas <= 0);

    /* Reserva memoria para a matriz */
    numeros = malloc(sizeof(*numeros)*q_linhas*q_colunas);
    if (numeros == NULL) {
        perror("Erro ao reservar memoria!");
        exit(EXIT_FAILURE);
    }

    /* Lê a matriz do úsuario */
    for (linhas = 0; linhas < q_linhas; linhas++) {
        for (colunas = 0; colunas < q_colunas; colunas++) {
            int pega_novamente = 1;
            /* Pega um numero */
            do {
                printf("[%i][%i]\n", linhas, colunas);
                if (fgets(buffer, T_BUFFER, stdin) != NULL) {
                    if (buffer[0] != '\n') {
                        if (sscanf(buffer, "%i", &numeros[(linhas*q_colunas)+colunas]) == 1) {
                            pega_novamente = 0;     /* Sai do "do {} while()" */
                        }
                    } else {
                        printf("Digite uma entrada valida!\n");
                    }
                }
            } while (pega_novamente);
        }
    }

    /* Mostra a matriz */
    printf("Matriz digitada\n");
    for (linhas = 0; linhas < q_linhas; linhas++) {
        for (colunas = 0; colunas < q_colunas; colunas++) {
            printf("%i,", numeros[(linhas*q_colunas)+colunas]);
        }
        putchar('\n');
    }

    getchar();      /* Espera o enter */
  	/* Libera a memoria */
    free(numeros);
    return(0);
}

 

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Costuma-se imaginas matrizes sendo tabelas, uma composição de linhas POR colunas. Numa iteração sobre a matriz basta trocar a ordem dos índices na repetição que tem logicamente  a matriz transposta.

FOR(idx...nCOLUNAS)
          FOR(idy...nLINHAS)
                    MATRIZ[idy][idx]

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...