#include "set.h" set::set() { for (int i = 0; i < MAX_SET_SIZE; i++) { s[i] = false; } } set::set(int e) { for (int i = 0; i < MAX_SET_SIZE; i++) { s[i] = false; } if (e >= 0 && e <= MAX_SET_SIZE - 1) s[e] = true; } set::set(int e1, int e2) { for (int i = 0; i < MAX_SET_SIZE; i++) { s[i] = false; } if (e1 >= 0 && e1 <= MAX_SET_SIZE - 1) s[e1] = true; if (e2 >= 0 && e2 <= MAX_SET_SIZE - 1) s[e2] = true; } set::set(int e1, int e2, int e3) { for (int i = 0; i < MAX_SET_SIZE; i++) { s[i] = false; } if (e1 >= 0 && e1 <= MAX_SET_SIZE - 1) s[e1] = true; if (e2 >= 0 && e2 <= MAX_SET_SIZE - 1) s[e2] = true; if (e3 >= 0 && e3 <= MAX_SET_SIZE - 1) s[e3] = true; } int set::size() { int cnt = 0; for (int i = 0; i < MAX_SET_SIZE; i++) { if (s[i]) cnt++; } return cnt; } // union set set::operator+(const set& set2) { set rlt; for (int i = 0; i < MAX_SET_SIZE; i++) { if (s[i] || set2.s[i]) rlt.s[i] = true; } return rlt; } // intersection set set::operator*(const set& set2) { set rlt; for (int i = 0; i < MAX_SET_SIZE; i++) { if (s[i] && set2.s[i]) rlt.s[i] = true; } return rlt; } // set difference set set::operator-(const set& set2) { set rlt; for (int i = 0; i < MAX_SET_SIZE; i++) { if (s[i] && !set2.s[i]) rlt.s[i] = true; } return rlt; } std::ostream& operator<<(std::ostream& out, const set& set2) { out << "{"; bool printComma = false; for (int i = 0; i < MAX_SET_SIZE; i++) { if (set2.s[i] == true) { if (printComma) out << ", "; out << i; printComma = true; } } out << "}"<>(std::istream& in, set& set2) { int i; while (!in.eof()) { in >> i; if (i == -1) break; set2 = set(i) + set2; } return in; } int main() { set s1(1, 2); set s2(2, 3); set s3; std::cin >> s3; std::cout << s3; std::cout << (s1 + s2); std::cout << (s1 + s3); }