Escreva um programa que leia uma matriz n times m 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 k = i times m + j, (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:
  1. Ler valores em duas dimensões (laço duplo).
  2. 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 k = i times m + j é 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 em matriz[i][j].

Passo 4

Agora que temos a matriz preenchida, vamos criar um vetor unidimensional de tamanho . Para cada posição da matriz:
  1. Calculamos .
  2. 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;
}

Exercícios relacionados