ciao a tutti,
ho creato una struttura dai insieme con un vettore booleano e a me sembra essere fatto bene. ho notato che quando testo i metodi ottengo dei risulatati non attesi. sto cercando di capire dove sia il problema ma non ne vengo a capo. io penso sia il compilòatore che mi ha voltato le spalle. potete dare voi un'occhiata e dirmi dov'è il problema (qualora ce ne fosse uno)?
posto i codici:
insiemev.h
testinsieme.cppcodice:#ifndef insiemev_h #define insiemev_h #include "insieme.h" #include<iostream> #include<stdlib.h> using namespace std; template<class tipoelem> class insiemev : public insieme<tipoelem> { public: insiemev(int); int card; void creainsieme(); bool insiemevuoto(); bool appartiene(tipoelem); void inserisci(tipoelem); void cancella(tipoelem); void unione(insiemev<tipoelem> &, insiemev<tipoelem> &); void intersezione(insiemev<tipoelem> &, insiemev<tipoelem> &); void differenza(insiemev<tipoelem> &, insiemev<tipoelem> &); void visualizzains(); private: bool *set; int dimset; }; #endif template<class tipoelem> void insiemev<tipoelem>::visualizzains() { for(int i = 0; i < dimset; i++) { if(this->appartiene(i)) { cout << i << " "; } } cout << "\n\n"; } template<class tipoelem> insiemev<tipoelem>::insiemev(int dim) { dimset = dim; this->creainsieme(); } template<class tipoelem> void insiemev<tipoelem>::creainsieme() { set = new bool[dimset]; for(int i = 0; i < dimset; i++) set[i] = false; card = 0; } template<class tipoelem> bool insiemev<tipoelem>::insiemevuoto() { return(card == 0); } template<class tipoelem> bool insiemev<tipoelem>::appartiene(tipoelem elem) { return(set[elem]); } template<class tipoelem> void insiemev<tipoelem>::inserisci(tipoelem elem) { if(!this->appartiene(elem)) { set[elem] = true; ++card; } } template<class tipoelem> void insiemev<tipoelem>::cancella(tipoelem elem) { if(set[elem]) { set[elem] = false; card--; } } template<class tipoelem> void insiemev<tipoelem>::unione(insiemev<tipoelem> &A, insiemev<tipoelem> &B) { for(int i = 0; i < dimset; i++) { if(A.appartiene(i) || B.appartiene(i)) this->inserisci(i); } } template<class tipoelem> void insiemev<tipoelem>::intersezione(insiemev<tipoelem> &A, insiemev<tipoelem> &B) { for(int i = 0; i < card; i++) { if(A.appartiene(i) && B.appartiene(i)) this->inserisci(i); } } template<class tipoelem> void insiemev<tipoelem>::differenza(insiemev<tipoelem> &A, insiemev<tipoelem> &B) { for(int i = 0; i < card; i++) { if(A.appartiene(i) && !B.appartiene(i)) this->inserisci(i); } }
il problema è: quando testo il metodo unione dovrei ottenere come risultato l'insieme conelementi {1, 2, 4} mentre mi viene visualizzato {1, 2, 4, 6, 8, 9, 10, 11, 12, 13, 14}codice:#include "insiemev.h" #include<iostream> #include<stdlib.h> using namespace std; int main() { cout << " ***test insieme con vettore***\n\n"; int dim = 10; insiemev<int> ins(dim); ins.inserisci(1); ins.inserisci(2); ins.visualizzains(); int dim2 = 5; insiemev<int> ins2(dim2); ins2.inserisci(4); ins2.inserisci(2); ins2.visualizzains(); int card3 = dim + dim2; insiemev<int> ins3(card3); ins3.unione(ins, ins2); ins3.visualizzains(); system("pause"); return 0; }
cosa ho fatto di sbagliato? vi prego aiutatemi.

Rispondi quotando