2016-10-03 2 views
2

Le programme ignore un objet dans un ensemble (tableau).Union et XOR de deux ensembles dans C

clang -ggdb3 -O0 std = c99 -Wall -Werror prog.c -o prog

sortie:

Exclusif (XOR) de A et B: 1 9 10 (mais il devrait être: 1 9 10)

Union de A et B: 1 3 6 9 10 (Mais il devrait être: 1 3 6 9 10)

Quel est le problème avec ce programme? S'il vous plaît aider!

#include <stdio.h> 

int main(void) 
{ 
int U[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 
int A[] = {2, 3, 6, 9}; 
int B[] = {1, 3, 6, 10}; 

int SizeOfU = sizeof(U)/sizeof(int); 
int SizeOfA = sizeof(A)/sizeof(int); 
int SizeOfB = sizeof(B)/sizeof(int); 

printf("Exclusive or (XOR) of A and B: "); 
for (int i = 0; i < SizeOfU; i++) 
{ 
    for (int j = 0; j < SizeOfB; j++) 
    { 
     if ((A[j] != B[j]) && ((U[i] == A[j]) || (U[i] == B[j]))) 
     { 
      printf("%i ", U[i]); 
      i++; 
      j = 0; 
     } 
    } 
} 
printf("\n"); 

printf("Union of A and B: "); 
for (int i = 0; i < SizeOfU; i++) 
{ 
    for (int j = 0; j < SizeOfA; j++) 
    { 
     if ((U[i] == A[j]) || (U[i] == B[j])) 
     { 
      printf("%i ", U[i]); 
      j = 0; 
      i++; 
     } 
    } 
} 
printf("\n"); 

return 0; 
} 
+0

Vous voulez définir xor intersection des tableaux 'A' et' B'. Alors, à quoi sert le tableau 'U'? Même question pour l'ensemble-union? – selbie

+0

C'est juste une partie d'un autre programme. – PoorProgrammer

+0

Mais vous faites toujours référence au tableau 'U' dans votre code. Je ne suis pas sûr si vous essayez de faire un XOR à trois voies, ou quelque chose d'autre. Pouvez-vous mettre à jour vos questions et votre code? – selbie

Répondre

1

Votre logique est bonked pour plusieurs raisons. Vous supposez que les valeurs entières seront dans le même index de A et B. Vous n'évaluez réellement B. Un comportement indéfini que si la longueur de A est inférieure à B ....

Pour le cas XOR, pensez à comme ceci: Pour chaque élément U, trouver les éléments qui apparaissent dans A ou B, mais pas les deux:

for (int u = 0; i < SizeOfU; u++) 
{ 
    int inA = 0; 
    int inB = 0; 
    for (int a = 0; a < SizeOfA; a++) 
    { 
     inA = (A[a] == U[u]); 
     if (inA) 
     { 
      break; 
     } 
    } 

    for (int b = 0; b < SizeOfB; b++) 
    { 
     inB = (B[b] == U[u]); 
     if (inB) 
     { 
      break; 
     } 
    } 

    if ((inA && !inB) || (!inA && inB)) 
    { 
     printf("%d", i); 
    } 
} 
printf("\n"); 

cela résout le cas du jeu de XOR. Je vais laisser la solution pour l'affaire OR comme un exercice pour vous.