Ir ao conteúdo
  • Cadastre-se

C Remover elemento do vetor


elyastrid

Posts recomendados

Preciso que o usuário informe a posição do vetor que ele deseja remover, remover o número da respectiva posição e printar o vetor a cada remoção. Como faço isso ?

Segue código abaixo:

#include <stdio.h>
#include <stdlib.h>

int main () {

int vetor[10]= {2,4,6,8,10,12,14,16,18,20},valor, i,controle=0,posicao;
int op;


// Menu // 
printf ("\n Informe a operacao que deseja realizar: ");
printf ("\n 1- para Buscar");
printf ("\n 2- para Remover Elementos \n");
scanf ("%i", &op);

switch (op) {
	// BUSCAR //
	case 1:
        do {
        	printf ("\n Informe um valor:");
        	scanf ("%i", &valor);
        	// comparação //
        	for (i=0;i<11;i++) {
			   if (valor == vet[i]){
			    controle = 1;
			   	printf ("\n Parabens, o valor %i foi encontrado na posicao %i !", valor, i);
			   }
			   else {
			   	if (controle==0 && i==10) {
				
			   	printf ("\n O valor nao foi encontrado. Tente novamente!");
			   	printf ("\n Pressione 1 para tentar novamente ou 2 para sair");
			   	scanf ("%i", &op);
			   }
			   }
			}        	
		} while (op == 1 && controle==0);
	break;
	case 2:
		printf ("\n Informe a posicao do vetor que deseja remover:");
		scanf ("%i",&posicao);
		
		for (i=0;i<11;i++) {
			if (i==posicao) {
				
		}
	
		
	
	
		
	
	  break;
	default:
		printf ("\n Operacao invalida!");
	   	
}

	
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

17 minutos atrás, elyastrid disse:

Preciso que o usuário informe a posição do vetor que ele deseja remover, remover o número da respectiva posição e printar o vetor a cada remoção. Como faço isso ?

Segue código abaixo:


#include <stdio.h>
#include <stdlib.h>

int main () {

int vetor[10]= {2,4,6,8,10,12,14,16,18,20},valor, i,controle=0,posicao;
int op;


// Menu // 
printf ("\n Informe a operacao que deseja realizar: ");
printf ("\n 1- para Buscar");
printf ("\n 2- para Remover Elementos \n");
scanf ("%i", &op);

switch (op) {
	// BUSCAR //
	case 1:
        do {
        	printf ("\n Informe um valor:");
        	scanf ("%i", &valor);
        	// comparação //
        	for (i=0;i<11;i++) {
			   if (valor == vet[i]){
			    controle = 1;
			   	printf ("\n Parabens, o valor %i foi encontrado na posicao %i !", valor, i);
			   }
			   else {
			   	if (controle==0 && i==10) {
				
			   	printf ("\n O valor nao foi encontrado. Tente novamente!");
			   	printf ("\n Pressione 1 para tentar novamente ou 2 para sair");
			   	scanf ("%i", &op);
			   }
			   }
			}        	
		} while (op == 1 && controle==0);
	break;
	case 2:
		printf ("\n Informe a posicao do vetor que deseja remover:");
		scanf ("%i",&posicao);
		
		for (i=0;i<11;i++) {
			if (i==posicao) {
				
		}
	
		
	
	
		
	
	  break;
	default:
		printf ("\n Operacao invalida!");
	   	
}

	
}

 

 

vetor = NULL;

 

Link para o comentário
Compartilhar em outros sites

//for (i=0;i<11;i++) {
for (i=0;i<10;i++) {//ate 10, sao 10 elementos no vetor!
			   if (valor == vet[i]){

Para remover um elemento do vetor você desloca todos os outros para a esquerda. Ex.:

23 21 17 01 19 11 12 45 99 07 // Vou remover o elemento 11, o sexto na ordem da esquerda pra direita.

23 21 17 01 19 12 45 99 07 07 //desloquei os demais uma posicao para a esquerda.

O ultimo elemento você ignora, ou seja, você irá tratar o seu vetor como se tivesse agora tamanho 9.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@elyastrid Você poderia fazer assim

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>


/* Constantes */
#define IGNORADO -33
#define TAM 10

int main()
{
  int vetor[TAM];
  unsigned short contador;
  char tecla;
  /* Gera os numeros aleatorios */
  srand(time(NULL));
  for(contador=0; contador<TAM; contador++)
    vetor[contador]=rand()%100;   /* Limita os numeros até 100 */
  do
  {
    /* Mostra o vetor */
    for(contador=0; contador<TAM; contador++)
      if(vetor[contador]!=IGNORADO)
        printf("\n%d:\t%i",contador+1,vetor[contador]);
      else
        printf("\n%d:\tVazio",contador+1);
    printf("\nDeseja retirar algum valor?\n\tS ou N\n");
    scanf("%c",&tecla);
    getchar();    /* Retira o New Line do buffer de teclado */
    if(toupper(tecla)=='S')
    {
      do
      {
        printf("\nDigite a posicao que voce deseja retirar\n\t");
        scanf("%hu",&contador);
        getchar();    /* Retira o New Line do buffer de teclado */
        if(!((contador>0&&contador<=TAM)))
            printf("\nPosicao fora de faixa.\n");
      }while(!((contador>0&&contador<=TAM)));   /* Repete se a pessoa errar */
      vetor[contador-1]=IGNORADO;
      printf("\n\t\tValor retirado.");
      /* Mostra o vetor */
      for(contador=0; contador<TAM; contador++)
        if(vetor[contador]!=IGNORADO)
          printf("\n%d:\t%i",contador+1,vetor[contador]);
        else
          printf("\n%d:\tVazio",contador+1);
    }
    printf("\nDeseja Sair\n\tS ou N\n");
    scanf("%c",&tecla);
    getchar();    /* Retira o New Line do buffer de teclado */
  }while(toupper(tecla)!='S');
  return(0);
}

Mas isso não está apagando de fato o valor, é sim colocando outro no lugar que sera ignorado.

acho que a melhor aproximação para o seu problema seja com listas encadeadas, onde você vai apagar efetivamente o valor da memoria.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Tenta desse jeito:

#include <stdio.h>
#include <stdlib.h>

/**
 * Controla a posição que deve ser inserido o novo valor,
 * além de servir como delimitador na hora da iteração.
 */
int ponteiroInsercao = 0;

void adicionar(int vetor[], int valor) {
    vetor[ponteiroInsercao] = valor;
    ponteiroInsercao += 1;
}

void remover(int vetor[], int posicao) {
    if (posicao < 0 || posicao >= ponteiroInsercao) {
        printf("Posição inválida para remover: %i \n", posicao);
        return;
    }

    for (int i = posicao; i < ponteiroInsercao; ++i) {
        vetor[i] = vetor[i + 1];
    }

    ponteiroInsercao -= 1;
}

int main() {
    int vetor[10];

    adicionar(vetor, 0);
    adicionar(vetor, 1);
    adicionar(vetor, 2);
    adicionar(vetor, 3);
    adicionar(vetor, 4);
    adicionar(vetor, 5);
    adicionar(vetor, 6);
    adicionar(vetor, 7);
    adicionar(vetor, 8);
    adicionar(vetor, 9);

    remover(vetor, 0);

    for (int i = 0; i < ponteiroInsercao; ++i) {
        printf("| %i ", vetor[i]);
    }
  
    return 0;
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!