Question

Programming Exercise 2: implement the member function moveToNth(...) that removes the item marked by the cursor...

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;

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

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

}

Homework Answers

Answer #1


#include <iostream>

using namespace std;
  
#include "ListArray.cpp"
#include "config.h"

void print_help();
void showTwoLists(List<char> list1, List<char> list2);
{

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

Know the answer?
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for?
Ask your own homework help question
Similar Questions
i want to complete this code to insert a new node in the middle of list...
i want to complete this code to insert a new node in the middle of list (take a node data from user, search the node and insert new node after this node). this is the code #include <iostream> #include <stdlib.h> using namespace std ; struct Node{                int data;                Node *link ;}; struct Node *head=NULL, *tail=NULL; /* pointers to Node*/ void InsertFront(); void InsertRear(); void DeleteFront(); void DeleteRear(); int main(){                int choice;                do{                               cout << "1:...
Can someone please edit my code so that it satisfies the assignments' requirements? I pasted the...
Can someone please edit my code so that it satisfies the assignments' requirements? I pasted the codes below. Requirement: Goals for This Project:  Using class to model Abstract Data Type  OOP-Data Encapsulation You are asked to write an app to keep track of a relatively small music library. The app should load song information from a data file once the app is started. It should allow user to view, add, remove, and search for songs. The app should...
C++ PROGRAMMING Hi! I have to make a program that adds fractions and simplifies them. I...
C++ PROGRAMMING Hi! I have to make a program that adds fractions and simplifies them. I feel like I know how to write that. What I'm having trouble with is implementing two files the professer gave us. I would appreicate any help in understanding their purpose as in if Im supposed to take information from those files or give it information. Thank you! I have attatched the homework instructions and the two files given. Implementation The main program, called calculator.cpp...
C++ 1. Modify the code from your HW2 as follows: Your triangle functions will now return...
C++ 1. Modify the code from your HW2 as follows: Your triangle functions will now return a string object. This string will contain the identification of the triangle as one of the following (with a potential prefix of the word “Right ”): Not a triangle Scalene triangle Isosceles triangle Equilateral triangle 2. All output to cout will be moved from the triangle functions to the main function. 3. The triangle functions are still responsible for rearranging the values such that...
USING C++ Topics: Friend functions Copy constructor ----------------------------------------------------------------------------------------------------------------------------------------- Lab 3.1 Create your objects in the stack...
USING C++ Topics: Friend functions Copy constructor ----------------------------------------------------------------------------------------------------------------------------------------- Lab 3.1 Create your objects in the stack (not on the heap). Add a friend function, kilotopound, which will convert kilograms to pounds. Change your weight mutator to ask whether weight is input in kilograms or pounds. If it is kilograms, call the friend function kilotopound to convert it to pounds and return pounds. There are 2.2 pounds in one kilogram. Create an object on the stack with the following information:     ...
The program shown below reads in (N) values of time (hours, minutes, and seconds). If the...
The program shown below reads in (N) values of time (hours, minutes, and seconds). If the values for hours, minutes and seconds are a legal military time (i.e. 00 00 00 to 23 59 59) the program should display the formatted results (i.e. 12 34 56 should be displayed as 12:34:56). If there's an error for any of the entered values, an exception should be thrown and an error message should be displayed. Note, there are three exception conditions, one...
Create a C++ project. Download and add the attached .h and .cpp to the project. Write...
Create a C++ project. Download and add the attached .h and .cpp to the project. Write an implementation file to implement the namespace declared in the attached CSCI361Proj5.h. Name the implementation file as YourNameProj5.cpp and add it to the project. Run the project to see your grade. .h file: // Provided by: ____________(your name here)__________ // Email Address: ____________(your email address here)________ // FILE: link.h // PROVIDES: A toolkit of 14 functions for manipulating linked lists. Each // node of...
Description: In this assignment, you need to implement a recursive descent parser in C++ for the...
Description: In this assignment, you need to implement a recursive descent parser in C++ for the following CFG: 1. exps --> exp | exp NEWLINE exps 2. exp --> term {addop term} 3. addop --> + | - 4. term --> factor {mulop factor} 5. mulop --> * | / 6. factor --> ( exp ) | INT The 1st production defines exps as an individual expression, or a sequence expressions separated by NEWLINE token. The 2nd production describes an...
I'm currently stuck on Level 3 for the following assignment. When passing my program through testing...
I'm currently stuck on Level 3 for the following assignment. When passing my program through testing associated with the assignment it is failing one part of testing.   Below is the test that fails: Failed test 4: differences in output arguments: -c input data: a b c -c expected stdout: b observed stdout: a b expected stderr: observed stderr: ./test: invalid option -- 'c' Unsure where I have gone wrong. MUST BE WRITTEN IN C++ Task Level 1: Basic operation Complete...
Code Example 8-1 1. int count = 1; 2. int item_total = 0; 3. int item...
Code Example 8-1 1. int count = 1; 2. int item_total = 0; 3. int item = 0; 4. while (count < 4) { 5.      cout << "Enter item cost: "; 6.      cin >> item; 7.      item_total += item; 8.      ++count; 9. } 10. int average_cost = round(item_total / count); 11. cout << "Total cost: " << item_total << "\nAverage cost: " << average_cost; (Refer to Code Example 8-1.) If the user enters 5, 10, and 15 at the prompts, the output is: Total...
ADVERTISEMENT
Need Online Homework Help?

Get Answers For Free
Most questions answered within 1 hours.

Ask a Question
ADVERTISEMENT