Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Modify the set class you developed in Chapter 12(found below as unOrderedSetType

ID: 3818256 • Letter: M

Question

Modify the set class you developed in Chapter 12(found below as unOrderedSetType) to make it a template. Revise your test program to show that your template works with a data type that is not int for the elements of the set. Use the template versions for the unorderedArrayListType and arrayListType classes are attached below:

//unorderedSetType header:

#ifndef UNORDEREDSETTYPE_H_INCLUDED
#define UNORDEREDSETTYPE_H_INCLUDED

#include "unorderedArrayListType.h"

using namespace std;


class unorderedSetType: public unorderedArrayListType
{
private:

    void insertAt(int location, int insertItem);// inserts item in list
// postcondition item is not in list already

public:

     void insertEnd(int insertItem); // inserts item in list at the end
// as specified by the user postcondition location must be valid and is not
// already in the list

     void setUnion(unorderedSetType intList, unorderedSetType intList2);// combines the first two list into one
// to create the third list postcondition duplicate numbers will ignored

     void getIntersection(unorderedSetType intList, unorderedSetType intList2);// sets fourth list
// by inserting object where specified

     void replaceAt(int searchItem, int repItem);// checks list and replaces where specified by user
//

     unorderedSetType(int size = 100);//constructor

};

//unorderedSetType implementation:

#include <iostream>
#include "unorderedSetType.h"

using namespace std;

void unorderedSetType::insertAt(int location, int insertItem)
{
    insertEnd(insertItem);
}

void unorderedSetType::insertEnd(int insertItem)
{
    int searchItem = insertItem;
    int loc;
    loc = unorderedArrayListType::seqSearch(searchItem);

    if (length >= maxSize) //the list is full
    {
        cout << "Cannot insert in a full list." << endl;
    }
    else if(loc >= 0)
    {
        cout << list[loc] << " is already in list. Ignoring request." << endl << endl;
    }
    else
    {
        list[length] = insertItem; //insert the item at the end
        length++; //increment the length
    }
}

void unorderedSetType::replaceAt(int searchItem, int repItem)
{
    int loc;
    loc = unorderedArrayListType::seqSearch(searchItem);

    if (loc < 0 || loc >= length)
    {
        cout << "The location of the item to be replaced is out of range." << endl;
    }
    else if(unorderedArrayListType::seqSearch(repItem) >= 0)
    {
        cout << list[unorderedArrayListType::seqSearch(repItem)] << " is already in list. Ignoring request." << endl << endl;
    }
    else
    {
        list[loc] = repItem;
    }
}

void unorderedSetType::setUnion(unorderedSetType intList, unorderedSetType intList2)
{
    unorderedSetType testUnion;
    int look;

    for (int i = 0; i < 8; i++)
    {
        look = intList.list[i];
        testUnion.insertEnd(look);
        look = intList2.list[i];
        testUnion.insertEnd(look);
    }

    cout << "Third list (union): ";
    testUnion.print();
    cout << endl;
}

void unorderedSetType::getIntersection(unorderedSetType intList, unorderedSetType intList2)
{
    unorderedSetType testIntersection;
    int look;

    for (int i = 0; i < 8; i++)
    {
        look = intList.list[i];
        if(intList2.seqSearch(look) >= 0)
        {
            testIntersection.insertEnd(look);
        }
    }

    cout << "Fourth list (intersection): ";
    testIntersection.print();
    cout << endl;
}

unorderedSetType::unorderedSetType(int size)
{
} //end constructor

#ifndef H_unorderedArrayListType
#define H_unorderedArrayListType

#include "arrayListType.h"

//template unorderedArrayListType

template <class elemType>
class unorderedArrayListType: public arrayListType<elemType>
{
public:
    void insertAt(int location, const elemType& insertItem);
    void insertEnd(const elemType& insertItem);
    void replaceAt(int location, const elemType& repItem);
    int seqSearch(const elemType& searchItem) const;
    void remove(const elemType& removeItem);

    unorderedArrayListType(int size = 100);
      //Constructor

};

template <class elemType>
void unorderedArrayListType<elemType>::insertAt(int location,
                                         const elemType& insertItem)
{
    if (location < 0 || location >= this->maxSize)
        cout << "The position of the item to be inserted "
             << "is out of range." << endl;
    else if (this->length >= this->maxSize) //list is full
        cout << "Cannot insert in a full list" << endl;
    else
    {
        for (int i = this->length; i > location; i--)
            this->list[i] = this->list[i - 1];   //move the elements down

        this->list[location] = insertItem; //insert the item at
                                     //the specified position

        this->length++;   //increment the length
    }
} //end insertAt

template <class elemType>
void unorderedArrayListType<elemType>::insertEnd
                                 (const elemType& insertItem)
{
    if (this->length >= this->maxSize) //the list is full
        cout << "Cannot insert in a full list." << endl;
    else
    {
        this->list[this->length] = insertItem; //insert the item at the end
        this->length++; //increment the length
    }
} //end insertEnd

//template unorderedArrayListType

template <class elemType>
int unorderedArrayListType<elemType>::seqSearch
                            (const elemType& searchItem) const
{
    int loc;
    bool found = false;

    for (loc = 0; loc < this->length; loc++)
        if (this->list[loc] == searchItem)
        {
            found = true;
            break;
        }

    if (found)
        return loc;
    else
        return -1;
} //end seqSearch

template <class elemType>
void unorderedArrayListType<elemType>::remove
                               (const elemType& removeItem)
{
    int loc;

    if (this->length == 0)
        cout << "Cannot delete from an empty list." << endl;
    else
    {
        loc = seqSearch(removeItem);

        if (loc != -1)
            this->removeAt(loc);
        else
            cout << "The item to be deleted is not in the list."
                 << endl;
    }
} //end remove

template <class elemType>
void unorderedArrayListType<elemType>::replaceAt(int location,
                                       const elemType& repItem)
{
    if (location < 0 || location >= this->length)
        cout << "The location of the item to be "
             << "replaced is out of range." << endl;
    else
        this->list[location] = repItem;
} //end replaceAt

template <class elemType>
unorderedArrayListType<elemType>::unorderedArrayListType(int size)
                       : arrayListType<elemType>(size)
{
}


#endif

#ifndef H_arrayListType
#define H_arrayListType

#include <iostream>
using namespace std;

template <class elemType>
class arrayListType
{
public:
    const arrayListType<elemType>&
                  operator=(const arrayListType<elemType>&);
       //Overloads the assignment operator

    bool isEmpty() const;
      //Function to determine whether the list is empty
      //Postcondition: Returns true if the list is empty;
      //               otherwise, returns false.

    bool isFull() const;
      //Function to determine whether the list is full
      //Postcondition: Returns true if the list is full;
      //               otherwise, returns false.

    int listSize() const;
      //Function to determine the number of elements in
      //the list.
      //Postcondition: Returns the value of length.

    int maxListSize() const;
      //Function to determine the maximum size of the list
      //Postcondition: Returns the value of maxSize.

    void print() const;
      //Function to output the elements of the list
      //Postcondition: Elements of the list are output on the
      //               standard output device.

    bool isItemAtEqual(int location, const elemType& item) const;
      //Function to determine whether item is the same as
      //the item in the list at the position specified
      //by location.
      //Postcondition: Returns true if the list[location]
      //               is the same as item; otherwise,
      //               returns false.
      //               If location is out of range, an
      //               appropriate message is displayed.

    virtual void insertAt(int location, const elemType& insertItem) = 0;
      //Function to insert insertItem in the list at the
      //position specified by location.
      //Note that this is an abstract function.
      //Postcondition: Starting at location, the elements of
      //               the list are shifted down,
      //               list[location] = insertItem; length++;  
      //               If the list is full or location is out of
      //               range, an appropriate message is displayed.

    virtual void insertEnd(const elemType& insertItem) = 0;
      //Function to insert insertItem an item at the end of
      //the list. Note that this is an abstract function.
      //Postcondition: list[length] = insertItem; and length++;
      //               If the list is full, an appropriate
      //               message is displayed.

    void removeAt(int location);
      //Function to remove the item from the list at the
      //position specified by location
      //Postcondition: The list element at list[location] is
      //               removed and length is decremented by 1.
      //               If location is out of range, an
      //               appropriate message is displayed.

    void retrieveAt(int location, elemType& retItem) const;
      //Function to retrieve the element from the list at the
      //position specified by location
      //Postcondition: retItem = list[location]
      //               If location is out of range, an
      //               appropriate message is displayed.

    virtual void replaceAt(int location, const elemType& repItem) = 0;
      //Function to replace repItem the elements in the list
      //at the position specified by location.
      //Note that this is an abstract function.
      //Postcondition: list[location] = repItem
      //               If location is out of range, an
      //               appropriate message is displayed.

    void clearList();
      //Function to remove all the elements from the list
      //After this operation, the size of the list is zero.
      //Postcondition: length = 0;

    virtual int seqSearch(const elemType& searchItem) const = 0;
      //Function to search the list for searchItem.
      //Note that this is an abstract function.
      //Postcondition: If the item is found, returns the
      //               location in the array where the item is
      //               found; otherwise, returns -1.

    virtual void remove(const elemType& removeItem) = 0;
      //Function to remove removeItem from the list.
      //Note that this is an abstract function.
      //Postcondition: If removeItem is found in the list,
      //               it is removed from the list and length
      //               is decremented by one.

    arrayListType(int size = 100);
      //Constructor
      //Creates an array of the size specified by the
      //parameter size. The default array size is 100.
      //Postcondition: The list points to the array, length = 0,
      //               and maxSize = size;

    arrayListType (const arrayListType<elemType>& otherList);
       //Copy constructor

    virtual ~arrayListType();
      //Destructor
      //Deallocate the memory occupied by the array.

protected:
    elemType *list; //array to hold the list elements
    int length;     //variable to store the length of the list
    int maxSize;    //variable to store the maximum
                    //size of the list
};


template <class elemType>
bool arrayListType<elemType>::isEmpty() const
{
    return (length == 0);
}

template <class elemType>
bool arrayListType<elemType>::isFull() const
{
    return (length == maxSize);
}

template <class elemType>
int arrayListType<elemType>::listSize() const
{
   return length;
}

template <class elemType>
int arrayListType<elemType>::maxListSize() const
{
   return maxSize;
}

template <class elemType>
void arrayListType<elemType>::print() const
{
    for (int i = 0; i < length; i++)
        cout << list[i] << " ";
    cout << endl;
}

template <class elemType>
bool arrayListType<elemType>::isItemAtEqual(int location,
                                            const elemType& item) const
{
    if (location < 0 || location >= length)
    {
        cout << "The location of the item to be removed "
             << "is out of range." << endl;

        return false;
    }
    else
        return (list[location] == item);
}

template <class elemType>
void arrayListType<elemType>::removeAt(int location)
{
    if (location < 0 || location >= length)
        cout << "The location of the item to be removed "
             << "is out of range." << endl;
    else
    {
        for (int i = location; i < length - 1; i++)
            list[i] = list[i + 1];

        length--;
    }
} //end removeAt

template <class elemType>
void arrayListType<elemType>::retrieveAt(int location,
                                       elemType& retItem) const
{
    if (location < 0 || location >= length)
        cout << "The location of the item to be retrieved is "
             << "out of range" << endl;
    else
        retItem = list[location];
} //end retrieveAt

template <class elemType>
void arrayListType<elemType>::clearList()
{
    length = 0;
} //end clearList

template <class elemType>
arrayListType<elemType>::arrayListType(int size)
{
    if (size <= 0)
    {
        cout << "The array size must be positive. Creating "
             << "an array of the size 100. " << endl;

        maxSize = 100;
    }
    else
        maxSize = size;

    length = 0;

    list = new elemType[maxSize];
}

template <class elemType>
arrayListType<elemType>::~arrayListType()
{
    delete [] list;
}

template <class elemType>
arrayListType<elemType>::arrayListType(const arrayListType<elemType>& otherList)
{
    maxSize = otherList.maxSize;
    length = otherList.length;

    list = new elemType[maxSize];    //create the array

    for (int j = 0; j < length; j++) //copy otherList
        list [j] = otherList.list[j];
}//end copy constructor


template <class elemType>
const arrayListType<elemType>& arrayListType<elemType>::operator=
                             (const arrayListType<elemType>& otherList)
{
    if (this != &otherList)    //avoid self-assignment
    {
        delete [] list;
        maxSize = otherList.maxSize;
        length = otherList.length;

        list = new elemType[maxSize];

        for (int i = 0; i < length; i++)
            list[i] = otherList.list[i];
    }
    return *this;
}


#endif

//heres the test program

#include <iostream>
#include "unorderedSetType.h"
#include "unorderedArrayListType.h"
#include "arrayListType.h"

using namespace std;

int main()
{
    unorderedSetType intList(25);
    unorderedSetType intList2(25);
    unorderedSetType testUnion(50);
    unorderedSetType testIntersection(25);

    int number, repItem, searchItem;

    cout << "Enter 8 integers: ";

    for (int count = 0; count < 8; count++)
    {
        cin >> number;
        intList.insertEnd(number);
    }

    number = 0;

    cout << "Enter 8 integers (2nd set): ";

    for (int count = 0; count < 8; count++)
    {
        cin >> number;
        intList2.insertEnd(number);
    }

    cout << endl;
    cout << "intList: ";
    intList.print();
    cout << endl;

    cout << "intList2: ";
    intList2.print();
    cout << endl;

    cout << "Attempting to run a union function on lists 1 and 2..." << endl;
    testUnion.setUnion(intList, intList2);

    cout << "Attempting to run an intersection function on lists 1 and 2..." << endl;
    testIntersection.getIntersection(intList, intList2);

    cout << "Enter the number to be replaced (list 1): ";
    intList.print();
    cout << endl;
    cin >> searchItem;
    cout << endl << "Enter the number you would like to replace '" << searchItem << "' with in list 1: ";
    cin >> repItem;
    cout << endl;

    intList.replaceAt(searchItem, repItem);

    cout << "List 1, following replacement function: ";
    intList.print();
    cout << endl;

   return 0;
}

Explanation / Answer

Removed the .cpp file for unorderedSetType and provided the implementation in header file

PROGRAM CODE:

unorderedSetType.h

/*

* unorderedSetType.h

*

* Created on: 16-Apr-2017

* Author: kasturi

*/

#ifndef UNORDEREDSETTYPE_H

#define UNORDEREDSETTYPE_H

#include "unorderedArrayListType.h"

#include "arrayListType.h"

using namespace std;

template <class elemType>

class unorderedSetType: public unorderedArrayListType<elemType>

{

private:

void insertAt(int location, const elemType& insertItem);// inserts item in list

// postcondition item is not in list already

public:

   void insertEnd(const elemType& insertItem); // inserts item in list at the end

// as specified by the user postcondition location must be valid and is not

// already in the list

   void setUnion(unorderedSetType<elemType> intList, unorderedSetType<elemType> intList2);// combines the first two list into one

// to create the third list postcondition duplicate numbers will ignored

   void getIntersection(unorderedSetType<elemType> intList, unorderedSetType<elemType> intList2);// sets fourth list

// by inserting object where specified

   void replace(const elemType& searchItem, const elemType& repItem);// checks list and replaces where specified by user

//

   unorderedSetType(int size = 100);//constructor

};

template <class elemType>

void unorderedSetType<elemType>::insertAt(int location, const elemType& insertItem)

{

insertEnd(insertItem);

}

template <class elemType>

void unorderedSetType<elemType>::insertEnd(const elemType& insertItem)

{

elemType searchItem = insertItem;

int loc;

loc = unorderedArrayListType<elemType>::seqSearch(searchItem);

if (this->length>=this->maxSize)

{

cout << "Cannot insert in a full list." << endl;

}

else if(loc >= 0)

{

cout <<this->list[loc] << " is already in list. Ignoring request." << endl << endl;

}

else

{

   this->list[this->length] = insertItem; //insert the item at the end

   this->length++; //increment the length

}

}

template <class elemType>

void unorderedSetType<elemType>::replace(const elemType& searchItem, const elemType& repItem)

{

int loc;

loc = unorderedArrayListType<elemType>::seqSearch(searchItem);

if (loc < 0 || loc >= arrayListType<elemType>::length)

{

cout << "The location of the item to be replaced is out of range." << endl;

}

else if(unorderedArrayListType<elemType>::seqSearch(repItem) >= 0)

{

cout << arrayListType<elemType>::list[unorderedArrayListType<elemType>::seqSearch(repItem)] << " is already in list. Ignoring request." << endl << endl;

}

else

{

   arrayListType<elemType>::list[loc] = repItem;

}

}

template <class elemType>

void unorderedSetType<elemType>::setUnion(unorderedSetType<elemType> intList, unorderedSetType<elemType> intList2)

{

unorderedSetType<elemType> testUnion;

elemType look;

for (int i = 0; i < 8; i++)

{

look = intList.list[i];

testUnion.insertEnd(look);

look = intList2.list[i];

testUnion.insertEnd(look);

}

cout << "Third list (union): ";

testUnion.print();

cout << endl;

}

template <class elemType>

void unorderedSetType<elemType>::getIntersection(unorderedSetType<elemType> intList, unorderedSetType<elemType> intList2)

{

unorderedSetType<elemType> testIntersection;

elemType look;

for (int i = 0; i < 8; i++)

{

look = intList.list[i];

if(intList2.seqSearch(look) >= 0)

{

testIntersection.insertEnd(look);

}

}

cout << "Fourth list (intersection): ";

testIntersection.print();

cout << endl;

}

template <class elemType>

unorderedSetType<elemType>::unorderedSetType(int size)

{

} //end constructor

#endif

unorderedSetTester.cpp

/*

* unorderedSetTester.cpp

*

* Created on: 16-Apr-2017

* Author: kasturi

*/

//heres the test program

#include <iostream>

#include "unorderedSetType.h"

using namespace std;

int main()

{

   unorderedSetType<double> List(10);

unorderedSetType<double> List2(25);

unorderedSetType<double> testUnion(50);

unorderedSetType<double> testIntersection(25);

double number = 0.0, repItem = 0.0, searchItem = 0.0;

cout << "Enter 8 decimals: ";

for (int count = 0; count < 8; count++)

{

cin >> number;

List.insertEnd(number);

}

number = 0.0;

cout << "Enter 8 decimals (2nd set): ";

for (int count = 0; count < 8; count++)

{

cin >> number;

List2.insertEnd(number);

}

cout << endl;

cout << "intList: ";

List.print();

cout << endl;

cout << "intList2: ";

List2.print();

cout << endl;

cout << "Attempting to run a union function on lists 1 and 2..." << endl;

testUnion.setUnion(List, List2);

cout << "Attempting to run an intersection function on lists 1 and 2..." << endl;

testIntersection.getIntersection(List, List2);

cout << "Enter the number to be replaced (list 1): ";

List.print();

cout << endl;

cin >> searchItem;

cout << endl << "Enter the number you would like to replace '" << searchItem << "' with in list 1: ";

cin >> repItem;

cout << endl;

List.replace(searchItem, repItem);

cout << "List 1, following replacement function: ";

List.print();

cout << endl;

   return 0;

}

OUTPUT:

Enter 8 decimals: 1.0 12.0 3.2 2.2 3.3 4.5 6.5 7.8

Enter 8 decimals (2nd set): 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0

intList: 1 12 3.2 2.2 3.3 4.5 6.5 7.8

intList2: 1 2 3 4 5 6 7 8

Attempting to run a union function on lists 1 and 2...

1 is already in list. Ignoring request.

Third list (union): 1 12 2 3.2 3 2.2 4 3.3 5 4.5 6 6.5 7 7.8 8

Attempting to run an intersection function on lists 1 and 2...

Fourth list (intersection): 1

Enter the number to be replaced (list 1): 1 12 3.2 2.2 3.3 4.5 6.5 7.8

2.2

Enter the number you would like to replace '2.2' with in list 1: 15

List 1, following replacement function: 1 12 3.2 15 3.3 4.5 6.5 7.8

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote