Programming Exercise 2 implement the member function moveTo

- 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 your implementation by turning the flag LAB3_TEST2 from 0 to 1 in config.h; (20 points)

- 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; (20 points)


#include <iostream>

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<char> list1, List<char> 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<int> testList(8); // Test list to test with ints
List<int> copyList(testList); // Used to test copy constructor
List<int> assignList; // Used to test assignment operator
int testData; // List data item
#else
List<char> testList(8); // Test list to test with chars
List<char> copyList(testList); // Used to test copy constructor
List<char> 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 << endl << \"Command: \"; // Read command
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 << \"Insert \" << testData << endl;
try
{
testList.insert(testData);
}
catch (logic_error &e)
{
cerr << \"EXCEPTION: A logic error occurred in the insert function.\";
}
break;

case \'-\' : // remove
cout << \"Remove the data item marked by the cursor\"
<< endl;
try
{
testList.remove();
}
catch (logic_error &e)
{
cerr << \"EXCEPTION: A logic error occurred in the remove function.\";
}
break;

case \'=\' : // replace
cout << \"Replace the data item marked by the cursor \"
<< \"with \" << testData << endl;
try
{
testList.replace(testData);
}
catch (logic_error &e)
{
cerr << \"EXCEPTION: A logic error occurred in the replace function.\";
}
break;

case \'@\' : // getCursor
try
{
cout << \"Data item marked by the cursor is \"
<< testList.getCursor() << endl;
}
catch (logic_error &e)
{
cerr << \"EXCEPTION: A logic error occurred in the getCursor function.\";
}
break;

case \'<\' : // gotoBeginning
cout << \"Go to the beginning of the list\" << endl;
try
{
testList.gotoBeginning();
}
catch (logic_error &e)
{
cerr << \"EXCEPTION: A logic error occurred in the gotoBeginning function.\";
}
break;

case \'>\' : // gotoEnd
cout << \"Go to the end of the list\" << endl;
try
{
testList.gotoEnd();
}
catch (logic_error &e)
{
cerr << \"EXCEPTION: A logic error occurred in the gotoEnd function.\";
}
break;

case \'N\' : case \'n\' : // gotoNext
try
{
if ( testList.gotoNext() )
cout << \"Go to the next data item\" << endl;
else
cout << \"Failed -- either at the end of the list \"
<< \"or the list is empty\" << endl;
}
catch (logic_error &e)
{
cerr << \"EXCEPTION: A logic error occurred in the gotoNext function.\";
}
break;

case \'P\' : case \'p\' : // gotoPrior
try
{
if ( testList.gotoPrior() )
cout << \"Go to the prior data item\" << endl;
else
cout << \"Failed -- either at the beginning of the \"
<< \"list or the list is empty\" << endl;
}
catch (logic_error &e)
{
cerr << \"EXCEPTION: A logic error occurred in the gotoPrior function.\";
}
break;

case \'C\' : case \'c\' : // clear
cout << \"Clear the list\" << endl;
testList.clear();
break;

case \'E\' : case \'e\' : // isEmpty
if ( testList.isEmpty() )
cout << \"List is empty\" << endl;
else
cout << \"List is NOT empty\" << endl;
break;

case \'F\' : case \'f\' : // isFull
if ( testList.isFull() )
cout << \"List is full\" << endl;
else
cout << \"List is NOT full\" << endl;
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 << \"Move the data item marked by the cursor to \"
<< \"posititon \" << n << endl;
try
{
testList.moveToNth(n);
}
catch (logic_error &e)
{
cerr << \"EXCEPTION: A logic error occurred in the moveToNth function.\";
}
break;
#endif // LAB3_TEST1

#if   LAB3_TEST3
case \'?\' : // In-lab Exercise 3
try
{
if ( testList.find(testData) )
cout << \"Found\" << endl;
else
cout << \"NOT found\" << endl;
}
catch (logic_error &e)
{
cerr << \"EXCEPTION: A logic error occurred in the find function.\";
}
break;
#endif // LAB3_TEST3

case \'Q\' : case \'q\' : // Quit test program
break;

default : // Invalid command
cout << \"Inactive or invalid command\" << endl;
}
}
while ( cin && cmd != \'Q\' && cmd != \'q\' );

if( !cin ) {
   cout << \"Input error\" << endl;
}

return 0;
}

void showTwoLists(List<char> list1, List<char> list2) {
// Variables should match, but dynamic memory buffer must be different
cout << \"Look at the two lists below and decide whether they are equivalent\" << endl;
cout << \"List 1: \";
list1.showStructure();
cout << \"List 2: \";
list2.showStructure();
cout << endl;
}

void print_help()
{
cout << endl << \"Commands:\" << endl;
cout << \" H : Help (displays this message)\" << endl;
cout << \" +x : Insert x after the cursor\" << endl;
cout << \" - : Remove the data item marked by the cursor\" << endl;
cout << \" =x : Replace the data item marked by the cursor with x\"
<< endl;
cout << \" @ : Display the data item marked by the cursor\" << endl;
cout << \" < : Go to the beginning of the list\" << endl;
cout << \" > : Go to the end of the list\" << endl;
cout << \" N : Go to the next data item\" << endl;
cout << \" P : Go to the prior data item\" << endl;
cout << \" C : Clear the list\" << endl;
cout << \" E : Empty list?\" << endl;
cout << \" F : Full list?\" << endl;
cout << \" ! : Test copy constructor\" << endl;
cout << \" # : Test assignment operator\" << endl;
cout << \" M n : Move data item marked by cursor to pos. n (\"
#if LAB3_TEST2
<< \"Active \"
#else
<< \"Inactive \"
#endif   // LAB3_TEST2
<< \": In-lab Ex. 2)\" << endl;
cout << \" ?x : Search rest of list for x (\"
#if LAB3_TEST3
<< \"Active \"
#else
<< \"Inactive \"
#endif   // LAB3_TEST3
<< \": In-lab Ex. 3)\" << endl;
cout << \" Q : Quit the test program\" << endl;
cout << endl;
}

Solution


- Programming Exercise 2
---------------------------------------------------------------------

void moveToNth(int value, int index){
   //first erase the given value in list
   std::list<int>::iterator it1;
   for(it1 = testList.begin(); it1!= testList.end(); ++it1){
       if(*it1 == value){
           testList.erase(it1);
           break;
       }
   }
   // now move given value at required position
   testList.insert(index,value);
}


- Programming Exercise 3
---------------------------------------------------------------------

void find(int value){
   //start iterate
   std::list<int>::iterator it1;
   int result = 0;
   for(it1 = testList.begin(); it1!= testList.end(); ++it1){
       if(*it1 == value){
           cout<<\"Given value found in list\";
           result = 1;
           break;
       }
   }
   if(result == 0){
       cout<<\"Given value not found in list\";
   }
}

- 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;
- 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;
- 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;
- 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;
- 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;
- 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;

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site