Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Leandro Santana_650847

Ajuda com vetores e ordenação em C

Recommended Posts

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();  } 

Compartilhar este post


Link para o post
Compartilhar em outros sites
ScreenBlack    201

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites
ScreenBlack    201

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Leandro Santana_650847    0
  • Autor do tópico
  • 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]);    } } 
    Editado por Leandro Santana_650847

    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






    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

    ×