Ir ao conteúdo

Posts recomendados

Postado

Como eu posso "cortar" o vetor quando eu removo uma posição e tô trabalhando direto com o tamanho dele e não uma variável?

Por exemplo: 


void remover (int v[10], int pos){
	int i; 
	for (i=pos+1;i<10;i++){
		v[i-1] = v[i]; 
		
	}
}

Se o tamanho do meu vetor fosse uma variável, bastava eu colocar tl--; que resolveria meu problema. Mas nesse tipo de situação como posso fazer pra não ficar com a última posição dobrada?

Postado

você pode declarar uma variável global que armazena o tamanho do vetor e decrementá-la cada vez que retira um elemento dele:

int tamanho = 10;

(...)
void remover (int* v, int pos){
	int i; 
	for (i=pos+1;i<tamanho;i++){
		v[i-1] = v[i]; 
		
	}
   tamanho--;
}

 

  • Curtir 1
Postado

Não dá, o tamanho do vetor é fixo, o tamanho indica quanta memória foi alocada para o vetor, e continua alocado até não precisar mais do vetor, e aí desaloca o vetor inteiro automaticamente.

 

Nesse caso o fato de ter o valor duplicado é irrelevante, você poderia ignorar o tamanho real do vetor e considerar apenas parte dele como sendo a parte que contém informação relevante. Outra opção seria colocar um valor inválido para a sua situação na posição final, por exemplo em um caso que somente valores maior que zero são guardados no vetor poderia usar 0 ou um número negativo para indicar que a posição não é considerada parte do vetor.

 

Mas para fazer o que você está pensando seria necessário lidar com alocação dinâmica (malloc() ou calloc() no C), nesse caso você mesmo programaria a alocação de memória, e então poderia usar realloc() para realocar a memória com tamanho diferente, nesse caso um tamanho menor.

 

Postado

@isrnick

6 minutos atrás, isrnick disse:

Não dá, o tamanho do vetor é fixo, o tamanho indica quanta memória foi alocada para o vetor, e continua alocado até não precisar mais, e nesse caso desaloca o vetor inteiro.

 

Nesse caso o fato de ter o valor duplicado e irrelevante, você poderia ignorar o tamanho real do vetor e considerar apenas parte dele como sendo a parte que contém informação relevante. Outra opção seria colocar um valor inválido para a sua situação na posição final, por exemplo em um caso que somente valores maior que zero são guardados no vetor poderia usar 0 ou um número negativo para indicar que a posição não é considerada parte do vetor.

 

Mas para fazer o que você está pensando seria necessário lidar com alocação dinâmica (malloc() ou calloc() no C), nesse caso você mesmo programaria a alocação de memória, e então poderia usar realloc() para realocar a memória com tamanho diferente, nesse caso um tamanho menor.

 

 Eita. Não sei nada de ponteiros nem alocação dinâmica.

Sou bem iniciante mesmo. Acho difícil de entender como funciona realmente o insere e o remove. 

Sempre uso variáveis pra declarar o tamanho dos meus vetores, mas fui refazer as outras provas e fiquei preocupada porque ela geralmente exige um tamanho fixo pro vetor nas questões, tava procurando uma gambiarra mesmo. 

Não consegui fazer funcionar a resolução da professora 😧 

adicionado 1 minuto depois

daí tô tentando descobrir um jeito diferente de resolver isso

adicionado 2 minutos depois
2 minutos atrás, Gabbie1 disse:

Outra opção seria colocar um valor inválido para a sua situação na posição final, por exemplo em um caso que somente valores maior que zero são guardados no vetor poderia usar 0 ou um número negativo para indicar que a posição não é considerada parte do vetor.

Gostei disso! Vou testar

adicionado 4 minutos depois

@Flávio Pedroza É uma ótima ideia também. Vou testar. Obrigada!!!

Postado

@Gabbie1 a solução do @Flávio Pedroza  funciona sem ponteiros, declarou a variável tamanho como uma variável global, esse tamanho não é o tamanho real usado na declaração do vetor, mas sim uma variável que indica quantas posições do vetor estão sendo usadas (e o restante do vetor é ignorado).

 

Veja o vetor poderia ter qualquer tamanho:

int tamanho = 10;

(...)
void remover (int v[1000], int pos){
    int i; 
    for (i=pos+1;i<tamanho;i++){
        v[i-1] = v[i]; 
    }
    tamanho--;
}

 

Aqui o vetor tem 1000 posições mas nosso tamanho só tem valor muito menor pois na verdade indica quantas posições estão sendo usadas, e pode ser decrementado (ou incrementado) conforme for necessário.

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!