Ir ao conteúdo
  • Cadastre-se

C Como Eliminar os valores Repetidos nos Vetores


ArieviloAgarf

Posts recomendados

Boa tarde pessoal. Você poderiam me ajudar com o código abaixo? Preciso eliminar os valores repetidos do vetor resultante. Sou novo na área e o meu código está dando um erro.

O vetor C "Resultante" está mostrando mais valores do que foi declarado e também não consigo imprimir corretamente, aparece lixo de memória.

Muito obrigado pela ajuda!

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char **argv)
{
    //Declaração das variáveis e vetores
    int vetA[10], vetB[15], vetC[25];
    int tamVetor[25];
    int i, j, troca;
    
    
    //Impressão de números aleatórios de 0 a 100    
    printf("Preenchendo o vetor vetA aleatoriamente\n\n");
    //Função que mudará os valores em cada nova execução
    srand(time(NULL));
    for (i=0; i<10; i++){
        vetA[i] = rand() % 100;
        printf("O valor gerado na posicao [%d] eh = %d\n", i, vetA[i]);    
    }
    
    printf("\n");
    //Preenchendo o segundo vetor
    printf("Preenchendo o vetor vetB aleatoriamente\n\n");
    for (i=0; i<15; i++){
        vetB[i] =rand() % 100;
        printf("O valor gerado na posicao [%2d] eh = %d\n", i, vetB[i]);
    }
    printf("\n");
    // Os elementos do vetor A são atribuidos ao vetor C , na continuação o vetor C recebe os elementos do vetor B
    for (i=0; i < 25; i++){
        vetC[i] = vetA[i];
    }
    for (i=10; i<25; i++){
        vetC[i]= vetB[i-10];
    }

    //Ordenando os objetos dos vetores
    for (i = 1; i < tamVetor[i]; i++) {
        troca = vetC[i];
        j = i - 1;
            
        while ((j >= 0) && (vetC[j] > troca)) {
            vetC[j + 1] = vetC[j];
            j--;
        }    
        vetC[j + 1] = troca;
    }
    
    //Imprimindo o Vetor Resultante
    printf("O vetor Ordenado possui os seguintes elementos\n");
        for(i=0; i<25; i++){
            printf("%2d\n ", vetC[i]);
        }
        
    //Verificando se há elementos repetidos, se houver suprimir da impressão os elementos com valor duplicado
     for( i = 0; i < 25; i++){
    
        for( j = 0; j < troca; j++){
        
            if(vetC[i] == tamVetor[j]){
             
        }

        if( j == troca){
        
            tamVetor[troca] = vetC[i];
            troca++;
        }
    }
}
    //Impressão dos Elementos do vetor C sem as repetições de valores
    printf("\n");
    printf("Impressao do Vetor C sem as redundancias.\n\n");
    for( i = 0; i < troca; i++ )
        printf("O Vetor C na posicao %2d = %2d\n",i+1, tamVetor[i]);
    printf("\n");

    return 0;
}

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@ArieviloAgarf   para inserir o vetor A no vetor C , seu loop precisa ir de zero ate enquanto for menor que 10  , então seu código poderia ser assim    :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
    //Declaração das variáveis e vetores
    int vetA[10], vetB[15], vetC[25];
    int tamVetor[25];
    int i, j, troca;


    //Impressão de números aleatórios de 0 a 100
    printf("Preenchendo o vetor vetA aleatoriamente\n\n");
    //Função que mudará os valores em cada nova execução
    srand(time(NULL));
    for(i=0; i<10; i++){
        vetA[i] = rand() % 101;
        printf("O valor gerado na posicao [%d] eh = %d\n", i, vetA[i]);
    }
    printf("\n");
    //Preenchendo o segundo vetor
    printf("Preenchendo o vetor vetB aleatoriamente\n\n");
    for(i=0; i<15; i++){
        vetB[i] = rand() % 101;
        printf("O valor gerado na posicao [%2d] eh = %d\n", i, vetB[i]);
    }
    printf("\n");
    // Os elementos do vetor A são atribuidos ao vetor C , na continuação o vetor C recebe os elementos do vetor B
    for(i=0; i < 10; i++){
        vetC[i] = vetA[i];
    }
    for (i=10; i<25; i++){
        vetC[i]= vetB[i-10];
    }
    //Ordenando os objetos dos vetores com o método bubblesort
    for(i=0; i<24; i++){
        for(j=i+1;j<25;j++){
            if( vetC[i] > vetC[j]){
                troca   = vetC[i] ;
                vetC[i] = vetC[j] ;
                vetC[j] =   troca ;
            }
        }
    }
    //Imprimindo o Vetor Resultante
    printf("O vetor Ordenado possui os seguintes elementos\n");
        for(i=0; i<25; i++){
            printf("%2d\n",vetC[i]);
        }
    //Verificando se há elementos repetidos, se houver suprimir da impressão os elementos com valor duplicado
     for(i=0; i<24; i++){
        for(j=i+1; j<25; j++){
            if(vetC[i]==vetC[j]/*vetC[i] == tamVetor[j]*/){
                vetC[j]= -1;/* marcado como repetido */
            }
        /*if( j == troca){
            tamVetor[troca] = vetC[i];
            troca++;*/
        }
    }
    //Impressão dos Elementos do vetor C sem as repetições de valores
    printf("\n");
    printf("Impressao do Vetor C sem as redundancias.\n\n");
    for(i=0; i<25; i++)
        if(vetC[i]!= -1)
            printf("O Vetor C na posicao %2d = %2d\n",i+1,vetC[i]);
    printf("\n\n");
    return 0;
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

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