728x90
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
#include <stdio.h>
#include <stdlib.h>
#define MAX_SET_SIZE 10
#define HAVE_ELEMENT 1
#define DO_NOT_HAVE_ELEMENT 0
int hasElement(int set[], int size, int element);
int setUnion(int set1[], int size1, int set2[], int size2, int setResult[]);
int setIntersecton(int set1[], int size1, int set2[], int size2, int setResult[]);
int setComplements(int set1[], int size1, int set2[], int size2, int setResult[]);
void printSet(int set[], int size);
int addOneElement(int set[], int size, int element);
int main(int argc, char *argv[])
{
int i;
int setA[MAX_SET_SIZE];
int setB[MAX_SET_SIZE];
int setC[MAX_SET_SIZE*2];
int sizeA;
int sizeB;
int sizeC;
printf("Enter the size of Set A:");
scanf("%d",&sizeA);
i = 0;
while( i < sizeA )
{
printf("Enter the number for Set A (%d/%d):", i+1,sizeA );
scanf( "%d", &setA[i] );
i = addOneElement(setA, i, setA[i]);
}
printf("Enter the size of Set B:");
scanf("%d",&sizeB);
i=0;
while( i < sizeB )
{
printf("Enter the number for Set B (%d/%d):", i+1, sizeB );
scanf( "%d", &setB[i] );
i = addOneElement(setB, i, setB[i]);
}
printf("Set A: ");
printSet( setA, sizeA );
printf("Set B: ");
printSet( setB, sizeB );
sizeC = setUnion( setA, sizeA, setB, sizeB, setC ); // Union, setC is the result set
printf("Union of setA and setB: ");
printSet( setC, sizeC );
sizeC = setIntersecton( setA, sizeA, setB, sizeB, setC ); //Intersection, setC is the result set
printf("Intersection of setA and setB: ");
printSet( setC, sizeC );
sizeC = setComplements( setA, sizeA, setB, sizeB, setC ); //Complements, setC is the result set
printf("Set-theoretic difference of setA and setB (setA - setB): ");
printSet( setC, sizeC );
return 0;
}
int hasElement(int set[], int size, int element) //같은 원소가 존재하는지 확인
{
int i = 0;
for( i = 0; i < size; i++ )
{
if( set[i] == element )
return HAVE_ELEMENT;
}
return DO_NOT_HAVE_ELEMENT;
}
// 원소를 집합에 추가. 이미 존재하면 추가하지 않고 redundant라고 출력한다. 현재의 집합 크기를 반환한다.
int addOneElement(int set[], int size, int element)
{
if (hasElement(set, size, element) == HAVE_ELEMENT)
printf("It is redundant. Please retry.\n");
else
{
set[size] = element;
size++;
}
return size;
}
void printSet(int set[], int size)
{
int i;
for( i = 0; i < size; i++ )
{
if (size == 1)
printf("{ %d }\n", set[i]);
else if (i == 0)
printf("{ %d, ", set[i]);
else if (i == size - 1)
printf("%d }\n ", set[i]);
else
printf("%d, ", set[i]);
}
}
int setUnion(int set1[], int size1, int set2[], int size2, int setResult[])//합
{
int i, size3 = size1;
for( i = 0; i < size1; i++ )
setResult[i] = set1[i];
for( i = 0; i < size2; i++ )
{
if (hasElement(setResult, size3, set2[i]) == DO_NOT_HAVE_ELEMENT)
{
setResult[size3] = set2[i];
size3++;
}
}
return size3;
}
int setIntersecton(int set1[], int size1, int set2[], int size2, int setResult[])//교
{
int i, size3 = 0;
if (size1 > size2)
{
for( i = 0; i < size2; i++ )
{
if(hasElement(set1, size1, set2[i]))
{
size3++;
setResult[size3 - 1] = set2[i];
}
}
}
else
{
for( i = 0; i < size1; i++ )
{
if(hasElement(set2, size2, set1[i]))
{
size3++;
setResult[size3 - 1] = set1[i];
}
}
}
return size3;
}
int setComplements(int set1[], int size1, int set2[], int size2, int setResult[])//차
{
int i, size3 = 0;
for( i = 0; i < size1; i++ )
{
if(hasElement(set2, size2, set1[i]) == DO_NOT_HAVE_ELEMENT)
{
size3++;
setResult[size3 - 1] = set1[i];
}
}
return size3;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs |
모든 함수는 새로운 배열 setResult의 size를 리턴한다.
처음엔 자꾸 쓰레기 숫자가 떠서 좀 짜증났는데 무튼 겨우 풀었다.
합,교,차 중 하나라도 할 수 있다면 나머지는 쉬울 것이다.
'programming > C' 카테고리의 다른 글
[C언어] 자료구조 - 개념 정리 (0) | 2020.11.02 |
---|---|
[C언어] 자료구조 - 문자열예제(글자수 공백포함해서 세는 프로그램) (0) | 2020.08.08 |
[C언어] 자료구조 - 문자열, 파일 읽어오기 (0) | 2020.08.08 |
[C언어] 자료구조 - 포인터,배열,malloc (1) | 2020.07.17 |
[C언어] 포인터 사용하여 배열 이어붙이기,정렬확인,비교 (0) | 2019.10.15 |
댓글