Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

C++ Programming. any comments in the code will be greatly appreciated Config.h #define LAB3_TEST1 0 // 0 => test with char, 1 => test with

C++ Programming. any comments in the code will be greatly appreciated

image text in transcribed

Config.h

#define LAB3_TEST1 0 // 0 => test with char, 1 => test with int

#define LAB3_TEST2 0 // Prog exercise 2: moveToNth

#define LAB3_TEST3 0 // Prog exercise 3: find

/**

* Ordered list class tests.

*/

#define LAB4_TEST1 0 // merge: programming exercise 2

#define LAB4_TEST2 0 // subset: programming exercise 3

ListArray.h

#ifndef LISTARRAY_H

#define LISTARRAY_H

#include

#include

using namespace std;

#pragma warning( disable : 4290 )

template

class List

{

public:

static const int MAX_LIST_SIZE = 10; // Default maximum list size

// Constructors

List ( int maxNumber = MAX_LIST_SIZE ); // Default constructor

List ( const List& source ); // Copy constructor

// Overloaded assignment operator

List& operator= ( const List& source );

// Destructor

virtual ~List ();

// List manipulation operations

virtual void insert ( const DataType& newDataItem ) // Insert after cursor

throw ( logic_error );

void remove () throw ( logic_error ); // Remove data item

virtual void replace ( const DataType& newDataItem ) // Replace data item

throw ( logic_error );

void clear (); // Clear list

// List status operations

bool isEmpty () const; // List is empty

bool isFull () const; // List is full

// List iteration operations

void gotoBeginning () // Go to beginning

throw ( logic_error );

void gotoEnd () // Go to end

throw ( logic_error );

bool gotoNext () // Go to next data item

throw ( logic_error );

bool gotoPrior () // Go to prior data item

throw ( logic_error );

DataType getCursor () const

throw ( logic_error ); // Return data item

// Output the list structure -- used in testing/debugging

virtual void showStructure () const;

// In-lab operations

void moveToNth ( int n ) // Move data item to pos. n

throw ( logic_error );

bool find ( const DataType& searchDataItem ) // Find data item

throw ( logic_error );

protected:

// Data members

int maxSize,

size, // Actual number of data item in the list

cursor; // Cursor array index

DataType *dataItems; // Array containing the list data item

};

#endif

ListArray.cpp

#include "ListArray.h"

template

List::List ( int maxNumber )

{

maxSize = maxNumber;

size = 0;

cursor = -1;

dataItems = new DataType[maxSize];

}

//copy constructor

template

List::List(const List& source) {

maxSize = source.maxSize;

size = source.size;

cursor = source.cursor;

dataItems = new DataType[maxSize];

for (int i = 0; i

dataItems[i] = source.dataItems[i];

}

}

template

List& List::operator= ( const List& source )

{

if (this != &source) {

delete[] dataItems;

size = source.size;

maxSize = source.maxSize;

cursor = source.cursor;

dataItems = new DataType[maxSize];

}

for (int i = 0; i

dataItems[i] = source.dataItems[i];

}

return *this;

}

template

List::~List ()

{

delete[] dataItems;

}

template

void List::insert ( const DataType& newDataItem )

throw ( logic_error )

{

if (size == maxSize)

throw logic_error("List is full");

else

{

for (int i = size - 1; i>cursor; i--) {

DataType initialI = dataItems[i];

dataItems[i] = dataItems[i + 1];

dataItems[i + 1] = initialI;

}

dataItems[cursor + 1] = newDataItem;

size++;

cursor++;

}

}

template

void List::remove () throw ( logic_error )

{

if (size == 0) {

throw logic_error("the list is empty");

}

else {

if (cursor == size - 1)

{

size--;

gotoBeginning();

}

else

{

for (int i = cursor; i

{

dataItems[i] = dataItems[i + 1];

}

size--;

}

}

}

template

void List::replace ( const DataType& newDataItem )

throw ( logic_error )

{

if (size == 0) {

throw logic_error("The List is full");

}

else {

dataItems[cursor] = newDataItem; //Set the dataItems cursor Index value = to newDataItems value.

}

}

template

void List::clear ()

{

size = 0;

cursor = 0;

}

template

bool List::isEmpty () const

{

if (size == 0)

return true;

else

return false;

}

template

bool List::isFull () const

{

if (size != MAX_LIST_SIZE)

return false;

else

return false;

}

template

void List::gotoBeginning ()

throw ( logic_error )

{

if (size == 0) {

throw logic_error("The List is empty");

}

else {

cursor = 0;

}

}

template

void List::gotoEnd ()

throw ( logic_error )

{

if (size == 0) {

throw logic_error("The List is empty");

}

else {

cursor = size - 1;

}

}

template

bool List::gotoNext ()

throw ( logic_error )

{

if (size == 0) {

throw logic_error("The List is empty");

}

else {

if (cursor

cursor++;

return true;

}

}

return false;

}

template

bool List::gotoPrior ()

throw ( logic_error )

{

if (isEmpty()) {

throw logic_error("The List is empty");

}

else {

if (cursor != 0) {

cursor--;

return true;

}

}

return false;

}

template

DataType List::getCursor () const

throw ( logic_error )

{

DataType t;

if (isEmpty())

throw logic_error("list is empty");

else

return dataItems[cursor];

return t;

}

#include "show3.cpp"

template

void List::moveToNth ( int n )

throw ( logic_error )

{

}

template

bool List::find ( const DataType& searchDataItem )

throw ( logic_error )

{

return false;

}

Show3.cpp

#include "ListArray.h"

template

void List:: showStructure () const

// outputs the data items in a list. if the list is empty, outputs

// "empty list". this operation is intended for testing/debugging

// purposes only.

{

int j; // loop counter

if ( size == 0 )

cout

// The Ordered List code blows up below. Since this is just debugging

// code, we check for whether the OrderedList is defined, and if so,

// print out the key value. If not, we try printing out the entire item.

// Note: This assumes that you have used the double-inclusion protection

// in your OrderedList.cpp file by doing a "#ifndef ORDEREDLIST_CPP", etc.

// If not, you will need to comment out the code in the section under

// the "else", otherwise the compiler will go crazy in lab 4.

// The alternative is to overload operator

// the ordered list.

else

{

cout

for ( j = 0 ; j

cout

cout

for ( j = 0 ; j

if( j == cursor ) {

cout

cout

#ifdef ORDEREDLIST_CPP

.getKey()

#endif

;

cout

cout

}

else

cout

#ifdef ORDEREDLIST_CPP

.getKey()

#endif

}

cout

}

}

Test3.cpp

#include

using namespace std;

// Because of C++ template implementations, must include source for templated class

// That is ugly, but it is required.

#include "ListArray.cpp"

#include "config.h"

void print_help();

void showTwoLists(List list1, List list2); // Displays two lists that are supposedly equivalent.

int main()

{

// hack: put a "try/catch" with list creation code?

// we need to demonstrate use of the try/catch syntax.

#if LAB3_TEST1

List testList(8); // Test list to test with ints

List copyList(testList); // Used to test copy constructor

List assignList; // Used to test assignment operator

int testData; // List data item

#else

List testList(8); // Test list to test with chars

List copyList(testList); // Used to test copy constructor

List assignList; // Used to test assignment operator

char testData; // List data item

#endif

int n; // Position within list

char cmd; // Input command

print_help();

do

{

testList.showStructure(); // Output list

cout

cin >> cmd;

if ( cmd == '+' || cmd == '=' || cmd == '?' )

cin >> testData;

else if ( cmd == 'M' || cmd == 'm' )

cin >> n;

switch ( cmd )

{

case 'H' : case 'h':

print_help();

break;

case '+' : // insert

cout

try

{

testList.insert(testData);

}

catch (logic_error &e)

{

cerr

}

break;

case '-' : // remove

cout

try

{

testList.remove();

}

catch (logic_error &e)

{

cerr

}

break;

case '=' : // replace

cout

try

{

testList.replace(testData);

}

catch (logic_error &e)

{

cerr

}

break;

case '@' : // getCursor

try

{

cout

}

catch (logic_error &e)

{

cerr

}

break;

case '

cout

try

{

testList.gotoBeginning();

}

catch (logic_error &e)

{

cerr

}

break;

case '>' : // gotoEnd

cout

try

{

testList.gotoEnd();

}

catch (logic_error &e)

{

cerr

}

break;

case 'N' : case 'n' : // gotoNext

try

{

if ( testList.gotoNext() )

cout

else

cout

}

catch (logic_error &e)

{

cerr

}

break;

case 'P' : case 'p' : // gotoPrior

try

{

if ( testList.gotoPrior() )

cout

else

cout

}

catch (logic_error &e)

{

cerr

}

break;

case 'C' : case 'c' : // clear

cout

testList.clear();

break;

case 'E' : case 'e' : // isEmpty

if ( testList.isEmpty() )

cout

else

cout

break;

case 'F' : case 'f' : // isFull

if ( testList.isFull() )

cout

else

cout

break;

case '!' :

showTwoLists(copyList, testList);

break;

case '#' :

assignList.insert('x');

assignList = testList;

showTwoLists(assignList, testList);

break;

#if LAB3_TEST2

case 'M' : case 'm' : // In-lab Exercise 2

cout

try

{

testList.moveToNth(n);

}

catch (logic_error &e)

{

cerr

}

break;

#endif // LAB3_TEST1

#if LAB3_TEST3

case '?' : // In-lab Exercise 3

try

{

if ( testList.find(testData) )

cout

else

cout

}

catch (logic_error &e)

{

cerr

}

break;

#endif // LAB3_TEST3

case 'Q' : case 'q' : // Quit test program

break;

default : // Invalid command

cout

}

}

while ( cin && cmd != 'Q' && cmd != 'q' );

if( !cin ) {

cout

}

return 0;

}

void showTwoLists(List list1, List list2) {

// Variables should match, but dynamic memory buffer must be different

cout

cout

list1.showStructure();

cout

list2.showStructure();

cout

}

void print_help()

{

cout

cout

cout

cout

cout

cout

cout

cout : Go to the end of the list"

cout

cout

cout

cout

cout

cout

cout

cout

#if LAB3_TEST2

#else

#endif // LAB3_TEST2

cout

#if LAB3_TEST3

#else

#endif // LAB3_TEST3

cout

cout

}

Programming Exercise 2. Implement the member function moveToNth(..), that removes the item marked by the cursor and inserts it as the nth element of the list. Test you implementation by turning the flag LAB3_TEST2 from 0 to 1 in config.h (50 pts) Programming Exercise 3. Implement the ListArray member function find.) that searches for the element given as a parameter; the search starts at the cursor and stops when it finds the element or at the end of the list. The cursor remains on the last position searched. Test you implementation by turning the flag LAB3_TEST3 from 0 to 1 in config.h (50 pts) Programming Exercise 2. Implement the member function moveToNth(..), that removes the item marked by the cursor and inserts it as the nth element of the list. Test you implementation by turning the flag LAB3_TEST2 from 0 to 1 in config.h (50 pts) Programming Exercise 3. Implement the ListArray member function find.) that searches for the element given as a parameter; the search starts at the cursor and stops when it finds the element or at the end of the list. The cursor remains on the last position searched. Test you implementation by turning the flag LAB3_TEST3 from 0 to 1 in config.h (50 pts)

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Database Processing Fundamentals, Design, and Implementation

Authors: David M. Kroenke, David J. Auer

14th edition

133876705, 9781292107639, 1292107634, 978-0133876703

More Books

Students also viewed these Databases questions