União, Intersecção e Diferença de dois vetores em C/C++

#include <stdio.h>
#include <stdlib.h>


  //Autor: Mathias Santos Assis

 main(){
  
   /*O vetor A e B pode armazenar até 10 elementos*/
  
   /*Considerando a hipótese de que todos os elementos
   do vetor A seja diferente do vetor B, o vetor
   união é declarado com 20 posições*/

  
   /*Considerando a hipótese de que todos os elementos
   do vetor A seja iguais do vetor B, o vetor
   interseccao é declarado com 10 posições*/

  
   /*Considerando a hipótese de que todos os elementos
   do vetor A seja diferentes do vetor B, o vetor
   Diferenca é declarado com 10 posições*/

  
   int A[10],B[10], Uniao[20], interseccao[10], Diferenca[10];
   int op, aux, preenchimento_A, preenchimento_B;
  
     preenchimento_A = preenchimento_B = 0;
  
    // Menu de opção
    printf("<1> Inserir Novo vetor A\n");
    printf("<2> Inserir Novo vetor B\n");
    printf("<3> Uniao de A e B\n");
    printf("<4> Interseccao de A e B\n");
    printf("<5> Diferenca de A e B\n");
    printf("<6> Sair\n");

 
  /* Laço infinito (será repetido o bloco
      permanentemente até que o comando
      break seja utilizado)*/
 
  for (int repeat=0; repeat<1; --repeat){ 
 
    op = 0; // Garante que ocorra o laço abaixo
    while ((op<1) || (op>6)){
      printf("\nA opcao deve esta entre 1 e 6.\n");
      printf("Digite opcao: ");
      scanf("%d",&op);
    } printf("\n"); // Quebra de linha
   
   

    
     int Dif,Ok; // Declarando novas variáveis
     


     /*Tanto o vetor A como o B, que é preenchido
       escolhendo as repectivas opções 1 e 2,
       não é permitido a inserção de valores
       repetidos dentro do vetor. Ex.: A[0]=4;
       Nenhuma outra posição dentro do vetor
       alocará o número
4.*/


     if (op == 1){
       for (int i=0; i<10; ++i){
            
         printf("A[%d]: ",i);
         scanf("%d",&A[i]);
        
        
         Ok=0; // Inicializando a variável
         if (i>0){ while (Ok != 1){       
         Dif=0;
                
           for (int j=0; j<i; ++j)
               if (A[i]!=A[j]) Dif++;
          
           /* Caso o valor digitado ainda não
            persista no vetor, este será alocado.*/
   
           if (Dif==i) Ok=1; // Quando Ok é igual a 1, o laço while é finalizado
              else{
               printf("A[%d]: ",i);
               scanf("%d",&A[i]);
              }
         }}
       }
      
       printf("\n");
         // Ordenando o vetor A em ordem crescente
         for (int i=0; i<10; ++i){
           for (int j=0; j<10; ++j){
             if (A[j]>A[i]){
               aux=A[j];
               A[j]=A[i];
               A[i]=aux;
             }
           }
         }
        
         // Exibindo o vetor A para o usuário
         for (int i=0; i<10; ++i)
          printf("%d\t",A[i]);
        
         /* A variável abaixo ao assumir valor 1,
         indica que o vetor A já foi preenchido */

         preenchimento_A = 1;
     }
    



     if (op == 2){
       for (int i=0; i<10; ++i){
            
         printf("B[%d]: ",i);
         scanf("%d",&B[i]);
        
        
         Ok=0;
         if (i>0){ while (Ok != 1){       
         Dif=0;
                
           for (int j=0; j<i; ++j)
               if (B[i]!=B[j]) Dif++;
              
           if (Dif==i) Ok=1;
              else{
               printf("B[%d]: ",i);
               scanf("%d",&B[i]);
              }
         }}
       }
      
       printf("\n");
         // Ordenando o vetor B em ordem crescente
         for (int i=0; i<10; ++i){
           for (int j=0; j<10; ++j){
             if (B[j]>B[i]){
               aux=B[j];
               B[j]=B[i];
               B[i]=aux;
             }
           }
         }
        
         // Exibindo o vetor B para o usuário
        for (int i=0; i<10; ++i)
          printf("%d\t",B[i]);
        
         /* A variável abaixo ao assumir valor 1,
         indica que o vetor B já foi preenchido */

         preenchimento_B = 1;
     }
    
    
    
    
    
     /* Quando a opção 3 é escolhida será
     gerado o vetor união do vetor A e B,
     que é formado por todos os elementos do
     vetor A ou B, excluindo as repetições*/


     int cont=10int cont_Igualdade;
     if (op == 3){
       /* Se os vetores A e B estiverem preenchido
       os comandos abaixo seram realizados*/

       if ((preenchimento_A ==1)&&(preenchimento_B ==1)){

         /* Como os elementos do vetor A são todos
         diferentes entre si, as 10 primeiras posições
         do vetor União seram ocupadas respectivamente
         pelas 10 primeiras posições do vetor A. */


         for (int i=0; i<10; ++i)
           Uniao[i]=A[i];
        
         for (int i=0; i<10; ++i){
             cont_Igualdade=0;
            
           for (int j=0; j<10; ++j)
             if (B[i] == A[j]) cont_Igualdade++;
          
             if (cont_Igualdade==0) Uniao[cont++]=B[i];
         }
        
         // Ordenando o vetor Uniao em ordem crescente
         for (int i=0; i<cont; ++i){
           for (int j=0; j<cont; ++j){
             if (Uniao[j]>Uniao[i]){
               aux=Uniao[j];
               Uniao[j]=Uniao[i];
               Uniao[i]=aux;
             }
           }
         }
        
         // Exibindo o vetor Uniao para o usuário
         for (int i=0; i<cont; ++i)
           printf("%d\t",Uniao[i]); 
          
       } else printf("Operacao invalida"); 
     }
    
    
    
    
     /* Quando a opção 4 é selecionada será
     gerado o vetor da interseccao do vetor A e B,
     que são os elementos comuns a ambos*/

     if (op == 4){
       if ((preenchimento_A ==1)&&(preenchimento_B ==1)){
         for (int i=0; i<10; ++i){
           for (int j=0; j<10; ++j){
             if (A[i] == B[j])
               // Exibindo o vetor Interseccao para o usuário
               printf("%d\t",A[i]);
           }
         }
       } else printf("Operacao invalida");
     }
    
    
    
    
    

     /*Quando a opção 5 é escolhida será
     gerado o vetor da diferença entre
     o vetor A e B.
     O vetor formado é constituido pelos elementos
     de A que não pertencem a B*/


     if (op == 5){
       if ((preenchimento_A ==1)&&(preenchimento_B ==1)){
                          
         for (int i=0; i<10; ++i){
             cont_Igualdade=0;
            
           for (int j=0; j<10; ++j)
             if (A[i] == B[j]) cont_Igualdade++;
          
             // Exibindo o vetor Diferenca para o usuário
             if (cont_Igualdade==0) printf("%d\t",A[i]);
         }
       } else printf("Operacao invalida");
     }
    
    
    
    
    
     /* Ao escolher a opção 6 o programa será
     encerrado, pois o laço for irá ser quebrado*/

     if (op == 6)
       break;    
    
 
    
     /* Ao fim de cada opção as duas
     linhas abaixo será executadas*/

     printf("\n");
       system("pause");
    
  }
    
 }




Palavras-Chaves: vetor_A, vetor_B, união, intersecção, Difirença, Ordem Crescente, C/C++.


Artigos relacionados em C/C++:






Feito no Dev C++ 4.9.9.2 | Executável