comparar 2 conjuntos de números [RESOLVIDO]

1. comparar 2 conjuntos de números [RESOLVIDO]

igor muzetti
parrera

(usa Debian)

Enviado em 21/03/2009 - 16:02h

Alguém poderia me ajudar com o algoritmo:
Comparar 2 conjuntos, retornando 1 se são iguais e 0 se são diferentes.Cabeçalho:
int Comparar(TConj A, TConj B);


  


2. Atenção

César Frias
btc_cesar

(usa Fedora)

Enviado em 21/03/2009 - 18:49h

Substitua main pelo seu cabeçalho e não receba os números na mesma função...

main()
{
int i, j = 0, conjunto1[5], conjunto2[5], igual = 0;

for (i = 0; i < 5; i++)
{
printf("Digite um número para o 1º conjunto: ");
scanf("%i", &conjunto1[i]);
}

printf("\n");

for (i = 0; i < 5; i++)
{
printf("Digite um número para o 2º conjunto: ");
scanf("%i", &conjunto2[i]);
}
while(igual == 0 && j < 5)
{
if (conjunto1[j] == conjunto2[j])
{
igual = 0;
j++;
}
else
igual = 1;
}

if (igual == 0)
printf("São iguais -> 1\n");
else
printf("São diferentes -> 2\n");
}

Abs.
Espero ter ajudado...
Qq dúvida pode perguntar


3. Re: comparar 2 conjuntos de números [RESOLVIDO]

Ronaldo Faria Lima
ron_lima

(usa Slackware)

Enviado em 21/03/2009 - 22:16h

Lendo este tópico e outro que você deixou aqui no fórum, percebi que seu problema é algoritmo, e não linguagem C. Seria muito cômodo para você se eu colocasse aqui a implementação do código, o que não lhe acrescentaria absolutamente nada em termos de conhecimento. Portanto, prefiro um "approach" um pouco diferente.

O que você precisa fazer é implementar a operação de igualdade entre dois conjuntos. Antes de partir para a implementação do seu código, sugiro os seguintes passos:
1. Entenda completamente o problema que lhe foi proposto.
2. Uma vez entendido, modele a solução do problema e exercite-a para verificar se ela é suficientemente genérica para resolver completamente o problema.
3. Implemente o seu modelo.

Voltando ao seu problema: dados dois conjuntos A e B, como é que se verifica a igualdade de ambos? Seja o exemplo:
A = { a1, a2, a3, ..., an}
B = { b1, b2, b3, ..., bn}

A e B serão iguais se, e somente se, a1 = b1, a2 = b2, ..., an = bn. Porém, pela definição matemática, um conjunto é definido como uma coleção desordenada de elementos. Portanto, você precisa encontrar a correspondência entre cada elemento do conjunto A no conjunto B.

É interessante verificar que:
Se A = B, então A está contido em B e B está contido em A. A consequência desse pensamento é que todos os elementos de A pertencem a B, visto que A está contido em B. Portanto, uma solução computacional possível e completa seria verificar se cada elemento de A está contido em B.

Desta forma, a maneira mais completa de resolver este problema é percorrer o conjunto A verificando se cada elemento de A está contido também em B. Isso significa fazer uma busca no conjunto B para cada elemento de A. A forma mais trivial de realizar uma busca é através do algoritmo linear, ou seja, avaliar elemento por elemento de B, comparando-o com A. Tendo em mente que um conjunto pode estar desordenado, a busca binária não seria útil, a não ser que fosse uma premissa que seus conjuntos tivessem de estar ordenados por algum critério.

Partindo-se da suposição de que seus conjuntos estão desordenados, eu escreveria algo assim:

Algoritmo
  Declare
    A[10]: numérico;
    B[10]: numérico;
    i: numérico;
    j: numérico;
    quantos: numérico;
  quantos <- 0;
  Para i <-0 até 9 Faça
    Para j <- 0 até 9 Faça
      Se A[i] = B[j] Então
        quantos <- quantos + 1;
        pare;
      Fim-se;
    Fim-para;
  Fim-para;
  Se quantos <> 10 Então
    Escreva "São diferentes";
  Senão
    Escreva "São iguais";
  Fim-se.
Fim-algoritmo.

Este algoritmo bem simples percorre A em busca de itens que tenham correspondência em B. Aqui considerei que ambos os conjuntos têm o mesmo tamanho (10). Rigorosamente, o algoritmo deveria primeiro testar a quantidade de itens em cada conjunto e só depois avaliar os itens. A avaliação dos itens é feita indiretamente: para cada correspondência encontrada, um contador é incrementado. Os conjuntos serão iguais se o contador for igual à quantidade de elementos de um dos conjuntos, lembrando que é condição sine qua non que a quantidade de elementos de ambos os conjuntos seja igual para que a avaliação de cada item seja necessária.

Alguns poderão criticar esse algoritmo pela sua eficiência O(n2). Porém, o problema proposto não identificou qual a eficiência requerida e isso faz com que a solução mais simples seja mais do que adequada.
Transformar esse algoritmo em C é trivial e um trabalho direto. Sugiro que você gaste um tempo lendo o livro "A Linguagem C" de Brian Kernighan e Dennis Ritchie, a melhor obra sobre o assunto.

Espero haver lançado alguma luz no seu caminho.


4. Re: comparar 2 conjuntos de números [RESOLVIDO]

Fagner Amaral de Souza Candido
f_Candido

(usa Ubuntu)

Enviado em 21/03/2009 - 22:29h

Excelente explicação, mas somente sugerindo uma boa bibliografia:
Treinamento em Linguagem C, Volume 1 e 2, da Viviane Victorete.
O livro citado acima, é ótimo. Este é bem mais simples.

Abraços






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts