Questão 3
Ainda não respondida Vale 1,00 ponto(s). □ Marcar questão
Construa um programa em LINGUAGEM C que crie receba uma matriz
com dados inteiros informados pelo usuário e mostre a matriz original e depois mostre a matriz transposta na tela.
Construa um programa em LINGUAGEM C que crie receba uma matriz
Passo 1
O enunciado pede que se faça um programa em LINGUAGEM C que:
- receba do usuário uma matriz de inteiros com dimensões
; - mostre na tela a matriz original;
- mostre na tela a matriz transposta dessa matriz original.
Informações relevantes do enunciado:
- Dimensões da matriz original:
. - Tipo de dados: inteiros.
- Deve-se exibir primeiro a matriz original e depois a transposta.
- Não há restrição sobre formato de leitura (cada elemento pode ser lido um a um).
Passo 2
O que é transpor uma matriz (explicação didática e simples):
- Seja uma matriz
de dimensões . Isso significa que tem 2 linhas e 3 colunas. - A transposta de
, denotada por , é uma matriz onde linhas viram colunas e colunas viram linhas. Logo, terá dimensões . - Em termos de índices: se
tem elemento na linha e coluna , então esse elemento aparece em na linha e coluna . Escrito:
- Em C usamos índices começando em
. Assim, para variando de a (duas linhas) e variando de a (três colunas) aplicamos a mesma regra com índices baseados em zero.
Passo 3
Decisão de implementação (por que e como):
- Forma simples e segura: usar um array bidimensional para a matriz original e outro para a transposta.
- Em C: declarar \verb|int A[2][3];| para a original e \verb|int T[3][2];| para a transposta.
- Alternativa possível (sem array extra): imprimir a transposta diretamente acessando \verb|A[i][j]| com ordem invertida. Mas usaremos o array \verb|T| para ficar claro e evitar confusão em prova.
Passo 4
Estrutura geral do programa (passo a passo do que o programa fará):
- Incluir a biblioteca padrão de entrada/saída: \verb|#include <stdio.h>|.
- Declarar \verb|int main(void)| como função principal.
- Declarar as variáveis e os arrays: \verb|int A[2][3], T[3][2]; int i, j;|.
- Ler cada elemento da matriz original com dois loops \verb|for| aninhados: \verb|for(i=0;i<2;i++) for(j=0;j<3;j++) scanf("%d",&A[i][j]);|.
- Preencher a matriz transposta com a regra \verb|T[j][i] = A[i][j];| usando novamente dois loops.
- Imprimir a matriz original com formatação em linhas e colunas.
- Imprimir a matriz transposta com formatação em linhas e colunas.
- Retornar \verb|0| ao final.
Passo 5
Explicação detalhada das partes importantes do código (linha a linha, didaticamente):
- \verb|#include <stdio.h>|: permite usar \verb|printf| e \verb|scanf|.
- \verb|int A[2][3], T[3][2];|: cria a memória para armazenar a matriz original
e a transposta . - \verb|int i, j;|: índices dos loops; aqui
e seguirão a convenção de linha/coluna. - Leitura com \verb|scanf("%d",&A[i][j]);|: lê um inteiro e armazena em \verb|A[i][j]|. É importante passar o endereço com \verb|&|.
- Para transpor: ao percorrer \verb|i| de
a e \verb|j| de a , a atribuição \verb|T[j][i] = A[i][j];| copia cada elemento para a posição trocada. - Impressão: dois loops aninhados, \verb|printf("%d\t", A[i][j]);| para imprimir elemento por elemento com separação por tabulação ou espaço; no fim de cada linha usar \verb|printf("\n");| para pular linha.
- Observação sobre índices: em notação matemática usamos
e , mas em C será e . Essa diferença é comum e não anula a regra de transposição.
Passo 6
Exemplo de como será a interação (rápido walkthrough):
- O programa pede os elementos (pode pedir um por vez dizendo a posição).
- Se o usuário digitar, por exemplo, os números na ordem:
- A saída exibirá primeiro a matriz original exatamente nessa forma e depois a transposta:
e
Passo 7
Dicas rápidas para a prova (erros comuns e como evitá-los):
- Lembre-se da indexação em C que começa em
. - Não esqueça de usar \verb|&| em \verb|scanf|.
- Tenha atenção nas dimensões ao declarar os arrays: a transposta troca as dimensões.
- Teste mentalmente com um exemplo pequeno (como o mostrado) para garantir que os loops e as atribuições estejam na ordem correta.
Resposta
#include <stdio.h>
int main(void) {
int A[2][3], T[3][2];
int i, j;
int A[2][3], T[3][2];
int i, j;
printf("Entre com os elementos da matriz 2x3 (linhas então colunas):\n");
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++) {
printf("A[%d][%d] = ", i, j);
if (scanf("%d", &A[i][j]) != 1) return 1;
}
}
/* Calcula a transposta */
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++) {
T[j][i] = A[i][j];
}
}
/* Mostra a matriz original */
printf("\nMatriz original (2x3):\n");
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++) {
printf("%d\t", A[i][j]);
}
printf("\n");
}
/* Mostra a matriz transposta */
printf("\nMatriz transposta (3x2):\n");
for (i = 0; i < 3; i++) {
for (j = 0; j < 2; j++) {
printf("%d\t", T[i][j]);
}
printf("\n");
}
return 0;
}