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
O primeiro passo no programa é ler os 15 valores e armazenar em um vetor
V[15]
.Passo 3
Depois de ler, inicializamos
Em seguida, percorremos
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
O resultado é um vetor onde os zeros “originais” foram eliminados (isto é, movidos para o fim) e os demais elementos mantêm a ordem original.
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;
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;
}