none
C# Interseção e união entre vetores RRS feed

  • Pergunta

  • Olá, tudo bem ?!

    Eu tenho que fazer  uma interseção e união entre vetores, Então no caso da interseção, tenho que verificar qual números são comum entre vetores e escreve-los.

    Já no caso da união, tenho que pegar e unir o numero de um vetores com o outro, sem que repita e escreve-los

    Até sei o que tem que fazer, mas não estou conseguindo escrever o programa.

    Aqui está a descrição do exercício:

    Construa um programa em c# que leia 2 vetores inteiros de 5 posições e apresente o
    conjunto União e o conjunto Intersecção dos vetores.

    A linguagem é C#, no estilo Console

    Ficaria muito Grato, se alguém pudesse me ajudar.

    Obrigado.

    terça-feira, 11 de junho de 2013 18:11

Respostas

Todas as Respostas

  • Segue uma maneira de fazer o que precisa, Luis:

    Crie 2 vetores de 5 posições:

    int[] vetor1 = new int[] {1, 3, 5, 7 ,9};
    int[] vetor2 = new int[] {1, 4, 5, 6, 9};

    Crie 2 vetores para receber o resultado:

    int[] uniao = new int[5];
    int[] intersecao = new int[5];

    Para fazer a união, basta juntar index com index, dos vetores 1 e 2, utilizando laço:

    Console.WriteLine("UNIÃO");
    for (int i = 0; i < uniao.Length; i++)
    {
        uniao[i] = Convert.ToInt32(vetor1[i].ToString() + vetor2[i].ToString());
        Console.WriteLine(uniao[i]);
    }
    Console.WriteLine("*************");

    Para a intersecção, compare index com index, e os que forem iguais, imprima:

    Console.WriteLine("INTERSECÇÃO");
    for (int i = 0; i < intersecao.Length; i++)
    {
        var iguais = (from b in vetor1 where vetor1[i] == vetor2[i] select vetor1[i]).FirstOrDefault();
        if (list > 0)
        {
            interseccao[i] = iguais;
            Console.WriteLine(interseccao[i]);
        }
    }
    Console.WriteLine("******************");
    Console.ReadKey();

    Nesse caso, o resultado será:

    UNIÃO
    11
    34
    55
    76
    99
    INTERSECÇÃO
    1
    5
    9

    Espero que te ajude, um abraço


    Leonardo D'Amato Microsoft .Net Developer


    terça-feira, 11 de junho de 2013 18:46
  • Vide também esse exemplo que fiz, usando StringBuilder:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace forum
    {
        class Program
        {
            static void Main(string[] args)
            {
                int[] vetor1 = new int[] {1, 3, 5, 7 ,9};
                int[] vetor2 = new int[] {1, 4, 5, 6, 9};
    
                StringBuilder builderUniao = new StringBuilder("União: ");
                StringBuilder builderInterseccao = new StringBuilder("Interseccção: ");
    
                for (int i = 0; i < vetor1.Length; i++)
                {
                    builderUniao.Append(vetor1[i].ToString() + vetor2[i].ToString()).Append(" ");
    
                    var list = (from b in vetor1
                                where vetor1[i] == vetor2[i]
                                select vetor1[i]).FirstOrDefault();
                    if (list > 0)
                    {
                        builderInterseccao.Append(list).Append(" ");
                    }
                }
                Console.WriteLine(builderUniao + "\n" + builderInterseccao);
                Console.ReadKey();
            }
        }
    }

    terça-feira, 11 de junho de 2013 18:55
  • Obrigado cara, mas só não entendi aquele list quase no final do programa.

    if (list > 0)


    terça-feira, 11 de junho de 2013 19:05
  • Pois na comparação, quando o where não acontecer, ele retorna 0, e aí ficaria 1, 0, 5, 0 ,9.

    Esse não é o jeito mais correto, porém, como parece ser exercício de curso/faculdade, não sei se pode usar o que quiser pra fazer. Porque a melhor forma para fazer interseção é usar .Intersect().

    Veja abaixo:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace forum
    {
        class Program
        {
            static void Main(string[] args)
            {
                int[] vetor1 = new int[] {1, 3, 5, 7 ,9} ;
                int[] vetor2 = new int[] { 1, 4, 5, 6, 9 };
    
                StringBuilder builderUniao = 
                    new StringBuilder("União: ");
                StringBuilder builderInterseccao = 
                    new StringBuilder("Interseccção: ");
    
                IEnumerable<int> inter = vetor1.Intersect(vetor2);
                foreach (int numero in inter)
                    builderInterseccao.Append(numero).Append(" ");
                
    
                for (int i = 0; i < vetor1.Length; i++)
                    builderUniao.Append(vetor1[i].ToString() + vetor2[i].ToString()).Append(" ");
                
                Console.WriteLine(builderUniao + "\n" + builderInterseccao);
                Console.ReadKey();
            }
        }
    }
    


    Leonardo D'Amato Microsoft .Net Developer

    terça-feira, 11 de junho de 2013 19:34
  • Boa noite.

    Já que o Eduardo ressucitou a thread, deixo alguns links úteis (para pelo menos ter alguma informação nova relevante na questão):

    LINK 1

    LINK 2

    LINK 3

    LINK 4


    Att., Rafael Simor

    • Marcado como Resposta Marcos SJ quarta-feira, 16 de março de 2016 23:19
    quarta-feira, 16 de março de 2016 22:24