#include using namespace std; template class Mnozina { private: T *pole; int pocetPrvku; public: Mnozina(T *pole = 0, int pocetPrvku = 0) // = 0, pro "prazdny" konstruktor ("Mnozina z;" by jinak nesla definovat a musela by se psat napr. Mnozina z(0,0);) { this->pole = pole; this->pocetPrvku = pocetPrvku; } Mnozina operator + (Mnozina &x) // "+" ma delat prunik mnozin { int pocetPruniku = 0; // slouzi ciste k zaznamu o poctu stejnych prvku, tedy pruniku ;) T * polePrunik = new T [pocetPrvku]; // nase nove pole, kam zaznamenavame pruniky for(int i = 0; i < pocetPrvku; i++) // hledame prvky spolecne -> projedu prvni pole a jednotlivy prvek porovnam se vsemi z druheho pole for(int j = 0; j < x.pocetPrvku; j++) if(pole[i] == x.pole[j]) // pokud se prvky shoduji, zapisme je { polePrunik[pocetPruniku] = pole[i]; pocetPruniku++; } Mnozina y(polePrunik, pocetPruniku); //vznikne promenna y, ktera obsahuje nove pole s hodnotama pruniku a poctem prvku v tomto poli return y; } Mnozina operator - (Mnozina &x) // "-" ma delat sjednoceni { int pocetSjednoceni = 0; T * poleSjednoceni = new T [pocetPrvku+x.pocetPrvku]; // kaslem na dynamicke rozsireni // kaslem na stejne prvky, uz takhle je to dost dlouhy na to, ze to ma byt na papir for(int i = 0; i < pocetPrvku; i++) { poleSjednoceni[pocetSjednoceni] = pole[i]; pocetSjednoceni++; } for(int j = 0; j < x.pocetPrvku; j++) { poleSjednoceni[pocetSjednoceni] = x.pole[j]; pocetSjednoceni++; } Mnozina y(poleSjednoceni, pocetSjednoceni); //vznikne promenna y, ktera obsahuje nove pole s hodnotama sjednoceni a poctem prvku v tomto poli return y; } void vypis() { for(int i = 0; i < pocetPrvku; i++) cout << pole[i] << endl; } }; int main() { int pole[] = {1,5,6,8}; int pole2[] = {7,8,6,7,5}; Mnozina x(pole, 4), y(pole2, 5), z; cout << "prunik:" << endl; z = x + y; z.vypis(); cout << "sjednoceni:" << endl; z = x - y; z.vypis(); return 0; }