Ir ao conteúdo
  • Cadastre-se

Ajuda com vetores e ordenação em C


Posts recomendados

Olá senhores, gostaria da ajuda de vocês com um pequeno problema que estou tendo em um programa da faculdade!

O programa é bem simples, devo ler um vetor de 10 elementos, percorrer o vetor e encontrar se há números repetidos, caso haja, os mesmos devem ser eliminados e em seguida o vetor ordenado e sem os números repetidos deve ser imprimido, indiferente se eu fizer tudo isso dentro do mesmo vetor ou jogar os números ordenados e sem repetições em outro. A lógica que um amigo pensou foi de pegar cada número do vetor e comparar com o vetor inteiro, um de cada vez, pegar o segundo número, comparar com todos, assim sucessivamente, só que pelo código que fizemos quando o programa acha um número igual transforma o valor dentro da posição do vetor em NULL e como está acontecendo aqui, NULL é igual a 0! Então no final do programa ele simplesmente ignora os 0, o problema é quando inserimos um 0 no vetor e no final do programa ele não lê esse 0, fica faltando, como posso resolver isso? Alguma outra lógica?

 #include<stdio.h>#include <conio.h> int main(){int Vetor[10]; //vetor que recebe os numeros digitadosint Vetor2[10]; //Vetor usado para organizar os valores do primeiro    int i, j;int Contador = 0; //Contador do While//While que recebe os números e coloca-os no vetorwhile(Contador < 10){      printf("Digite um numero: \n");      scanf("%i", & Vetor[Contador]);      Contador ++;}//For que vai procurar números repetidosfor( i = 0; i <10 ; i++)  //escolhe um número{     for ( j = 0; j <10 ; j++) //compara o número escolhido com todos os outros números do vetor     {          if (Vetor[j] == Vetor[i] && j != i)          {                Vetor[j] = NULL;          }    } }//For que arruma o vetorint Count2 = 0;for ( i = 0; i < 10; i++){     if (Vetor[i] != NULL)     {          Vetor2[Count2] = Vetor[i];          Count2++;     } }//For que vai apagar o primeiro vetorfor ( i = 0; i < 10; i++){     Vetor[i] = NULL;}//Vetor que vai copiar o segundo vetor no primeirofor ( i = 0; i < 10; i++){     Vetor[i] = Vetor2[i];}//For que vai imprimir os valoresprintf("\n\n\n");for ( i = 0; i < Count2; i++){      printf("%i\n", Vetor2[i] );}  getch();  } 
Link para o comentário
Compartilhar em outros sites

Uma ideia seria: Pegar cada elemento e inserir numa segunda lista, verificando se ele já existe ou não nessa lista.

Dessa forma, não terá problemas caso o número seja valor zero (como ocorre atualmente).

Finalizando a leitura da primeira lista, terá a segunda povoada com valores únicos, bastando apenas a ordenação, que pode ser feita facilmente utilizando bubblesort.

 

Att.

Link para o comentário
Compartilhar em outros sites

Inicialize os vetores com valor "-1", acreditando que valores negativos não sejam permitidos que o usuário possa informar.

 

E também, crie uma variável para controlar o total de valores contidos em "Vetor2", já que este não precisa, necessariamente, ter a mesma quantidade de valores contidos em "Vetor".

Dessa forma, saberá que, mesmo tendo valores em posições posteriores a última posição válida, não serão considerados para fins de comparação.

 

Att.

Link para o comentário
Compartilhar em outros sites

RESPOSTA!!! Meu professor hoje deu uma solução bem simples! Usa quase o mesmo método de colocar em um vetor novo só que sem colocar em um vetor novo (?). Seguinte, a cada número digitado ele verifica se o número já existe ou não, ou seja, a eliminação ocorre durante a inserção, usando o mesmo jeito de comparação pra jogar no vetor novo.

Código pequeno, simples, rápido e 100% funcional.

 

ps: n sei editar o post e colocar RESOLVIDO

#include<stdio.h>#include<conio.h>#define N 5main(){    int valor, achou, j, tam, vet[N], k;     tam=-1;    while (tam<N-1){        printf("Digite um numero para o vetor: ");        scanf("%d", &valor);         achou=0;         for(j=0; j<=tam; j++){            if(valor==vet[j]){                achou=1;            }        }        if (achou==0){            tam = tam + 1;            vet[tam]=valor;        }    }     printf("\n\n Vetor final sem repeticoes:  ");    for(k=0; k<N; k++){        printf("%d ", vet[k]);    } } 
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...