Ir ao conteúdo
  • Cadastre-se

C União de 2 vetores em C


Willgo

Posts recomendados

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

  • Curtir 1
Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

@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
Link para o comentário
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
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...