Ir ao conteúdo
  • Cadastre-se
elyastrid

C Remover elemento do vetor

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
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;

 

  • Curtir 1

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!