Create class IntegerSet for which each object can hold integers in the range 0 t
ID: 3564366 • Letter: C
Question
Create class IntegerSet for which each object can hold integers in the range 0 through 100. A set is represented internally as an array of ones and zeros. Array element a[ i ] is 1 if integer i is in the set. Array element a[ j ] is 0 if integer j is not in the set. The default constructor initializes a set to the so-called "empty set," i.e., a set whose array representation contains all zeros. Provide member functions for the common set operations. For example, provide a unionOfSets member function that creates a third set that is the set-theoretic union of two existing sets (i.e., an element of the third set's array is set to 1 if that element is 1 in either or both of the existing sets, and an element of the third set's array is set to 0 if that element is 0 in each of the existing sets). Provide an intersectionOfSets member function which creates a third set which is the set-theoretic intersection of two existing sets (i.e., an element of the third set's array is set to 0 if that element is 0 in either or both of the existing sets, and an element of the third set's array is set to 1 if that element is 1 in each of the existing sets). Provide an insertElement member function that inserts a new integer k into a set (by setting a[ k ] to 1). Provide a deleteElement member function that deletes integer m (by setting a[ m ] to 0). Provide a printSet member function that prints a set as a list of numbers separated by spaces. Print only those elements that are present in the set (i.e., their position in the array has a value of 1). Print --- for an empty set. Provide an isEqualTo member function that determines whether two sets are equal. Provide an additional constructor that receives an array of integers and the size of that array and uses the array to initialize a set object. Now write a driver program to test your IntegerSet class. Instantiate several IntegerSet objects. Test that all your member functions work properly.
What I have so far in my header file is:
#pragma once
#include <iostream>
#include <vector>
using std::vector;
using std::cout;
using std::endl;
class IntegerSet
{
public:
IntegerSet unionOfSet(IntegerSet);
IntegerSet intersectionOfSets(IntegerSet);
void insertElement(int);
void deleteElement(int);
void printSet();
IntegerSet();
~IntegerSet();
private:
vector <bool> *_set;
int const limit = 100;
};
and in my source file I have:
#include "IntegerSet.h"
IntegerSet::IntegerSet()
{
_set = new vector<bool>(limit);
}
IntegerSet IntegerSet::unionOfSet(IntegerSet set2)
{
IntegerSet set3;
for (int i = 0; i < limit; i++)
{
if (_set[i] == 1 || set2._set[i] == 1)
{
set3._set[i] = 1;
}
}
return set3;
}
//creates an intersection of the two sets
IntegerSet IntegerSet::intersectionOfSets(IntegerSet set2)
{
IntegerSet set3;
for (int i = 0; i < limit; i++)
{
if (_set[i] == 1 && set2._set[i] == 1)
{
set3._set[i] = 1;
}
}
return set3;
}
//inserts an element to the set
void IntegerSet::insertElement(int k)
{
if (k >= limit && k <= limit)
{
this->_set[k] = 1;
}
}
//deletes an element to the set
void IntegerSet::deleteElement(int k)
{
if (k >= limit && k <= limit)
{
*_set[k] = 0;
}
}
//prints out the set
void IntegerSet::printSet()
{
for (int i = 0; i < limit; i++)
{
cout << _set;
}
cout << endl;
}
IntegerSet::~IntegerSet()
{
}
I can't get the pointers to work right, I have compiler errors in almost every funtion. Please help!
Explanation / Answer
I used arrays to solve this as it was mentioned in the question.
#include <iostream>
using namespace std;
#define limit 100
class IntegerSet{
private:
bool A[limit];
public:
IntegerSet unionOfSet(IntegerSet);
IntegerSet intersectionOfSets(IntegerSet);
void insertElement(int);
void deleteElement(int);
void printSet();
bool isEqualTo(IntegerSet);
IntegerSet();
IntegerSet(int [],int);
~IntegerSet();
};
IntegerSet::IntegerSet()
{
for(int i = 0; i<limit; i++)
A[i] = 0;
}
IntegerSet::IntegerSet(int int_array[],int size)
{
for(int i = 0; i<limit; i++)
{
A[i] = 0;
}
for(int i = 0; i <size; i++)
{
if((int_array[i]>=0) && (int_array[i]<=100))
A[int_array[i]] = 1;
}
}
IntegerSet IntegerSet::unionOfSet(IntegerSet set2)
{
IntegerSet set3;
for (int i = 0; i < limit; i++)
{
if((this->A[i] == 1) || (set2.A[i] == 1))
set3.A[i] = 1;
}
return set3;
}
IntegerSet IntegerSet::intersectionOfSets(IntegerSet set2)
{
IntegerSet set3;
for (int i = 0; i < limit; i++)
{
if((this->A[i] == 1) && (set2.A[i] == 1))
set3.A[i] = 1;
}
return set3;
}
bool IntegerSet::isEqualTo(IntegerSet set2)
{
for(int i = 0; i<limit; i++)
{
if(this->A[i] != set2.A[i]) return false;
}
return true;
}
void IntegerSet::insertElement(int k)
{
if (k >= 0 && k <= limit)
{
this->A[k] = 1;
}
}
void IntegerSet::deleteElement(int k)
{
if (k >=0 && k <= limit)
{
this->A[k] = 0;
}
}
void IntegerSet::printSet()
{
for (int i = 0; i < limit; i++)
{
cout<<A[i]<<" ";
}
cout<<endl;
}
IntegerSet::~IntegerSet()
{
}
int main() {
IntegerSet set1;
cout<<"Checking default constructor : "<<endl;
set1.printSet();
set1.insertElement(1);
set1.insertElement(2);
set1.insertElement(45);
int a[5] = {1,4,56,78,99};
IntegerSet set2(a,5);
cout<<"Checking paramtrised constructor : "<<endl;
set2.printSet();
IntegerSet set3 = set1.unionOfSet(set2);
cout<<"Checking union : "<<endl;
set3.printSet();
set1.deleteElement(1);
IntegerSet set4 = set1.intersectionOfSets(set2);
cout<<"Checking intersection : "<<endl;
set4.printSet();
cout<<set1.isEqualTo(set2)<<endl;
return 0;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.