-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patha7f1.c
208 lines (179 loc) · 7.16 KB
/
a7f1.c
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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
#include <stdio.h>
#include <stdlib.h>
#define megisto_plithos 5
typedef enum {
FALSE, TRUE
} boolean;
typedef boolean typos_synolou[megisto_plithos];
typedef int stoixeio_synolou;
void Dimiourgia(typos_synolou synolo);
void Katholiko(typos_synolou synolo);
void Eisagogi(stoixeio_synolou stoixeio, typos_synolou synolo);
void Diagrafi(stoixeio_synolou stoixeio, typos_synolou synolo);
boolean Melos(stoixeio_synolou stoixeio, typos_synolou synolo);
boolean KenoSynolo(typos_synolou synolo);
boolean IsaSynola(typos_synolou s1, typos_synolou s2);
boolean Yposynolo(typos_synolou s1, typos_synolou s2);
void EnosiSynolou(typos_synolou s1, typos_synolou s2, typos_synolou enosi);
void TomiSynolou(typos_synolou s1, typos_synolou s2, typos_synolou tomi);
void DiaforaSynolou(typos_synolou s1, typos_synolou s2, typos_synolou diafora);
void createPowerSet(typos_synolou synolo, typos_synolou powerset[]);
int main(){
typos_synolou synolo, powerset[32];
stoixeio_synolou i, j;
Katholiko(synolo);
createPowerSet(synolo, powerset);
for(i = 0; i < 32; i++){
for(j = 0; j < 5; j++){
if(powerset[i][j]){
printf("%d", j+1);
}
}
printf("\n");
}
return 0;
}
void Dimiourgia(typos_synolou synolo)
/* Λειτουργία: Δημιουργεί ένα σύνολο χωρίς στοιχεία, δηλαδή το κενό σύνολο.
Επιστρέφει: Το κενό σύνολο
*/
{
stoixeio_synolou i;
for (i = 0; i < megisto_plithos; i++)
synolo[i] = FALSE;
}
void Katholiko(typos_synolou synolo)
/* Δέχεται: Ένα σύνολο.
Λειτουργία: Δημιουργεί ένα σύνολο με όλα τα στοιχεία παρόντα,
έτσι όπως ορίστηκε στο τμήμα δηλώσεων του προγράμματος.
Επιστρέφει: Το καθολικό σύνολο που δημιουργήθηκε
*/
{
stoixeio_synolou i;
for (i = 0; i < megisto_plithos; i++)
synolo[i] = TRUE;
}
void Eisagogi(stoixeio_synolou stoixeio, typos_synolou synolo)
/* Δέχεται: Ένα σύνολο και ένα στοιχείο.
Λειτουργία: Εισάγει το στοιχείο στο σύνολο.
Επιστρέφει: Το τροποποιημένο σύνολο
*/
{
synolo[stoixeio] = TRUE;
}
void Diagrafi(stoixeio_synolou stoixeio, typos_synolou synolo)
/* Δέχεται: Ένα σύνολο και ένα στοιχείο.
Λειτουργία: Διαγράφει το στοιχείο από το σύνολο.
Επιστρέφει: Το τροποποιημένο σύνολο
*/
{
synolo[stoixeio] = FALSE;
}
boolean Melos(stoixeio_synolou stoixeio, typos_synolou synolo)
/* Δέχεται: Ένα σύνολο και ένα στοιχείο.
Λειτουργία: Ελέγχει αν το στοιχείο είναι μέλος του συνόλου.
Επιστρέφει: Επιστρέφει TRUE αν το στοιχείο είναι μέλος του και FALSE διαφορετικά
*/
{
return synolo[stoixeio];
}
boolean KenoSynolo(typos_synolou synolo)
/*
Δέχεται: Ένα σύνολο.
Λειτουργία: Ελέγχει αν το σύνολο είναι κενό.
Επιστρέφει: Επιστρέφει TRUE αν το σύνολο είναι κενό και FALSE διαφορετικά
*/
{
stoixeio_synolou i;
boolean keno;
keno=TRUE;
i = 0;
while (i < megisto_plithos && keno) {
if (Melos(i, synolo))
keno = FALSE;
else
i++;
}
return keno;
}
boolean IsaSynola(typos_synolou s1, typos_synolou s2)
/* Δέχεται: Δύο σύνολα s1 και s2.
Λειτουργία: Ελέγχει αν τα δύο σύνολα είναι ίσα.
Επιστρέφει: Επιστρέφει TRUE αν τα δύο σύνολα έχουν τα ίδια στοιχεία και FALSE διαφορετικά
*/
{
stoixeio_synolou i;
boolean isa;
isa = TRUE;
i=0;
while (i < megisto_plithos && isa)
if (Melos(i,s1) != Melos(i,s2))
isa = FALSE;
else
i++;
return isa;
}
boolean Yposynolo(typos_synolou s1, typos_synolou s2)
/* Δέχεται: Δύο σύνολα s1 και s2.
Λειτουργία: Ελέγχει αν το σύνολο s1 είναι υποσύνολο του s2.
Επιστρέφει: Επιστρέφει true αν το σύνολο s1 είναι ένα υποσύνολο του s2,
δηλαδή αν κάθε στοιχείο του s1 είναι και στοιχείο του s2
*/
{
stoixeio_synolou i;
boolean yposyn;
yposyn = TRUE;
i=0;
while (i < megisto_plithos && yposyn)
if (Melos(i, s1) && !Melos(i, s2))
yposyn = FALSE;
else
i++;
return yposyn;
}
void EnosiSynolou(typos_synolou s1, typos_synolou s2, typos_synolou enosi)
/* Δέχεται: Δύο σύνολα s1 και s2.
Λειτουργία: Δημιουργεί ένα νέο σύνολο με τα στοιχεία που ανήκουν ή στο s1 ή
στο s2 ή και στα δύο σύνολα.
Επιστρέφει: Επιστρέφει το σύνολο enosi που προκύπτει από την ένωση των συνόλων s1 και s2
*/
{
stoixeio_synolou i;
for (i = 0; i < megisto_plithos; i++)
enosi[i] = Melos(i, s1) || Melos(i, s2);
}
void TomiSynolou(typos_synolou s1, typos_synolou s2, typos_synolou tomi)
/* Δέχεται: Δύο σύνολα s1 και s2.
Λειτουργία: Δημιουργεί ένα νέο σύνολο με τα στοιχεία που ανήκουν και στα δύο σύνολα s1 και s2.
Επιστρέφει: Επιστρέφει το σύνολο tomi που προκύπτει από την τομή των συνόλων s1 και s2
*/
{
stoixeio_synolou i;
for (i = 0; i < megisto_plithos; i++)
tomi[i] = Melos(i, s1) && Melos(i, s2);
}
void DiaforaSynolou(typos_synolou s1, typos_synolou s2, typos_synolou diafora)
/* Δέχεται: Δύο σύνολα s1 και s2.
Λειτουργία: Δημιουργεί ένα νέο σύνολο με τα στοιχεία που ανήκουν στο σύνολο s1 και δεν ανήκουν στο s2.
Επιστρέφει: Επιστρέφει το σύνολο diafora που προκύπτει από την διαφορά των συνόλων s1-s2.
*/
{
stoixeio_synolou i;
for (i = 0; i < megisto_plithos; i++)
diafora[i] = Melos(i, s1) && (!Melos(i, s2));
}
void createPowerSet(typos_synolou synolo, typos_synolou powerset[]){
stoixeio_synolou i, j;
int x;
for(i = 0; i < 32; i++){
Dimiourgia(powerset[i]);
}
for(i = 0; i < 32; i++){
for(j = 0; j < 5; j++){
x=1<<j;
if(i & x){
powerset[i][j]=TRUE;
}
}
}
}