Boa noite, amigos do Fórum.
Sou iniciante nos estudos em programação e como tal estou tendo problemas para resolver o seguinte exercício:
"Faça um programa que solicite ao usuário 2 conjuntos, A e B, de números inteiros, de tamanho M e N, respectivamente e sem repetições internas, isto é, o vetor A não pode conter duas vezes o mesmo valor, mas pode ter valores comuns com o vetor B.
Os valores M e N devem ser lidos do teclado, antes da leitura de cada conjunto, e devem ser estar no intervalo [0;100].
Após a leitura dos conjuntos, efetuar as seguintes operações:
- Exibir os conjuntos A e B ordenados em ordem crescente
- União dos conjuntos em ordem crescente
- Interseção dos conjuntos
Caso um dos conjuntos acima seja vazio, exibir a mensagem: 'Conjunto vazio'"
Só consegui fazer para exibir A e B ordenados em ordem crescente (embora não apareça no código abaixo, acabei apagando), mas não consegui achar solução para exibir a união e a intersecção dos dois conjuntos.
Se alguém puder me ajudar e eventualmente dar sugestões para melhorar o que eu já fiz, ficaria muito grato!
Segue o código:
namespace VetorNumRepetidos
{
class Program
{
static void Main(string[] args)
{
int troca = 0;
int repetA = 1, repetB = 1;
// vetor A para os valores do conjunto A
int[] vetA = new int[5];
// Vetor B para os valores do conjunto B
int[] vetB = new int[5];
// Vetor C para receber os valores de AUC (leia-se A união com C)
int[] vetC = new int[10];
// Laço for para carregar os dois vetores
for (int i = 0; i < vetA.Length; i++)
{
// Entrada dos valores do vetor A
Console.WriteLine("Digite um valor para o vetor A: ");
vetA[i] = Convert.ToInt32(Console.ReadLine());
// Entrada dos valores do vetor B
Console.WriteLine("Digite um valor para o vetor B: ");
vetB[i] = Convert.ToInt32(Console.ReadLine());
}
// Laço Do While com for para varrer o vetor em busca de repetidos
do {
// Variável que armazena os repetidos encontrados
repetA--;
for (int i = 0; i < 3; i++)
{
for (int j = i + 1; j < vetA.Length; j++)
{
if (vetA[i] == vetA[j])
{
repetA++;
// Ao encontrar pede ao usuário para informar outro valor
Console.WriteLine("Elemendo {0} igual a {1}! Digite outro: ", vetA[i], vetA[j]);
vetA[i] = Convert.ToInt32(Console.ReadLine());
}
}
}
// Condição de teste para sair do laço
} while (repetA != 0);
// Laço Do While com for para varrer o vetor em busca de repetidos
do
{
// Variável que armazena os repetidos encontrados
repetB--;
for (int i = 0; i < 3; i++)
{
for (int j = i + 1; j < vetB.Length; j++)
{
if (vetB[i] == vetB[j])
{
repetB++;
// Ao encontrar pede ao usuário para informar outro valor
Console.WriteLine("Elemendo {0} igual a {1}! Digite outro: ", vetB[i], vetB[j]);
vetB[i] = Convert.ToInt32(Console.ReadLine());
}
}
}
// Condição de teste para sair do laço
} while (repetB != 0);
// Laço for para ordenar os valores do vetor A em ordem crescente
for (int i = 0; i < 3; i++)
{
for (int j = i + 1; j < vetA.Length; j++)
{
if (vetA[i] > vetA[j])
{
troca = vetA[j];
vetA[j] = vetA[i];
vetA[i] = troca;
}
}
}
// O mesmo para o vetor B
for (int i = 0; i < 3; i++)
{
for (int j = i + 1; j < vetA.Length; j++)
{
if (vetB[i] > vetB[j])
{
troca = vetB[j];
vetB[j] = vetB[i];
vetB[i] = troca;
}
}
}
Console.WriteLine();
// Dois laços for para passar os valores dos vetores A e B para o C
for (int i = 0; i < vetA.Length; i++)
{
vetC[i] = vetA[i];
}
for (int i = 5; i < vetC.Length; i++)
{
vetC[i] = vetB[i - 5];
}
// Laço for para ordenar o vetor em ordem crescente
for (int i = 0; i < 8; i++)
{
for (int j = i + 1; j < vetC.Length; j++)
{
if (vetC[i] > vetC[j])
{
troca = vetC[j];
vetC[j] = vetC[i];
vetC[i] = troca;
}
}
}
// Após aqui não consegui desenvolver um algoritmo para mostrar
// os valores de AUC e A^B (A intersecção com B)
//
/*
for (int i = 1; i < 10; i++)
{
if (vetC[i - 1] == vetC[i])
Console.WriteLine();
}
*/
}
}
}