먼저 이런거 올려도 되는지 모르겠어요..
지금 실습실험 시간인데..
도저히 안풀립니다.
이 실행결과가 나오게 도와주세요..
----------------
[문제]
다음의 집합 응용 프로그램에서 인수로 전달되는 두 집합간의 교집합을 구하는 멤버함수 intersect()와 한 집합이 다른 집합의 부분집합 관계인가를 판정하는 멤버함수 subset()을 완성하여 프로그램을 작성하여라.
#include
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(void) { num = 0; }
Bool member(int e)
Error insert(int e);
void intersect(Set *s1, Set *s2);
Bool subset(Set *s);
void print(void);
}; // Set class
Bool Set::member(int e)
{
for(int i = 0; i < num; ++i)
if(elems[i] == e)
return TRUE; // 집합의 원소이면 1 반환
return FALSE; // 집합의 원소가 아니면 0 반환
} // member()
Error Set::insert(int e)
{
for(int i = 0; i < num; ++i)
if(elems[i] == e)
return NO; // 이미 집합의 원소이면 0 반환
if(num < MAXNUM) // 최대 원소수 초과여부 조사
{
elems[num++] = e; // 집합에 원소 삽입
return NO;
} // if
else // 최대 원소수를 초과하면 1 반환
return OVERFLOW;
} // insert()
void Set::print()
{
cout << '{';
for(int i = 0; i < num - 1; ++i)
cout << elems[i] << ',';
if(num > 0) // 마지막 원소 뒤에 , 생략
cout << elems[num -1];
cout << "}n";
} // print()
void main(void)
{
Set s1, s2, s3;
s1.empty();
s2.empty();
s3.empty();
s1.insert(88); s1.insert(33);
s1.insert(99); s1.insert(10);
s2.insert(10); s2.insert(88);
s2.insert(60);
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))s
cout << "s2는 s1의 부분집합이다.n";
else
cout << "s2는 s1의 부분집합이 아니다.n";
} // main()
[실행 결과]
s1 = {88,33,99,10}
s2 = {10, 88, 60}
s1 집합과 s2집합의 교집합 s3={88,10}
s3는 s1의 부분집합이다.
s2는 s1의 부분집합이 아니다.
소스를 수정해서 이렇게 나와야 합니다.
도와주세요~~ 횐님들 ㅠㅠ
아주 죽겠네요 ㅠㅠㅠㅠㅠ
지금 실습실험 시간인데..
도저히 안풀립니다.
이 실행결과가 나오게 도와주세요..
----------------
[문제]
다음의 집합 응용 프로그램에서 인수로 전달되는 두 집합간의 교집합을 구하는 멤버함수 intersect()와 한 집합이 다른 집합의 부분집합 관계인가를 판정하는 멤버함수 subset()을 완성하여 프로그램을 작성하여라.
#include
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(void) { num = 0; }
Bool member(int e)
Error insert(int e);
void intersect(Set *s1, Set *s2);
Bool subset(Set *s);
void print(void);
}; // Set class
Bool Set::member(int e)
{
for(int i = 0; i < num; ++i)
if(elems[i] == e)
return TRUE; // 집합의 원소이면 1 반환
return FALSE; // 집합의 원소가 아니면 0 반환
} // member()
Error Set::insert(int e)
{
for(int i = 0; i < num; ++i)
if(elems[i] == e)
return NO; // 이미 집합의 원소이면 0 반환
if(num < MAXNUM) // 최대 원소수 초과여부 조사
{
elems[num++] = e; // 집합에 원소 삽입
return NO;
} // if
else // 최대 원소수를 초과하면 1 반환
return OVERFLOW;
} // insert()
void Set::print()
{
cout << '{';
for(int i = 0; i < num - 1; ++i)
cout << elems[i] << ',';
if(num > 0) // 마지막 원소 뒤에 , 생략
cout << elems[num -1];
cout << "}n";
} // print()
void main(void)
{
Set s1, s2, s3;
s1.empty();
s2.empty();
s3.empty();
s1.insert(88); s1.insert(33);
s1.insert(99); s1.insert(10);
s2.insert(10); s2.insert(88);
s2.insert(60);
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))s
cout << "s2는 s1의 부분집합이다.n";
else
cout << "s2는 s1의 부분집합이 아니다.n";
} // main()
[실행 결과]
s1 = {88,33,99,10}
s2 = {10, 88, 60}
s1 집합과 s2집합의 교집합 s3={88,10}
s3는 s1의 부분집합이다.
s2는 s1의 부분집합이 아니다.
소스를 수정해서 이렇게 나와야 합니다.
도와주세요~~ 횐님들 ㅠㅠ
아주 죽겠네요 ㅠㅠㅠㅠㅠ
댓글 7
-
psy코
2007.10.08 15:27
-
섹시가이동
2007.10.08 15:27
학교 다닐때 생각나네요...
저두 뒷분께 패스~ -
쭌이네
2007.10.08 15:27
꽤 오래전에 해보고 안해봐서 머리 아프네요
그래도 생각나는데로 최대한 쉬운 방법으로 적어봤습니다.
컴파일은 안해봐서 되는지 안되는지 모르겠네요
한번 해보세요
도움되어야할텐데 걱정이 앞서네요
void Set::intersect(Set *s1, Set *s2)
{
int nNumber = 0;
nNumber = s1.num;
if( s2.num > s1.num )
nNumber = s2.num;
num = 0;
for( int i = 0; i < nNumber; i++ )
{
if ( s1.elems[i] == s2.elems[i] )
elems[num++] = s1.elems[i];
}
}
Bool subset(Set *s)
{
if ( num < s.num )
return FALSE;
BOOL bError = FALSE;
for ( int i = 0; i < s.num; i++ )
{
bError = TRUE;
for( int j = 0; j < num; j++ )
{
if ( s.elems[i] == elems[j] )
{
bError = FALSE;
break;
}
}
if ( bError )
return FALSE;
}
return TRUE;
} -
자이사랑
2007.10.08 15:27
뭔소리여,,이건,,갑자기 밀려오는 스트레스,,,,,,오늘 일찍 퇴근해서,,,마누라한테 이쁨받을려했는데...
소주나 한잔 해야겠네요.. -
나르^^
2007.10.08 15:27
숙제는 네X버 지식인에게..ㅡ.ㅡ;;;
JAVA면 제가 해드리겠는데...^^;;; -
Rhoads
2007.10.08 15:27
지금 회사에서 c++ 소스 코드 보고 있는데,
클라에서도 보니 신기하네요 -
love2me
2007.10.08 15:27
아으...델파이면 당장 해드리겠는데...ㅠ.ㅠ
뒷분께 패스~