Faça um programa que leia um vetor de 15 posições e o compacte, ou seja, elimine as posições com valor zero. Para isso, todos os elementos à frente do valor zero, devem ser movidos uma posição para trás no vetor.

Passo 1

O enunciado pede um programa em C que leia um vetor de 15 elementos, elimine as posições cujo valor seja zero e compacte o vetor movendo todos os elementos não-zero para trás, preservando a ordem.

Passo 2

Para resolver isso a gente vai usar um array estático de tamanho 15 e dois índices: um para percorrer o vetor original (i) e outro para indicar onde vou copiar o próximo valor não-zero (j).
O primeiro passo no programa é ler os 15 valores e armazenar em um vetor V[15].

Passo 3

Depois de ler, inicializamos j = 0 (essa variável vai marcar a próxima posição livre no vetor compactado).
Em seguida, percorremos i de 0 até 14 e, sempre que V[i] != 0, fazemos V[j] = V[i] e incrementamos j. Assim todos os não-zeros vão ficando agrupados no início de V.

Passo 4

Terminada essa cópia, ainda restam posições de j até 14 que não foram sobrescritas. Podemos preencher essas posições com zeros usando outro laço de k = j até k < 15 fazendo V[k] = 0.

Passo 5

Por fim, basta imprimir o vetor V já compactado para o usuário, mostrando todos os não-zeros no começo e zeros no final.
O resultado é um vetor onde os zeros “originais” foram eliminados (isto é, movidos para o fim) e os demais elementos mantêm a ordem original.

Resposta

#include <stdio.h>
int main() {
int V[15];
int i, j, k;
// Leitura do vetor
for (i = 0; i < 15; i++) {
    printf("Digite o elemento %d: ", i);
    scanf("%d", &V[i]);
}

// Compactação: mover todos os não-zeros para o começo
j = 0;
for (i = 0; i < 15; i++) {
    if (V[i] != 0) {
        V[j] = V[i];
        j++;
    }
}

// Preencher o restante com zeros
for (k = j; k < 15; k++) {
    V[k] = 0;
}

// Impressão do vetor compactado
printf("\nVetor compactado:\n");
for (i = 0; i < 15; i++) {
    printf("%d ", V[i]);
}
printf("\n");

return 0;
}

Exercícios relacionados