/*Write a C program to perform set operations - union,intersection,
difference,symmetric difference */
#include<stdio.h>
#include<conio.h>
void readset(int a[],int size);
void displayset(int a[],int size);
int Uni(int a[],int s1,int b[],int s2,int c[]);
int Intersection(int a[],int s1, int b[],int s2, int c[]);
int Diffab(int a[],int s1,int b[],int s2,int c[]);
int Diffba(int a[],int s1,int b[],int s2,int d[]);
//int symdiff(int a[],int s1,int b[],int s2,int e[]);
void main()
{
int a[10],b[10],c[10],d[10],e[10],s1,s2,s3,s4,s5,opt;
clrscr();
do
{
printf("\n\n**********MATRIX OPERATIONS**********\n\n");
printf("\n\t1.Union\n\n\t2.Intersection\n\n\t3.Difference A-B\n\n\t4.Difference B-A\n\n\t5.Symmetric difference\n\n\t6.Exit\n\n");
printf("\n\nEnter your menu option: \t");
scanf("%d",&opt);
if(opt>0&&opt<6)
{
printf("\n\nEnter size of set A: \t");
scanf("%d",&s1);
printf("\n\nEnter size of set B: \t");
scanf("%d",&s2);
printf("\n\nEnter elements in set A: \t");
readset(a,s1);
printf("\n\nEnter elements in set B: \t");
readset(b,s2);
printf("\n\nContents of set A are: \t");
displayset(a,s1);
printf("\n\nContents of set B are: \t");
displayset(b,s2);
}
switch(opt)
{
case 1:
s3=Uni(a,s1,b,s2,c);
printf("\n\nUnion of set a and b is: \t");
displayset(c,s3);
break;
case 2:
s3=Intersection(a,s1,b,s2,c);
printf("\n\nIntersection of set a and b is: \t");
displayset(c,s3);
break;
case 3:
s3=Diffab(a,s1,b,s2,c);
printf("\n\nDiff A-B is: \t");
displayset(c,s3);
break;
case 4:
s4=Diffba(a,s1,b,s2,d);
printf("\n\nDiff B-A is: \t");
displayset(d,s4);
break;
case 5:
s3=Diffab(a,s1,b,s2,c);
s4=Diffba(a,s1,b,s2,d);
s5=Uni(c,s3,d,s4,e);
printf("\n\nSym Diff A+B is: \t");
displayset(e,s5);
break;
case 6:
exit(0);
break;
default:printf("\n\nInvalid option");
}
}while(opt!=6);
getch();
}
void readset(int a[],int size)
{
int i;
for(i=0;i<size;i++)
scanf("%d",&a[i]);
}
void displayset(int a[],int size)
{
int i;
for(i=0;i<size;i++)
printf("%d\t",a[i]);
}
int Uni(int a[],int s1,int b[],int s2,int c[])
{
int s3,i,j,flag;
for(i=0;i<s1;i++)
{
c[i]=a[i];
}
s3=s1;
for(i=0;i<s2;i++)
{ flag=0;
for(j=0;j<s1;j++)
{
if(b[i]==a[i])
{
flag=1;
break;
}
}
if(flag==0)
{
c[s3]=b[i];
s3++;
}
}
return(s3);
}
int Intersection(int a[],int s1, int b[],int s2, int c[])
{
int s3,i,j;
s3=0;
for(i=0;i<s1;i++)
{
for(j=0;j<s2;j++)
{
if(a[i]==b[j])
{
c[s3]=a[i];
s3++;
break;
}
}
}return(s3);
}
int Diffab(int a[], int s1,int b[],int s2,int c[])
{
int s3=0,i,j,flag;
for(i=0;i<s1;i++)
{
flag=0;
for(j=0;j<s2;j++)
{
if(a[i]==b[j])
{
flag=1;
break;
}
}
if(flag==0)
{
c[s3]=a[i];
s3++;
}
}return(s3);
}
int Diffba(int a[], int s1,int b[],int s2,int d[])
{
int s4=0,i,j,flag;
for(i=0;i<s2;i++)
{
flag=0;
for(j=0;j<s1;j++)
{
if(b[i]==a[j])
{
flag=1;
break;
}
}
if(flag==0)
{
d[s4]=b[i];
s4++;
}
}
return(s4);
}
/*int symdiff(int a[],int s1,int b[],int s2,int e[])
{
int s3=0,i,j,flag,s4=0,c[10],d[10],s5=0;
for(i=0;i<s1;i++)
{
flag=0;
for(j=0;j<s2;j++)
{
if(a[i]==b[j])
{
flag=1;
break;
}
}
if(flag==0)
{
c[s3]=a[i];
s3++;
}
}
for(i=0;i<s2;i++)
{
flag=0;
for(j=0;j<s1;j++)
{
if(b[i]==a[j])
{
flag=1;
break;
}
}
if(flag==0)
{
d[s4]=b[i];
s4++;
}
}
s5=Uni(c,s3,d,s4,e);
return(s5);
} */