9 de feb. de 2011

Operaciones Con Conjuntos [Interseccion, Union, Producto Cartesiano, Diferencia,Etc]

En aritmética hemos visto el tema de Conjuntos, en todos lados vemos conjuntos, colegio, Academia, Universidad, etc. y quien no recuerda las operaciones básicas que hacíamos sobre estas :







 Bueno empezando el curso de modelos de lenguajes de programación, nos hicieron implementar tales operaciones, bueno la idea era realizar con listas enlazadas simples peor como el tiempo era corto utilicé la stl de c++ las cuales tiene algunas funcione implementadas como vector (lista enlazada) , sort (ordenamiento), etc 
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

class coordenada{
 
 private:
      int x;
      int y;
 
 public:
      void ins(int x , int y )
      {
       this->x = x;
       this->y = y;
      }
 
      void mostrar()
      {
       cout<<"\t\t\t("<<x<<","<<y<<")"<<endl;
      } 
};

vector <int> Insertar(vector <int> V , int N)
{
 int a;
 
 cout<<endl;

 for (int i = 0 ; i < N ; i++ )
     {
      cout<<"\t\t\t - ["<<i+1<<"] : ";
      cin>>a;
      V.push_back(a);
     }

 return V;
}


void Mostrar(vector <int> V)
{
 cout<<" "<<V[0];
 
 for (int i = 1 ; i < V.size() ; i++ )
      cout<<" , "<<V[i];

}

vector <int> Union(vector <int> V1 , 
vector <int> V2 , vector <int> V3)
{
 vector <int> V;

 int i;

 sort(V1.begin(),V1.end());

 for (i = 0 ; i < V1.size() ; i++ )
      if(V1[i] != V1[i+1])
         V3.push_back(V1[i]);


 sort(V2.begin(),V2.end());

 for (i = 0 ; i < V2.size() ; i++ )
      if(V2[i] != V2[i+1])
         V3.push_back(V2[i]);

 sort(V3.begin(),V3.end());

 for (i = 0 ; i < V3.size() ; i++ )
      if(V3[i] != V3[i+1])
         V.push_back(V3[i]);

 return V;
}

vector <int> Interseccion(vector <int> V1 , 
vector <int> V2 , vector <int> V3)
{
 vector <int> V;

 int i;

 sort(V1.begin(),V1.end());

 for (i = 0 ; i < V1.size() ; i++ )
      if(V1[i] != V1[i+1])
         V3.push_back(V1[i]);


 sort(V2.begin(),V2.end());

 for (i = 0 ; i < V2.size() ; i++ )
      if(V2[i] != V2[i+1])
         V3.push_back(V2[i]);


 sort(V3.begin(),V3.end());

 for (i = 0 ; i < V3.size() ; i++ )
      if(V3[i] == V3[i+1])
         V.push_back(V3[i]);

 return V;
}

vector <int> Diferencia(vector <int> V1 , 
vector <int> V2 , vector <int> V3)
{
 vector <int> V;
 vector <int> V_1;
 vector <int> V_2;

 int i,j,cont = 0;

 sort(V1.begin(),V1.end());

 for (i = 0 ; i < V1.size() ; i++ )
      if(V1[i] != V1[i+1])
         V_1.push_back(V1[i]);


 sort(V2.begin(),V2.end());

 for (i = 0 ; i < V2.size() ; i++ )
      if(V2[i] != V2[i+1])
         V_2.push_back(V2[i]);


 for (i = 0 ; i < V_1.size() ; i++ )
     {
      cont = 0;

      for (j = 0 ; j < V_2.size() ; j++ )
          {
            if(V_1[i] != V_2[j])
               cont++;
          }
       if (cont == V_2.size())
           V3.push_back(V_1[i]);
     }

  for (i = 0 ; i < V3.size() ; i++ )
      if(V3[i] != V3[i+1])
         V.push_back(V3[i]);
         

 return V;
}


vector <int> Diferencia_S(vector <int> V1 , 
vector <int> V2 , vector <int> V3)
{
 V3 = Diferencia(V1,V2,V3);
 return V3;
}

void Producto(vector <int> V1 , vector <int> V2)
{
 vector <int> V_1;
 vector <int> V_2;
 
 coordenada C[50];


 int i,j,cont = 0;

 sort(V1.begin(),V1.end());

 for (i = 0 ; i < V1.size() ; i++ )
      if(V1[i] != V1[i+1])
         V_1.push_back(V1[i]);


 sort(V2.begin(),V2.end());

 for (i = 0 ; i < V2.size() ; i++ )
      if(V2[i] != V2[i+1])
         V_2.push_back(V2[i]);

 for (i = 0 ; i < V_1.size() ; i++ )
      for (j = 0 ; j < V_2.size() ; j++ )
           {
               C[i].ins(V_1[i],V_2[j]);
               C[i].mostrar();
               
           }

}


int main()
{
    system("color f0");
     
    vector <int> V1;
    vector <int> V2;
    vector <int> V3;///Union
    vector <int> V4;///Interseccion
    vector <int> V5;///Diferencia
    vector <int> V6;///Diferencia Simetrica
    
    int N;

    cout<<"\n\n\t  Elementos - Lista 1  : ";
    cin>>N;

     V1 = Insertar(V1,N);
    
    cout<<"\n\n\t  Elementos - Lista 2  : ";
    cin>>N;

    V2 = Insertar(V2,N);

    cout<<endl<<"\n\n\t  Union  ";
    cout<<endl<<"\t  ÄÄÄÄÄ :";
    
    V3 = Union(V1,V2,V3);
     
    cout<<"\n\n\t\t  C = { ";
     if (V3.empty() == false)
        Mostrar(V3);
   cout<<" } \n\n";
    

    cout<<endl<<"\n\n\t  Interseccion ";
    cout<<endl<<"\t  ÄÄÄÄÄÄÄÄÄÄÄÄ :";
    
    V4 = Interseccion(V1,V2,V4);
    cout<<"\n\n\t\t  C = { ";
     if (V4.empty() == false)
        Mostrar(V4);
   cout<<" } \n\n";
    

    cout<<endl<<"\n\n\t  Diferencia  ";
    cout<<endl<<"\t  ÄÄÄÄÄÄÄÄÄÄ :";
    
    V5 = Diferencia(V1,V2,V5);

    cout<<"\n\n\t\t  C = { ";
    if (V5.empty() == false)
        Mostrar(V5);
    cout<<" } \n\n";
    
    cout<<endl<<"\n\n\t  Diferencia Simetrica ";
    cout<<endl<<"\t  ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ :";
    
    V6 = Diferencia_S(V3,V4,V6);
   
    cout<<"\n\n\t\t  C = { ";
    if (V6.empty() == false)
        Mostrar(V6);
    cout<<" } \n\n"; 
    
    cout<<endl<<"\n\n\t  Producto  ";
    cout<<endl<<"\t  ÄÄÄÄÄÄÄÄ :"<<endl;
    Producto(V1,V2);


    system("pause");
}

1 comentarios:

ME PARECE ALGO IMPORTANTE Y UTIL PARA MI TRABAJO

Publicar un comentario en la entrada

Agrega Un Cometario en —(•·÷[ Programando ]÷·•)—

Twitter Delicious Facebook Digg Stumbleupon Favorites More