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
codice:
#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);
}
}
testinsieme.cpp
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;
}
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}
cosa ho fatto di sbagliato? vi prego aiutatemi.