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:  
Willgo

C União de 2 vetores em C

Recommended Posts

Olá, estou no momento fazendo uma atividade onde tenho que criar 2 listas, com essas 2 listas tenho que fazer uma 3 lista que coloco todos os elementos da lista 1 e lista 2, depois tenho que fazer uma 4 lista que é a interseção dos elementos da lista 1 e lista 2, e por fim criar uma lista 5 que é a união da lista 1 e lista 2, ou seja ter os elementos da lista 1 e 2 mas se tiver números iguais mostrar somente uma vez, e nessa parte não estou conseguindo pensar numa forma de fazer isso. as 4 primeiras listas eu consegui fazer, só me enrolei um pouco nessa :/

 

Meu código tá assim: 

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
    setlocale(LC_ALL, "Portuguese");
    int lista_1[10];
    int lista_2[10];
    int quantidade_1, quantidade_2, valor, lista, continuar,i,j,k;
    quantidade_1 = 0;
    quantidade_2 = 0;
    printf("Deseja inserir um numero na lista? 1 para sim 2 para nao: \n");
    scanf("%d", &continuar);
    while (continuar == 1)
    {
        printf("Informe um valor: \n");
        scanf("%d", &valor);
        printf("Escolha uma lista: 1 ou 2: \n");
        scanf("%d", &lista);
        if (lista == 1)
        {
            inserirSemRepetir(lista_1, valor, &quantidade_1, 10);
        }
        else
        {
            inserirSemRepetir(lista_2, valor, &quantidade_2, 10);
        }
        printf("Deseja inserir outro numero? 1 para sim 2 para nao: \n");
        scanf("%d", &continuar);
    }
    printf("Lista 1: \n");
    ImprimirLista(lista_1, quantidade_1);
    printf("Lista 2: \n");
    ImprimirLista(lista_2, quantidade_2);
    int lista_3 [quantidade_1+quantidade_2];
    for (i = 0; i < quantidade_1; i++)
    {
        lista_3[ i ] = lista_1;
    }
    for (j = 0; j < quantidade_2; j++)
    {
        lista_3[ i ] = lista_2[j];
        i++;
    }
    int quantidade_3 = quantidade_1+quantidade_2;
    printf("Lista 3: \n");
    ImprimirLista(lista_3, quantidade_3);

    int quantidade_4 = 0;
    for (i = 0; i < quantidade_1; i++){
        for (j=0; j < quantidade_2; j++){
        if (lista_1 [ i ] == lista_2 [j])
        {
            quantidade_4++;
        }
    }
    }
    k = 0;
    int lista_4[quantidade_4];
    for (i = 0; i < quantidade_1; i++){
        for (j = 0; j < quantidade_2; j++ )
    {
        if (lista_1[ i ] == lista_2[j])
        {
            lista_4[k] = lista_1[ i ];
            k++;
        }
    }
}
    printf("Lista Interseção de Lista 1 e Lista 2: \n");
    ImprimirLista(lista_4, quantidade_4);
}

void inserirSemRepetir(int lista[],int valor, int *quantidade, int max)
{
    if (*quantidade >= max)
    {
        printf("Erro: Lista Cheia!!");
    }
    int i = 0;
    int n =0;

    while ( i == 0 &&  n < 10)
    {
        if (valor == lista[n])
        {
            i = 1;

        }
        n++;
    }

    if (i == 1)
    {
        printf("O numero %d pertence a lista \n",valor);
        printf("Digite um valor diferente: \n");
    }
    else
    {
        lista[*quantidade] = valor;
        *quantidade = *quantidade+1;
    }


}

void ImprimirLista (int lista[], int n)
{
    int i;
    for (i=0; i<n; i++)
    {
        printf("Valores em lista: %d\n", lista);
    }
}
 

Editado por Willgo
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Willgo    seu código está funcionando bem, essa parte de mostrar os números da lista_5 sem repetir  é que é mais complicada .  veja como ficaria seu código com algumas modificações :

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int lista_1[10];
int lista_2[10];
int lista_5[20];
int quantidade_1,quantidade_2,quantidade_3,quantidade_4,quantidade_5;
int valor,lista,continuar,i,j,k,n,flag,aux;
void inserirSemRepetir(int lista[],int valor, int *quantidade, int max);
void ImprimirLista (int lista[], int n);
int main(){
    setlocale(LC_ALL, "");
    quantidade_1 = 0;
    quantidade_2 = 0;
    printf("Deseja inserir um numero na lista? 1 para sim 2 para nao: ");
    scanf("%d", &continuar);
    while (continuar == 1){
        printf("Informe um valor: \n");
        scanf("%d",&valor);
        printf("Escolha uma lista: 1 ou 2: \n");
        scanf("%d",&lista);
        if (lista == 1){
            inserirSemRepetir(lista_1, valor,&quantidade_1,10);
        }
        else{
            inserirSemRepetir(lista_2, valor,&quantidade_2,10);
        }
        printf("Deseja inserir outro numero? 1 para sim 2 para nao: ");
        scanf("%d", &continuar);
    }
    printf("Lista 1: \n");
    ImprimirLista(lista_1,quantidade_1);
    printf("Lista 2: \n");
    ImprimirLista(lista_2,quantidade_2);
    int lista_3 [quantidade_1+quantidade_2];
    for (i = 0; i < quantidade_1; i++){
        lista_3[ i ] = lista_1[i];
    }
    for (j = 0; j < quantidade_2; j++){
        lista_3[ i ] = lista_2[j];
        i++;
    }
    quantidade_3 = quantidade_1+quantidade_2;
    printf("Lista 3: \n");
    ImprimirLista(lista_3,quantidade_3);
    for (i = 0; i < quantidade_1; i++){
        for (j=0; j < quantidade_2; j++){
            if (lista_1[ i ] == lista_2[j]){
                quantidade_4++;
            }
        }
    }
    k = 0;
    int lista_4[quantidade_4];
    for (i=0;i < quantidade_1; i++){
        for (j = 0; j < quantidade_2; j++ ){
            if (lista_1[ i ] == lista_2[j]){
                lista_4[k] = lista_1[ i ];
                k++;
            }
        }
    }
    printf("Lista Interseção de Lista 1 e Lista 2: \n");
    ImprimirLista(lista_4,quantidade_4);
    quantidade_5=0;
    for(i=0;i<10;i++){
        lista_5[i]=0;
        if(lista_1[i] != 0){
            lista_5[i]=lista_1[i];
            quantidade_5++;
        }
    }
    aux=quantidade_5;
    for(j=0;j<10;j++){
        lista_5[j+aux]=0;
        if(lista_2[j] != 0){
            lista_5[aux+j]=lista_2[j];
            quantidade_5++;
        }
    }
    for(i=0;i<quantidade_5;i++){
        if(lista_5[i]==0){flag=1;}
    }
    for(i=0;i<10;i++){
        for(j=0;j<10;j++){
            if(i != j){
                if(lista_5[j]==lista_5[i]){
                    lista_5[i]=0;
                }
            }
        }
    }
    for(i=0;i<quantidade_5-1;i++){
        for(j=i+1;j<quantidade_5;j++){
            aux=lista_5[j];
            if(aux < lista_5[i]){
                lista_5[j]=lista_5[i];
                lista_5[i]=aux;
            }
        }
    }
    printf("Lista De Todos Os Números Em Ordem Crescente e Sem Repetir\n");
    if(flag == 1){printf("Valores em lista: 0\n");}
    ImprimirLista(lista_5,quantidade_5);
    return 0;
}
void inserirSemRepetir(int lista[],int valor, int *quantidade, int max){
    if (*quantidade >= max){
        printf("Erro: Lista Cheia!!");
    }
    i = 0;
    n = 0;
    while ( i == 0 &&  n < 10){
        if (valor == lista[n]){
            i = 1;
        }
        n++;
    }
    if (i == 1){
        printf("O numero %d pertence a lista \n",valor);
        printf("Digite um valor diferente: \n");
    }
    else{
        lista[*quantidade] = valor;
        *quantidade = *quantidade+1;
    }
}
void ImprimirLista (int lista[], int n){
    int i;
    for (i=0; i<n; i++){
        if(lista[i] != 0){
            printf("Valores em lista: %d\n", lista[i]);
        }
    }
    printf("\n");
}

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • @devair1010

     

    Caramba, obrigado aí mano tava até hoje ainda sem conseguir fazer essa parte do código, acabei de ver o seu post, ajudou muito. ^^

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • @devair1010

    Se eu preencher as duas listas completa os valores se repetem agora que vim ver

    Editado por Willgo
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • @devair1010  Terminei o código , olha aí como ficou: 

     

    #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
    int lista_1[5];
    int lista_2[5];
    int lista_5[10];
    int quantidade_1,quantidade_2,quantidade_3,quantidade_4,quantidade_5;
    int valor,lista,continuar,i,j,k,n,g,opcao;
    void inserirSemRepetir(int lista[],int valor, int *quantidade, int max);
    void ImprimirLista (int lista[], int n);
    
    int main()
    {
        setlocale(LC_ALL, "Portuguese");
        quantidade_1 = 0;
        quantidade_2 = 0;
        do
        {
            printf("Escolha sua opção:\n1 - Inserir número na lista\n");
            printf("2 - Mostrar Lista 1 e Lista 2\n3 - Mostrar Listas Intercaladas\n");
            printf("4 - Mostrar Lista Interseção\n5 - Mostrar Lista União\n");
            printf("6 - Sair\n\n");
            scanf("%d", &continuar);
    
            if (continuar == 1)
            {
                do
                {
                    opcao = 0;
                    printf("Informe um valor: \n");
                    scanf("%d",&valor);
                    printf("Escolha uma lista: 1 ou 2: \n");
                    scanf("%d",&lista);
                    if (lista == 1)
                    {
                        inserirSemRepetir(lista_1, valor,&quantidade_1,5);
                    }
                    else
                    {
                        inserirSemRepetir(lista_2, valor,&quantidade_2,5);
                    }
                    while (lista != 1 && lista != 2)
                    {
                        printf("Lista Incorreta!!\n");
                        printf("Escolha somente Lista 1 ou 2:\n");
                        scanf("%d",&lista);
                        if (lista == 1)
                        {
                            inserirSemRepetir(lista_1, valor,&quantidade_1,5);
                        }
                        else
                        {
                            inserirSemRepetir(lista_2, valor,&quantidade_2,5);
                        }
                    }
                    printf("Deseja continuar inserindo números na lista?\n");
                    printf("1 - Sim\n2 - Não\n");
                    scanf("%d", &opcao);
                    while (opcao != 1 && opcao != 2)
                    {
                        printf("Opção digitada Incorreta!!\n");
                        printf("Digite somente 1 para Sim e 2 para Não\n");
                        scanf("%d", &opcao);
                    }
                }
                while(opcao == 1);
            }
            else if (continuar == 2)
            {
                printf("Lista 1: \n\n");
                ImprimirLista(lista_1,quantidade_1);
                printf("Lista 2: \n\n");
                ImprimirLista(lista_2,quantidade_2);
            }
            else if (continuar == 3)
            {
                printf("Listas Intercaladas: \n");
                quantidade_3 = quantidade_1+quantidade_2;
                int lista_3[quantidade_3];
                juntarlistas(lista_1,lista_2,lista_3,quantidade_1,quantidade_2);
                ImprimirLista(lista_3,quantidade_3);
            }
            else if (continuar == 4)
            {
                printf("Lista Interseção: \n");
                quantidade_4 = 0;
                int lista_4[quantidade_4];
                intersecao(lista_1, lista_2,lista_4,quantidade_1,quantidade_2, &quantidade_4);
                ImprimirLista(lista_4,quantidade_4);
            }
            else if (continuar == 5)
            {
                printf("Lista União: \n");
                quantidade_5=0;
                uniao(lista_1,lista_2,lista_5,quantidade_1,quantidade_2,&quantidade_5);
                ImprimirLista(lista_5, quantidade_5);
    
            }
            else if (continuar == 6)
            {
                printf("Fim do Programa!!");
            }
    
        }
        while (continuar != 6);
    
    }
    void inserirSemRepetir(int lista[],int valor, int *quantidade, int max)
    {
        if (*quantidade >= max)
        {
            printf("Erro: Lista Cheia!!\n");
        }
        else
        {
            i = 0;
            n = 0;
            while ( i == 0 &&  n < *quantidade)
            {
                if (valor == lista[n])
                {
                    i = 1;
                }
                n++;
            }
            if (i == 1)
            {
                printf("Erro, o número %d já pertence a lista \n",valor);
            }
            else
            {
                lista[*quantidade] = valor;
                *quantidade = *quantidade+1;
            }
        }
    }
    void ImprimirLista (int lista[], int n)
    {
        int i,j,g;
        for(i=0; i<n-1; i++)
        {
            for(j=i+1; j<n; j++)
            {
                g=lista[j];
                if(g < lista[i])
                {
                    lista[j]=lista[i];
                    lista[i]=g;
                }
            }
        }
        for (i=0; i<n; i++)
        {
            if(lista[i] != 0)
            {
                printf("Posição [%d]: %d\n",i, lista[i]);
            }
        }
        printf("\n");
    }
    void juntarlistas (int lista1[], int lista2[],int lista3[], int quant1, int quant2)
    {
        int i,j;
        for (i = 0; i < quant1; i++)
        {
            lista3[i] = lista1[i];
        }
        for (j = 0; j < quant2; j++)
        {
            lista3[i] = lista2[j];
            i++;
        }
    }
    void intersecao (int lista1[], int lista2[], int lista4[], int quant1,
                     int quant2, int *quant4)
    {
        int i,j,k;
        for (i = 0; i < quant1; i++)
        {
            for (j=0; j < quant2; j++)
            {
                if (lista1[i] == lista2[j])
                {
                    *quant4 = *quant4+1;
                }
            }
        }
        k = 0;
        for (i=0; i < quant1; i++)
        {
            for (j = 0; j < quant2; j++ )
            {
                if (lista1[i] == lista2[j])
                {
                    lista4[k] = lista1[i];
                    k++;
                }
            }
        }
    }
    void uniao(int lista1[], int lista2[], int lista5[],int quant1, int quant2,
               int *quant5)
    {
        int i,j,g;
        for(i=0; i<quant1; i++)
        {
            lista5[i]=lista1[i];
            *quant5 = *quant5+1;
        }
    
        g = *quant5;
        for(j=0; j<quant2; j++)
        {
            lista5[j+g]=0;
            if(lista2[j] != 0)
            {
                lista5[g+j]=lista2[j];
                *quant5 = *quant5+1;
            }
        }
    
        for(i=0; i<*quant5; i++)
        {
            for(j=0; j<*quant5; j++)
            {
                if(i != j)
                {
                    if(lista5[j]==lista5[i])
                    {
                        lista5[i]=0;
                    }
                }
            }
        }
    }

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @Willgo     muito bom, funcionou bem, mas nesse código que você postou ficou faltando declarar três funções,  então acrescente essas linhas lá no início :

    void juntarlistas (int lista1[], int lista2[],int lista3[], int quant1, int quant2);
    void intersecao (int lista1[], int lista2[], int lista4[], int quant1,
                     int quant2, int *quant4);
    void uniao(int lista1[], int lista2[], int lista5[],int quant1, int quant2,
               int *quant5);

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • @devair1010 Mas tipo sem declarar elas o código ainda funciona, pra que serve essa declaração ?

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @Willgo   testei aqui sem essas linas de declaração e não funcionou .  por isso coloquei elas .

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • @devair1010 Atah, qual programa você tá usando ? tô usando o code blocks e rodou normal.

    Editado por Willgo
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @Willgo    eu estou usando o code blocks também  versão 16.01   e não funcionou ,  

      copia o código que você postou e coloca no code blocks e veja se consegue compilar .

    aqui ele deu erros nessas funções que não foram declaradas .

    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

    ×