Escreva um programa que leia uma matriz
do usuário e a transforme em um vetor unidimensional de n.m posições
Passo 1
Beleza, o problema é: a gente precisa escrever um programa que leia uma matriz de tamanho
(ou seja,
linhas e
colunas) e transforme tudo isso num vetor unidimensional com
elementos. O conteúdo da matéria é sobre estruturas de dados básicas (matriz e vetor) e laços de repetição para percorrer essas coleções. Vamos precisar entender como:
- Ler valores em duas dimensões (laço duplo).
- Mapear cada posição
da matriz pra um índice único do vetor, usando a fórmula onde vai de 0 até e de 0 até .
Passo 2
Explicando a teoria: uma matriz
é como um conjunto de
vetores de tamanho
. Um vetor unidimensional é só uma sequência linear de posições. Se você imaginar enchendo a matriz linha por linha, o elemento da linha
e coluna
vira o elemento de índice
do vetor. É isso que vamos usar pra “achatar” a matriz.
Passo 3
Vamos ler a matriz. Primeiro a gente pede ao usuário os valores de
e
, depois aloca um array 2D (ou equivalente) e roda dois loops aninhados:
- Loop externo de
até . - Loop interno de
até .
Em cada iteração a gente lê o valor e guarda emmatriz[i][j]
.
Passo 4
Agora que temos a matriz preenchida, vamos criar um vetor unidimensional de tamanho
. Para cada posição
da matriz:
- Calculamos
. - Atribuímos
vetor[k] = matriz[i][j]
.
Novamente usamos dois loops aninhados pra percorrer todas as posições.
Passo 5
Por fim, podemos imprimir o vetor resultante numa única linha ou uma por linha, como preferir, só percorrendo de
até
.
Resposta
Segue um exemplo em C pra ilustrar tudo isso:
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, m;
printf("Digite n (linhas) e m (colunas): ");
scanf("%d %d", &n, &m);
// Aloca matriz n x m
int **matriz = malloc(n * sizeof(int*));
for (int i = 0; i < n; i++) {
matriz[i] = malloc(m * sizeof(int));
}
// Lê a matriz
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
printf("matriz[%d][%d] = ", i, j);
scanf("%d", &matriz[i][j]);
}
}
// Aloca vetor de tamanho n*m
int tam = n * m;
int *vetor = malloc(tam * sizeof(int));
// Transforma matriz em vetor
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int k = i * m + j; // fórmula k = i*m + j
vetor[k] = matriz[i][j];
}
}
// Imprime o vetor
printf("Vetor resultante:\n");
for (int k = 0; k < tam; k++) {
printf("%d ", vetor[k]);
}
printf("\n");
// Libera memória
for (int i = 0; i < n; i++) free(matriz[i]);
free(matriz);
free(vetor);
return 0;
}