-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSetOperations.c
More file actions
174 lines (147 loc) · 4.14 KB
/
SetOperations.c
File metadata and controls
174 lines (147 loc) · 4.14 KB
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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
/*This program find all odd and prime numbers from 1 to 59.
Then creates a set for each category and does some set operations.*/
#define max_size 59 // set's max size
typedef enum {
FALSE, TRUE
} boolean;
/*an array with booleans. */
typedef boolean setType[max_size+1];
/*Every set's elements is an integer but it's been declares as setElement.*/
typedef int setElement;
void Create(setType set);
void Universal(setType set);
void Union(setType s1, setType s2, setType uni);
void Intersect(setType s1, setType s2, setType inter);
void Difference(setType s1, setType s2, setType diff);
boolean IsMebmer(setElement stoixeio, setType set);
void displayset(setType set);
boolean IsPrime (int n);
void Complement (setType set1,setType set2);
main()
{
setType universal_set,prime_set,odd_set,intersect,union_set,difference,supplement;
int i;
Create(universal_set);
Create(prime_set);
Create(odd_set);
Universal(universal_set);
for ( i=1;i<=max_size;i+=2)
odd_set[i]=TRUE;
printf("Odd numbers from 1 to 59: \n");
displayset(odd_set);
printf("\n");
for(i=1;i<=max_size;i++)
{
if(IsPrime(i))
prime_set[i]=TRUE;
}
printf("Prime numbers from 1 to 59: \n");
displayset(prime_set);
printf("\n");
Intersect(odd_set,prime_set,intersect);
printf("Intersect between prime and odd numbers: \n");
displayset(intersect);
printf("\n");
Union(odd_set,prime_set,union_set);
printf("Union between prime and odd numbers: \n");
displayset(union_set);
printf("\n");
Difference(odd_set,prime_set,difference);
printf("Difference between prime and odd numbers: \n");
displayset(difference);
printf("\n");
Complement(prime_set,supplement);
printf("Complement of prime numbers: \n");
displayset(supplement);
printf("\n");
}
void displayset(setType set)
/*It takes a set and display it's elements*/
{
setElement i;
for (i=1;i <= max_size;i++)
{
if((set[i]))
printf(" %d",i);
}
printf("\n");
}
void Create(setType set)
/*Creates an empty set.*/
{
setElement i;
for (i = 1; i <= max_size; i++)
set[i] = FALSE;
}
void Universal(setType set)
/*It takes a set and makes every position true (from 1 to 59).*/
{
setElement i;
for (i = 1; i <= max_size; i++)
set[i] = TRUE;
}
boolean IsMebmer(setElement element, setType set)
/*Arguments: a set and an element
Checks if that element belongs to set.
Returns true if exists in set. Else returns false.*/
{
return set[element];
}
void Union(setType s1, setType s2, setType uni)
/*Arguments: Two sets.
Creates a new set that is the union of those sets.
Returns the new set.*/
{
setElement i;
for (i = 1; i <= max_size; i++)
uni[i] = IsMebmer(i, s1) || IsMebmer(i, s2);
}
void Intersect(setType s1, setType s2, setType inter)
/*Arguments: Two sets.
Creates a new set that is the intersect of those sets.
Returns the new set.*/
{
setElement i;
for (i = 1; i <= max_size; i++)
inter[i] = IsMebmer(i, s1) && IsMebmer(i, s2);
}
void Difference(setType s1, setType s2, setType diff)
/*Arguments: Two sets.
Creates a new set that is the difference of those sets.
Returns the new set.*/
{
setElement i;
for (i = 1; i <= max_size; i++)
diff[i] = IsMebmer(i, s1) && (!IsMebmer(i, s2));
}
boolean IsPrime (int n)
/*Checks if integer n is prime or not.
Returns true if it's prime, else returns false.*/
{
int i,limit;
if (n<=1) return FALSE;
if (n==2) return TRUE;
if (n%2==0) return FALSE;
limit=sqrt(n) +1;
for (i=3;i<=limit;i+=2)
{
if(n%i==0) return FALSE;
}
return TRUE;
}
void Complement (setType set1,setType set2)
/*Takes a set and returns its complement.
The complement is the universal set except from those numbers that exist in prime set.*/
{
int i;
Create(set2);
for (i=1;i<=max_size;i++)
{
if (!set1[i])
set2[i]=TRUE;
}
}