Ir ao conteúdo

Eliminando elementos de um vetor


Murilo Marchiori

Posts recomendados

Postado

Tenho que criar o seguinte programa:

tenho um vetor, de até 10 posições, e, depois de guardados os números que o usuário queira, ele pode também apagar os valores que ele quiser. Por exemplo, se ele cria a sequencia 123456, e quiser apagar o valor 4, a sequencia deverá ficar assim: 12356, ou seja, sem nenhum buraco no meio.

Não posso usar string, nem array, que já vi pela internet, porque to no primeiro ano de ciencia da computacao e não vi isso ainda;

Obrigado.

*Posto abaixo o código que estou tentando mexer. O q tentei fazer aqui foi igualar o vetor que a pessoa quiser eliminar a 0, e mesmo assim não funcionou.

#include <iostream>

using namespace std;

int main()
{
int vet[10], i, num, $unset;
char op;

cout << "\n\nPrograma para apagar numeros no vetor";

cout << "\n\nDigite um numero: ";
cin >> vet[i];

while (vet[i] > 0 && i < 10)
{
i=i+1;
cout << "\n\nDigite um numero: ";
cin >> vet[i];
}

cout << "\n\nDigite agora um numero que deseja excluir do vetor: ";
cin >> num;
$unset = vet[$i];

//esse negócio de unset eu nem sei o q significa, mas vi na net e resolvi testar...



do{
if (vet[i] == num)
num=0;

cout << "\n\nDeseja deletar outro numero?(s ou S para sim) ";
cin >> op;

}while (op = 's');


}

Postado

Murilo, a ideia é bem simples! Para apagar um elemento do vetor você deve deslocar todos os elementos que estão depois dele para a esquerda e diminuir o tamanho do vetor.

Por exemplo:


Dado o vetor
1 2 3 4 5 6 7

Queremos retirar o elemento 5
Fazemos
<- <-
1 2 3 4 5 6 7

Ficando
1 2 3 4 6 7 7

Mas, diminuimos o tamnho do vetor, então, ficará visível somente:
1 2 3 4 6 7

Ai vai um código que apaga um elemento do vetor:


#include <stdio.h>

const int MAX = 10; // constante que armazena o tamnho maximo que o vetor pode assumir

void imprime(int t, int *v);
bool apagar(int n, int *t, int *v);

int main()
{
int t; // variavel que armazena o tamanho do vetor
int v[MAX]; // o vetor
char o; // registra a opcao do usuario
int n; // auxiliar

printf("INSERCAO\n");
printf("Entre com um inteiro diferente de 0 enquanto quiser inserir no vetor:\n");
t = 0; // vetor vazio

scanf(" %d", &n);
while (t < MAX - 1 && n != 0)
{
v[t] = n;
t++;
scanf(" %d", &n);
}

printf("VETOR: ");
imprime(t, v);
printf("Qual valor deseja retirar do vetor?\n");
scanf(" %d", &n);
if (apagar(n, &t, v))
{
printf("%d foi apagado com sucesso!\n", n);
printf("VETOR: ");
imprime(t, v);
}
else
{
printf("%d NAO ESTA NO VETOR!\n", n);
}
}

/*
* Imprime o vetor (v) de tamanho (t)
*/
void imprime(int t, int *v)
{
for(int i = 0; i < t; i++)
{
printf("%d ", v[i]);
}
printf("\n");
}

/*
* Essa funcao recebe o valor (n) que deseja-se apagar no vetor (v) de tamanho (t), verifica se o valor
* esta nele, se estiver apaga e devolve (true) se não devolve (false)
*/
bool apagar(int n, int *t, int *v)
{
for (int i = 0; i < *t; i++ )
{
if (v[i] == n) // encontrou o valor no vetor
{
/*
* faremos um laco que desloca todos os elementos 'a direita de i
* para a esquerda, ou seja, sobrescrevemos o vetor de i até t - 1
*/
*t -= 1; // como retiramos um elemento do vetor o seu tamanho diminui
while (i < *t)
{
v[i] = v[i + 1];
i++;
};
return true;
}
};

return false;
}

Qualquer dúvida pode perguntar!

[]'s

  • Membro VIP
Postado

A programa feito pelo amigo acima já resolve seu problema.O estranho é você ter dito que não podia usar array.Sem usar array fica bastante complicado se você não souber manipular apontadores.Abraços.

Postado
A programa feito pelo amigo acima já resolve seu problema.O estranho é você ter dito que não podia usar array.Sem usar array fica bastante complicado se você não souber manipular apontadores.Abraços.

Acho que ele se referia a uma classe Array, no caso do C++ o container vector da STL.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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!