C언어 집합의 원소 수
#include<iostream>
#include<string>
using namespace std;
const MAXNUM = 100; // 최대 원소 수
enum Bool { FALSE, TRUE }; // FALSE = 0, TRUE = 1
enum Error { NO, OVERFLOW }; // NO = 0, OVERFLOW =1
class Set{
int elems[MAXNUM]; // 원소
int num; // 집합의 원소 수
public:
void empty() { num = 0; }
Bool member(int);
Error insert(int);
void intersect(Set*, Set*);
Bool subset(Set*);
void print(void);
}; // Set class
Bool Set::member(int e)
{
for(int i=0;i<num;++i)
if(elems[i]==e)
return TRUE;
return FALSE;
};
Error Set::insert(int e)
{
for(int i=0;i<num;++i)
if(elems[i]==e)
return NO;
if(num<MAXNUM)
{
elems[num++]=e;
return NO;
}
else
return OVERFLOW;
}
void Set::print()
{
cout<<"{";
for (int i=0; i<num-1;++i)
cout<<elems[i]<<",";
if(num>0)
cout<<elems[num-1];
cout<<"}n";
}
void Set::intersect(Set *s1, Set *s2)
{
for(int i=0;i<s1->num;i++)
{
if(s2->member(s1->elems[i]))
insert(s1->elems[i]);
}
}
Bool Set::subset(Set *s)
{
for(int i=0;i<s->num;i++)
{
if(member(s->elems[i])==FALSE)
return FALSE;
}
return TRUE;
}
void main(void)
{
Set s1, s2, s3;
s1.empty(); s2.empty(); s3.empty();
s1.insert(45); s1.insert(72); s1.insert(56); s1.insert(12);
s2.insert(56); s2.insert(72); s2.insert(69);
cout << "s1 = "; s1.print();
cout << "s2 = "; s2.print();
s3.intersect(&s1, &s2);
cout << "s1 집합과 s2 집합의 교집합 s3 = "; s3.print();
if(s1.subset(&s3))
cout << "s3는 s1의 부분집합이다.n";
else
cout << "s3는 s1의 부분집합이 아니다.n";
if(s1.subset(&s2))
cout << "s2는 s1의 부분집합이다.n";
else
cout << "s2는 s1의 부분집합이 아니다.n";
}